2012-02-09 23 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这样的慢速算法如何更适合密码散列。