我很難理解在密碼或其他重要信息的數據庫受到危害時,如何將附加到哈希值的鹽幫助提高安全性。有人可以解釋鹽如何幫助存儲散列密碼?
如果鹽是,例如,「你好」,並追加到密碼「密碼」,則鹽和密碼被存儲在一起,「hellopassword」和散列以產生:
94e66f94517d606d5ad6d9191b980408952f2ed2 (sha1)
與然後附加鹽:
hello$94e66f94517d606d5ad6d9191b980408952f2ed2
這是如何更安全?攻擊者知道鹽,所以現在可以計算密碼,沒有多少額外的困難......對吧?或者我從根本上誤解了什麼?
您通常不會在sha1之後追加salt,就像您在示例中一樣。相反,您可以將鹽添加到密碼「salt $ password」中,然後從'94e66f94517d606d5ad6d9191b980408952f2ed2'生成一個sha1。這樣鹽和密碼就不會暴露在任何數據結構中。 – tidwall 2010-09-04 17:11:01
你會如何保持鹽的祕密?你會把它作爲程序中硬編碼的祕密值嗎? – 2010-09-04 17:14:55
沒有必要保守鹽的祕密 - 事實上,所有使用salt的Linux密碼哈希方案(這是所有常見的哈希方案)都會像您所做的那樣將salt加入哈希中。無論攻擊者是否知道鹽的含義,鹽的主要工作(使彩虹桌不可行)都可以實現,並且使用密碼存儲它可以很容易地隨意更換鹽,而無需讓所有用戶重置密碼。每個密碼甚至可以有不同的鹽分。 – cHao 2010-09-04 17:22:41