在密碼哈希中使用salt時,爲什麼建議對每個密碼使用不同的salt並將其未加密存儲在數據庫中?在數據庫中存儲密碼哈希的未加密鹽
這似乎是毫無意義的。當然,如果攻擊者訪問數據庫,他們發現鹽就像沒有鹽一樣?
如果他們試圖通過暴力破解密碼,並且他們在加密密碼的同一行有原始未加密的鹽,他們可以將鹽與所有他們將要嘗試的單詞/短語連接起來,他們?
在密碼哈希中使用salt時,爲什麼建議對每個密碼使用不同的salt並將其未加密存儲在數據庫中?在數據庫中存儲密碼哈希的未加密鹽
這似乎是毫無意義的。當然,如果攻擊者訪問數據庫,他們發現鹽就像沒有鹽一樣?
如果他們試圖通過暴力破解密碼,並且他們在加密密碼的同一行有原始未加密的鹽,他們可以將鹽與所有他們將要嘗試的單詞/短語連接起來,他們?
要猜解一個散列密碼,攻擊者需要設法湊字母和符號的所有可能的組合,並把它比作他的哈希值。
如果攻擊者已經像這樣bruteforced明文>散列組合,他知道所有相同散列的明文。
在散列之前將一個鹽添加到明文中,以便將相同的明文散列爲不同的散列,迫使攻擊者爲每個散列嘗試所有字母組合,使其速度大大降低。
鹽的目的是防止某人一次攻擊所有密碼。由於每個密碼都有不同的鹽分,攻擊者必須逐個攻擊它們。這大大減少了他可以爲每個帳戶嘗試的可能密碼的數量。
否則,攻擊者只能散列十億個可能的密碼,然後將每個哈希密碼與他的列表進行比較。
先看http://en.wikipedia.org/wiki/Rainbow_table。
如果您爲每個密碼使用隨機鹽,黑客無法使用彩虹表。
您需要存儲未加密的鹽,以便能夠散列字符串以檢查它是否與原始密碼的鹽漬散列相匹配。
一些crypt函數將未加密的鹽(等等)連接到加密的鹽漬密碼。例如Der php bcrypt河豚。
公共鹽使得破解密碼列表更加耗時。但是,破解單個密碼並不會使字典攻擊變得更加困難。攻擊者可以訪問加密的密碼和salt,所以當運行字典攻擊時,攻擊者可以在嘗試破解密碼時使用已知的鹽。
你需要鹽來製造彩虹表,那種東西沒用。
鹽可以存儲加密,當然,使事情有點複雜,破解一個密碼。
但看看它通常如何工作:您發送鹽到客戶端,它使用它來散列salt +密碼。所以你的客戶必須首先解密鹽,這在許多情況下都可以由任何人解決。在攻擊者沒有機會觀察客戶行爲的情況下,加密哈希可能會提高安全性(安全性)。
如果有人拿到你的數據庫,由於各種原因,你遇到了很大的麻煩。理論上攻擊者可以更容易地得到(或猜測)單一的鹽。如果他們知道你使用的唯一鹽,他們可以同時強制所有密碼。如果你爲每個用戶使用不同的鹽,攻擊者必須知道每個單獨的鹽纔能有效地進行攻擊。
至於加密鹽的存儲..我想這樣做沒有什麼錯,只是它是希望罕見的,攻擊者將能夠轉儲您的整個數據庫。如果可以的話,即使不需要繞過認證,他們也可以在無論如何得到他們想要的東西。
Downvoters,照顧解釋? – Andy 2013-02-15 14:37:16
Downvote:*「這個問題沒有顯示任何研究成果」* – deceze 2013-02-15 14:40:14
可能是需要徽章的人。他們從不解釋。 – nowhere 2013-02-15 14:40:16