从 7776 个单词的 EFF 大词表里随机抽一个词,就增加 log2(7776) ≈ 12.9 比特的熵。默认的 6 个单词有约 2.2 × 10²³ 种组合,也就是 77.5 比特,这正是 EFF 自己推荐的长度。和同等强度的随机字符串相比,密码短语更容易记住,也更不容易输错。
什么是密码短语
密码短语(passphrase,也有人译作“通行短语”或“口令短语”)是用几个随机单词连成的密码,比如 pester-parameter-removed-popular-dollhouse-brick。它比 q7#Vd!2mZ 长得多,但大多数人花一两天就能背下来。
有些密码只能装在脑子里:解锁密码管理器的主密码、电脑开机登录密码、加密硬盘的密码。这些你每天要凭记忆输入好几次,密码管理器也帮不上忙。随机字符串难记又容易打错,几个普通单词就友好得多。
关键在于,单词必须由随机过程挑选,而不是你自己挑。人挑的往往是歌词、名言和熟悉的说法,破解工具里恰恰收着海量这类词组。一个从 7776 个词里均匀抽出的单词,不管看起来多普通,都稳稳贡献 12.9 比特。
美国网络安全和基础设施安全局(CISA)把“4 到 7 个互不相关的单词”列为随机字符串之外的一种可选做法。微软用来轮换本地管理员密码的 Windows LAPS 也能生成密码短语,词表取自 EFF,默认 6 个词。
为什么是英文单词
本工具用的是 EFF 大词表,全部是英文单词。挑这份词表,是因为它的单词都比较常见、好拼写,而且彼此不容易混淆。密码的强度只取决于“从多少个词里随机抽”,和你认不认识这些词无关;遇到生词,多看几遍就记住了。
用中文词语或拼音当密码短语也不是不行,网上也有中文版的 Diceware 词表。但汉字要靠输入法才能打出来,开机解锁这类没有输入法的场合往往打不了;拼音不带声调,同音词又多,自己记的时候容易记混。对大多数人来说,英文单词加连字符是最省事的选择。
生成一个密码短语
- 单词数保持 6 个,或者改成 3 到 12 之间的任何数字。
- 分隔符保留连字符,或者换成空格、点、下划线,也可以不加。
- 网站要求有大写字母或数字时,打开首字母大写或加一位数字。
- 点“再生成一个”,多点几次,直到出现一组你能想象成画面的单词。
- 把密码短语存进密码管理器;或者写在纸上收好,等背熟了再处理掉。
各个选项改变了什么
| 选项 | 对熵的影响 | 什么时候用 |
|---|---|---|
| 单词数(3–12) | 每个词增加 12.9 比特 | 调节强度的主旋钮 |
| 分隔符(默认连字符) | 不影响,由你决定 | 空格读起来自然;连字符不怕表单自动去掉空格 |
| 首字母大写 | 不影响,每个词都大写 | 应付“必须包含大写字母”的规则 |
| 加一位数字 | 增加 log2(10 × 单词数) 比特,6 个词时约 5.9 比特 | 应付“必须包含数字”的规则 |
首字母大写和分隔符对每个词都一样处理,所以不增加任何不可预测性:知道你用了这个工具的人,也知道有这些选项。页面显示的熵只计算随机选择的部分:那几个单词,以及加数字时,数字本身和它跟在哪个词后面。数字有 10 种取值,跟在随机选中的一个词后面,所以贡献 log2(10 × 单词数) 比特,6 个词时就是 log2(60) ≈ 5.9 比特。
“不加分隔符”在这份词表上是安全的,因为表里没有任何一个词是另一个词的开头。连在一起的 sizablepresume 只有一种拆法,去掉分隔符并不损失强度。词表里有 4 个词自带连字符(drop-down、felt-tip、t-shirt、yo-yo),配上连字符分隔符看着有点怪,但不影响强度。
该用几个单词
下表假设攻击者知道你的设置和词表,在离线状态下猜测。时间按猜中前平均要试一半组合来算。两种速度:每秒 10¹⁰ 次,和一块 RTX 4090 显卡破解无盐 SHA-256 的速度(约每秒 220 亿次)同一数量级;每秒 10¹² 次,相当于四块这样的显卡破解 NTLM 哈希。如果网站用 bcrypt、Argon2 这类慢哈希保存密码,或者输错几次就锁定账号,所需时间还要再长很多个数量级。
| 单词数 | 比特 | 一块显卡(每秒 10¹⁰ 次) | 四块显卡(每秒 10¹² 次) |
|---|---|---|---|
| 3 | 38.8 | 24 秒 | 不到 1 秒 |
| 4 | 51.7 | 2 天 | 30 分钟 |
| 5 | 64.6 | 45 年 | 165 天 |
| 6 | 77.5 | 35 万年 | 3503 年 |
| 7 | 90.5 | 27 亿年 | 2700 万年 |
| 8 | 103.4 | 2.1 × 10¹³ 年 | 2100 亿年 |
需要背下来的密码,6 个词是合理的默认值。解锁密码库或加密硬盘这种可能遭遇离线攻击的场合,用 7 到 8 个词。3 到 4 个词只适合系统会限制尝试次数的地方。
换算成字符有多长
EFF 词表里的单词长 3 到 9 个字母,平均 7 个。6 个词加连字符,总长在 23 到 59 个字符之间,居中是 47 个。这超过了任何最低长度要求,包括美国国家标准与技术研究院(NIST)对单独使用的密码要求的 15 个字符。要留意的是上限:8 个词加分隔符,大约有三分之一的概率超过 64 个字符,有的网站到这里就不再接受输入。NIST 只要求服务至少允许 64 个字符,所以用很长的密码短语时,设置完最好退出再登录一次试试。
想要随机字符串?
本页的第二个标签可以生成传统的随机密码,由字母、数字和符号组成,控件和密码生成器一样,适合交给密码管理器自动填写的账号。想要更短、又能通过大多数组成规则的单词密码,可以看好记密码预设;想用真骰子自己掷出单词,Diceware 页面列出了每个词对应的骰子点数(两页均为英文)。
你的密码短语只在这里
单词在你的浏览器里,从随页面一起下载的词表中选出。生成的内容不会上传、记录或保存,页面也不记得之前的结果。保存之前关掉标签页,它就永远没了,所以请先存好。
技术说明
工具用 crypto.getRandomValues 为每个词抽一个词表位置。原始随机数的范围不是 7776 的整数倍,落在最上面那段不完整区间的值会被丢弃重抽,因此每个词被抽中的概率严格是 7776 分之一。词表是未经修改的 EFF 大词表,由电子前哨基金会以知识共享署名许可发布,见 EFF 词表发布说明和本站许可页(英文)。怎样在浏览器开发者工具里确认生成时没有任何网络请求,见技术说明页。
常见问题
密码短语真的和随机密码一样强吗?
强度取决于等可能结果的数量,而不是看起来像什么。6 个 EFF 单词是 77.5 比特,相当于用字母、数字和符号组成的 12 到 13 位随机密码。想更强就多加几个词。
词表是公开的,有没有关系?
没有关系。计算时已经假设攻击者手里有这份词表。保护来自 6 个词的 2.2 × 10²³ 种组合,而不是来自没人知道词表。
不喜欢其中一个词,能自己换掉吗?
重新生成比手动改好。亲手挑词,哪怕只挑一个,也会让结果偏向人们觉得顺眼的词,攻击者可以针对这种偏好建模。整个重新生成,直到有一组记得住为止。
要不要在单词里加符号或数字?
除非网站要求,否则不必。把字母换成形近的数字几乎不增加强度,因为破解工具会自动尝试这些替换。多加一个词能增加 12.9 比特,还更好记。
为什么网站说我的密码短语太长?
有些服务限制密码长度,有的上限是 64 个字符,甚至更低。可以减少单词数、去掉分隔符,或者看看网站有没有别的登录方式。
我看不懂这些英文单词,会影响安全吗?
不会。强度只取决于随机抽取,不取决于词义。不认识的词照样能记:把几个词连成一个有画面的小故事,比如“t-shirt 挂在 brick 上”,通常一两天就记住了。
资料来源
2026-10-11 核对。
- EFF:用于随机密码短语的新词表
- CISA:Use strong passwords
- Microsoft Learn:Windows LAPS 密码和口令
- NIST SP 800-63B-4
- hashcat 6.2.6 在 RTX 4090 上的基准测试
最后更新: