暴力破解 PBKDF2 的速度有多快?

Posted

技术标签:

【中文标题】暴力破解 PBKDF2 的速度有多快?【英文标题】:About how fast can you brute force PBKDF2? 【发布时间】:2012-07-03 03:12:26 【问题描述】:

在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 你会得到什么样的速度?

有没有人有任何粗略/粗略/粗略的数据来说明

【问题讨论】:

它被认为是最难的暴力破解之一。 (它就是这样设计的)不过,我手边没有数字。 相关security.stackexchange.com/questions/12114/… @ZJR PBKDF2 暴力破解比 scrypt 便宜得多。 【参考方案1】:

2 月份有一个 writeup over at agilebits 用于计算餐巾纸。精简版:

作为一个球场数据,我会说 10,000 个 PBKDF2 迭代线索 几十或几百毫秒来测试一个密码很 高端消费系统。我们对 PBKDF2 所做的是减少 从每秒一百万次测试到几百次。这是 考虑到使用多种软件的专用软件 核心和多个 GPU。

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

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

【讨论】:

你错过了他们谈论 GPU 破解的部分,并且估计在 GPU 上约为 100 万/秒。 blog.agilebits.com/2012/07/31/… 预计该模块将很快进行修改,以便它可以使用图形处理器单元 (GPU)。他估计,这将使猜测速度提高 100 倍以上。在下表中,我使用了 200 倍的 GPU 速度提升。因此,我在 Mac Pro 上每秒大约有 5000 次猜测,我假设使用 GPU 加速,每秒将有 100 万次猜测。 呸!该链接现已失效。【参考方案2】:

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

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

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

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

请记住,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 次迭代。

【讨论】:

【参考方案5】:

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

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

【讨论】:

你的论文中关于 2021 年硬件的数字有更新吗?

以上是关于暴力破解 PBKDF2 的速度有多快?的主要内容,如果未能解决你的问题,请参考以下文章

python暴力破解加密zip文档

暴力破解工具hydra

暴力破解与验证码安全

暴力破解原理与过程详解

破解一个被操纵的哈希有多容易

BurpSuite 暴力破解之绕过 token