能子,想法就是用来实现的! 阅读原文 说个故事! 去年 10 月份的时候,程序员圈子传出了一个不大不小的消息: 一个德国慕尼黑的妹子尝试破解 39 年前的密码,破解了 5 年,大部分密码都被她破解了。但有 5 个密码她破解不了,于是在论坛里求助。 5 天后一个自称 Nigel Williams 的论坛成员破解了密码,并通过邮件公开了密码的内容! ——这就是计算界著名的“Ken Thompson 密码破解事件”。 我 g 了下,那名德国妹子 Leah Neukirchen 的文章,原文如下: 意思呢就是说,2014 年的时候,她在 Unix 早期的版本——BSD 的源码里,找到了一个 /etc/passwd 文件。里面包含了计算机领域中一些传奇工程师的旧密码,比如 Ken Thompson、Dennis Ritchie、Brian Kernighan、Steve Bourne 和 Bill Joy 等 Unix 开发的大师(这些人有多牛,底部看介绍)。 Ken 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! 在 Williams 发出信息几小时后,论坛成员 Arthur Krewat 公布了其余四个未破解的哈希密码。他们的花名及密码是: Katseff: graduat; Babaoğlu: 12ucdort Fabry: 561cml.. London:..pnn521 最难破解的密码有什么含义 “p/q2-q4!”这串字符有什么含义呢?Ken 设置完了之后,会不会也忘了它有什么含义,或者干脆就忘了这个密码呢? 论坛的朋友们很快发现,Ken 的密码“p/q2-q4!”是国际象棋中一种常见的开局走法。 意思是 “皇后前面的兵 (Pawn) 向前移动 2 个方格”。q 代表 Queen,p 代表 Pawn,这种走棋记法是国际象棋中的一种代数记谱法,就打咱们中国象棋的兵三进一,车六进四是一个意思。最后的符号感叹号!在记谱法里是一种注释,表示“好棋”。 “不得了不得了,用象棋的走位做密码!” 只能说这个密码很汤普森~因为 Thompson 是一名国际象棋迷,他开发过的一款名为 “Belle” 的国际象棋软件,曾获得 1980 年第 3 届全球计算机国际象棋锦标赛的冠军。 那么这个破解出来的密文对不对呢?汤普森通过邮件得知这件事后,对 Williams 表示了赞赏,回复道:“恭喜!” ============故事完============= 到这里故事就讲完了,然后说说怎样设置密码安全的问题! 看了上面的故事,你大概就知道了简单的密码一般都是跟个人信息有关的,比如生日啊,家庭成员的名字。而复杂的密码是特殊符号和字符的组合,这个组合代表什么信息呢?这个你就可以自由发挥了,用象棋的走法可以,用其他的规律也行。 为什么要用规律?就怕你忘记了的时候,好用规律找回来,随机数生成密码就存在忘记的风险,毕竟现在的人哪,一个是健忘,另外几十个随机的密码,谁招架得住啊??! 好在现在不仅加密算法有了大的进步,还有其他的辅助加密的措施啊,比如 Ukey,手机号验证码等,虽然也不能保证 100% 安全,但是为了几十块钱破解个四五年的时间,这种事也只有外国人做得出来,再说了四五年时间后,你估计都换密码啦! Ken Thompson: 40 后骨灰级程序员,设计和实现了 Unix 操作系统,被誉为 Unix 之父。创造了 B 语言——C 语言的前身,同时也是 Plan 9 操作系统的创造者和开发者之一(这个不知道没关系)。Ken 老爷这几年也没闲着,自从他进入 Google 公司之后,就鼓捣了个小玩意——Go 语言。 Dennis Ritchie: C 语言的创造者,参与开发了 Unix 操作系统,1983 年和 Ken 一起获得了图灵奖。 Brian Kernighan: 参与了 Unix 的研发,也是 AMPL 与 AWK 的共同创造者之一。与 Dennis Ritchie 共同写了本书《C 程序设计语言》——也是介绍 C 语言的第一本书。 Steve Bourne: 参与开发了 Unix 操作系统,设计并实现了 Unix 早期版本中的 Bourne shell ,adb 除错器,2000-2002 年担任 ACM 计算机协会主席。 Bill Joy: 是 BSD 操作系统的主要设计者,曾创作了包括 Unix 系统中的文本编辑器 vi、C Shell 等软件,后来创办了 Sun 公司,就是开发了 Java 那个公司。 阅读原文