首页 精通密码学的人是怎么设置密码的?

说个故事!

去年10月份的时候,程序员圈子传出了一个不大不小的消息: 一个德国慕尼黑的妹子尝试破解39年前的密码,破解了5年,大部分密码都被她破解了。但有5个密码她破解不了,于是在论坛里求助。

5天后一个自称Nigel Williams的论坛成员破解了密码,并通过邮件公开了密码的内容!

——这就是计算界著名的“Ken Thompson密码破解事件”!

我g了下,那名德国妹子 Leah Neukirchen 的文章,原文如下:

Leah Neukirchen公开的邮件内容Leah Neukirchen公开的邮件内容

意思呢就是说,2014 年的时候,她在Unix早期的版本——BSD的源码里,找到了一个 /etc/passwd 文件。里面包含了计算机领域中一些传奇工程师的旧密码,比如Ken Thompson、Dennis Ritchie、Brian Kernighan、Steve Bourne 和 Bill Joy 等 Unix 开发的大师(这些人有多牛,底部看介绍)。

Ken ThompsonKen Thompson

出于兴趣,Leah 就开始暴力破解这些人的密码 (因为源码来自Unix早期开源的版本,所以破解他们的密码不会涉及法律问题)。

5年之后的2019年,成千上万个密码都被Leah破解了,但仍然有五个纯文本的密码无法破解,于是就发生了开头所说的“Ken Thompson密码破解事件”。

这里我们话分两头,各表一支。

成功破解的密码

大多数情况下,Leah能够成功是因为用户的密码容易猜到。

被破解的密码被破解的密码

比如,Dennis Ritchie使用了“dmac”作为密码(他的中间名是MacAlistair);

Stephen Bourne的密码是“Bourne”;

Eric Schmidt(Unix软件的早期开发者,现在是谷歌母公司Alphabet的执行董事长) 的密码是妻子的名字“wendy!!!”;

Unix自动化工具make的作者、同时也是第一个Fortran编译器的作者Stuart Feldman,他使用的密码是“ axolotl ” ( 一种墨西哥蝾螈的名字 ) 。

其中最弱的可能是 Unix 贡献者Brian W. Kernighan的密码了,使用的竟然是字符:“/.,/.,”,重复敲两次键盘上的相邻键便可以设置。

以上的密码跟家庭成员、姓名或者一些小动物的名称有关,很容易被猜到。当然如果她破解的是咱们身边朋友的密码,那就更轻松了,毕竟每个国内的朋友都设置过——至少一个以出生年月日组成的密码吧[¿]。

Leah无法破解的密码

Leah无法破解的5个密码中,包括土耳其计算机科学家Ozalp Babao lu, Unix 软件开发人员Howard Katseff,Unix 的重要贡献者Tom London 和 Bob Fabry。

而令Leah最费解、花的时间最长的是Unix之父,Ken Thompson使用的密码,5年下来一点头绪都没有。

她在Unix Heritage Society的邮件列表中,沮丧地表示:“我一直没有办法用散列ZghOT0eRm4U9s破解Ken的密码,我列举了所有8个小写字母+数字的组合,仍然无法破解。希望大家给我点提示,任何帮助都行。”

仅仅5天后,Leah就收到了名为Williams的哥们的回信。

这哥们花了4天以上的时间,用AMD Radeon Vega64以大约 930MH /s 的速度运行Hashcat(一个密码破解程序),利用了强大的显卡并行计算能力之后才破解了Ken的密码。

要知道Ken这个密码可是在1980年代设置的,现在都9102年了,用这么现代的计算机才破解了古老的密码,这很汤普森啊。

他的密码加密后的字符串是: ZghOT0eRm4U9s,解密后得到的明文是:p/q2-q4!

Leah得到的论坛帮助Leah得到的论坛帮助

在 Williams 发出信息几小时后,论坛成员Arthur Krewat公布了其余四个未破解的哈希密码。他们的花名及密码是:

Katseff: graduat;

Babaoğlu: 12ucdort

Fabry: 561cml..

London:..pnn521

最难破解的密码有什么含义

“p/q2-q4!”这串字符有什么含义呢?Ken设置完了之后,会不会也忘了它有什么含义,或者干脆就忘了这个密码呢?

论坛的朋友们很快发现,Ken的密码“p/q2-q4!”是国际象棋中一种常见的开局走法。

Ken密码代表的国际象棋走法Ken密码代表的国际象棋走法

意思是 “皇后前面的兵 (Pawn) 向前移动 2 个方格”。q 代表 Queen,p 代表 Pawn,这种走棋记法是国际象棋中的一种代数记谱法,就打咱们中国象棋的兵三进一,车六进四是一个意思。最后的符号感叹号!在记谱法里是一种注释,表示“好棋”。

“不得了不得了,用象棋的走位做密码!” 只能说这个密码很汤普森~因为 Thompson 是一名国际象棋迷,他开发过的一款名为 “Belle” 的国际象棋软件,曾获得1980 年第 3 届全球计算机国际象棋锦标赛的冠军。

那么这个破解出来的密文对不对呢?汤普森通过邮件得知这件事后,对 Williams 表示了赞赏,回复道:“恭喜!”

Ken回复对密码是否正确的质疑Ken回复对密码是否正确的质疑

============故事完=============

计算机相关的内容,还可以看我的这篇回答:Windows 为什么不开源?

