跳转到主要内容

口令短语

本文约需 2 分钟阅读

口令短语是指由多个单词组合而成的长密码。像「mountain-river-clock-purple」这样把毫不相关的单词排列起来,就能创建出对人类而言便于记忆、对计算机而言难以猜测的认证信息。与传统的短而复杂的密码 (例如 xK#9mP!2) 相比,口令短语更容易确保较高的,也能减少输入错误,因此作为兼顾安全性与便利性的方法而备受关注。

Diceware 方式的历史与原理

最著名的口令短语生成方法,是 Arnold Reinhold 于 1995 年提出的 Diceware 方式。掷物理骰子 5 次,将掷出的点数组合 (例如 4-1-6-2-3) 与包含 7,776 个单词的词表对照,确定 1 个单词。重复这一步骤选出多个单词,组成口令短语。

Diceware 的本质优势在于熵的计算是透明的。每个单词都保证有 log2(7776) ≒ 12.9 比特的熵。6 个单词约为 77 比特,7 个单词约为 90 比特。它不依赖软件的随机数生成器,而是使用物理骰子这种可验证的随机源,这一点可以说是在密码学上诚实的设计。如今 EFF (Electronic Frontier Foundation) 公开了改良版的词表,并在设计上让选出的单词更便于记忆。

与密码的区别 - 熵的比较

传统密码与口令短语的决定性区别,在于积累熵的方式。8 个字符的随机密码 (大小写字母 + 数字 + 符号,约 95 种) 最多约有 52 比特的熵。而 Diceware 6 个单词的口令短语约为 77 比特。其长度在 25 个字符前后,但在易记程度上口令短语压倒性占优。

不过,这一比较有一个前提条件。口令短语的强度取决于「单词是随机选取的」。如果自己编写有意义的句子,熵会大幅下降。像「I love my cat very much」这样的句子,由于语法上的约束和高频单词的偏向,并不具备与其表面长度相称的强度。对暴力破解攻击字典攻击的抵抗力,归根结底取决于随机性。

xkcd #936 的功与过

2011 年发布的 xkcd 漫画 #936「correct horse battery staple」,有着将口令短语的概念普及给大众的功绩。它主张:与「Tr0ub4dor&3」这种复杂但短的密码相比,排列 4 个随机单词在强度和易记性上都更胜一筹。这一主张直观且具有说服力。

然而,这部漫画也存在容易被忽视的问题。首先,4 个单词 (约 44 比特) 的熵即便在 2011 年也算不上充分,以现在的计算能力对离线攻击而言是脆弱的。NIST 在 2017 年的指南 (SP 800-63B) 中推荐至少 8 个字符以上,但就口令短语而言,实务上的推荐线是 5 个单词以上,最好是 6 个单词以上。此外,「correct horse battery staple」本身因过于出名,很可能已被收录进攻击者的字典,这也是一个具有讽刺意味的教训。

实务中的推荐与区分使用

口令短语最能发挥效果的场景,是密码策略中要求主密码的情况。具体而言,它适用于密码管理器的主密码、磁盘加密的口令短语、SSH 密钥的口令短语等需要频繁手动输入、且要求最高级别强度的用途。

另一方面,对于各个服务单独的密码,使用密码管理器生成的随机字符串比口令短语更为合理。为每个服务记住几十个不同的口令短语并不现实,最终还是会败给重复使用的诱惑。也请参考安全密码的创建方法密码的心理学密码安全相关书籍 (Amazon)能让你更深入地学习口令短语的设计思想。

常见的误解

「越长越安全」这种简单化的想法是危险的。口令短语的强度不取决于长度,而取决于单词的选择有多随机。歌词的某一句、著名的引言、对个人有意义的短语,都是攻击者容易猜中的候选。此外,单词之间的分隔符 (空格、连字符、句点等) 对熵几乎没有贡献。与其在分隔符上下功夫,不如多增加 1 个单词,效果要好得多。回顾密码的历史与文化,便能看见依赖人类记忆的认证方式的局限。

相关术语

这篇文章对您有帮助吗?

XHatena