用了 4 天多,终于破解了 Unix 之父的密码
收藏

(给程序员的那些事加星标

综合整理:程序员的那些事(id:iProgrammer)

这几天,国外技术社区在热议一件事:Unix 之父 Ken Thompson 的一个旧密码被破解了。



这究竟是怎么一回事呢?

2014 年,有个德国程序员 Leah Neukirchen 在 BSD 3 的源代码树中发现了一个 /etc/passwd 文件,其中包括了不少 Unix 骨灰级用户(大佬)的密码,包括:如丹尼斯·里奇(Dennis Ritchie C 语言之父)、肯·汤普森(Ken Thompson,Unix 之父)、布莱恩·克尼汉(Brian W. Kernighan,那本超级经典的 《C 程序设计语言》是他和丹尼斯·里奇合著的)、史蒂夫·伯恩(Steve Bourne,sh 的创建者)和比尔·乔伊(Bill Joy,Vi 和 BSD 的创建者)。

发现的那些密码当然不是明文,而是用基于 DES 的 crypt(3) 算法加密后的密文。因为 crypt(3)  是一种弱加密算法,Leah 说密码最多只有 8 位,所以他就想着破解玩玩。

破解工具是用了业界知名的 hashcat 和 john。


很快,Leah 破解了大多数的密码,发现不少还是弱密码。

不过,Ken Thompson 的密文(ZghOT0eRm4U9s)他没能破解。在 2014 年的时候,即便是对所有小写字母和数字进行彻底的搜索,也是要花费好几天的时间。

由于 crypt(3)  算法是由 Ken 和 Morris 开发的,Leah 超级想知道密码是什么。他还意识到,与其他密码散列方案(如 NTLM) 相比,crypt(3) 的破解速度要慢得多,而且优化程度可能也更低。

Ken 的密码中是不是用了大写字母和特殊字符?(在现代 GPU 上,穷举搜索一个 7 位的密码,Leah 说要 2 年以上的时间。)

10 月初,这个话题再次出现在一个 Unix 的邮件列表中。Lean 分享了他的进展和结果(拿 Ken 的密码没办法)。

就在 10 日,另外一个程序员 Nigel Williams 把 Ken 的密码给破了。


ZghOT0eRm4U9s : p/q2-q4!



Williams 也是用了 hashcat 这个工具,在 AMD Radeon Vega64 上运行了 4 天多,才破解了。


Ken 的密码有什么特殊之处?


在 Ken 的密码( p/q2-q4! )中,p 代表 Pawn(卒/兵),密码表示国际象棋中的一步走棋(见下图),这步棋被称为 Queen's Pawn Opening,是常见的开局走棋。


此外,感叹号 !在记谱法表示这是一步好棋。(感谢「渐陵」补充)




( p/q2-q4 )采用的记谱法,就是国际象棋的描述性记谱法,不过该记谱法 1981 年被弃用了。

他这个密码,反映出另外一件事:Ken 是一个国际象棋爱好者,他曾经是 1980 年第 3 届全球计算机国际象棋锦标赛的冠军。

Ken 也在那个 Unix 邮件列表中,针对密码被破解,他的回应很简单:congrats (恭喜答对了!)



下面是 1983 年 Ken 参加第 4 届全球计算机国际象棋锦标赛的留影。



那些有名的高强度密码


像 p/q2-q4! 这样的强密码,位数还只是 8,如果位数再多几位的强密码,一般都是


2011 年左右,国内某程序员社区平台出现脱库,暴露了很多程序员常用密码。比如:

ppnn13%dkstFeb.1st 这样的令人惊叹的密码,如果不是密码主人来解释,估计没人能猜到是出自一句唐诗吧。



如何使用强密码,这些被破解的密码,给了大家一个思路。你们学会了嘛?



推荐阅读

(点击标题可跳转阅读)

为什么很多人用 ji32k7au4a83 做密码?
表白后,女生发给我一串五层加密的密码



关注「程序员的那些事」加星标,不错过圈内事

圈内事,我在看❤️