2011-03-06 29 views
4

我走過邁克爾·哈特爾的書(真棒,免費資源,順便說一句,感謝邁克爾!),我有一個關於鹽析和散列密碼的問題。提供密碼的目的是爲了防止黑客進行彩虹攻擊,如果我理解正確的話,黑客可以猜測使用的加密類型,這基本上是一種強力攻擊。爲了防止這種攻擊,在加密之前使用salt來隨機化密碼,但是必須將salt與加密的密碼一起存儲?如果是這樣,那麼如果黑客可以訪問數據庫並檢索加密的密碼,那麼他們是否也能檢索鹽並繼續進行彩虹攻擊?試圖瞭解在Ruby中醃製和散列密碼on Rails的

具體的過程邁克爾的代碼示例...

>> Time.now.utc 
=> Fri Jan 29 18:11:27 UTC 2010 
>> password = "secret" 
=> "secret" 
>> salt = secure_hash("#{Time.now.utc}--#{password}") 
=> "d1a3eb8c9aab32ec19cfda810d2ab351873b5dca4e16e7f57b3c1932113314c8" 
>> encrypted_password = secure_hash("#{salt}--#{password}") 
=> "69a98a49b7fd103058639be84fb88c19c998c8ad3639cfc5deb458018561c847" 

非常感謝!

回答

9

不,彩虹攻擊是不一樣的蠻力攻擊。

你能想到的彩虹表的字符串和其散列的大數據庫。當有人訪問您的數據庫時,他們可以將密碼衝突與彩虹表中的密碼衝突進行比較,並輕鬆獲取密碼。

的鹽通過加入額外的比特到密碼可防止此。如果鹽足夠長,哈希將不在彩虹表中。

當使用蠻力攻擊,你必須計算哈希值,而彩虹攻擊,你有哈希值了。

所以是的,當有人訪問你的數據庫時,他們也可以得到你的鹽。但是,這並不重要,如果它是每個記錄獨特的一個。

+2

很好的解釋。補充一點,每條記錄不同鹽的含義是,即使攻擊者成功破解了一個給定的密碼和散列密碼,他們仍然只會破壞一個帳戶。他們必須爲表格中的每個條目重複此過程。 – 2011-03-06 23:27:04