指南 · 随机与安全

真正安全的密码:长度、随机,以及该停止的旧习惯

大多数人记得的密码规则,比如「必须包含大写字母、数字和符号」「每 90 天改一次」,当初提出这些要求的标准机构自己已经放弃了。让密码变强的是长度和随机性,让它一直安全的是「一个密码只用在一个地方」。这篇指南讲清背后的算术、美国联邦规范现在怎么说,以及哈希和随机抽签在这件事里的位置。

更新于 2026年9月28日

强度就是「可能性有多少」

一个密码是否够强,取决于攻击者要试多少个候选才能猜中它。对于随机生成的密码,这个数量很好算:字符集有 N 个字符、长度为 L,就一共有 N 的 L 次方种可能。通常用「熵」表示,单位是比特:L × log2(N)。每多 1 比特,攻击者的工作量就翻一倍。

可打印的 ASCII 字符,包括 26 个小写字母、26 个大写字母、10 个数字和 32 个符号,一共 N = 94,每个字符约 6.55 比特。不用符号时 N = 62,每个字符约 5.95 比特。所以长度比字符种类更重要:94 个字符的密码每加长一位就多 6.55 比特,而给一个 12 位的字母数字密码加上符号,总共也只多出约 7 比特。

随机密码比特每秒 100 亿次猜测时平均破解时间
8 位小写字母37.6约 10 秒
8 位,四类字符都用52.4约 4 天
10 位字母和数字59.5约 1 年
12 位,四类字符都用78.7约 75 万年
16 位,四类字符都用104.9远远超过宇宙的年龄

每秒 100 亿次,是攻击者拿到一份用快速哈希存储密码的泄露数据库、用几块显卡离线破解时的现实速度。如果是在网站登录框上一次次地试,几次错误就会锁定账号,8 位密码也要试很久。但你无从得知网站怎样存储密码,也不知道它的数据库哪天会泄露,所以要按离线破解的情况来准备。

以上计算只适用于随机生成的密码。人自己想出来的密码,比如一个单词、首字母大写、末尾加个数字和感叹号,或者名字拼音加生日,都遵循攻击者非常熟悉的规律,实际强度远低于它的长度看起来的样子。「Password1!」满足所有老式复杂度规则,却是任何破解工具最先尝试的密码之一;「zhangsan19900307」也是一样。

口令短语:够长,又好输入

口令短语是从一个词表里随机抽出几个单词连在一起。本站的密码生成器用的是 EFF 的短词表,共 1296 个英文单词,所以每个词贡献 log2(1296) ≈ 10.3 比特。4 个词是 41.4 比特,5 个词 51.7 比特,6 个词 62.0 比特,7 个词 72.4 比特。关键是词必须由生成器随机抽取,而不是自己挑:自己想的一句话,比如一句歌词或者诗句,要好猜得多。

口令短语最适合那些必须自己动手输入的密码,比如电脑的开机密码、密码管理器的主密码。这类密码用 6 到 7 个词比较合适。其他所有网站的密码,交给密码管理器生成并记住一个 16 位的随机密码,你根本不需要自己输入。

最新的规范怎么说

美国国家标准与技术研究院(NIST)发布的数字身份指南,是很多其他规范的参考来源。它的最新修订版 SP 800-63B-4,对校验密码的服务提出了这些要求:

  • 最短 15 位,如果密码是登录时唯一需要的凭证;作为多因素认证的一部分时,至少 8 位。
  • 允许至少 64 位, 接受空格和所有可打印字符,包括 Unicode 字符。
  • 不得强制组合规则。 不得要求密码必须混合几类字符。
  • 不得定期强制修改。 只有在有证据表明密码已经泄露时,才要求修改。
  • 要对照黑名单检查, 名单包括常用密码、容易猜到的密码和以往泄露过的密码。
  • 不得提供密码提示, 也不得让用户设置「你的第一只宠物叫什么」这类安全问题。

放弃定期修改的理由是:被迫每 90 天改一次密码的人,改法都是可预测的,Summer2025! 改成 Autumn2025!,对已经拿到旧密码的攻击者毫无阻碍。很多单位的系统仍然执行着旧规则;如果你们单位也是这样,用密码管理器能让它不那么痛苦。

