12

在linkedin密码散列泄漏之后,我一直在查看我们的密码散列。我们使用 Django 1.4,它使用 PBKDF2,它很棒,比之前的 SHA1 更上一层楼。

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

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

有没有人有任何粗略的/粗略的/粗略的数字来说明一个人可以多快地暴力破解 PBKDF2?

4

5 回答 5

10

从 2 月份开始, agilebits 上有一篇关于餐巾纸计算的文章。精简版:

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

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

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

于 2012-07-02T21:47:50.950 回答
6

专用硬件,例如用于比特币挖掘的硬件,每秒可以执行超过 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 年?这取决于你有多少客户。

于 2013-04-29T13:00:23.650 回答
3

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

PBKDF2 还使用“盐”,通过强制攻击者分别攻击每个单独的帐户来防止攻击扩展。结合拉伸(即减慢算法),这使得恢复超过少数帐户变得极其困难。攻击者可以专注于一个帐户并希望获得最好的结果,或者为每个帐户花费一定的时间(一小时,一天),然后如果他没有成功,则转移到下一个帐户。

使用 LinkedIn 哈希,人们能够在一天或更短的时间内破解超过一百万个哈希。PBKDF2 以大约 200 次猜测/秒的速度运行,大约需要 9 个小时才能找出 650 万个帐户中的哪些帐户使用“linkedin”作为密码。如果您想针对所有这些哈希运行 1,000 个常用密码的列表,则需要大约一年的时间。

于 2012-08-07T21:08:11.040 回答
3

请记住,bcrypt、scrypt 和 PBKDF2/PKCS#5/RFC 2898 都支持不同数量的迭代;没有一个天生就“更快”或“更慢”。有些需要更多 RAM(PBKDF2 不需要太多RAM),但仅此而已。

就具体的 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 次迭代。

于 2013-01-31T04:05:35.033 回答
0

我在 2015 年写了一篇关于此的论文。在单个消费级 GPU 上,我们每秒获得 160 万次哈希(1000 次迭代)。因此,例如,如果您以 10k 次迭代运行,那将下降 10 到 160,000 倍。

假设一个小写的 ascii 字母和 8 个字符只有 26^8 个候选者。以 160k / 秒的速度开裂需要 15.1 天才能耗尽。所以从统计上看,你平均可以预期在大约 7.6 天或一周内出现裂缝。新硬件要好得多,现在这个数字看起来会更弱。我写的软件是开源的,可以在这里免费获得。

于 2020-10-15T20:38:12.690 回答