Passphrase Generator:强力且易记的密码短语
用 XKCD 风格(correct horse battery staple)生成密码短语,支持多种语言词典、可定制分隔符与实时熵估算。所有处理都在浏览器内本地完成。
什么是 Passphrase Generator?
Passphrase Generator 用 XKCD 的「correct horse battery staple」方法,搭出便于记忆的多词密码短语。你选好词数,选一两本词典,工具就用 crypto.getRandomValues 从合并后的词池里随机抽词,以比特报告熵,并在从 Weak 到 Ludicrous 的七级标尺上贴上等级标签。我会在配置新的密码管理器主密码、加密恢复短语,或者任何最终要在手机键盘上打的凭据时用它。随机字符串按字符更强,但在这些场景里不实用——从 EFF 的 7,776 词词表里抽四个随机词,你会得到 51 比特熵和一个第三天还能真的记住的字符串。
主要功能
- 多种词典 — EFF Diceware long list(7,776 词)、Common English、Technical 与 Nature,加上德语、西班牙语、法语、葡萄牙语、俄语、印地语、日语、中文、韩语的本地化词表。
- 词数滑块(3-10) — 拖动以设置最少词数。三词打字快但小词表下只有 ~38 比特;主密码现实甜蜜区是六到七词。
- 可选最小长度 — 第二个滑块设置字符下限(0-50)。当某服务要求最少 20 字符,而四个短词凑不够时很有用。
- 五种分隔符 — None(camelCase 风格)、Space、Hyphen、Underscore、Period。分隔符不增加熵,但影响阅读。
- Capitalize each word — 每个词首字母大写。不增真实熵,但可满足「必须含大写」之类的规则。
- Append random number — 从可配置范围(默认 1-999)追加一个数字。增加比特数会随范围实时更新。
- 实时熵计算 — 熵面板显示总比特、词池大小、每词比特,以及一个根据每次设置变更即时更新的彩色强度标签。
- 批量最多 100 — 拖动 count 滑块即可一键产生最多 100 条密码短语,每条都带自己的熵读数。
- 浏览器端随机 — 随机源是
crypto.getRandomValues,Web Crypto API 内部使用的同一个 CSPRNG,而不是Math.random()。
如何使用 Passphrase Generator
第 1 步:选择词数与长度
顶部的「Words」滑块设置最小词数(3 到 10)。标签实时更新(「4 words」「7 words」)。下方的「Minimum length」滑块设置字符下限(0 到 50);除非目标系统要求特定的最小字符串长度,否则保持 0。如果设置了最小长度,生成器会一直抽词直到词数与字符长度两个阈值都满足。
第 2 步:选择分隔符与大小写
「Separator」下的五个 radio 控制词如何拼接:None、Space、Hyphen、Underscore、Period。下方两个复选框 ——「Capitalize each word」与「Append random number」—— 切换这些修饰。大写默认开启;追加数字默认关闭。勾选「Append random number」后,会出现一个带 Min/Max 字段和实时「+ X.X bits」读数的数字范围框,显示其熵贡献。
第 3 步:选择词典
「Dictionaries」下,工具显示与你 locale 相关的词表 —— 中文显示 Diceware Chinese (Pinyin)、EFF Diceware(英语)和 Common English。每条都列出词数与一行说明。可以勾选多个;词池会合并它们。至少勾选一个(工具会阻止取消最后剩下的那个,并显示 toast)。加更多词表通常会让每词比特略降,因为合并后的词池更大但不成比例 —— 熵面板会展示实时数据。
第 4 步:阅读熵面板
词典下方的灰色面板有三个数字:总熵(按强度等级上色)、词池大小、每词比特。强度等级由总比特决定:
- Weak(红):低于 40 比特
- Fair(橙):40-49 比特
- Good(黄):50-59 比特
- Strong(青柠):60-79 比特
- Very Strong(青):80-99 比特
- Fortress(紫):100-149 比特
- Ludicrous(彩虹):150 比特以上
任何你真在意的事物,六十比特是底线。主密码的合理目标是八十比特。
第 5 步:生成并复制
设置「Generate」count 滑块(1-100),点 Generate。结果出现在下方列表里,每条带自己的词数与熵。每行旁的复制图标只复制那一条;顶部的 Copy All 按钮把全部用换行连起来一起复制。Clear 清空列表。如果你还没找到中意的,再次点击 Generate —— 滑块设置会保留,只换词。
实例
密码管理器主密码
设置:7 词,EFF Diceware 词表,Hyphen 分隔,Capitalize 开,无数字,Generate count 5。
输出(五个候选之一):
Tropical-Dapper-Backboard-Skating-Roving-Reproach-Cubical
这是 90.5 比特熵 —— Very Strong。从五个候选里挑你最顺眼的,记住的那一周写在纸上随身带,记牢之后把纸碎掉。连字符让前几天在手机键盘上输入不至于太抓狂。
加密恢复短语
设置:6 词,EFF Diceware,Space 分隔,Capitalize 关,无数字。
输出:
gallant pelt anguish flagstone graveness scorch
77.5 比特,Strong。当你需要在电话里把短语念给家人听时,空格比连字符更容易朗读、更不易听错。BIP39 风格恢复短语的标准建议就是六词 —— 同样的思路,只是词表不同。
每天使用的服务器 SSH key 密码短语
设置:5 词,Common English 词表,Hyphen 分隔,Capitalize 开,Append number(1-99)。
输出:
Brisk-Marble-Quill-Vintage-Oasis-47
约 56 比特。比主密码示例熵略低,但对一把同时在磁盘上由 4096 位 RSA 密钥保护的 key,这是合适的折衷:一天敲 30 次也不烦的短度,以及让被偷的 id_rsa 不会立刻 game over 的强度。结尾的数字加几比特,也让你不用换词就能为不同服务器维护不同的密码短语。
提示与最佳实践
重要的事都以六十比特为底线。 60 比特以下,资金充足的 GPU rig 可在数周内穷举掉 keyspace。80 以上,连国家级对手都失去耐心。强度标签正对应这些临界点:Strong(60-79)适合大多数账户,Very Strong(80-99)是主密码的目标。
XKCD 方法在记忆性上击败随机字符。 像 qP$7zR!2mK#x 这样的 12 字符随机串约 79 比特,但记不住。EFF Diceware 六词约 77 比特,排练一次就能背。对于绝不会去敲的凭据,随机字符可以;凡是要敲的,词胜出。
加长度,而不是加复杂度。 「混合大小写、数字、符号」的建议来自 8 字符密码时代。对于密码短语,长度才是唯一值得拨的旋钮。在 7,776 词表上多加一个词带来 ~12.9 比特,胜过所有符号替换的总和。
合并词表通常会削弱单个词的强度。 两个 7,776 词表加起来不会有 15,552 个唯一词 —— 去重后剩约 14,000。每词比特只上升约 0.8,所以多加一个词比启用第二个词表更划算。多词表用于美学(纯技术风、纯自然风),而非用于熵。
为每个高价值凭据使用不同的密码短语。 一次泄漏不应连累其他账户。一次生成 10 条,密码管理器、磁盘加密、恢复码、SSH key 各分一条。
常见问题与排查
「Please select at least one wordlist」 — 你把所有词典框都取消了。至少勾上一个。工具也会阻止取消最后剩下的那个(显示 toast)。
密码短语比你设置的最小长度短。 最小长度滑块只施加字符下限,不是精确目标。如果最小是 30,而抽出的词正好凑成 33 字符,你拿到的就是 33 字符,不会被填充到 30。如果词数与最小长度无法在 100 次尝试内同时满足,生成器会停下并返回当前结果 —— 选一个更现实的组合。
勾上第二个 wordlist,熵读数下降。 合并后的词池更大,所以每个词相对总数的比特更小 —— 这是数学上正确的行为。每词比特等于 log2(词池大小),14,000 词的池给 ~13.8 比特/词,7,776 给 ~12.9。总熵仍然在涨,只是不像直觉那么多。
面板里大写不增加熵。 把每个词首字母大写是可预测的(攻击者第一轮就试这种模式),所以计算器记零比特。固定分隔符同理。只有随机数字范围与词的随机抽取才计入总熵。
同一个词在密码短语里出现两次。 从 7,776 词池抽 4-7 词时,生日问题意义下重复的概率很小但非零。重复不会让密码短语失效 —— 熵计算本来就假设独立抽取。看不顺眼就再点 Generate。
隐私与安全
所有密码短语生成都通过 crypto.getRandomValues 在你的浏览器内本地完成,这是 Web Crypto API 暴露的密码学安全伪随机数生成器。生成的密码短语不会发送到任何服务器;词典打包在页面 JavaScript 里,与工具其余部分一起加载。工具下方的历史面板只把最近的生成存到浏览器本地的 IndexedDB —— 用完清空,或者如果不希望留下本地痕迹,就在隐私/无痕窗口里用。
常见问答
XKCD 密码短语方法是什么?
源自 XKCD 第 936 篇(「Password Strength」),它论证四个常见随机词(「correct horse battery staple」)比典型的 8 字符「复杂」密码 Tr0ub4dor&3 更强且更易记。算账:从 2,048 词表抽 4 词是 44 比特;扣掉人们常用的可预测替换模式,8 字符复杂串大约 28 比特。Passphrase Generator 直接落实了这一思路。
Diceware 是什么,EFF 词表有何不同?
Diceware 是 Arnold Reinhold(1995)提出的最初密码短语方案:掷五颗实体骰子从 7,776 词表里挑一个词,按需要的词数重复。EFF 在 2016 年发布了同样 7,776 词大小但选词更佳的更新版 —— 更易发音,稀僻或冒犯性词更少,设了最短词长以避免一字母 typo 撞车。Passphrase Generator 把 EFF 词表作为默认英语词典。
强密码短语需要多少词?
EFF 词表四词是 51.7 比特 —— Good 但不到 Strong。六词 77.5 比特(Strong)。七词 90.5 比特(Very Strong),是主密码的合适目标。少于四词,你弱于一个随机 8 字符密码;多于七词,记忆成本上去而收益递减。
可以用密码短语作为密码管理器的主密码吗?
可以 —— 这正是推荐用法。主密码是唯一无法存进管理器自身的凭据,所以记忆性很关键。EFF Diceware 六到七词、77-90 比特是标准建议。
工具为何说大写贡献零比特?
因为大写模式是固定且公开的。真正的熵贡献需要攻击者无法预测的大写方式。「Capitalize first letter of each word」是显然模式 —— 攻击者第一次尝试就用它。把它记 0 比特,是诚实的会计。
应不应该用「Append random number」?
看目标系统。若系统强制「必须含数字」,就勾上并选一个小范围如 0-99(约 6 比特)。若没有这种要求,把熵花在多一个词上更划算:7 词密码短语比 6 词加 3 位数的熵更大,而且更易记。
相关工具
- 密码生成器 — 为永远不需要手敲的凭据生成密度更高的随机字符密码。
- UUID 生成器 — 当你需要的是全局唯一标识符而非密码短语时,生成 v4 UUID。
- Base64 编解码 — 把任意二进制数据(包括加密结果)编码为可在文本中安全传输的形式。
- AES 加密 — 用刚生成的密码短语作为密码,加密敏感笔记或文件。
- 哈希套件 — 当需要存储校验值而非密码短语本身时,计算 SHA-256、SHA-512 等哈希。
立即试用 Passphrase Generator:Passphrase Generator