让你密码必须加 !@#$ 的那个人,后来道歉了

封面

你肯定经历过这种事。

注册一个账号,输入密码,系统弹出一行红字,「密码必须包含大写字母、数字和特殊字符」。

你咬咬牙改成 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 年,折磨了几十亿人,最后被它的作者亲手否定。

但你今天注册一个账号的时候,大概率还是会看到那行红字。

「密码必须包含大写字母、数字和特殊字符。」

规则的制定者已经道歉了。

但规则还在跑。

署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
位旅人路过 次翻阅 初次见面