易记密码短语生成器(Diceware式)

通过随机组合常见单词,生成易于记忆、也便于口头传达的密码短语。可指定单词数量、分隔符、首字母大写和末尾数字,全部处理均在浏览器内完成。

本工具的单词选择与组合均在浏览器内(Web Crypto API)完成,绝不会发送到服务器。

关于 Diceware 密码短语方法

Diceware 是一种通过骰子(或其他随机来源)从单词表中选取若干单词并拼接起来生成密码的方法。相比随机的字母符号串,其结果对人类而言更容易记忆,并且随着单词数量增加,其抵御暴力破解的强度(熵)会呈线性增长。

密码短语生成是什么

密码短语是以多个常见单字符串接而成的密码,取代掺入符号的短字符串。对人而言,它作为单字的排列很好记,而只要增加单字数量,对暴力破解的强度便会呈直线上升。本工具可指定单字数、分隔字符、大写化与数字附加,当场生成密码短语。

生成使用密码学上安全的乱数,处理全部在浏览器内完成。既不会送往服务器也不会储存,因此请当场复制所显示的字符串。重新载入页面便会换成另一组组合。一併显示的推估强度,是由单字表的规模与单字数所推算的参考值。

密码短语的产生方法

  1. 决定单字数 建议6个以上。本工具的单词表有853个单词,每个单词约9.7比特,6个单词约58比特,超过由字母、数字和符号随机组成的8位密码(约52比特)。
  2. 选择分隔字符 在需要口头传达的场合,连字号较易朗读而便利。若服务不允许空白,请选择其他符号。
  3. 设定大写化与数字附加 这是为要求必须含大写或数字的服务所做的调整。可在满足要求的同时保持好记。
  4. 生成并复制 可重新产生直到出现满意的组合。决定後请当场复制并登录至保存处。

用好本工具的小技巧

  • 建议至少使用6个单词。4个单词(约39比特)的强度只相当于由字母、数字和符号随机组成的6位密码。
  • 在需要口头告知或手写记录的场景(如Wi-Fi密码)中,连字符分隔更易读,也能减少输入错误。
  • "在末尾添加2位数字"用于满足要求至少包含一个数字的服务。数字并不是符号,因此若服务要求必须包含符号,请选择连字符或句点等符号作为分隔符。
  • 生成的密码短语仅用于显示,不会被保存。刷新页面会生成新的组合,如需使用请立即复制。

密码短语的实用场景

决定 Wi-Fi 的密码

由于经常需要口头告知访客,单字的排列远比符号的罗列容易传达。以连字号分隔适合朗读。

密码管理工具的主密码

这是唯一需要自己记住的密码。可在确保长度的同时做成能够记忆的形式。

加密文件的通行密语

作为 ZIP 或磁碟加密所用的通行密语,可选择易於传达且不易打错的形式。

临时的共用密码

适合团队内短期共用的用途。即使贴在聊天室,也不易发生误读。

与密码短语相关的术语

密码短语
指将多个单字符串接而成的密码。易於确保长度,且便於记忆与口头传达是其特点。
Diceware
指以骰子等乱数从单字表中挑选词语的方式。此思维即为密码短语生成的基础。
熵(Entropy)
指以位元数表示猜测难度的指标。数值每增加1,暴力破解所需的尝试次数便加倍。
暴力破解攻击
指将可能的组合从头逐一尝试的攻击。密码短语的长度会直接转化为耐受度。
字典攻击
指尝试常用单字或过去外泄密码的攻击。以随机方式挑选单字即可对抗。
Web Crypto API
指浏览器所具备的密码处理机制。本工具以此产生难以预测的乱数。

常见问题

两者没有严格的定义区分,但"密码"通常指随机的字符串,而"密码短语"指由若干单词拼接而成、便于记忆的字符串。在强度相近的情况下,密码短语通常更容易被人记住和输入。

对于日常账户,建议使用6个或以上单词(约58比特)。Diceware 的创建者建议,使用7,776个单词的列表时至少6个单词(约78比特),用于全盘加密或加密货币等重要用途时使用7到9个单词。若使用本工具853个单词的列表,需要8个单词才能达到6个单词的 Diceware 口令的强度。

词典攻击针对的是单个单词,而本工具的安全性来自多个单词的组合。即使单词表是公开的,随着单词数量增加,可能的组合数会呈指数级增长,从而在实践中提供足够的抵御能力。

不会。生成过程完全在浏览器内完成,不会发送或保存到任何地方。关闭或刷新页面后当前结果即会丢失,如需使用请立即复制。
工具君

闲话 ― "correct horse battery staple" 如何改变了讨论方向

Diceware方法本身由Arnold Reinhold于1995年提出,但真正广为人知要归功于2011年网络漫画xkcd的第936话。该漫画将"Tr0ub4dor&3"这类看似复杂却难以记忆的密码,与由"correct horse battery staple"这四个普通单词组成的密码短语进行比较,指出后者虽然更易记忆,但对暴力破解的理论强度反而更高。

这种看似矛盾的现象源于信息论中的熵。与其在每个位置扩大字符集,不如从一个大型单词表中选取多个单词,这样每次选择能积累更多的随机比特数。853个单词的列表中每个单词约有9.7比特的信息量,四个单词合计约38.9比特。这与混合字母、数字与符号的6位随机密码(约39.3比特)大致相当,达不到8位(约52.4比特)的水平。如果想要超过8位此类密码的强度,请选择6个单词(约58.4比特)以上。

不过这也有实际的权衡之处。较长的密码短语更容易出现输入错误,而且如果在多个服务中重复使用同一个密码短语,一处泄露就会波及所有账户。另外,上述强度是在假设攻击者已经知道单词表的前提下计算的,因此即使单词表被人知道,强度也不会降低(Diceware的单词表本身也是公开的)。对于最重要的账户,建议将生成的密码短语当作密码管理器的可记忆主密码使用,而非到处重复使用。