2011-05-12 56 views
2

關於保存用戶密碼的鹽漬散列版本:
我在數據庫中保存散列醃製密碼和散列之前使用的鹽。散列密碼時,我應該將散列函數名稱存儲在數據庫中嗎?

我是否還應該在DB中保存用於哈希醃製密碼(例如SHA1或MD5 [不會使用MD5,放鬆])的算法的名稱,以便某人在我使用的算法中發現違規時,我可以切換到未來的用戶使用另一種算法?

注意:我說的不是用來生成隨機哈希

+0

使用bcrypt或scrypt來存儲密碼。 – 2011-05-15 23:24:53

回答

3

是的,這是一個好主意。它花費很少(每個條目有幾個字節),並且意味着您可以更改和改進未來存儲密碼的方式。例如,假設你幾年前開始使用這種方法與MD5 - 現在通過在下一次登錄時更新每個用戶的密碼哈希來升級到SHA1或其他更安全的東西變得很微不足道。

請注意,您應該使用諸如PBKDF2之類的內容來散列您的密碼,而不僅僅是一個鹽漬散列。

0

如果您在第一時間使用強加密散列函數算法,很可能會沒有理由以切換到更強的散列函數。

有網站keylength.com有一個摘要的最重要的信息安全計算的建議。目前,所選的哈希函數應該有160位或更多的長度 - 越多越好。

如果您正在尋找通用格式,您可以使用modular crypt format,其中包含散列函數的標識符,使用的鹽分,摘要以及其他信息(例如成本因子),格式如下:

$<id>$[<parameters>$]<salt><digest> 

Many suggest to use bcrypt for passwords作爲其額外成本參數是調整散列的計算成本。

+0

第一句話中給出的建議在發現第一個漏洞之前,對於MD5或SHA1的描述同樣合理。依靠你目前的密碼學原理無限期地堅持是一個糟糕的策略。 – 2011-05-15 22:59:37

0

這是個人喜好的東西之一。如果發現散列算法存在弱點,則需要更改用戶密碼的存儲和驗證方式。有多種方法可以做到這一點,並存儲散列的名稱是一個有效的選擇。假設

  • 你想切換到一個更好的散列的選擇,如果一個弱點被發現
  • 你不是存儲明文口令(其中,如果你是,你有更大的問題)

您需要使用新的散列算法爲用戶自動生成新密碼(並通知他們),或者在下次登錄時讓他們更改或驗證密碼。存儲算法的方法有助於促進第二種選擇(我相信這是更好的選擇)。

從技術上講,如果數據庫被滲透,存儲散列算法不會使密碼的安全性降低,並且當您希望更改算法時,它允許您有更大的靈活性。

HTH