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

标签 php hash passwords

<分区>

我已经阅读了很多关于如何实现密码散列的帖子。而且我读到你不应该多次对密码进行哈希处理(好吧,据说这没什么帮助)。但为什么不呢?如果我重复哈希密码,比方说,10,000,000 次(因为用户可以等待 3 秒来完成他的注册,或者我可以通过发送 AJAX 请求来做到这一点)。

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

最佳答案

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

你的问题含蓄地尖叫着“我试图通过拙劣地模仿他们的方法来绕过必须使用 bcrypt/PBKDF 的方法”。但是,重复问题中提出的问题是设计这些新算法而不是简单地将 key 重新散列 X 次的原因。

你想要一个简单的答案?好的。 X+1 轮哈希比仅 X 轮哈希更安全,但勉强如此。您可能会花一两秒钟通过遍历 $hash = hash('sha512', $hash); 来计算服务器上的哈希值,但是攻击者将使用 Slide Attack将时间减少到一小部分,最重要的是他们可能会在几个 AWS 实例、图形卡农场或僵尸网络之间并行进行攻击。 p>

PBKDF 和 bcrypt 采用的方法在很大程度上减少/消除了滑动攻击的影响,并且 bcrypt 做了某种魔法巫术,在某种程度上阻止了它的并行化。

关于php - 为什么不将哈希函数迭代 10,000,000 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18992197/

相关文章:

php - 如何检查字符串是否是 PHP 中的有效 sha256 哈希?

java - Java 中最快的字符串哈希算法

php - 将 SimpleXML 导入 PHP。我需要关闭文件吗?

php - 如何使用php获取我的网站访问者的IP地址

php - OpenID 和 OpenID Connect 有什么区别?

perl - 查找与特定键匹配的嵌套哈希值

blackberry - Blackberry 的密码和数字提示 (java)

java - 检查数字和字母的密码

javascript - 你如何在 JavaScript 中定义一个可以包含任何字符的字符串?

php - 在php中获取从当前日期开始的周一至周日的上周记录