熵
本文约需 2 分钟阅读
熵是信息论中衡量不确定性的尺度,在密码的语境中,它是以比特数表示密码预测难度的指标。熵值越大,意味着密码越难被猜出。密码的熵由所用字符种类数和字符长度计算得出,可以定量评估其对暴力破解攻击的抵抗能力。
计算方法与具体数值示例
密码的熵以「 log2 (字符种类数) x 字符长度」计算得出。下面列出几种代表性配置的熵。
- 仅小写字母 (26 种) x 8 个字符 = 约 37.6 比特
- 大小写字母 + 数字 (62 种) x 10 个字符 = 约 59.5 比特
- 大小写字母 + 数字 + 符号 (95 种) x 12 个字符 = 约 78.8 比特
- 大小写字母 + 数字 + 符号 (95 种) x 16 个字符 = 约 105 比特
- 大小写字母 + 数字 + 符号 (95 种) x 20 个字符 = 约 131 比特
密码工具中的强度计,有些也会把这种熵的思路作为参考 (也有通过模式匹配来估算猜测次数的方式,算法因工具而异)。比特数每增加 10,需要穷举搜索的组合数便约增至 1,024 倍。增加字符长度和字符种类都会提高熵:在 95 种字符的配置下,每多一个字符约增加 6.6 比特,而将字符种类从 62 种扩展到 95 种则每个字符约增加 0.6 比特。不过,可用字符种类的数量存在上限 (可打印的 ASCII 约 95 种),而字符长度在原理上没有上限,因此更有增长空间的是字符长度这一侧。
在策略设计中的定位
在组织的密码策略中,有时会先规定字符长度下限,再拒绝字典收录的单词或出现在以往泄露列表中的字符串。 NIST SP 800-63B 指出,估算用户自行设定的密码的熵十分困难,因此改为提出主要以字符长度为依据的方法。该文件要求记忆型秘密信息 (密码) 的长度不少于 8 个字符,同时不再施加混用字符种类等额外的复杂度要求,并要求将用户选择的密码与包含以往泄露数据和字典词汇的拒绝列表进行比对。
实务中的运用与陷阱
熵是衡量密码强度的理论指标,但在实务中有需要注意之处。熵的计算以「完全随机生成」为前提,而人为想出的密码对字典攻击和模式分析较为脆弱,因此其实际强度低于计算上的熵。例如「 P@ssw0rd123!」字符种类丰富,计算上的熵看似很高,但由于是广为人知的模式,会被字典攻击瞬间攻破。此外,即使比特数相同,穷举所需的时间也并不一致。它会随攻击者可调动的计算资源,以及服务端所采用的哈希函数和迭代次数 (拉伸) 而相差数个数量级,因此仅凭比特数无法断定所需时间。使用密码学安全的随机数生成器,便能生成计算上的熵与实际强度一致的、真正随机的密码。
这篇文章对您有帮助吗?