2012-07-04 227 views
0

爲什麼爲每個密碼存儲使用不同鹽份的密碼更安全? 由於密碼在鹽漬後被散列,我沒有理由使用不同的鹽。鹽漬密碼安全

用已知鹽或其他東西暴力密碼更容易嗎?或者一旦他們知道了鹽,黑客就會自己製作彩虹桌嗎?

親切的問候

+1

[Secure hash和salt for PHP passwords]可能重複(http:// stackoverflow。com/questions/401656/secure-hash-and-salt-for-php-passwords) –

+0

@JohnConde它並不是真的重複。這個問題是關於每個密碼有不同的鹽的優點。 – Styxxy

+1

它最近成爲一個熱門話題,但普遍的共識是,醃製密碼和使用密碼散列是**不夠**。調查使用密鑰派生函數。 – Leigh

回答

2

如果您只使用一種鹽,黑客只需重建其彩虹表一次,就可以將它們用於整個數據庫。重複的密碼也會更容易找到。

使用單獨的哈希和昂貴的算法(bcrypt,scrypt)。

3

當你給每個密碼自己獨立的鹽存在於每個密碼每鹽之間沒有共同的紐帶。所以即使「黑客」破解了一個密碼,他也不會爲任何其他密碼加鹽。

當涉及到使用PHP和竄改密碼時,應該使用慢加密,如crypt。你加密的東西越快,「黑客」就能越快地找到一種解密方法。

您可以簡單地根據用戶的用戶名,電子郵件或幾件事的組合創建一個新鹽的函數。

+0

答覆你的第一段:即使他知道鹽,他仍然必須去掉密碼,這是'不可能的',因爲散列是不可逆的? –

+0

他可以使用隨機salt +密碼蠻力,使用你使用的加密方法。這就是爲什麼Creshal和我都建議使用慢加密方法。 –

+0

@TomBroucke當只有一個散列時,Brute強制會快幾個數量級。你「只」必須用鹽計算每個散列一次。對於每個用戶使用單獨的鹽分,您必須爲每個用戶重複整個過程。我想不出一個更簡單的方法來增加複雜性。 – Creshal

1

好的,讓我們來看一件事:鹽漬與彩虹桌無關。是。再說一次。鹽醃與彩虹桌無關。

那麼,這並不完全正確。鹽被用來防止時間和內存的折衷,通過攤銷攻擊一個散列的代價與其他散列的代價進行攤分。

在彩虹表的情況下,使用鹽意味着整個表無效。

但還有其他方法可以使整個表無效。您可以將一個靜態字符串附加到每個密碼(這是而不是鹽)。這將擊敗彩虹表...

真正的敵人

這裏真正的敵人不是彩虹表。真正的敵人是蠻力。現代機器在強力驅動下運行速度非常快,構建龐大的GPU集羣和執行先進的暴力破解比存儲足夠多的彩虹表以使其值得慢速訪問磁盤更便宜。

鹽有助於擊敗bruteforce,因爲它是獨一無二的。不是每個密碼。不是每個用戶,而是宇宙中唯一(至少統計)。這就是爲什麼你想使用隨機數字,而不是用戶名,電子郵件或任何可預測的。

同樣,不是因爲我們不想要可預測性。但是因爲我們想要統計獨特性。如果攻擊者攻擊兩個使用用戶名作爲鹽的網站,他可以同時對這兩個哈希進行分解(即使這兩個哈希都可能使用不同的密碼)。

鹽應該是隨機的,並且每個用戶。