密码短语 vs 密码 — 为什么随机单词胜过复杂字符
你可能被告知要创建像P@$$w0rd123这样的密码——大写字母、小写字母、数字、符号,应有尽有。这是令人不安的真相:这个密码很糟糕。它遵循可预测的替换模式,破解工具可以在几秒内利用。与此同时,像木材-量子-勺子-速度这样的东西看起来简单,但破解难度高出几个数量级。
让我们分析原因。
传统密码的问题
大多数人被迫创建"复杂"密码时,都会做同样的事情:
- 从常见单词开始:
password、monkey、dragon - 首字母大写:
Password - 用符号替换字母:
P@ssword - 添加数字:
P@ssword123 - 末尾加符号:
P@ssword123!
破解工具知道这一点。每个主要的密码破解字典都包含这些精确的替换规则。@替换a,0替换o,3替换e——这些是最先测试的变换。你的"复杂"密码可能花了三十秒想出来,但在自动攻击面前毫秒内就会沦陷。
根本问题:人类在随机性方面表现糟糕。我们选择有意义的单词,遵循可预测的模式,重复使用相同的技巧。密码复杂性规则试图弥补这一点,但只是创造了虚假的安全感。
什么真正让密码变强:熵
密码强度用熵——随机性的比特来衡量。每个比特都会使攻击者需要尝试的可能性数量翻倍。公式很简单:
熵 = 长度 × log₂(字符池大小)
对于使用全部95个可打印ASCII字符的随机8字符密码:
8 × log₂(95) = 8 × 6.57 ≈ 52.6比特
听起来不错,但问题在于——只有当每个字符都完全随机选择时才适用。当人类选择P@ssw0rd时,由于选择是可预测的,实际熵要低得多。
这样想:熵衡量攻击者需要多少次猜测。如果从一百万种可能性中选择,大约是20比特。如果从一万亿种可能性中选择,大约是40比特。每多10比特意味着大约需要多一千倍的猜测。
密码短语:以随机单词作为构建块
密码短语采用完全不同的方法。不是随机字符,而是将随机单词串联在一起:
timber quantum spoon velocity
每个单词从大型单词列表中随机选择。如果你的单词列表有2,048个单词,每个单词贡献11比特的熵(log₂(2048) = 11)。四个随机单词给你:
4 × 11 = 44比特
使用更大的7,776个单词列表(标准Diceware列表),每个单词贡献12.9比特:
4 × 12.9 = 51.7比特
6 × 12.9 = 77.5比特
关键优势:密码短语在保持高熵的同时,易于记忆和输入。你可以想象木材、量子粒子、勺子和速度。这个心理图像会留下来。试试用xK#9mP!2qL做到这一点。
XKCD的洞见
网络漫画XKCD在第936期漫画中著名地阐述了这个概念。论点是:像"correct horse battery staple"这样的四个单词密码短语大约有44比特的熵(假设约2,048个单词的列表),而且记忆起来轻而易举。像Tr0ub4dor&3这样的"复杂"密码虽然更难输入和记忆,但熵却更低。
这幅漫画阐明了安全研究人员多年来一直在说的重要观点:我们的密码复杂性规则优化了错误的东西。它们使密码对人类来说很困难,但对计算机来说几乎没有增加多少难度。
话虽如此,XKCD的例子自2011年以来已被广泛讨论,其中一些具体数字也受到了质疑。核心原则仍然成立:随机性和长度胜过复杂性和聪明。
Diceware方法
Diceware是生成密码短语的黄金标准。工作原理如下:
- 获取一个单词列表——经典Diceware列表包含7,776个单词,每个对应一个五位数(11111到66666)
- 为每个单词掷五个骰子(或一个骰子掷五次)
- 在单词列表中查找结果数字
- 为每个需要的单词重复(最少四个,最好六个)
例如,掷出4-2-5-3-1可能给你"铅笔"。掷出1-6-3-4-2可能给你"锚"。以此类推。
为什么用物理骰子?因为它们是不需要信任软件的真正随机来源。当然,加密安全的随机数生成器(如我们密码生成器中使用的Web Crypto API)同样有效,而且更方便。
Diceware的安全性依赖于一个简单的数学事实:即使攻击者知道你使用了Diceware并且知道确切的单词列表,他们仍然面临7,776^n种可能性,其中n是单词数。这就是通过熵而不是隐蔽性来保证安全的定义。
熵比较:数字不会说谎
让我们正面比较常见的密码策略:
| 策略 | 示例 | 熵 | 需要的猜测次数 |
|---|---|---|---|
| 8字符随机(小写) | mqxhplvt | 37.6比特 | ~1370亿 |
| 8字符随机(全ASCII) | kX#9mP!2 | 52.6比特 | ~6千万亿 |
| 4词密码短语(2,048词) | timber-quantum-spoon-velocity | 44比特 | ~17万亿 |
| 4词密码短语(7,776词) | cleft-cam-niche-turret | 51.7比特 | ~3.7千万亿 |
| 6词密码短语(7,776词) | cleft-cam-niche-turret-plod-anvil | 77.5比特 | ~2.2 × 10²³ |
| 12字符随机(全ASCII) | Bx!4pQm#9kLz | 78.8比特 | ~4.7 × 10²³ |
结论:六个单词的Diceware密码短语在强度上大致等同于12个字符的完全随机密码——但记忆和输入要容易得多。
以每秒十亿次猜测(针对快速哈希的现实离线攻击速度),52比特密码大约持续52天。77比特密码短语大约持续70亿年。这就是攻击者的小麻烦和宇宙热寂之间的区别。
何时使用密码 vs 密码短语
两种方法都不是普遍更好的。各有适用场景:
使用随机字符密码的场景:
- 密码管理器生成并存储——你永远不需要输入或记住它们。使用20个以上的随机字符以获得最大熵。
- 存在长度限制——某些遗留系统将密码限制在16甚至8个字符。随机字符每个字符包含更多的熵。
- 机器间认证——API密钥、令牌和密钥应该是长随机字符串。
使用密码短语的场景:
- 需要记忆——密码管理器的主密码、磁盘加密密码短语或设备解锁码。
- 频繁输入——密码短语比随机字符串输入更快,尤其是在移动设备上。
- 需要口头分享——在电话里说"timber quantum spoon velocity"比拼写
xK#9mP!2qL容易得多。 - 需要离线安全——磁盘加密和加密货币钱包受益于高熵密码短语。
大多数人的最佳选择:用六个单词的密码短语作为密码管理器的主密码,其他所有内容用20个以上字符的随机密码。
密码短语最佳实践
不是所有密码短语都相等。遵循这些规则:
1. 使用真正随机的单词
单词必须随机选择,不能由你来选。一旦你选择了"有意义"的单词或组成句子,你就破坏了熵计算。"我非常喜欢我的狗"是一个句子,不是密码短语——而且很容易被破解。
2. 最少四个单词,最好六个
从7,776个单词列表中选四个单词大约有52比特——对于有速率限制的在线账户足够。六个单词大约有78比特——适合保护离线加密数据。对于高安全性用例,使用七个或八个。
3. 可选:添加数字或符号
在单词之间插入随机数字或符号会增加几个额外比特并击败任何纯字典攻击:
timber-quantum-7-spoon-velocity
timber!quantum!spoon!velocity
六个或更多单词时这不是严格必要的,但这是一个低成本的改进。
4. 使用分隔符
单词之间的连字符、空格或句点可以提高可读性而不降低安全性:
timber-quantum-spoon-velocity
timber quantum spoon velocity
timber.quantum.spoon.velocity
任何一致的分隔符都可以。选择你觉得最容易输入的。
常见密码短语错误
使用歌词或名言
"生存还是毁灭,这是个问题"不是密码短语——这是一句名言。攻击者维护着来自文学、歌曲、电影和宗教文本的常见短语列表。任何可识别的短语都是弱点。
选择相关的单词
"苹果 香蕉 樱桃 葡萄"使用了随机单词,但它们都是水果。这种相关性大大降低了有效熵,因为攻击者可以针对语义类别。
使用太少的单词
任何列表中的两三个单词都不够。使用7,776个单词的列表,三个单词只有38.8比特——GPU集群几小时内就能破解。
让自动补全帮忙
如果你输入第一个单词然后让手机建议下一个,你生成的是具有语言模型可预测性的文本,而不是骰子的随机性。始终使用适当的随机生成器。
我们的工具如何帮助
我们的密码生成器包含一个专用的密码短语模式,基于精选的2,048个单词列表。每个单词都使用Web Crypto API选择——安全专业人员使用的同一加密随机数生成器。你可以配置单词数量、分隔符字符,以及是否包含数字或大写单词。
所有生成完全在你的浏览器中进行。没有单词发送到任何服务器,没有密码短语被记录,工具在加载后可以离线工作。这对于生成主密码和加密密码短语至关重要——你永远不应该将最重要的秘密信任给服务器。
常见问题
如果有人知道我使用Diceware方法,密码短语还安全吗?
是的。Diceware的安全性取决于熵,而不是方法的保密性。即使攻击者知道你的确切单词列表和单词数量,他们仍然面临7,776^n种可能的组合。六个单词意味着超过2.2 × 10²³种可能性。
量子计算机能破解密码短语吗?
Grover算法理论上将比特强度减半(77比特变为约39比特有效)。这意味着六个单词的密码短语需要变成十二个单词才能抵抗量子攻击。但能够做到这一点的实用大规模量子计算机尚不可用。今天使用八个单词提供了合理的安全余量。
我应该轮换我的密码短语吗?
只有在怀疑被泄露时才需要。NIST指南(SP 800-63B)明确建议不要强制定期密码轮换,因为它会导致随着时间推移密码变弱。如果服务被入侵或你与某人分享了密码短语,请更改它。
应该使用多大的单词列表?
越大越好,但收益递减。标准Diceware列表(7,776个单词)经过充分测试并被广泛推荐。我们的工具使用了一个为可记忆性优化的2,048个单词列表——每个单词都是常见的、独特的、容易拼写的。使用2,048个单词,你需要大约多一个单词来匹配7,776个单词列表的熵。
相关资源
🛠️ 立即生成密码短语: 密码生成器 — 100%免费,所有处理在浏览器中完成。无数据上传。试试我们精选的2,048个单词列表的密码短语模式。