2012-02-09 55 views
3

讀一本書說:反覆刷新以獲得更多計算密集的字節序列。如果您重複使用100次,則可能需要1個月的字典攻擊需要8年時間。爲什麼?我不明白。任何人都能解釋?爲什麼重新粉刷會使它更安全?

回答

1

假設你有一個散列函數是這樣的:

password_hash = MD5(password) 

給定一個散列,說5f4dcc3b5aa765d61d8327deb882cf99,您的首選技術會產生使用上述功能的字典中的所有單詞的哈希值,然後比較password_hash添加到您想要反轉的那個。

現在假設你改變你的散列函數

password_hash = password 
    for i = 1 to 100 
    password_hash = MD5(password_hash) 
    next 

作爲一個攻擊者,這時候你就必須哈希每個單詞在字典100倍,它與要蠻力給定的哈希值進行比較。因此,如果多次散列密碼,攻擊者需要更長的時間才能強制給定散列。

正是出於這個目的,像MD5和SHA家族這樣的快速哈希算法並不適合哈希密碼。您可以閱讀http://codahale.com/how-to-safely-store-a-password/以瞭解像bcrypt這樣的慢速算法如何更適合密碼散列。