密码强度与熵的关系
本文约需 9 分钟阅读
"这个密码强""这个密码弱" - 这样的判断是基于什么标准做出的呢?信息论中的"熵"被广泛用作客观衡量密码强度的指标。本文将从熵的数学定义出发,详细解释字符种类和长度对强度的影响,以及 passtsuku.com 的强度计如何进行计算。
什么是熵?
熵是信息论创始人克劳德·香农在 1948 年发表的论文"A Mathematical Theory of Communication"中提出的概念。香农在研究如何在通信信道的噪声中高效编码信息时,将熵定义为量化信息"不确定性"的度量。这一概念受热力学熵的启发,与信息的基本单位"比特"相关联,成为现代密码学和安全评估的基础。
在密码的语境中,熵可以理解为攻击者猜测密码所需尝试次数的对数。熵越高,意味着密码越难被猜测。香农信息论的重要性在于,它能够用"可数学证明的指标"而非"感觉"来评估密码强度。这使得我们可以进行定量讨论,例如"有多少比特的熵,破解需要多少年",而不是"感觉够长应该安全"。
要系统地学习熵的概念,信息论入门书籍 (Amazon)也可以作为参考。
熵的计算公式
随机生成的密码的熵 H 通过以下公式计算。
H = L × log₂(N)
其中 L 是密码的字符数,N 是可用字符的种类数。log₂ 是以 2 为底的对数,结果以比特为单位表示。例如,1 比特的熵意味着"2 种可能中的 1 种",2 比特意味着"4 种可能中的 1 种"。该公式成立的前提是每个字符都是独立且均匀随机选择的。由于人为选择的密码不满足这一前提,需要注意后文讨论的"陷阱"。
按字符种类的熵比较表
根据密码使用的字符种类,每个字符的熵 (log₂(N)) 和密码整体强度会有很大差异。让我们通过下表进行比较。
| 字符种类组合 | N (字符数) | 每字符 (比特) | 8 字符 (比特) | 12 字符 (比特) | 16 字符 (比特) |
|---|---|---|---|---|---|
| 仅数字 (0-9) | 10 | 3.32 | 26.6 | 39.9 | 53.2 |
| 仅小写字母 (a-z) | 26 | 4.70 | 37.6 | 56.4 | 75.2 |
| 小写 + 大写字母 | 52 | 5.70 | 45.6 | 68.4 | 91.2 |
| 小写 + 大写 + 数字 | 62 | 5.95 | 47.6 | 71.5 | 95.3 |
| 全部 ASCII 可打印字符 | 95 | 6.57 | 52.6 | 78.8 | 105.1 |
从这张表中可以得出的重要结论是,虽然增加字符种类会提高每个字符的熵,但增幅是对数级的。从仅数字 (3.32 比特) 扩展到全 ASCII (6.57 比特),每字符的熵大约只翻了一倍。而将密码长度从 8 个字符增加到 16 个字符,熵则恰好翻倍。
具体计算示例与破解时间
示例 1:仅小写字母 8 个字符
H = 8 × log₂(26) = 8 × 4.70 = 约 37.6 比特。 这相当于 2 的 37.6 次方,即约 2,090 亿种组合。 根据 Hive Systems 2025 年的调查,使用 NVIDIA RTX 5090 进行的离线攻击 (针对 bcrypt 哈希) 相比上一代 RTX 4090 性能大幅提升, 对 MD5 哈希每秒可进行数千亿次尝试。 如果使用 MD5 等弱哈希函数存储, 37.6 比特的密码约 1 秒即可破解。 即使使用 bcrypt,也只需约 13 天即可突破。 作为安全措施是不够的。
示例 2:全 ASCII 16 个字符
H = 16 × log₂(95) = 16 × 6.57 = 约 105.1 比特。2 的 105.1 次方约为 4 × 10 的 31 次方种组合。即使攻击者每秒能进行 1 万亿 (10 的 12 次方) 次尝试,遍历所有模式也需要约 1.3 × 10 的 19 次方秒,即约 4,000 亿年。这相当于宇宙年龄 (约 138 亿年) 的约 30 倍,以当前的计算机技术,暴力破解实际上是不可能的。对于金融服务和重要账户来说,这是足够的强度。
示例 3:大写 + 小写 + 数字 12 个字符
H = 12 × log₂(62) = 12 × 5.95 = 约 71.5 比特。 对于一般的网络服务来说强度足够,但对于金融服务来说略显不足。 可以通过添加符号或增加字符数来提高强度。 请参考安全密码创建指南中介绍的推荐设置。
长度与字符种类,哪个更重要?
从公式 H = L × log₂(N) 可以看出,熵随字符数 L 线性增长,但随字符种类数 N 仅对数增长。也就是说,将长度翻倍,熵也翻倍;但将字符种类翻倍,熵只增加 1 比特。
基于这一特性,要高效提高密码强度,增加长度比增加字符种类更有效。 不过,增加字符种类也有意义。 它不仅能提高对暴力破解攻击的抵抗力,还能增强对字典攻击的防御,因为它扩大了攻击者需要搜索的空间。 理想情况下,建议同时确保足够的长度和多样的字符种类。
要深入理解密码技术的数学背景,密码技术数学基础书籍 (Amazon)会有所帮助。
熵计算的陷阱
上述计算公式仅在密码完全随机生成时才成立。人为选择的密码容易偏向字典单词、生日、键盘排列 (qwerty、1234 等) 等模式,导致实际强度远低于理论熵值。
例如,8 个小写字母的密码理论上有 37.6 比特的熵,但如果选择了"password"这样的常见单词,在字典攻击中它属于前几千个词,实际熵会降低到约 12 比特。NIST SP 800-63B 也建议对用户选择的密码进行泄露密码列表比对,而非依赖简单的熵计算。使用 passtsuku.com 等随机生成工具可以消除理论值与实际值之间的差距。
一个常见的误解是"添加一个符号就能大幅提高熵"。 这是不正确的。像"Summer2024!"这样由已知单词 + 年份 + 一个符号组成的密码,是攻击者基于规则的字典中的典型模式。 在这种情况下,理论熵为 11 × log₂(95) = 约 72 比特,但实际熵是通过字典大小 (数万个词) × 年份模式 (数十种) × 符号 (数十种) 的对数计算的,最多只有约 25 比特。 结合彩虹表攻击,可能会更快被破解。 密码强度取决于"生成过程的随机性",而非"表面上的复杂性"。
passtsuku.com 强度计的工作原理
passtsuku.com 内置的强度计基于上述熵计算实时评估密码强度。 每当用户更改字符种类或长度设置时,熵会重新计算,计量表显示会立即更新。 内部使用密码学安全的随机数,因此生成的密码的理论熵与实际熵一致。 这是与人为选择的密码的决定性区别。 关于随机数质量的详细信息,请参阅密码生成中的随机数质量一文。关于生成密码的管理方法,也可参考密码管理最佳实践。
强度判定标准如下。
- 低于 40 比特:弱 - 对在线服务不够
- 40-59 比特:较弱 - 对非重要服务可接受
- 60-79 比特:一般 - 适合一般网络服务
- 80-127 比特:强 - 推荐用于金融服务和电子邮件账户
- 128 比特以上:非常强 - 最高级别的安全性
在 passtsuku.com 上启用全部四种字符类型 (大写、小写、数字和符号) 并生成 16 个字符以上的密码,可以获得约 105 比特的熵。请参考强度计,根据用途生成适当强度的密码。
按用途推荐的熵值与实践检查清单
在理解熵理论的基础上,以下按用途总结了应使用什么设置来生成密码。
- 社交媒体和论坛 (低风险):60 比特以上 - 大小写字母 + 数字,12 个字符
- 电子邮件、云存储 (中风险):80 比特以上 - 全部字符种类,14 个字符
- 金融服务、加密货币 (高风险):100 比特以上 - 全部字符种类,16 个字符
- 密码管理器的主密码:128 比特以上 - 全部字符种类,20 个字符
请使用以下检查清单检查您当前的密码管理方式。
- 是否使用 passtsuku.com 等随机生成工具创建密码?
- 重要账户的密码是否有 80 比特以上的熵?
- 是否为每个服务使用不同的密码?
- 是否使用密码管理器集中管理?
- 主密码是否确保了 128 比特以上的强度?
- 是否定期进行泄露检查 (Have I Been Pwned 等)?
现在就能做的事
- 在 passtsuku.com 上尝试与当前密码相同的字符数和字符种类设置,用强度计确认熵值
- 找出熵低于 80 比特的账户,使用 passtsuku.com 更新为全字符种类 16 个字符以上的密码
- 将金融服务和电子邮件账户的密码目标设为 100 比特以上 (全字符种类 16 个字符以上)
- 将密码管理器的主密码强化到 128 比特以上 (全字符种类 20 个字符以上)
常见问题
- 什么是密码熵?
- 熵是以比特为单位衡量密码不可预测性的指标。它根据字符集和长度计算,值越大,密码对暴力破解的抵抗力越强。
- 高熵密码一定安全吗?
- 即使理论熵值很高,字典单词的组合或已知泄露的密码可能在攻击者的列表中。只有随机生成的密码才能达到熵值所暗示的实际强度。
- 安全密码需要多少比特的熵?
- 一般在线账户建议至少 60 比特,重要账户建议 80 比特以上。包含大小写字母、数字和符号的 16 位以上随机密码可提供约 100 比特的熵。
这篇文章对您有帮助吗?