精通密码学的人是怎么设置密码的？
说个故事！ 去年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 开发的大师（这些人有多牛，底部看介绍）。 出于兴趣，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无法破解的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 表示了赞赏，回复道：“恭喜！” ============故事完============= 计算机相关的内容，还可以看我的这篇回答：Windows 为什么不开源？ 到这里故事就讲完了，然后说说怎样设置密码安全的问题！ 看了上面的故事，你大概就知道了简单的密码一般都是跟个人信息有关的，比如生日啊，家庭成员的名字。 而复杂的密码是特殊符号和字符的组合，这个组合代表什么信息呢？这个你就可以自由发挥了，用象棋的走法可以，用其他的规律也行。 为什么要用规律？就怕你忘记了的时候，好用规律找回来，随机数生成密码就存在忘记的风险。毕竟现在的人哪，一个是健忘，另外几十个随机的密码，谁招架得住啊？？！ 好在现在不仅加密算法有了大的进步，还有其他的辅助加密的措施啊，比如Ukey，手机号验证码等。 虽然也不能保证100%安全，但是为了几十块钱破解个四五年的时间，这种事也只有外国人做得出来。再说了四五年时间后，你估计都换密码啦！ ==========登陆知乎日报========== 今早起床就收到了知乎日报的推荐， (๑>◡<๑) 鸡冻死啦！ 文章同时也被公号 : 互联网工作者(InternetWorker_1024)收录，感谢他们！ 这是我第一次获得知乎日报的推荐，感谢老铁们的点赞关注转发。 为了感谢老铁们的支持，在这里统一对评论区讨论最多的问题进行下筛选和回复，再次感谢知友们的支持，让点赞来得更猛烈一些吧！！！ 1. 有好多人问为什么遍历了数字+小写字母的组合之后，密码仍然没有破解？ 细心的知友应该会注意到Leah的求助邮件里包含了很多值得一说的细节，比如她所破解的密码是通过DES算法加密的，她只是尝试了所有了数字+小写字母的组合，然后她开始怀疑包含密码的文件里面可以获取的哈希字符串，是不是经过了Ken Thompson等人的特殊处理。 有了这些疑问之后，Leah表现得比较悲观[邮件里Leah本人也有提到]。显然她都不清楚自己是否还有必要进行下去，或者接下来破解密码的重心应该放在哪里，才在论坛里发了求助信，这是外围的信息。 内部的信息则是如果考虑数字+小写字母+大写字母+特殊符号的组合，那么这个问题对于Leah来说就变得不可解了，原因后面会详细解释。 要知道虽然只是加了大写字母和特殊符号，但是计算量确实呈几何指数增长的，再者特殊符号那么多，根本不清楚作者本人会使用哪些符号，这是个费时又费力的工作！ 2. 杠精们会说也就那么几个字符的组合(8位)，为什么难以破解？干不就完了吗？ 那我只能说他们还是too young too simple！我摘录百度百科里的的解释，大家感受下。 很多人可能不了解2285年是什么概念？我只想说那就是天荒地老，那就是天长地久，那就是天上人间。 我百度了下，从今年(2020)往前推2285年，正好是春秋战国时期，那一年欧几里得死了，那一年秦王嬴政他干爹吕不韦都还在赵国做生意呢！ 而且那时候你还得有台可以跑得起来的计算机才行，跑到现在才有可能把所有的密码组合验证完，如果验证的结果是最后一个组合才是答案，那么到你坟前祭奠的人估计都换了几十茬了。 3. 不说破解很复杂吗？时间得上千年，怎么Williams小哥哥几天(5天)就给搞出来了呢？ 这就充分体现了一台好设备，一个好工具的重要性了！我只能说AMD Yes！ AMD Radeon Vega64这款显卡的性能毋庸置疑，你值得拥有！Williams特别强调了这款显卡是针对哈希计算进行过优化的，估计用来挖矿还不错   [:逃] 4. 对于像我这样的手残党来说，破解的时间可能不只2285年这么短把？少说也得有∞年。  想看抽丝剥茧，分析故事脉络的朋友，可以到我这篇回答： 这个新答案讲的是贡献堪比钱学森，但是鲜为人知的“雷人徒手送镭”的故事！ 本人注：