假設您可以自由決定如何將密碼散列存儲在DBMS中。像這樣的計劃有明顯的弱點嗎?密碼散列,鹽值和哈希值的存儲
要創建存儲在所述DBMS的散列值,取:
- 的值,它是唯一的DBMS服務器實例作爲鹽的一部分,
- 而用戶名作爲的第二部分鹽,
- 並創建實際密碼鹽的級聯,
- 並採用SHA-256算法散列整個字符串,
- 並將結果存儲在數據庫管理系統。
這意味着任何想要碰撞的人都應該分別爲每個用戶名和每個DBMS服務器實例單獨完成工作。我打算保持實際散列機制的靈活性,以允許使用仍在使用中的新的NIST標準散列算法(SHA-3)。
'DBMS服務器實例獨有的值'不需要保密 - 儘管它不會隨便泄露。目的是確保如果某人在不同的DBMS服務器實例中使用相同的密碼,則記錄的散列值將會不同。同樣,用戶名也不會是祕密 - 只是密碼本身。
密碼優先,用戶名和'唯一值'第二,或三個數據源的任何其他排列是否有優勢?或者交叉字符串呢?
我是否需要添加(並記錄)隨機salt值(每個密碼)以及上面的信息? (優點:用戶可以重新使用密碼,並且可能會在數據庫中記錄不同的散列表。缺點:必須記錄鹽分,我認爲這樣做的好處遠遠超過了缺點。)
相當多的SO問題相關 - 這個名單不太可能是全面的:
- Encrypting/Hashing plain text passwords in database
- Secure hash and salt for PHP passwords
- The necessity of hiding the salt for a hash
- Clients-side MD5 hash with time salt
- Simple password encryption
- Salt generation and Open Source software
- Password hashes: fixed-length binary fields or single string field?
我認爲,這些問題的答案支持我的算法(但如果你只是使用一個隨機的鹽,然後將「每個服務器的獨特價值」和用戶名組成部分並不重要)。
隨機部分很重要,它可以防止預測攻擊 – Jacco 2009-12-26 13:19:21
您可以添加http:// stackoverflow。com/questions/1645161/salt-generation-and-open-source-software/1645190#1645190到您的文章列表 – Jacco 2010-12-27 09:13:46
同時添加http://dba.stackexchange.com/questions/7492/password-hashes-fixed-length-二進制字段或單個字段作爲一個良好的導向到[dba.se]網站 – jcolebrand 2011-11-02 15:36:16