关于你有多快蛮力PBKDF2?

Ror*_*ory 10 security passwords hash cracking pbkdf2

在密码哈希泄漏之后,我一直在查看我们的密码哈希.我们使用的是使用PBKDF2的Django 1.4,它很棒,比之前的SHA1更上一层楼.

但是我很好奇,人们可以轻易地蛮力.我正在查看我们的密码复杂性规则,并且想知道(例如)8个长度小写的ascii字母需要多快.

这个破解LinkedIn密码哈希的指南,有人在GPU上每秒执行4.3亿次sha1哈希.http://erratasec.blogspot.ie/2012/06/linkedin-vs-password-cracking.html你会为PBKDF2获得什么样的速度?

有没有人有任何粗糙/背后的信封/球场数据表明人们可以用多快的速度强行推出PBKDF2?

xel*_*o52 10

从二月开始,在agilebits上一篇关于餐巾纸计算的文章.删节版:

作为一个球场图,我要说10,000个PBKDF2迭代导致几十或几百毫秒来测试一个非常高端的消费者系统的密码.我们用PBKDF2做的事情是将每秒百万次测试减少到几百次.这考虑了使用多核和多GPU的专用软件.

因此,将你的erratasec文章在gpu上以每秒4.3亿个SHA-1哈希为基准作为基准 - agilebits文章显示了表明PBKDF2具有10k次迭代的指标会将其降低到每秒大约100k次测试.

远非科学,但让我们在球场......


Abh*_*ert 6

专用硬件,例如用于比特币挖掘的硬件,每秒可以执行超过 500 亿次哈希(截至 2013 年初。随着硬件变得更快,这是一个不断变化的目标)。

如果你对 PBKDF2 进行 1000 次迭代,那么攻击次数将从每秒 500 亿次减少到每秒 5000 万次。10,000 次迭代将是每秒 500 万次。

然而,典型的 Web 服务器不会那么快。这将是一个很大的,你慢。您需要在自己的生产服务器上进行一些测试,可能会发现 10,000 次迭代太慢了。

所以这并不是关于 PBKDF2 可以多快被暴力破解,而是关于你的服务器验证 PBKDF2 密码的速度。你需要决定你认为它应该花多长时间(半秒?十分之一秒?百分之一秒?)然后调整 PBKDF2 轮数以适应它。

还要考虑客户使用的密码的强度。如果他们都有很好的密码,那么你使用什么散列系统真的无关紧要。如果他们都使用糟糕的密码,那么 PBKDF2 不足以保护它们 - 您需要获得更多奇特的信息,例如 Apple 在 iPhone 中使用的硬件加盐哈希,以尝试将 4 位数字转换为至少有一些的数字安全性(基本上,它们强制所有散列都由专用硬件芯片执行,这是故意慢的。将数据移动到任何其他硬件并且无法解密)。

假设密码不在字典中(大多数密码都在字典中),那么密码强度是通过将字母表中可能的字符数乘以每个字符一个 hibe 来计算的。因此,如果密码包含字母(26 个字符的字母表)和数字(另外 10 个字符),那么您有一个 36 个字符的字母表,如果它是 6 个字符长,则将其乘以 6 次。

所以 6 位字母数字密码是 36*36*36*36*36*36,或者如果您愿意:36^6。这给了你大约 21 亿个可能的密码……通常我们假设黑客会在大约一半的时候找到真正的密码,所以称之为 10 亿。

如果您使用 PBKDF2 并且有 1,000 次迭代,那么拥有专门硬件的黑客将在大约 20 秒内猜出 10 亿个密码。这根本不是很好的安全性。

您可以通过使用更多轮 PBKDF2(这会降低您的网站速度)或说服您的用户使用更好的密码来提高安全性。只需切换到 7 位而不是 6 位,或者添加大写字母甚至符号,它们将显着提高其安全性。

Wolfram Alpha 可用于计算:((36 ^ 6) / 50 million) seconds其中 36 是字母表的大小,6 是密码的长度,5000 万是黑客可以使用的每秒猜测次数(5000 万是一个严重的攻击 PBKDF2 1,000 发)。

您的数据库中有多少个密码?如果破解个人密码需要20秒,那我算算30天还是30年?这取决于你有多少客户。