正在加载文章...
分享这篇文章
继续阅读
很多泄露密码库里,123456、password、qwerty 这类密码长期排在前面。用户知道应该设置强密码,但经常把“看起来复杂”误认为“难以破解”。
问题通常不在于是否加了一个 !,而在于攻击者需要尝试多少种可能。衡量这个数量的概念叫信息熵。
在信息论里,熵衡量不可预测程度。放到密码上,熵越高,攻击者暴力猜测时需要尝试的组合越多。
常用估算公式是:熵值 (bit) = log₂(Nˢ)
其中:
影响密码强度的主要因素就是字符池和长度。长度增加会指数级扩大搜索空间,所以长密码通常比短而花哨的密码更可靠。
假设攻击者可以每秒尝试 10 亿次猜测。这个速度适用于部分离线场景,比如泄露哈希使用了较快的旧算法。实际破解成本还会受哈希算法、盐值、硬件和限流策略影响。
| 密码示例 | 字符池 (N) | 长度 (s) | 熵值 | 估算破解时间 |
|---|---|---|---|---|
abc123 | 36 | 6 | ~31 比特 | 很短 |
P@ssw0rd | 95 | 8 | ~52 比特 | ~1 小时 |
Tr0ub4dor&3 | 95 | 11 | ~72 比特 | ~4,000 年 |
correct horse battery staple | 27 | 28 | ~133 比特 | 远超现实攻击成本 |
correct horse battery staple 来自 XKCD 的经典例子。它比 Tr0ub4dor&3 更强,不是因为符号更多,而是因为长度更长、搜索空间更大。
很多组织仍在使用过时规则。这些规则看起来严格,但会诱导用户形成可预测模式。
password 改成 Password1!,攻击者也会优先尝试这类变体。Spring2026! 改成 Summer2026!,轮换反而制造规律。NIST SP 800-63B 建议提高密码长度上限,允许长口令,避免无理由的定期强制更换,并对已泄露密码做拦截。
更好的策略是减少复用、提高长度,并加入第二个验证因素。
XKCD 的思路仍然好用:从词表里随机选择 4 到 6 个常见词,再用分隔符连接。
surface-tractor-battery-window。它比短密码更容易记,也更适合手动输入。如果不需要手动记忆,直接让密码管理器生成 20 位以上的随机混合字符密码。
密码强度取决于攻击者要尝试多少组合。P@ssword123 不安全,因为它短、常见、可预测。更稳妥的做法是使用长随机密码或长口令,每个服务单独生成,并开启 MFA。