
你肯定经历过这种事。
注册一个账号,输入密码,系统弹出一行红字,「密码必须包含大写字母、数字和特殊字符」。
你咬咬牙改成 Zhangsan123!,过了。
三个月后系统又来,「您的密码已过期,请修改,且不能与前三次密码相同」。
你把感叹号改成井号,Zhangsan123#,又过了。
这套流程你已经走了十几年。你以为这是某种严谨的密码学原理。
不是的。
它来自一个人,一份 8 页的文件,和一篇他自己都没验证过的 1980 年代论文。
2003 年,一个叫 Bill Burr 的人在美国国家标准与技术研究院(NIST)写了一份密码安全指南,编号 SP 800-63B,附录 A。

这份文件只有 8 页。
它规定了三件事。密码必须混合大小写字母、数字和特殊字符。密码必须每 90 天更换一次。密码不能和之前用过的一样。
Bill Burr 当时不是什么顶级密码学家。他是 NIST 的一个中层管理者,接到了这个任务,想找点数据支撑,但 2003 年几乎没有大规模的密码泄露数据可以研究。
他能找到的最有参考价值的文献,是一篇 1980 年代的白皮书。
那时候互联网还不存在。
但他还是用了。
然后这 8 页纸变成了全球标准。
银行用它,学校用它,公司用它,每一个网站的注册页面都在用它。你注册任何一个账号时看到的那行「密码强度要求」,大概率都可以追溯到这 8 页纸。
一个人,一份文件,改变了全世界几十亿人输入密码的方式。
但问题来了,这套规则真的管用吗?
如果你用密码管理器,让它随机生成一串 K7$mQ2!xR9pL,那这套规则完全没毛病,暴力破解要算到太阳熄灭。
但你不会那么做。几十亿人也不会。
你回想一下自己的密码。大概率是一个单词或者拼音,首字母大写,后面跟几个数字,末尾加个感叹号。
Password1!
Summer2024!
Zhangsan123#
你不是一个人。几十亿人都在这么干。
密码学家后来拿到了真实的泄露数据库,比如 LinkedIn 那次几亿条密码泄露,发现了一个尴尬的事实。人类在「满足复杂度要求」这件事上,套路惊人地一致。
大写字母?放第一个。
数字?放末尾。
特殊字符?感叹号,永远是感叹号。
破解工具早就把这些模式写进了字典。你以为的「强密码」,在暴力破解面前可能几秒就倒了。

2011 年,xkcd 的作者 Randall Munroe 画了一幅后来被引用了无数次的密码漫画。
他对比了两种密码。
第一种,Tr0ub4dor&3。大小写混合,数字替换字母,还有特殊字符,完美符合 NIST 的要求。信息熵大约 28 比特。
第二种,correct horse battery staple。四个随机的普通英文单词拼一起,没有大写,没有数字,没有特殊字符。信息熵大约 44 比特。
第二种比第一种强几万倍。但你猜哪种更好记?
Munroe 在漫画下面写了一句话,大意是,「我们花了 20 年,成功训练了所有人使用人类记不住、但电脑很好猜的密码」。

2017 年,Bill Burr 72 岁,已经退休。
华尔街日报找到他做了一次采访。
他说了一句,「Much of what I did, I now regret.」
我做的那些事,很多我现在都后悔了。
同年,NIST 正式修改了密码指南。取消了特殊字符的强制要求,取消了 90 天强制更换的规定,转而推荐用长的、容易记住的短语作为密码。
一个基于 1980 年代论文拍脑袋写出来的规则,全球执行了 14 年,折磨了几十亿人,最后被它的作者亲手否定。
但你今天注册一个账号的时候,大概率还是会看到那行红字。
「密码必须包含大写字母、数字和特殊字符。」
规则的制定者已经道歉了。
但规则还在跑。