密码熵详解:什么才是强密码
当网站告诉你密码是"弱"还是"强"时,它测量的是熵——密码的数学随机性。理解熵可以帮助你创建真正安全的密码,而不仅仅是难以输入的密码。
什么是熵?
熵以比特为单位衡量密码的不可预测性。每增加一比特熵,攻击者需要尝试的可能密码数量就翻一倍。计算公式为:
Entropy = log₂(C^L)
其中:
- C = 字符集大小
- L = 密码长度
另一种表示:Entropy = L × log₂(C)
各字符集的熵
| 字符集 | 字符池大小 (C) | 每字符比特数 |
|---|---|---|
| 仅数字 (0-9) | 10 | 3.32 |
| 小写字母 (a-z) | 26 | 4.70 |
| 小写字母 + 数字 | 36 | 5.17 |
| 大小写混合 (a-z, A-Z) | 52 | 5.70 |
| 大小写混合 + 数字 | 62 | 5.95 |
| 所有可打印 ASCII 字符 | 95 | 6.57 |
计算示例:
password(8 个小写字母):8 × 4.70 = 37.6 比特 — 几秒钟即可破解P@ssw0rd(8 个混合字符):8 × 6.57 = 52.6 比特 — 数小时可破解correct-horse-battery-staple(28 个小写字母 + 符号):由于长度优势,有效熵远高于上述
长度 vs. 复杂度
这是一个反直觉的事实:长度对熵的贡献比复杂度更大。
| 密码 | 长度 | 熵 | 破解时间(每秒 10 亿次猜测) |
|---|---|---|---|
Xy7! | 4 | 26.3 比特 | < 1 秒 |
Xy7!Qp2$ | 8 | 52.6 比特 | 142 年 |
mysimplepassword | 16 | 75.2 比特 | 12 亿年 |
correct horse battery | 22 | 103 比特 | 宇宙热寂之后 |
一个 16 位纯小写密码比一个包含所有字符类型的 8 位密码更强。这就是为什么现代安全指南(NIST SP 800-63B)推荐使用长密码短语,而非短的复杂密码。
"复杂度规则"的问题
传统密码策略(必须包含大写、小写、数字、符号)适得其反:
- 可预测的模式:用户将首字母大写,末尾添加
1!→Password1! - 降低可记忆性:复杂密码被写在便利贴上
- 虚假安全感:8 位"复杂"密码的熵低于 16 位简单密码
现代指南(NIST)建议:
- 最少 8 位字符,推荐 15+ 位
- 无组合规则(大写、符号等)
- 对照已泄露密码数据库检查
- 允许所有可打印字符,包括空格
- 无强制定期更换
密码短语策略
密码短语使用随机单词代替随机字符:
method: pick 4-6 random words from a dictionary
example: "timber quantum spoon velocity"
entropy: 4 words × ~12.9 bits/word (from 7,776-word list) ≈ 51.7 bits
better: 6 words ≈ 77.5 bits
Diceware 方法使用包含 7,776 个单词的列表(6^5,对应五次掷骰子)。每个单词增加 12.9 比特的熵。
优势:
- 容易记忆(你可以将单词可视化)
- 长度够长(自然达到 20-35 个字符)
- 足够多的单词即可获得高熵
- 容易输入
使用我们的密码生成器生成安全的随机密码和密码短语。
真实攻击速度
熵只有在相对攻击速度下才有意义:
| 攻击类型 | 速度 | 40 比特密码 | 60 比特密码 | 80 比特密码 |
|---|---|---|---|---|
| 在线(限速) | 1,000/秒 | 12.7 天 | 36,559 年 | 3800 万年 |
| 离线(CPU) | 10 亿/秒 | 1.1 秒 | 36.5 年 | 38,334 年 |
| 离线(GPU 集群) | 1 万亿/秒 | < 1 秒 | 13 天 | 38 年 |
| 国家级 | 1 千万亿/秒 | < 1 秒 | < 1 秒 | 14 天 |
对于有限速和锁定机制的在线账户,40+ 比特就足够了。对于离线攻击(窃取的密码哈希),80+ 比特是最低要求。这就是为什么存在 Argon2 和 bcrypt 等密码哈希算法——它们使每次猜测的代价都很高。
密码管理器的数学优势
密码管理器从根本上改变了等式:
- 一个强主密码:80+ 比特熵(6+ 个单词的密码短语)
- 其他所有密码:随机生成、128+ 比特、每个网站唯一
- 无重复使用:一个网站的泄露不影响其他网站
支持密码管理器的数学证据是压倒性的。单个重复使用的密码,无论多强,都不如每个网站使用唯一弱密码安全,因为一次泄露就会危及所有账户。
评估你的密码
评估密码强度时,考虑以下几点:
- 是否在泄露数据库中? — 即使"强"密码,如果已经泄露也是不安全的(可在 haveibeenpwned.com 查询)
- 是否随机? — 人为选择的密码的熵远低于随机生成的密码
- 如何存储? — 使用 cost factor 12 的 bcrypt 相比纯 MD5 增加约 22 比特的有效熵
更多关于安全密码生成的信息,请参阅我们全面的密码生成指南。
常见问题
我需要多少比特的熵?
对于有限速功能的在线账户:最少 40-50 比特。对于保护加密数据的密码(磁盘加密、密码管理器主密码):80+ 比特。对于加密密钥:128+ 比特。正确答案取决于你保护的是什么,以及可能攻击你的是谁。
在密码中添加符号是否显著增强了安全性?
添加一个符号将字符池从 62 扩大到 95,每个字符增加约 0.6 比特。对于 8 位密码,大约多出 5 比特——相当于多加一个小写字母。长度几乎总是比增加字符类型更值得投入。