估计使用 bcrypt 破解密码的时间

信息安全 密码破解 bcrypt
2021-08-20 22:50:38

我正在阅读有关 Ashley Madison 密码泄露案例的信息。鉴于他的系统,Dean Pierce 能够在 5 天内输出大约 4000 个破解密码。我假设他生成了一个哈希表来比较 1 到 1。我的问题是,在给定任何成本 [n] 的情况下,破解或完全测试 bcrypted 密码需要多长时间?

2个回答

2015 年 6 月,使用 8 个 GTX TitanX 显卡,他们能够让 hashcat 执行:

  • 14,455 哈希/秒(成本因子 5,即 32 次迭代)

使用 8 个视频卡的装备,他们得到:

  • 155,642 哈希/秒(成本因子 5,即 32 次迭代)

当然,没有人真正使用过成本系数为 5 的 bcrypt。

在 BCrypt (1999) 发布时,默认成本为:

  • 普通用户: 6
  • 超级用户:8

并且:

“当然,人们选择的任何成本都应该不时重新评估。”

问题是计算哈希需要多长时间。在 1976 年部署时,crypt每秒可以散列少于 4 个密码。(每个密码 250 毫秒)

1977 年,在 VAX-11/780 上,crypt (MD5) 每秒可以评估约 3.6 次。(每个密码 277 毫秒)

您应该调整您的 bcrypt 工作因子,以便计算需要 250-500 毫秒。

我们的实现使用成本因子 11 作为下限然后它对系统进行基准测试,如果计算速度过快会增加成本。

检查密码的功能会迫使您处理以下后果:

Boolean passwordRehashNeeded;
BCrypt.CheckPassword(rawPassword, savedHash, out passwordRehashNeeded);

有时需要重新散列:

  • 因为我们从2-> 2a-> 2x-> 2y-> 2b-> ...
  • 这些天硬件太快了,并且在 230 毫秒内计算您保存的哈希值

哈希速度

回到破解时间的问题。对于不同的 bcrypt 成本因素,CPU 一个 8 显卡怪物,哈希速度分别为:

| Cost |             Hashes/sec         |
|      | i7-2700K@3.5GHz | 8xGTX TitanX |
|------|-----------------|--------------|
|  5   |        384.04   |  115,642.00  |
|  6   |        192.02   |   57,821.00  |
|  7   |         96.01   |   28,910.50  |
|  8   |         48.00   |   14,455.25  |
|  9   |         24.00   |    7,227.63  |
| 10   |         12.00   |    3,613.81  |
| 11   |          6.00   |    1,806.91  |
| 12   |          3.00   |      903.45  |
| 13   |          1.50   |      451.73  |
| 14   |          0.75   |      225.86  |
| 15   |          0.38   |      112.93  |
| 16   |          0.19   |       56.47  |

是时候破解了

破解密码的时间取决于密码。我们都知道公司密码政策禁止使用强密码。

  • 如果它是由复杂和过期的公司策略强制执行的密码,那么根据定义,它将是一个弱密码,并且更容易被破解。
  • 如果它是遵循最佳实践的密码(*例如,没有复杂性要求,没有强制到期),那么它会更强大。

例如:

安全审计员要求的密码旨在削弱系统:

| Cost |   Time to crack - 8 way GTX TitanX       |
|      | PCI-compliant password | Good password   |
|------|------------------------|-----------------|
|  5   |                 5 days |       29M years |
|  6   |                10 days |       59M years |
|  7   |                20 days |      117M years |
|  8   |                40 days |      234M years |
|  9   |                80 days |      469M years |
| 10   |               160 days |      937M years |
| 11   |               320 days |    1,875M years |
| 12   |               641 days |    3,750M years |
| 13   |             1,281 days |    7,499M years |
| 14   |             2,562 days |   14,999M years |
| 15   |             5,124 days |   29,998M years |
| 16   |            10,249 days |   59,996M years |

NIST 说你的密码政策很糟糕

2017 年,NIST 甚至提醒审计员他们的密码策略是多么愚蠢。更好的密码规则是:

  • 没有复杂性要求
  • 没有强制到期
  • 允许任何字符(例如correct horse battery 💩
  • 根据先前违规的语料库检查密码
  • 最少 8 个字符
  • 没有短信 2FA
  • 你的第一只宠物最喜欢的娘家姓的眼睛颜色是什么?
  • 没有密码提示

就个人而言,我认为密码策略应该是:

获得一个估计需要 50 年才能破解的密码非常容易(一旦你告诉人们 IT 告诉他们的关于密码的所有内容都是错误的。)而且作为奖励:

  • 它超过了大多数限制
  • 希望我会在 50 年后死去

tl;dr:当 HIPPA、PCI 或其他监管机构要求密码复杂性和定期到期要求时,不要成为那些屈服的人之一。你只是在鼓励白痴,让世界变得不那么安全。

关于正确的马电池订书钉的谩骂

它可能是一个众所周知的密码,但它不是一个常用的密码。

例如,英特尔的 2014 年世界密码日给出了示例密码:

  • Compl3xity < Length!

没有人争辩说 zxcvbn 应该承认这是一个常用的密码。

没错:这不是一个常用的密码!

zxcvbn 故意限制在前30,000 个密码中:

     1: 123456          55893
     2: password        20785
     3: 12345678        13582
     4: qwerty          13230
     5: 123456789       11696
     6: 12345           10938
     7: 1234            6432
     8: 111111          5682
     9: 1234567         4796
    10: dragon          4191
         ...
 11577: hunter2         44
        ...
 28871: hunter22        17
       ...
 29998: scoubidou2      17
 29999: benelli         17
 30000: vasilina        17
        ...
 47022: dimazarya       11
 47023: xpcrew          11

事实是:correct horse battery staple属于前 30,000 个密码列表:因为它根本不在前 30,000 个已知密码列表中。

事实上,我愿意像你说的那样走得更远,因为它没有被任何人使用。

另一个非常知名的密码已不再常见:

Bcrypt 有一个可调整的工作因子。标准基准使用弱工作因子,但我们可以推断。取数表示强大的 GPU [1]。

13Kh/s with work factor 5 表示 200H/s 有强工作因数。8个GPU,整机1600H/s。8 字符混合大小写和数字(62 个选项)是 62 的 8 次方:218340105584896 组合。每秒除以 1600 为:136462565990 秒。4300年尝试每一种组合。但当然,首先会检查常用密码和字典单词。那些首先被破解。每个帐户 10 分钟,您可以尝试前 100 万个流行密码。

请注意,弱存储密码的破解速度可能快 10 亿倍以上。

1 - https://gist.github.com/epixoip/a83d38f412b4737e99bbef804a270c40