php – 为什么不迭代哈希函数10,000,000次?

参见英文答案 > Is “double hashing” a password less secure than just hashing it once?                                    16个
我已经在SO上阅读了很多关于如何实现密码散列的帖子.而且我已经读过你不应该多次散列密码(好吧,它没有多大帮助,据说).但为什么不呢?如果我迭代哈希密码,比方说10,000,000次(因为用户可以等待3秒钟完成注册,或者我可以通过发送AJAX请求来实现).

那么,攻击者如何窃取我的数据库,甚至知道我只是将密码重复10,000,000次(最坏情况),可能会找出用户的密码?他不能创建一个彩虹表,因为它需要很长时间(哈希密码需要时间,并且散列哈希需要花费更多时间),蛮力也不可能,所以还剩下什么?

解决方法:

evening: I wasn’t saying anything about bcrypt or PBKDF.

你的问题隐含地尖叫着“我正在努力克服我不得不通过模仿他们的方法来使用bcrypt / PBKDF”.然而,重复问题中提出的问题是为什么设计这些新的算法而不是简单地重新哈希键X次.

你想要一个简单的答案吗?好的. X 1散列循环比X散列循环更安全,但只是略微如此.您可能需要花费一两秒钟来计算服务器上的哈希值,方法是循环使用$hash = hash(‘sha512’,$hash);但攻击者将使用Slide Attack将其减少到一小部分时间,最重要的是,他们可能会在几个AWS实例,一组显卡或僵尸网络中并行攻击.

PBKDF和bcrypt采用的方法在很小程度上最小化/否定了幻灯片攻击的影响,而bcrypt做了某种神奇的巫术,阻止它在某种程度上可以并行化.

上一篇:如何在PHP 5.5的新password_hash函数中随机生成的密码盐甚至有用吗?


下一篇:python – PyQt – 如何让我的文字上有星号?