比密码本身更重要的习惯

  • 一个密码只用在一个地方。 攻击者会拿一个网站泄露的密码去其他网站挨个尝试,这叫「撞库」。只要重复使用,一次泄露就会变成多处失守,密码再强也没用。
  • 使用密码管理器。 它为每个网站生成不同的随机密码,并且只在真正的网站上自动填写,这也能挡住很多钓鱼网页。
  • 开启多因素认证, 至少覆盖邮箱、网银、支付,以及任何可以重置其他账号密码的账号。通行密钥(passkey)或验证器应用比短信验证码更安全。
  • 重点保护邮箱和手机号。 控制了它们,几乎就能重置你所有其他的密码。
  • 怀疑泄露时再改密码, 而不是按固定周期改。

哈希在哪里派上用场

哈希函数把任意内容变成一个固定长度的「指纹」。相同的内容总是得到相同的指纹,哪怕只改一个字符,指纹也会完全不同:「hello」的 SHA-256 以 2cf24dba 开头,而「Hello」的 SHA-256 以 185f8db3 开头。本站的哈希计算工具可以计算文本或文件的 MD5、SHA-1 以及 SHA-2 系列哈希。

它最日常的用途是校验下载的文件。很多软件会在下载链接旁边公布 SHA-256 校验值;把文件拖进哈希工具,粘贴官方公布的校验值,工具会告诉你是否一致。一致就说明文件和发布的完全相同,没有损坏,也没有被中途替换。MD5 和 SHA-1 用来发现意外损坏仍然可以,但已经挡不住有意的篡改,有 SHA-256 时优先用 SHA-256。

管理规范的网站,也是用哈希来存储密码的,但不是这类哈希。SHA-256 这样的通用哈希被设计得很快,而这恰恰是拿到泄露数据库的攻击者想要的。存储密码应该用刻意设计得很慢的函数,比如 Argon2、scrypt 或 bcrypt,并为每个密码加上随机的盐。不要用哈希工具去「加密」密码:把一个弱密码算成 SHA-256 并不会让它变强;而且哈希不是加密,它无法还原,包括你自己也无法还原。

值得信任的随机

让生成的密码变强的那个性质,即每种结果的可能性完全相同、而且无法预测,也正是让抽签公平的性质。本站的密码生成器、口令短语和随机抽签,随机数都来自浏览器的密码学安全随机数生成器,并用「拒绝采样」确保没有哪个结果比别的结果哪怕多出一点点概率。随机抽签打乱顺序时用的是 Fisher–Yates 方法,n 个人的 n! 种排列,每一种出现的概率都一样。

所以用它来抽奖、决定谁先发言,结果和掷一颗完美的骰子一样公平。它做不到的,是向别人证明你没有抽了好几次、挑了一个满意的结果。需要让大家信服的抽签,就在共享屏幕上当场抽,或者录屏留档。

今天就能做的几件事

  1. 装一个密码管理器,先把邮箱、网银、支付和常用社交账号迁进去。
  2. 给这几个账号开启多因素认证。
  3. 找出重复使用的密码,从最重要的账号开始,逐个换成生成器生成的随机密码。
  4. 密码管理器的主密码用一个 6 到 7 个词的口令短语,写在纸上放在家里安全的地方,而不是存在手机相册或聊天记录里。

局限

  • 破解时间只是按单一攻击速度估算的。 实际攻击者的能力相差好几个数量级,而且估算的前提是密码真正随机。
  • 生成的密码安全与否,取决于你把它放在哪里。 写在共享文档里、在聊天中发送的密码,多长都已经暴露了。
  • 各个网站有自己的规则。 有些网站仍然限制最大长度或者要求特定字符,生成器的选项可以帮你满足这些规则。

常见问题

密码设多长比较好?

存在密码管理器里的随机密码,16 位足够。NIST SP 800-63B-4 要求,作为唯一登录凭证的密码至少 15 位。

需要定期修改密码吗?

不需要。NIST 最新规范明确要求服务不得强制定期修改。有理由怀疑密码泄露时再改。

用 SHA-256 存储密码安全吗?

不安全,它太快了。存储密码应该用慢速、加盐的函数,比如 Argon2、scrypt 或 bcrypt。

参考资料

本文用到的工具

↵ 打开 · Esc 关闭