UUsefulCrate 你的文件永远不会离开浏览器

首页 › 指南 › 实用

密码长度胜过复杂度

二十年来的建议都是加符号、加大写字母。背后的算术说的却是另一回事,而且差距不小。

2026-09-24 · 7 分钟阅读

直接给结论:长度赢,而且差距不小。每多一个字符, 攻击者要试的次数是成倍增长的;而强行加一个符号或一个大写字母,只增加一个很小的固定量。 四个随机挑的普通单词,胜过八个字符的花式标点 —— 而复用密码会让这两者同时作废。

过去二十年里,主流建议一直是「加个大写、加个数字、加个符号」。但这套建议背后的算术说的却是另一回事, 而且差距大到值得花几分钟看清楚。

强度到底由什么决定

唯一重要的是:攻击者得试多少次。也就是你的密码是从多大的空间里抽出来的 —— 在一个不知道密码的人看来,有多少个字符串和你这个长得一模一样。

尝试次数 = (字符集大小) ^ (字符个数)

安全圈习惯用「比特」来衡量它:对上面这个数取以 2 为底的对数。每多一比特,工作量翻倍。 这个公式一眼就能看出关键 —— 指数是长度,底数是字符集。 把指数做大,和把底数做大,效果完全不是一个量级。

同样一份努力,两种花法

先看一个 16 位、只用字母的密码 —— 大小写都用,每个字符 52 种可能。

52^16 ≈ 2.9 × 10^27  ≈ 91.0 比特

再看一个 8 位、字母数字符号全上的密码 —— 94 个字符的字符集,接近键盘上所有可打字符。

94^8 ≈ 6.1 × 10^15  ≈ 52.5 比特

那个 16 位纯字母的密码,暴力破解难度大约是后者的 四千亿倍, 而 8 位那个才是「复杂」的那个。8 位这个指数本身就不够大,字符集再花哨也没用。

长度只有小写(26)字母+数字(62)整个键盘(94)
837.6 比特47.6 比特52.5 比特
1256.4 比特71.5 比特78.7 比特
1675.2 比特95.3 比特105.0 比特
2094.0 比特119.1 比特131.2 比特

横着和竖着对比一下。给那个 8 位纯小写密码加四个字符,多得约 19 比特; 给它换成整个键盘的字符集,多得约 15 比特。长度赢,而且越往长走它赢得越多。

会改变结论的那个背景

纯熵只是一半事实,而忽略另一半,正是人们搞出 P@ssw0rd1! 这种密码的路径。

如果攻击者是「会猜」的

真实攻击不是穷举。它们先试已知的泄露密码,然后试字典词,然后试字典词加上可预测的修饰 —— 首字母大写、末尾加个数字、末尾加个 !。 像 Summer2026! 这样的密码满足每一条复杂度规则,却几乎瞬间就被破解, 因为它就是一个字典词,加上两个最常见的后缀。

这就是复杂度规则的失效之处:它们描述了字符串的形状, 却对它的可预测性一言不发。人面对规则时的反应,是做出满足规则的最小改动, 而这些改动产生的形状,恰恰就是破解字典专门为之建立的。

这对「长度」意味着什么

用互不相关的词拼成的长密码,实际熵远高于它字符数所暗示的水平, 因为攻击者没法把这些词当成一个个独立字符来处理。 从几千个词的词表里随机挑四个词,本身就有约 44 比特;六个词就超过 65。 像 correct-horse-battery-staple 这种句子式的口令强, 不是因为长,而是因为那几个词是随机挑的,而不是一个人去想一句好记的话想出来的。

这里恰恰藏着那个坑:真正起作用的是随机,不是好记。 你自己想出来的口令大概率不是随机的 —— 它反映了你身上的一些东西,而这就把空间大幅收窄了。

那到底应该怎么做

  1. 用密码管理器。它把「得记住」这个约束彻底拿掉了, 而那个约束正是短密码曾经显得合理的唯一理由。于是每个密码都可以是 20 位随机字符。
  2. 让它生成,别自己编。人选的密码系统性地弱于同长度的随机密码,因为人会扎堆。 这里的生成器取的是浏览器的密码学随机源 —— 和加密密钥用的是同一个东西,而不是以时钟为种子的伪随机函数。
  3. 先要长度,再要花样。如果某个场合强迫你必须记住密码, 那就选更长而不是更复杂的。20 位纯字母胜过 12 位混合。
  4. 绝不复用。见下一节 —— 这才是真正害到人的那一条。

比算术更重要的那一部分

上面所有数字都建立在「攻击者必须破解你的密码」这个前提上。而现实中, 消费级服务的泄露事件压倒性地不走这条路。它们之所以奏效, 是因为你在某个防护很差的站上用过的密码,被复用到了另一个站,而第一个站把它以明文或弱哈希的形式泄露了。 攻击者什么都没破解。他们直接登录进去了。

面对这种攻击,熵毫无意义。一个 128 比特的密码,只要被复用在一个已经沦陷的论坛上,就等于泄露了。 而一个平庸但独一无二的密码,放在一个运营规范的站上,反而没事。

唯一性胜过长度。长度胜过复杂度。而复杂度本身,大多只是表演。

靠谱的网站会怎么处理你的密码

这不在你的控制范围内,但值得知道该看什么,因为它决定了一次泄露会造成多大破坏。

一个实际可用的默认方案

从完整字符集里随机取 16 个字符,大约是 100 比特,已经超出了可预见硬件能暴力破解的范围。 20 位就很宽裕了。再往上多出来的部分,买不到任何一个人能察觉到的收益。

在本地生成、存进管理器、每个地方用不一样的。这个组合比任何刻意的复杂化都值钱得多, 而且比记住一个别扭的密码省力。

← 全部指南