2010-01-14 87 views
9

我正在考慮用兩個不同的salt字符串對用戶密碼進行哈希處理,其中一個存儲在所有用戶都相同的代碼中,另一個存儲在數據庫中,每個用戶都有自己獨特的值。用於散列密碼的雙鹽?

這會比簡單地將值存儲在數據庫中更有效嗎?

任何意見,意見appreiated。

感謝

+0

這不是什麼mathoverflow是:它的目的是非常不同的這個網站... – 2010-01-14 16:17:37

+0

@jldupont:它的安全性方面是非常計算機科學雖然:)。 – kennytm 2010-01-14 16:21:41

回答

19

效果顯得非常渺小,如果任何事情。考慮一個靜態的,硬編碼的鹽可以被看作是對哈希算法的改變 - 它每次都以完全相同的方式發生,所以它可能被認爲是算法的一部分。

但是鹽的目的是創建一些類似於擴展密碼的(最小)強度的隨機性,目的是使離線開裂(包括彩虹表)更耗費資源(非彩虹表破解將需要更多的CPU時間,而彩虹表將需要所有字符串的鹽)。

只有這樣,你才能從中得到任何值,而靜態鹽是未知的 - 相當於算法未知。如果您的二進制文件或源代碼可供攻擊者使用,則逆向工程將演示算法和硬編碼鹽。

如果這個問題公之於衆,你可能不得不應對來自許多安全愛好者的信條,他們認爲任何不完美的東西都會被徹底破壞,儘管你的產品已經做了正確的事情,而額外的步驟卻毫無用處。

而且,當然,您將不得不面對維護問題 - 具有靜態鹽 - 向後兼容性以及哈希代碼周圍的錯誤修復可能會很痛苦。

靜態鍵(或鹽)的非常小的好處是不值得的成本。始終使鑰匙和鹽具有動態性。

+0

謝謝你,真的很有幫助! – Dan 2010-01-14 16:34:47