关于你有多快蛮力PBKDF2?

时间:2012-07-02 17:15:15

标签: security passwords hash cracking pbkdf2

在linkedin密码哈希泄漏之后,我一直在查看我们的密码哈希。我们使用的是使用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的速度有多快?/ / p>

5 个答案:

答案 0 :(得分:10)

2月份有writeup over at agilebits进行餐巾纸计算。删节版:

  

作为一个球场公园的人物,我要说10,000个PBKDF2迭代线索   几十或几百毫秒来测试一个非常密码   高端消费系统。我们对PBKDF2的处理正在减少   事物从每秒一百万次测试到几百次。这是   考虑使用多个的专业软件   核心和多个GPU。

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

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

答案 1 :(得分:4)

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

如果你进行1000次PBKDF2迭代,那么这将使攻击从每秒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并且有1000次迭代,那么拥有专门硬件的黑客将在大约20秒内猜测10亿个密码。这根本不是很好的安全性。

您可以通过使用更多轮次的PBKDF2(这将减慢您的网站速度)或通过说服您的用户拥有更好的密码来提高安全性。只需切换到7位而不是6位数,或者通过添加大写字母或偶数符号,它们将极大地提高其安全性。

Wolfram Alpha对于数学运算很有用:((36 ^ 6) / 50 million) seconds其中36是字母表的大小,6是密码的长度,5000万是黑客可以使用的每秒猜测数(50)百万是一个严重的攻击者,在PBKDF2之后进行了1000轮)。

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

答案 2 :(得分:3)

PBKDF2是可调的。您可以随时增加成本值,以减少攻击者可能的猜测次数/秒。我的建议是决定您希望它在您的平台上运行的速度,并相应地设置成本值。例如,如果您认为200哈希/秒是性能/安全性的理想权衡,那么增加成本值并测试散列几千个测试密码所需的时间,直到您平均每秒200次。

PBKDF2还使用“盐”,通过强制攻击者单独攻击每个帐户来防止攻击扩展。结合拉伸(即减慢算法速度),这使得恢复超过少量帐户变得极其困难。攻击者可以专注于一个帐户并希望获得最佳效果,或者为每个帐户投入一定时间(一小时,一天),如果不成功则转移到下一个帐户。

随着LinkedIn哈希,人们可以在一天或更短时间内破解超过一百万个哈希值。由于PBKDF2以~200猜测/秒运行,因此需要大约9小时才能找出哪个6.5M帐户使用“linkedin”作为其密码。如果你想针对所有这些哈希运行一个包含1,000个常用密码的列表,那么大约需要一年时间。

答案 3 :(得分:3)

请记住,bcrypt,scrypt和PBKDF2 / PKCS#5 / RFC 2898都支持不同数量的迭代;没有一个天生“更快”或“更慢”。有些需要更多内存(PBKDF2 占用大量内存),但这就是它。

就特定的PBKDF2迭代而言,一个流行的基于GPU的破解程序可以处理现代桌面+ 8个GPU,每秒100万次尝试对抗WPA2。由于WPA2本质上是PBKDF2(HMAC-SHA1,密码,ssid,4096,256),它告诉我们一台机器每秒可以测试超过40亿次HMAC-SHA1 PBKDF2迭代。当然,十台这样的机器每秒将测试超过400亿次这样的迭代。

OWASP密码备忘单(https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet)建议在2012年至少进行64,000次迭代,每两年翻一番,或在2013年进行90,510次迭代。

答案 4 :(得分:0)

我在2015年写了paper on this。在单个消费级GPU上,我们每秒获得160万个哈希(1000次迭代)。因此,例如,如果您以1万次迭代的速度运行,那将下降10倍至160,000。

假设小写的ASCII字母和8个字符只是26 ^ 8个候选字符。以160k /秒的速度开裂需要花费15.1天。因此,从统计学上讲,您平均可以预期在大约7.6天或一周内出现裂纹。新硬件要好得多,现在这个数字看起来会更弱。我写的软件是开源的,可以免费使用here