读一本书说:反复重复以获得更多计算密集的字节序列。如果你重复100次,那么可能需要1个月的字典攻击需要8年。为什么?我不明白。谁能解释一下?
答案 0 :(得分: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这样的慢速算法如何更适合密码哈希。