专用硬件,例如用于比特币挖掘的硬件,每秒可以执行超过 500 亿次哈希(截至 2013 年初。随着硬件变得更快,这是一个不断变化的目标)。
如果您对 PBKDF2 进行 1,000 次迭代,那么这会将攻击从每秒 500 亿次减少到每秒 5000 万次。10,000 次迭代将是每秒 500 万次。
然而,典型的 Web 服务器不会那么快。这对你来说会慢很多。您需要在自己的生产服务器上进行一些测试,可能会发现 10,000 次迭代太慢了。
所以这并不是关于 PBKDF2 可以被暴力破解多快,而是你的服务器可以快速验证 PBKDF2 密码。你需要决定你认为它应该花费多长时间(半秒?十分之一秒?百分之一秒?),然后调整 PBKDF2 轮数以适应它。
还要考虑客户使用的密码强度。如果他们都有很好的密码,那么你使用什么散列系统真的无关紧要。如果他们都使用糟糕的密码,那么 PBKDF2 不足以保护他们 - 你需要获得更多奇特的东西,比如苹果在 iPhone 中使用的硬件加盐哈希,试图将一个 4 位数字变成至少有一些密码的东西安全性(基本上,它们强制所有哈希由专用硬件芯片执行,这故意很慢。将数据移动到任何其他硬件并且无法解密)。
假设密码不在字典中(大多数密码都在字典中),那么密码强度的计算方法是将字母表中可能的字符数乘以每个字符一个 hibe。因此,如果密码包含字母(26 个字符的字母)和数字(另外 10 个字符),那么您有一个 36 个字符的字母,如果它是 6 个字符长,则将其乘以 6 次。
因此,6 位字母数字密码是 36*36*36*36*36*36,或者如果您愿意:36^6。这给了你大约 21 亿个可能的密码……通常我们假设黑客会在大约一半的时候找到真正的密码,所以称之为 10 亿个。
如果你使用的是 PBKDF2 并且有 1000 次迭代,那么拥有专门硬件的黑客将在大约 20 秒内猜出 10 亿个密码。这根本不是很好的安全性。
您可以通过使用更多轮的 PBKDF2(这会降低您的网站速度)或说服您的用户使用更好的密码来提高安全性。只需切换到 7 位而不是 6 位,或者添加大写字母甚至符号,它们就会显着提高其安全性。
Wolfram Alpha 可用于计算:((36 ^ 6) / 50 million) seconds
其中 36 是字母的大小,6 是密码的长度,5000 万是黑客每秒可以使用的猜测次数(5000 万是攻击 PBKDF2 的严重攻击者1,000 发)。
您的数据库中有多少个密码?如果破解个人密码需要 20 秒,那是我 30 天的数学还是 30 年?这取决于你有多少客户。