到这里故事就讲完了,然后说说怎样设置密码安全的问题!

看了上面的故事,你大概就知道了简单的密码一般都是跟个人信息有关的,比如生日啊,家庭成员的名字。

而复杂的密码是特殊符号和字符的组合,这个组合代表什么信息呢?这个你就可以自由发挥了,用象棋的走法可以,用其他的规律也行。

为什么要用规律?就怕你忘记了的时候,好用规律找回来,随机数生成密码就存在忘记的风险。毕竟现在的人哪,一个是健忘,另外几十个随机的密码,谁招架得住啊??!

好在现在不仅加密算法有了大的进步,还有其他的辅助加密的措施啊,比如Ukey,手机号验证码等。

虽然也不能保证100%安全,但是为了几十块钱破解个四五年的时间,这种事也只有外国人做得出来。再说了四五年时间后,你估计都换密码啦!

==========登陆知乎日报==========

今早起床就收到了知乎日报的推荐, (๑>◡<๑) 鸡冻死啦!

这是我第一次获得知乎日报的推荐,感谢老铁们的点赞关注转发。

为了感谢老铁们的支持,在这里统一对评论区讨论最多的问题进行下筛选和回复,再次感谢知友们的支持,让点赞来得更猛烈一些吧!!!

1. 有好多人问为什么遍历了数字+小写字母的组合之后,密码仍然没有破解?

细心的知友应该会注意到Leah的求助邮件里包含了很多值得一说的细节,比如她所破解的密码是通过DES算法加密的,她只是尝试了所有了数字+小写字母的组合,然后她开始怀疑包含密码的文件里面可以获取的哈希字符串,是不是经过了Ken Thompson等人的特殊处理。

有了这些疑问之后,Leah表现得比较悲观[邮件里Leah本人也有提到]。显然她都不清楚自己是否还有必要进行下去,或者接下来破解密码的重心应该放在哪里,才在论坛里发了求助信,这是外围的信息。

内部的信息则是如果考虑数字+小写字母+大写字母+特殊符号的组合,那么这个问题对于Leah来说就变得不可解了,原因后面会详细解释。

要知道虽然只是加了大写字母和特殊符号,但是计算量确实呈几何指数增长的,再者特殊符号那么多,根本不清楚作者本人会使用哪些符号,这是个费时又费力的工作!

2. 杠精们会说也就那么几个字符的组合(8位),为什么难以破解?干不就完了吗?

那我只能说他们还是too young too simple!我摘录百度百科里的的解释,大家感受下。

DES算法具有极高安全性,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为2^56,这意味着如果一台计算机的速度是每一秒钟检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间。 可见,这是难以实现的。然而,这并不等于说DES是不可破解的。而实际上,随着硬件技术和Internet的发展,其破解的可能性越来越大,而且,所需要的时间越来越少。 使用经过特殊设计的硬件并行处理要几个小时。译者注: 这里56的穷举空间只是包含26个小写字母+26个大写字母,和10位数字。如果包含特殊字符,常见-的特殊字符少说也得有10个,那么这个穷举空间可能是2^66了,早已超出了人类可以操控的范围。

很多人可能不了解2285年是什么概念?我只想说那就是天荒地老,那就是天长地久,那就是天上人间。

我百度了下,从今年(2020)往前推2285年,正好是春秋战国时期,那一年欧几里得死了,那一年秦王嬴政他干爹吕不韦都还在赵国做生意呢!

而且那时候你还得有台可以跑得起来的计算机才行,跑到现在才有可能把所有的密码组合验证完,如果验证的结果是最后一个组合才是答案,那么到你坟前祭奠的人估计都换了几十茬了。

3. 不说破解很复杂吗?时间得上千年,怎么Williams小哥哥几天(5天)就给搞出来了呢?

这就充分体现了一台好设备,一个好工具的重要性了!我只能说AMD Yes!

AMD Radeon Vega64这款显卡的性能毋庸置疑,你值得拥有!Williams特别强调了这款显卡是针对哈希计算进行过优化的,估计用来挖矿还不错 [:逃]

4. 对于像我这样的手残党来说,破解的时间可能不只2285年这么短把?少说也得有∞年。

这个新答案讲的是贡献堪比钱学森,但是鲜为人知的“雷人徒手送镭”的故事!

本人注:

  1. Ken Thompson: 40后骨灰级程序员,设计和实现了Unix操作系统,被誉为Unix之父。创造了B语言——C语言的前身,同时也是 Plan 9操作系统的创造者和开发者之一(这个不知道没关系)。Ken老爷这几年也没闲着,自从他进入Google公司之后,就鼓捣了个小玩意——Go语言。
  2. Dennis Ritchie: C语言的创造者,参与开发了Unix操作系统,1983年和Ken一起获得了图灵奖。
  3. Brian Kernighan: 参与了Unix的研发,也是AMPL与AWK的共同创造者之一。与Dennis Ritchie共同写了本书《C程序设计语言》——也是介绍C语言的第一本书。
  4. Steve Bourne: 参与开发了Unix操作系统,设计并实现了Unix早期版本中的 Bourne shell ,adb除错器,2000-2002年担任ACM计算机协会主席。
  5. Bill Joy: 是BSD操作系统的主要设计者,曾创作了包括Unix系统中的文本编辑器vi、C Shell等软件,后来创办了Sun公司,就是开发了Java那个公司。