新智元报道
来源:arstechnica
编辑:肖琴
最近,一则消息在程序员圈引起热议:Unix 之父 Ken Thompson 的旧密码被破解了!
发布这个消息的是德国慕尼黑的一名程序员 Leah Neukirchen,她在博客中称,她花了四年多破解不出的Ken Thompson的密码,就在本月初被Nigel Williams破解了。
这一消息立刻引起了技术论坛的狂欢和好奇。
这是什么情况呢?早在 2014 年时,Leah 在 BSD 3 源码树的文件转储中发现了一个 /etc/passwd 文件,其中包含了计算机领域中一些传奇工程师的旧密码,包括 Dennis Ritchie、Ken Thompson、Brian Kernighan、Steve Bourne 和 Bill Joy 等开发 Unix 的大师。
Leah 对他们使用的密码非常感兴趣,决定尝试破解这些密码。她成功破解了大部分密码,但有5个苦苦研究也无法破解,其中最令她头疼的便是Ken Thompson的密码。
计算机大师使用的密码意外的脆弱?
作为Unix的原始版本之一,BSD是一个古老的操作系统。因此,以今天的标准来衡量,它使用的安全措施堪称奇怪甚至荒谬,这不足为奇。
首先,保护密码的哈希函数虽然在40年前是最先进的技术,但现在要破解它并不难。更奇怪的是,一些BSD创建者的密码散列包含在公开的源代码中。
上周,Leah 报告说找到了大约1980年BSD 3的源码树,并成功地破解了许多早期计算机先驱的密码。
被破解的部分哈希码和密码的组合包括:
gfVwhuAMF0Trw:dmac
Pb1AmSpsVPG0Y:uio
ymVglQZjbWYDE:/.,/.,
c8UdIntIZCUIA:bourne
AAZk9Aj5/Ue0E:foobar
E9i8fWghn1p/I:apr1744
IIVxQSvq1V9R2:axolotl
9EZLtSYjeEABE:network
P0CHBwE/mB51k:whatnot
Nc3IkFJyW2u7E:...hello
olqH1vDqH38aw:sacristy
9ULn5cWTc0b9E:sherril.
N33.MCNcTh5Qw:uucpuucp
FH83PFo4z55cU:wendy!!!
OVCPatZ8RFmFY:cowperso
X.ZNnZrciWauE:5%ghj
IL2bmGECQJgbk:pdq;dq
4BkcEieEtjWXI:jilland1
8PYh/dUBQT9Ss:theik!!!
lj1vXnxTAPnDc:sn74193n
大多数情况下,她成功是由于用户的密码容易猜到。
比如,BSD的共同发明着Dennis Ritchie使用了“dmac”作为密码(他的中间名是MacAlistair);Stephen R. Bourne是Bourne shell命令行解释器的创建者,他的密码是“Bourne”;Eric Schmidt是Unix软件的早期开发者,现在是谷歌母公司Alphabet的执行董事长,他的密码是妻子的名字“wendy!!!”;Unix自动化工具make的作者、同时也是第一个Fortran编译器的作者Stuart Feldman,他使用的密码是“axolotl”(一种墨西哥蝾螈的名字)。
其中最弱的是Unix贡献者Brian W. Kernighan的密码:“/.,/.,”,表示一个三个字符的字符串,重复敲两次QWERTY键盘上的相邻键得到。
但是,至少有五个纯文本密码仍然无法破解。包括土耳其计算机科学家Ozalp Babaoğlu, Unix 软件开发人员Howard Katseff,Unix 的重要贡献者 Tom London 和 Bob Fabry。但是,令Leah最费解、花了最长时间的是Unix之父Ken Thompson使用的密码。
Leah对无法破解Ken的密码感到沮丧,她在Unix Heritage Society的邮件列表中表示:“我一直没有办法用散列ZghOT0eRm4U9s破解Ken的密码,我列举了所有8个小写字母+特殊符号键空间。任何帮助都行,欢迎大家给我指点。”
为什么Ken的密码如此难以破解?
结果我们已经知道,但我们将在稍后公布。这里我们首先讨论Descrypt,这是BSD 3操作系统的默认哈希算法。
Descrypt在1979年首次亮相时,代表了密码函数的最前沿。其中最主要的改进是:它是第一个使用加密salt的哈希函数——随机选择一个附加到密码中的文本字符串,旨在防止相同的纯文本输入具有相同的哈希字符串。它也是第一个将纯文本输入置于多个哈希迭代的算法。经过25次迭代,这个所谓的密钥拉伸过程显著增加了攻击者破解哈希所需的时间和计算量。
然而,随着破解工具变得越来越强大,Descrypt在20多年前就被弃用了,更好的函数应运而生。以今天的标准来看,Descrypt远远不够强大(尽管有时仍被使用,但使用它对最终用户的损害很大)。
Descrypt将密码限制在8个字符以内,这一限制使得最终用户几乎不可能选择真正强大的安全凭证。Descrypt使用的salt只提供了12位的熵,相当于两个可打印字符。这个小小的salt空间使得大型数据库可能包含数千个哈希字符串,攻击者可以同时破解它们,因为哈希字符串使用相同的salt。
这些弱点意味着,Neukirchen发布的其余未破解哈希将不可避免地会被破解。但由于大多数论坛成员都不是经验丰富的黑客,他们似乎都使用了效率较低的技术。
周三,也就是Neukirchen发布求助的第六天,论坛成员Nigel Williams破解出Thompson的明文密码:p/q2-q4!。
Unix 之父的绝妙密码:国际象棋开局记号
Williams说,他“花了4天以上的时间,用AMD Radeon Vega64以大约 930MH /s 的速度运行hashcat。” Hashcat是一个密码破解程序,利用了显卡强大的并行计算能力。
在Williams发出信息几小时后,论坛成员Arthur Krewat公布了其余四个未破解的哈希密码。他们是:
Katseff: graduat;
Babaoğlu: 12ucdort
Fabry: 561cml..
London:..pnn521
他们很快发现,汤普森的密码“p/q2-q4!”是国际象棋中一种常见的开局走法的符号。
乍一看,p/q2-q4!像是一个数学公式,而实际上是一种古老的符号,代表国际象棋中棋子的走位,意思是 “皇后前面的兵 (Pawn) 向前移动 2 个方格”。q 代表 Queen,p 代表 Pawn,这种走棋记法属于国际象棋的代数记谱法。
p/q2-q4!——皇后前面的兵从第2行走到第4行。!是国际象棋注释符号,表示“好棋”。
这很汤普森~因为汤普森是一名国际象棋迷,他曾是 1980 年第 3 届全球计算机国际象棋锦标赛的冠军,还开发一个专用于下国际象棋的计算机程序 “Belle”。
密码被破解,当事人怎么说呢?汤普森通过邮件得知这件事后,对 Williams 表示了赞赏,回复道:“恭喜!”
Unix之父的传奇人生
肯·汤普森(Ken Thompson)是硅谷传奇的计算机科学家和工程师,黑客文化圈子通常称他为 “ken”。
Ken Thompson
1960 年,汤普森就读加州大学伯克利分校,主修电气工程,1966 年获取了电子工程硕士学位。他的导师是美国数学家、计算机科学家埃尔温·伯利坎普。
1966 年, 汤普森加入贝尔实验室。在贝尔实验室工作期间,汤普森在参与 Multics 操作系统项目的过程中开发了一款游戏 ——《星际旅行》。这是一款飞行模拟游戏。玩家需要控制太空飞船在黑色背景和白色线条组成的太阳系中飞行,并在不同行星和卫星之间着陆,没有特定的目标。
Space Travel游戏
后来贝尔实验室撤出了 Multics 项目。为了能够继续玩游戏,汤普森只好找到一台老式 PDP-7 机器,重写了游戏代码。但他发现游戏在新机器下运行很慢,于是又吸取了丹尼斯·里奇 (Dennis Ritchie) 和 Rudd Cassaway 在开发 Multics 文件系统时的经验,在他们工作的基础上设计了自己的文件系统。后经扩展,形成了一个完备的操作系统,在公司内部广泛传播,并于 1970 年被命名为 Unix。
在完成 Unix 系统开发的基本工作之后,汤普森觉得 Unix 系统需要一个系统级的编程语言,于是创造了 B 语言。后来里奇在 B 语言的基础上创造了 C 语言。
在 60 年代, 汤普森还参与了正则表达式的设计,开发了 QED的兼容分时系统版本,并在其中引入正则表达式支持。QED 和后来由汤普森编写的 ed 编辑器对正则表达式的流行做出了重要贡献。现在,几乎所有使用正则表达式的程序都用到了某种来自汤普森的记号的变体。
汤普森还是一名国际象棋爱好者,他曾制造过专门用于下国际象棋的计算机程序 “Belle”,并创建了残局数据库。
2000 年下半年,汤普森离开贝尔实验室,进入美国的 Entrisphere 公司工作。2006 年加入 Google 公司。之后他与 Rob Pike 和Robert Griesemer二人共同设计了 Go 语言。出于对 C++ 的厌恶,三个人共同讨论了语言的每一项特性,所以 Go 语言最终没有任何 “无用的垃圾”。
汤普森和丹尼斯·里奇同为 1983 年图灵奖得主。
参考链接:
https://arstechnica.com/information-technology/2019/10/forum-cracks-the-vintage-passwords-of-ken-thompson-and-other-unix-pioneers
https://zh.wikipedia.org/wiki/肯·汤普逊