这个问题是由最近访问某个网站提出的,该网站提供(显然是出于 GDPR 的原因)一个包含您所有数据的表格,包括您的哈希密码的一部分。我知道这在这种情况下没有问题(因为您必须登录才能查看此表),但是如果这些数据被公开怎么办?
更清楚地说:揭示密码哈希的一部分(包括哈希长度)是否会使密码破解(通过暴力破解或任何其他方法)比以前更简单或更有效?
这个问题是由最近访问某个网站提出的,该网站提供(显然是出于 GDPR 的原因)一个包含您所有数据的表格,包括您的哈希密码的一部分。我知道这在这种情况下没有问题(因为您必须登录才能查看此表),但是如果这些数据被公开怎么办?
更清楚地说:揭示密码哈希的一部分(包括哈希长度)是否会使密码破解(通过暴力破解或任何其他方法)比以前更简单或更有效?
TL;DR:答案取决于散列算法、散列的哪一部分被揭示以及密码的强度。
假设散列算法是已知的,知道散列的特定部分可能会使蛮力攻击更容易:攻击者现在可能会离线运行大多数蛮力测试,也可以并行运行,因此不受速率限制甚至帐户锁定的限制。 (希望)阻止大规模暴力破解的失败尝试。
攻击变得容易多少取决于哈希和密码的强度。如果哈希算法很慢(如推荐的那样),那么暴力破解也会很慢。如果密码足够弱,这种离线暴力破解仍然可能会成功。相比之下:如果网站在每次登录尝试失败后实施等待时间,或者甚至锁定帐户,那么即使密码较弱,在线暴力攻击也经常会失败。
它变得多么容易也很大程度上取决于散列的类型和显示的部分。如果攻击者不知道在散列中使用的盐(并且通常作为散列的一部分存储),那么暴力破解几乎是不可能的——只要盐是从足够大的随机池中选择的。
对于对手来说,没有任何情况会变得更容易。唯一的情况是密码被加盐(随机数很大)并且不显示加盐。
主要关心的是知道对手有多容易。
在最坏的情况下,他可以执行离线字典/蛮力攻击,并且由于散列函数的分散,他几乎没有误报。
例如,如果网站显示 6 个十六进制字符,您可以假设暴力攻击将在统计上匹配具有相同标题的哈希,每 16^6 次尝试 6 个字符(因此每 1600 万次尝试一次误报)。这是一个很大的优势。
如前所述,如果哈希算法是 bcrypt、scrypt 等,那么离线攻击的速度与在线攻击相比不会很有趣。
但 !!!
通过执行离线攻击的能力,您可以避免由于密码尝试阈值而导致的帐户锁定。因此,在某些情况下,即使离线攻击速度不是很大(每秒 10 次尝试仍然优于 10 次尝试然后被阻止),显示部分哈希值也将允许绕过帐户锁定功能。
相对于 SIEM 和其他入侵检测机制,这也是一种保持安静的方式。
请注意,拥有大量随机生成的密码不足以忽略风险。如果密码未加盐且哈希算法较弱,则使用较短的密码尝试可能会发生冲突。
如果您有一个由 diceware 或 Bip39 创建的具有良好熵的良好密码,那么即使知道哈希和盐的多项式时间对手也无能为力。如果您的密码已经是123456
,我们已经假设它可以被破解,它的一部分是否泄露。攻击者无法获得盐怎么办,祝他们好运。
包含 2048 个单词的比特币 Bip-39 字典可以通过掷硬币 256 次随机选择单词来创建 ≈2263-熵。
Diceware 密码短语有一个熵
我们认为多项式时间攻击者可以访问盐和哈希值。并且您的密码的安全性必须满足这种情况。这种方法的动机很简单。攻击者总是可以访问/访问数据库并下载哈希和盐。简单地;
实际上,密码不是简单的散列,而是使用良好的密码散列函数处理,如 PBKDF2、Scrypt、Bcrypt 和 Argon2,后者是 2015 年 7 月密码散列竞赛的获胜者。
如果您没有使用良好的密码散列机制,并且没有具有良好熵的密码,那么您已经不安全了。