跳到主要内容

强密码到底强在哪:密码生成、熵值与暴力破解时间全解

从熵值这个硬指标讲清楚什么才算强密码,给出长度与字符集的具体门槛,算一遍 16 位密码的破解时间,再说明为什么密码应当在本地生成、生成后该怎么交给密码管理器保管。

发布于 作者 李雷
#密码安全 #密码生成 #熵值 #密码管理器

强密码到底强在哪:密码生成、熵值与暴力破解时间全解

大多数人对「强密码」的理解停在「带个大写字母和感叹号」。这套规则是 2003 年 NIST 一份文档留下的,写它的人 Bill Burr 后来在 2017 年公开承认那是个错误。真正决定一条密码扛不扛得住暴力破解的,只有一个量:熵。这篇文章把熵讲透,顺手算一遍破解时间,再说清楚密码该在哪里生成、生成完该放进哪里。

熵:唯一靠谱的强度指标

熵的单位是位(bit),公式很短:熵 = 长度 × log₂(字符集大小)。字符集越大、密码越长,熵越高,每多一位,攻击者要试的组合就翻一倍。

举几个落地的数:

  • 只用小写字母(26 个字符),8 位密码:8 × log₂(26) ≈ 37.6 位。
  • 大小写 + 数字(62 个字符),12 位:12 × log₂(62) ≈ 71.4 位。
  • 全部可打印 ASCII(95 个字符),16 位:16 × log₂(95) ≈ 105 位。

业内常用的分级是:低于 28 位算极弱,28 到 35 位算弱,36 到 59 位算中等,60 到 127 位算强,128 位以上算极强。注意这里比的是熵,不是位数表象。一条「Password123!」看着有 12 个字符还带符号,但它在字典攻击面前的有效熵不到 30 位,因为它落在攻击者的高频猜测列表里。随机性才算数。

暴力破解时间:用一个 16 位密码算给你看

熵换算成时间,要先假设攻击者的算力。这里用一个偏保守的离线场景:GPU 集群每秒猜 10¹¹ 次(一千亿次),这大致对应攻击 bcrypt 这类慢哈希的真实速度。破解时间 = 2^熵 ÷ 10¹¹ 秒。

拿一条 16 位、四种字符集全开的密码做样本。我用 Toolora 的生成器抽了一条真实输出:

kQ7#mZ9$wR4!nT2&

它的字符集是 95,熵约 105 位。2¹⁰⁵ ÷ 10¹¹ ≈ 4 × 10²¹ 秒,换算下来是 10¹⁴ 年量级,比宇宙年龄还长十几个数量级。即便攻击者把算力提到每秒 10¹⁵ 次(极端的国家级集群),也还剩 10¹⁰ 年。结论很直白:长度过了 16、字符集开满,离线暴力破解这条路就被堵死了,攻击者只会转去钓鱼或撞库。

对照之下,一条 8 位纯小写密码(37.6 位熵)在同样 10¹¹/s 下约 1.7 秒就能跑完整个空间。差距不是几倍,是 10²⁰ 倍。这就是为什么「长度 > 16」是我个人定的硬线。

强密码的可执行标准

把上面的数收成几条能直接照做的规则:

  • 长度优先。每加一位带来的强度提升,比换字符集更稳。能用 20 位就别用 16 位。
  • 四种字符集尽量全开:大写、小写、数字、符号。开满把单字符的信息量从 5.7 位提到 6.6 位。
  • 别复用。一条密码对应一个服务。A 站被脱库,不该连累 B 站。
  • 排除易混字符。要口头念或抄写的密码,把 0/O、I/l/1 这类剔掉,强度只掉一点点,错抄率却显著下降。

需要背在脑子里的那一类,比如密码管理器的主密码,换个思路:用 Passphrase。6 个英文词拼起来,像「river-amber-quiet-stone-forge-nine」,熵约 45 到 50 位,远比「kR7!mQ9@」好记,又稳稳超过主密码该有的 40 位下限。生成完想验证一下强度,可以把结果丢进 密码强度检测工具 看熵值落在哪一档;想要更长的助记词组合,Diceware 助记密码生成器 走的是骰子词表那一套。

为什么必须在本地生成,绝不上传

一条密码的安全前提是:除了你,没有第二方见过它。任何把密码生成放到服务器端的网页,理论上都能在你点「生成」的瞬间留一份日志。哪怕站长承诺不存,你也无从验证。

正确的做法是全程在浏览器里跑。Toolora 的密码生成器用的是浏览器原生的 crypto.getRandomValues,它接的是操作系统的密码学安全随机源(CSPRNG),种子来自 RDRAND 指令、时序抖动这类硬件熵,和生成 TLS 会话密钥用的是同一个源。这点很关键:千万别用 Math.random,它内部状态通常只有 64 位,攻击者看几个输出就能反推种子,预测出你后面所有「随机」密码。

本地生成还有个连带好处:生成的密码不会被写进 URL,分享链接不会带出密钥;会话历史只存在内存里,关掉标签页就清空。整条链路里,密码从没离开过你的设备。

生成之后:交给密码管理器

强密码最常见的死法,不是被破解,是被存错地方。我见过太多人把一条 32 位密钥粘进备忘录、邮件草稿或聊天框,这些都会同步到云端,等你早忘了它还在那儿躺着。一条 30 位密码躺在会同步的剪贴板里,跟没生成没区别。

正确动作只有一个:生成后直接粘进 Bitwarden、1Password 或 KeePassXC 这类密码管理器,一条密钥对应一条库记录,永远别截图。这样你只需要记住一个主密码,其余几百条全是 20 位以上的随机串,复用、弱密码、抄错这些坑就一次性消失了。

强不强,最后还是回到那个数:熵。把长度拉过 16,字符集开满,本地生成,存进管理器。这四步做完,你的账号面对的就不再是密码本身的问题了。


Made by Toolora · Updated 2026-06-13