我正在阅读有关 Ashley Madison 密码泄露案例的信息。鉴于他的系统,Dean Pierce 能够在 5 天内输出大约 4000 个破解密码。我假设他生成了一个哈希表来比较 1 到 1。我的问题是,在给定任何成本 [n] 的情况下,破解或完全测试 bcrypted 密码需要多长时间?
估计使用 bcrypt 破解密码的时间
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 |
是时候破解了
破解密码的时间取决于密码。我们都知道公司密码政策禁止使用强密码。
- 如果它是由复杂和过期的公司策略强制执行的密码,那么根据定义,它将是一个弱密码,并且更容易被破解。
- 如果它是遵循最佳实践的密码(*例如,没有复杂性要求,没有强制到期),那么它会更强大。
例如:
- 弱:(
Tr0ub4dour&3例如10 11位) - 强:(例如 π 40.89316,又名 10 20.33003位)
correct horse battery staple
安全审计员要求的密码旨在削弱系统:
| 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