我一直在做很多研究,以確定存儲我正在開發的系統的密碼的最佳實踐。到目前爲止,我已經決定要使用帶有RNG的SHA512哈希來生成一個的密鑰,每個密碼(顯然是對彩虹表等的最佳實踐)。密碼salt應該存儲在數據庫的自己的字段中嗎?
會在單獨的字段存儲的密碼錶中的過於簡單化,以確定在數據庫中的密碼錶示(有一個PasswordHash
場和PasswordSalt
場)?這可能看起來像通過默默無聞的安全性,但我正在考慮將salt和密碼哈希存儲在一起並存在一個字段中。
這會「幫助」嗎?
我一直在做很多研究,以確定存儲我正在開發的系統的密碼的最佳實踐。到目前爲止,我已經決定要使用帶有RNG的SHA512哈希來生成一個的密鑰,每個密碼(顯然是對彩虹表等的最佳實踐)。密碼salt應該存儲在數據庫的自己的字段中嗎?
會在單獨的字段存儲的密碼錶中的過於簡單化,以確定在數據庫中的密碼錶示(有一個PasswordHash
場和PasswordSalt
場)?這可能看起來像通過默默無聞的安全性,但我正在考慮將salt和密碼哈希存儲在一起並存在一個字段中。
這會「幫助」嗎?
分開存儲。
請記住您的防範措施:該場景是有人獲取數據庫的副本,因此可以對該字段執行彩虹表查找(如果不是鹽醃的話)。
攻擊者是否知道鹽真的沒關係;這只是爲了阻止他使用預先生成的彩虹桌。
我知道一般想法,但不知道它是否真的非常必要。感謝您的輸入。 – TheCloudlessSky 2010-12-20 14:23:40
爲了優化起見,當然最好是在同一個領域存儲? – James 2012-06-30 11:18:42
這並不重要。鹽不會泄露任何祕密,事實上,它有助於保守祕密。如果你想打動你的數據庫設計師的朋友,把它保留在自己的領域。如果你想打動你的優化的朋友,保持它的散列。這是一個風格問題,真的。
關於鹽;你可能想要足夠長的時間來防止彩虹桌攻擊:http://en.wikipedia.org/wiki/Rainbow_table#Defense_against_rainbow_tables
+1好問題,我在寫這本書之前寫了自己的。 – James 2012-06-30 11:19:30