"使用强密码"是常见的建议,但"强"这个词很模糊。熵是这个建议背后真正的度量标准——一个以比特为单位的数字,告诉你攻击者在最坏情况下需要猜测多少次。本文解释这个数字的含义,以及如何为你实际选择的密码计算它。
太长不看版
- 熵(以比特为单位)衡量攻击者必须暴力破解的搜索空间大小:
熵 = log2(字符集大小 ^ 长度)。 - 每增加一个字符都会使搜索空间倍增;每增加一种字符类型只会使其增加一个固定的、相对较小的倍数。
- 一个只用小写字母的 12 位密码,熵比混合四种字符类型的 8 位密码还低——但一个 20 位的纯小写密语,又会超过两者。
- CSPRNG 生成的密码能精确达到理论熵值;人为选择的密码几乎从不能,因为人类不是随机的。
简短回答
以比特为单位的熵是 log2(N),其中 N 是该长度和字符集下所有等可能密码的总数。实际计算:熵 = 长度 × log2(字符集大小)。一个从 95 个可打印 ASCII 字符中均匀抽取的 16 位密码,熵约为 16 × log2(95) ≈ 105 比特——相比之下 256 位 AES 密钥的实际抗暴力破解能力显得过剩,但 105 比特已经远超任何现有或可预见硬件能够穷举的范围。PassGenerate 正是这样生成密码的——使用 Web Crypto API 的 CSPRNG,所以这个熵值是真实的,不只是理论上的。
熵公式,逐步推导
熵计算假设每个字符都是从固定字符集中独立、均匀随机选取的。给定大小为 C 的字符集和长度为 L 的密码,可能的密码总数是 C^L,以比特为单位的熵是:
熵 = L × log2(C)
| 字符集 | 集合大小 (C) | 每字符比特数 (log2 C) |
|---|---|---|
| 仅数字 (0-9) | 10 | 3.32 |
| 小写字母 (a-z) | 26 | 4.70 |
| 小写字母 + 数字 | 36 | 5.17 |
| 大小写混合 + 数字 | 62 | 5.95 |
| 大小写混合 + 数字 + 符号(约33个常见符号) | 95 | 6.57 |
长度 vs 字符集大小:为什么长度更重要
下表说明了为什么 NIST SP 800-63B 弱化强制复杂度规则、转而强调长度:
| 长度 | 仅数字 | 小写字母 | 大小写字母+数字+符号混合 |
|---|---|---|---|
| 8 | 27 比特 | 38 比特 | 52 比特 |
| 12 | 40 比特 | 56 比特 | 79 比特 |
| 16 | 53 比特 | 75 比特 | 105 比特 |
| 20 | 66 比特 | 94 比特 | 131 比特 |
| 24 | 80 比特 | 113 比特 | 157 比特 |
| 32 | 106 比特 | 150 比特 | 210 比特 |
注意,一个使用全部四种字符类型的 8 位密码(52 比特)的熵,低于一个 12 位全小写密码(56 比特)。这就是一个广为人知结论的数学基础:多加四个随机字符,比在短密码里强制加符号和数字更能提升安全性。这也是为什么由若干随机词组成的长密语,既可能比一串短符号更强,又更容易输入——如果从一个几千词的词表中抽取,每多一个词通常能增加 11-13 比特,四到六个词累积起来相当可观。
为什么"看起来随机"不等于真的随机
熵的计算假设真正的均匀随机性。人为设置的密码即使看起来很复杂,也系统性地违背这个假设:键盘走位(Qwerty123!)、火星文替换(P@ssw0rd)、加符号的日期或姓名,这些都会让实际熵远低于字符数所暗示的水平,因为攻击者的破解工具正是围绕这些模式构建的。一个密码在人眼看来可能很随机,实际却可能落在定向字典攻击的前几百万次猜测之内。
这就是为什么应该优先使用基于密码学安全伪随机数生成器(CSPRNG)的生成器,而不是自己发明密码的实际原因。JavaScript 中的 Math.random() 不具备密码学安全性,不适合用于密码生成——它由一种算法生成和播种,在某些引擎中可预测到能从少量输出反推出来。Web Crypto API 的 crypto.getRandomValues() 则取自操作系统的密码学随机源,所以每个字符都是真正独立随机的,上面的熵计算才真正适用。
你实际需要多少比特?
没有一个放之四海而皆准的数字,因为这取决于你在防御什么:
- 约 40-60 比特:能抵御随意猜测和小规模自动化攻击,但在资源充足的攻击者对弱哈希数据库进行离线破解时可能不够用。仅适用于真正低价值、低后果的账户。
- 约 70-90 比特:即使面对经过优化的破解硬件,在任何现实的攻击时间范围内都能稳妥地超出暴力破解范围。对大多数个人账户来说是合理目标。
- 100+ 比特:以目前或可预见的计算能力,暴力破解基本无法触及,其密码学意义相当于一把强加密密钥。适用于你的密码管理器主密码或其他单点故障环节。
用真实硬件跑一遍是什么样
上面的比特数字方便比较,但没有告诉你实际攻击需要多久——这取决于用来猜测的硬件,而硬件每年都在变快。Hive Systems 每年都会发布一份基准测试,用一批租用的消费级 GPU 实测暴力破解速度。他们 2026 年的表格显示,一个使用全混合字符集(大小写、数字、符号)随机生成的 8 位密码,破解大约需要 132 年——相比 2025 年的 164 年和 2024 年的 225 年有所下降,随着 GPU 硬件进步,每年下降幅度约 20-25%。一个仅用小写字母的 8 位密码破解速度下降得更快:从 2025 年的三周缩短到 2026 年的约两周。
这份基准测试里有两点值得注意。第一,这个趋势是单向的——今天看起来"安全"的东西,仅仅因为硬件进步,每年都会变得更弱,这从现实角度支持了"宁可选更长的密码,也不要卡在当前最低标准"的做法。第二,一个有点反直觉的发现:为训练语言模型打造的专用 AI 加速芯片,在暴力破解密码上其实并不比同等的游戏 GPU 更快,在部分测试中甚至更慢——密码破解是一个纯粹的暴力数字问题,享受不到 AI 硬件针对矩阵乘法优化带来的好处。
关键要点
- 熵 =
长度 × log2(字符集大小)——长度是线性影响,字符集大小是对数影响,这就是为什么长度占主导地位。 - 一个使用所有字符类型的短密码,熵可能比一个只用一种字符类型的长密码还低。
- 只有当字符真正均匀随机时,实际熵才等于理论熵——这正是 CSPRNG 能保证、而人为选择通常做不到的事。
- 日常账户建议目标 70+ 比特,主密码或其他单点故障环节建议 100+ 比特。
为什么可以信任 PassGenerate
- 密码使用 Web Crypto API 在你的浏览器本地生成。
- 不会向服务器传输任何密码。
- 使用密码学安全伪随机数生成器(CSPRNG)。
- 遵循 NIST 和 OWASP 推荐的现代安全最佳实践。
参考资料
- Hive Systems 2026 密码破解时间表(暴力破解基准数据)
- NIST SP 800-63B – 数字身份指南
- OWASP 身份验证速查表
结论
熵是一个精确的、可计算的密码强度度量标准,而不是"复杂度"这种模糊概念。长度比强制字符类型混合更重要,因为长度会线性扩大搜索空间,而字符集大小只会对数级地扩大它——而且如果字符不是真正随机的,这些数学关系全部不成立,这就是为什么像 PassGenerate 这样基于 CSPRNG 的生成器生成的密码能精确达到理论熵值,而人为选择的密码几乎永远做不到这一点。