[披露:我为 1Password 的制造商 AgileBits 工作]
早在 2011 年,我就在Toward Better Master Passwords中提倡类似 XKCD 的方案(在它被称为之前)的原因之一正是因为它的强度不依赖于攻击者知道你使用的方案。如果我可以引用自己的话
Diceware 的伟大之处在于,即使假设攻击者知道所使用的系统,我们也确切地知道它的安全性。安全性来自掷骰子的真正随机性。鉴于观察到密码破解者的速度[针对 1Password Master Password] ,使用四五个词应该足以应对未来几年的合理攻击
XKCD 漫画没有有效传达的是,单词的选择必须是(统一的)随机的。如果你让人类随机挑选单词,你会严重偏向具体名词。这种偏见可以而且将会被利用。
你想要多少力量
在一个完美的世界中,我们希望我们的密码强度与我们用它保护的密钥一样强大。说 128 位。但尽管有这些技术,人类仍无法实现这一目标。因此,让我们现实地看待攻击,以及我们可以让我们那微不足道的小大脑做什么。
使用包含 7776 个条目的原始 Diceware 单词列表,您使用的每个单词大约有 12.9 位。因此,如果您想要至少 64 位的密码,那么五个字就可以了。
猜密码比猜密钥慢
在本节中,我得出了一个非常粗略的估计,即对于固定金额的美元,测试密码比测试 AES 密钥慢 2^13 倍。
请注意,测试密码比测试密钥慢得多。如果使用正确类型的密码散列方案,则可以将大多数攻击者的猜测次数控制在每秒 100000 次以下。因此,虽然我们可能永远不想使用 50 位密钥,但使用 50 位密码可能仍然有意义。
如果我们不打算像 Arnold Reinhold 1995 年的原始 Diceware 计划那样仅限于掷骰子,那么我们可以使用更长的单词列表。1Password for Windows 中的强密码生成器使用 17679 个英文单词列表,包含 4 到 8 个字母(去除禁忌词和涉及撇号或连字符的词)。这给出了每个字大约 14 位。所以其中四个给你 56 位,五个给你 70。
同样,您确实需要注意破解速度。早在 1997 年, Deep Crack就能够每秒运行 920 亿次 DES 测试。假设一台高端专用 PC 每秒可以执行 100 万次猜测,而经过合理散列的密码每秒可以执行 100 万次猜测,那么今天的密码比 1997 年的 DES 密钥更难破解 16 位。
因此,让我们看一下Stack Exchange对双核 3.8GHz 处理器的估计:每秒 6.7 亿个键。如果我们假设硬件成本为 5000 美元,我们每秒可以轻松超过 100 亿个密钥。所以在类似的硬件成本下,密钥破解仍然比密码破解快 2^13 倍以上。
修改后的密码强度目标
根据我的估计,测试一个散列良好的密码比测试一个 AES 密钥要贵 2^13 倍,我们应该考虑一个相当好的散列密码比它的实际熵在破解方面强 13 位. 如果我们想达到 90 位的“有效强度”,那么 77 位的密码强度应该可以做到。这是通过原始列表中的六个字 Diceware 密码(77.5 位)和从 17679 个字的列表中抽取六个字的 84.6 位来实现的。
我不希望大多数人使用密码那么久。我希望人们会使用 4 或 5 个单词长的东西。但是,如果您真的担心 NSA 会追踪您的密码,那么假设您使用了一个不错的密码哈希方案,那么六个词就足够了。
仅非常粗略的估计
我没有花很多时间研究成本和基准。在我的估计中有很多事情需要争论。我试图保守(对我提倡的方案持悲观态度)。我也对“散列良好的密码”含糊其辞。同样,我对 1Password 中的密码散列非常保守。(对于我们的新数据格式,攻击者的猜测次数一直保持在每秒 20,000 次以下,而对于我们的旧数据格式,对于多 GPU 机器,攻击者的猜测次数已达到每秒 300,000 次。在我的估计中,我每人选择了 100 万次猜测第二个是“合理散列的密码”。)
还有一些历史记录
“XKCD-like”密码的总体思路至少可以追溯到1980 年代初期的S/Key 一次性密码。这些使用了 2048 个一到四个字母单词的列表。一个六字的 S/Key 密码可以获得 66 位。我不知道这种使用从列表中随机选择的单词作为密码短语的想法是否早于 S/Key。
1995 年,Arnold Reinhold 提出了Diceware。我不知道他当时是否知道 S/Key。Diceware 是在为 PGP 开发密码短语的背景下提出的。这也是在大多数计算机拥有适合加密的随机数生成器之前。所以它实际上涉及掷骰子。(虽然我信任我使用的机器上的 CSPRNG,但我仍然喜欢“累积新密码”)。
2011 年 6 月,我在Toward Better Master Passwords中重新对 Diceware 产生了兴趣,并进行了一些额外的修改。这导致了我 15 分钟的成名。在 XKCD 漫画出来后,我制作了一个极客版,通过了一些数学。
2011 年 7 月,兰德尔·梦露(Randall Monroe)接受了类似 Diceware 的计划并出版了他现在著名的漫画。由于我不是这个想法的发明者,我完全不介意被漫画抢先一步。确实,正如我在后续文章中所说
兰德尔·梦露(Randall Monroe)用非技术性的术语说了将近 2000 个字,他能够用漫画来概括。这只是显示了数学的力量......
但是有一点关于漫画的解释确实让我担心。我和已经理解该方案的人都清楚,必须通过可靠统一的随机过程来选择单词。从你的脑海中“随机”挑选单词并不是一个可靠的统一过程。