安全 · 阅读约 4 分钟 ·
密码应该多长?用大白话算一算
长度比符号更重要。看看短密码被破解得有多快,为什么 16 个随机字符就足够,以及如何安全地生成密码。

密码规则偏爱符号:一个大写字母、一个数字、一个特殊字符。攻击者真正关心的却是另一件事:他们需要尝试多少种可能的密码。
每多一个字符,工作量就成倍增加
使用小写字母、大写字母、数字和符号时,4Dev 的生成器从 88 个可能的字符中挑选。每多一个字符,组合数就乘以 88。增加长度会让搜索空间呈指数级增长;而给短密码加一个符号几乎没有帮助。
8 个字符 88^8 ≈ 3.6 × 10^15 ≈ 52 位
12 个字符 88^12 ≈ 2.2 × 10^23 ≈ 78 位
16 个字符 88^16 ≈ 1.3 × 10^31 ≈ 103 位
这在实际中意味着什么
一旦存有密码哈希的数据库泄露,攻击者就会用显卡离线猜测,针对快速哈希每秒可尝试数十亿次。随机的 8 位密码可能在几小时到几天内被破解。12 位需要数万年,而 16 位已超出任何现实攻击的能力。
关键词是“随机”
这些数字只适用于真正随机的密码。Summer2024! 有 11 个字符,却是攻击者最先尝试的猜测之一,因为它符合人类的习惯模式。单词、名字、日期和键盘连按序列都会远早于随机字符串被尝试。
实用建议
至少使用 12 个字符,邮箱、银行以及任何能重置其他账户的服务用 16 个或更多。每个网站用不同的密码,保存在密码管理器里,能开启两步验证的地方都开启。如果网站不接受符号,就多加几个字符。
口令短语:够长又好记
对于少数必须手动输入或记住的密码,比如密码管理器的主密码,由随机单词组成的口令短语非常好用。使用包含 7,776 个单词的 Diceware 词表,每个随机选出的单词大约增加 12.9 位。
5 个随机单词 7776^5 ≈ 2.8 × 10^19 ≈ 64 位
6 个随机单词 7776^6 ≈ 2.2 × 10^23 ≈ 77 位
六个随机单词的强度大约相当于一个 12 位的随机密码,而且输入起来容易得多。单词必须真正随机地选出,用骰子或生成器:名言、歌词或你自己编的句子,比看起来弱得多。
没有帮助的规则
NIST 指南(SP 800-63B)建议不要强制用户定期更换密码,也不要设置“一个数字加一个符号”这类组成规则。两者都会把人推向 Password1!、Password2! 这样可预测的模式。更好的规则是:允许长密码,允许粘贴以便密码管理器正常工作,并把新密码与已知泄露事件中暴露的密码列表进行比对。
当你使用的网站被攻破时
立刻修改那个密码,凡是重复使用过它的地方也一并修改。攻击者会在几小时内拿泄露的邮箱和密码组合去其他网站尝试,这种手法叫撞库(credential stuffing)。每个网站用不同的密码,一次泄露就只是一个问题,而不是一连串问题。
安全地生成密码
4Dev 的密码生成器在你的浏览器中使用 crypto.getRandomValues(浏览器内置的密码学安全随机数生成器)生成密码。长度可在 4 到 128 个字符之间选择,并可选择包含哪些字符类型;不会发送到服务器,也不会被保存。