跳转到主要内容

密码强度与熵的关系

本文约需 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)103.3226.639.953.2
仅小写字母 (a-z)264.7037.656.475.2
小写 + 大写字母525.7045.668.491.2
小写 + 大写 + 数字625.9547.671.595.3
全部 ASCII 可打印字符956.5752.678.8105.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 等)?

现在就能做的事

  1. 在 passtsuku.com 上尝试与当前密码相同的字符数和字符种类设置,用强度计确认熵值
  2. 找出熵低于 80 比特的账户,使用 passtsuku.com 更新为全字符种类 16 个字符以上的密码
  3. 将金融服务和电子邮件账户的密码目标设为 100 比特以上 (全字符种类 16 个字符以上)
  4. 密码管理器的主密码强化到 128 比特以上 (全字符种类 20 个字符以上)

常见问题

什么是密码熵?
熵是以比特为单位衡量密码不可预测性的指标。它根据字符集和长度计算,值越大,密码对暴力破解的抵抗力越强。
高熵密码一定安全吗?
即使理论熵值很高,字典单词的组合或已知泄露的密码可能在攻击者的列表中。只有随机生成的密码才能达到熵值所暗示的实际强度。
安全密码需要多少比特的熵?
一般在线账户建议至少 60 比特,重要账户建议 80 比特以上。包含大小写字母、数字和符号的 16 位以上随机密码可提供约 100 比特的熵。

这篇文章对您有帮助吗?

相关术语

XHatena