NIST新出的密码指南,颠覆了业界

2025年8月,NIST出了一份指南文档,其中关于密码复杂度的部分,会颠覆业界现有的实现,与大众的普遍认知也完全不同。

NIST的密码指南

原文在这里:https://pages.nist.gov/800-63-4/sp800-63b.html

简单翻译一下关键的两点:

  • 密码至少15个字符
  • 不应该强制在密码中设置不同的字符类型,比如大小写,特殊字符的要求。

也就是说:新的密码标准,不再强调强制性的多类型字符的组合,而是更看重密码的长度。

为什么修改

在早期(2003年)的版本中,NIST给出的密码建议是:“包含大小写字符,特殊字符,至少一个数字”。就像这样:“P@ssW0rd123!”。这份密码指南,极大地影响了当今互联网世界。

随处可见的密码强度要求

2003年的指南中的“复杂性”规则背后的逻辑是:如果密码字符集更大(比如包括大写、数字、符号),那么穷举猜测攻击者面对的可能组合数就更多,从数学上安全性更高。

但是,这样的密码最大的问题是,增加了记忆的难度。
实际上,一个长密码:”i-live-in-new-york-city” 远比一个包含特殊字符的短密码:”ILive@NewYork1”更安全。也更容易记忆。
这就是做出NIST对密码指南做出修订的原因。

原作者的反思

https://www.theverge.com/2017/8/7/16107966/password-tips-bill-burr-regrets-advice-nits-cybersecurity

NIST那份早期的密码指南的作者Bill Burr在接受华尔街日报采访时坦承,他对此感到抱歉,他认识到这些规则不仅使密码变得难以记忆,而且对提升密码的安全性提升有限。

数学上的推理

以下从数学上推理密码长度和字符集大小与密码安全性的关系。
密码的安全性(熵值 H)可以由以下公式来衡量

$$H=L×log_2⁡(C)$$

$L$是密码的长度。$C$是密码使用的字符集大小,即可能字符的总数。$H$是熵值,以比特为单位。

字符类型 字符集大小 (C) 字符示例
仅小写字母 26 a-z
小写 + 大写 52 a-z, A-Z
小写 + 大写 + 数字 62 a-z, A-Z, 0-9
小写 + 大写 + 数字 + 特殊符号 ~94 a-z, A-Z, 0-9, !@#$%…

例 A — 短密码 8 字符,使用 94 字符集(含大小写、数字、符号):

  • $熵=8×log_2(94)≈52.4368 bits$
  • $可能搜索空间≈2^52.4367≈6.0957×10^{15}种可能$

例 B — 长密码 12 字符,但只用小写字母(26):

  • $熵=12×log_2(26)≈56.4053 bits$
  • $可能搜索空间≈2^56.4053≈9.543×10^{16}种可能$

12个小写字符的密码,比8个含特殊字符的密码难猜约15.7倍。

小结

当前主流的密码要求,是违反人性的。希望更多的厂商能够进行修正。在安全性和便利性上做出权衡。