密码生成器

密码生成器
正在加载……

选择长度,按需启用大写字母、小写字母、数字和符号,生成器会使用浏览器的加密安全随机数生成器创建密码。这类熵源也用于 SSL 密钥生成和加密钱包。没有可预测的伪随机数,也不会把密码发送到服务器。包含四类字符的 16 位密码大约有 95 位熵,足以抵抗当前硬件上的离线破解。

强密码是如何生成的

  1. 1

    选择长度

    默认值为 16。重要账户使用少于 12 个字符会偏弱。

  2. 2

    选择字符类别

    大写字母、小写字母、数字和符号。类别越多,每个字符的熵越高。

  3. 3

    可选:排除易混淆字符

    如果需要从屏幕手动输入到终端或设备,请排除 0/O 和 1/l/I。

  4. 4

    生成

    crypto.getRandomValues() 会从允许的字符集中均匀选择每个字符。

  5. 5

    复制并保存

    立即粘贴到密码管理器中。不要重复使用。

按长度和字符集计算的熵

长度 仅小写字母 小写字母 + 数字 小写 + 大写 + 数字 四类全部
8 38 位 41 位 48 位 52 位
12 57 位 62 位 71 位 79 位
16 75 位 83 位 95 位 105 位
20 94 位 103 位 119 位 131 位
24 113 位 124 位 143 位 158 位

熵在实际中意味着什么

  • 40 位:如今单块 GPU 可能在几天内破解。只适合临时账户。
  • 60 位:能抵抗在线攻击,但对专门的离线破解仍然脆弱。
  • 80 位:面对当前硬件的离线破解已经很强。
  • 100 位:在量子计算成熟之前,实际攻击价值很低。
  • 128 位:相当于 AES-128 密钥强度。

对大多数在线账户来说,使用完整字符集生成 16 位密码(105 位熵)已经绰绰有余。银行账户、密码管理器主密码、加密钱包和全盘加密值得使用 20 位或更长密码。

为什么字符类别很重要

每增加一类字符,就会增加每个位置的可选项。只有 26 个小写字母时,一个字符贡献 log₂(26) = 4.7 位。加入大写字母后有 52 个字符,每字符 5.7 位。加入数字后有 62 个字符,每字符 5.95 位。加入符号后达到 94 个字符,每字符 6.55 位。在 16 个字符上,这个差距会累积到约 30 位,也就是“可以破解”和“不值得尝试”的区别。

什么时候应排除易混淆字符

如果密码需要从屏幕手动输入到无法复制粘贴的设备,例如控制台安装器、某些硬件钱包,或需要大声读出密码的场景,排除 0O1lI 可以减少抄写错误。熵损失很小,通常只是 80 多位中的 2-3 位。

配合密码管理器的流程

  1. 安装 Bitwarden、1Password 或 KeePass 等密码管理器。
  2. 设置强主口令,使用 6-8 个随机单词。也可以使用口令短语生成器。
  3. 每个网站都使用管理器内置的生成器,并保留强默认设置。
  4. 不要在不同网站重复使用密码,即使是看起来临时的账户也不要。
  5. 所有支持 2FA 的服务都启用 2FA。

需要手动输入的密码应尽量少:密码管理器主密码、全盘加密密码,以及可能的工作电脑登录密码。

帮助不大的做法

  • 每 90 天强制更换。 强制轮换容易促成 夏季2024 到 秋季2024 这样的可预测模式。NIST SP 800-63B 明确不建议这样做。
  • 写在纸上放进钱包。 这比重复使用弱密码安全,但不如密码管理器。
  • 安全问题使用真实答案。 “第一所学校”往往可以通过搜索找到。请生成随机的虚假答案,并保存在密码管理器中。

常见问题

使用四类字符(小写字母、大写字母、数字、符号)的 16 位密码,对几乎任何账户都足够强。密码管理器主密码、加密钱包和全盘加密建议使用 20 位或更长。少于 12 位无论复杂度规则如何都偏弱。

密码使用 Web Crypto API 在浏览器内生成,不会发送到任何地方。你可以打开 DevTools 的 Network 面板检查。即便如此,也建议立即复制到密码管理器,而不是截图保存或通过邮件发送。

因为数据泄露。一旦某个网站泄露密码,攻击者会立刻在数百个其他网站尝试同一组邮箱和密码。每个网站使用独立密码,可以把损失限制在一个账户内。

为该网站生成一个随机 16 位密码。16 位或更短的上限通常是该网站密码处理方式的警示信号,因此尤其要在那里启用 2FA。

相关工具