返回资讯中心
外部精选
软件工程
#开发者实时流

密码破解历史:从1965年CTSS密码泄露到hashcat

来源标题:History of Password Cracking

密码破解并非“解密”,而是通过猜测口令并比对哈希值来实施攻击。1979年Morris和Thompson将其称为“key search”,1991年Alec Muffett的Crack工具首次以“crack”命名,后续John the Ripper、L0phtCrack和hashcat沿用此说法。1965年MIT的CTSS系统曾因临时文件命名问题,在周五下午4点将密码文件作为当日消息打印出来。

Hacker News 最新netmux2026/11/11 · 今天19 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

这本书的附录里有一条“密码破解史”时间线,这篇帖子就是那条时间线,外加 1979 年之前的一些前情。

好,这一点让人困惑,而且问得有道理。如果密码是哈希存储的,你并不是在“解密”它,因为没有任何密钥能把哈希变回密码。

Morris 和 Thompson 在 1979 年的论文里称之为“密钥搜索”。你猜一个密码,把它跑过同一个函数,然后比对,这就是攻击。

我没看到他们用“crack”来称呼这件事。“crack”这个词是随着 Alec Muffett 1991 年的 Crack 出现的——那是一个用词表加规则攻击 Unix 密码的工具,而在这个程序之后,后来的工具都沿用了这个名字:John the Ripper、L0phtCrack 和 hashcat。

不过这个词本身比它们全都古老。撬保险箱(cracking a safe)在计算机出现之前很久就有了,这也是为什么当目标从保险库变成密码时,“crack”这个词如此贴切的部分原因。

在那一切之前,1965 年 MIT 的 CTSS 上,密码就直接躺在一个文件里。两个用户在同一个目录里编辑文件。编辑器写临时文件时用一个固定文件名,结果那个星期五下午 4 点,密码文件被当作当日消息打印了出来,直到 Bill Mathews 把机器冻结。Tom Van Vleck 在他自己的网站上把这事讲得比我好。

Tom Van Vleck,以及 Multics 安全问题的记述。

Joe Weizenbaum 告诉 Van Vleck 不要存储密码。Van Vleck 在 1971 年 10 月加入了一个单向扰乱器,清单日期是 1971 年 10 月 30 日。

评估论文给出了步骤,而且相当简单:

你存储的是结果而不是密码,Van Vleck 后来回忆说,就是把密码平方然后扔掉一些位,思路是一样的。

1973 年 5 月 21 日,他把 scramble_() 改为调用 Roger Schell 的 encipher_()。Schell 当时正在主导空军为 Multics 加上真正安全性的工作,密码同时作为密钥和明文输入。

Multics 最先做了这件事,而 Unix 是所有人最终照抄的版本。

早期 Unix 把密码以明文形式存在一个本应被锁定的文件里,但副本、备份和一次糟糕的权限设置就意味着你无论如何都能拿到密码。

Robert Morris Sr. 把它换成了对美国陆军 M-209(二战密码机)的模拟。如果你有密钥,M-209 很容易反向运行,而在已知明文和密文的情况下找到密钥才是难的部分,所以他用密码作为密钥去加密一个常量。这是第一个 Unix 单向方案,大致是 Version 3 到 Version 6 那几年,约 1973 到 1975 年。

1979 年的第七版,是定下来的那个版本。Morris 和 Thompson 丢掉了 M-209 代码,改用修改过的 DES:

那个函数就是 crypt(3),而那篇论文仍然是我发给别人的那一篇:

Password Security: A Case History. Robert Morris and Ken Thompson. Communications of the ACM, November 1979, Vol. 22, No. 11, pp. 594-597.

读它。Robert Morris Sr.。Ken Thompson。

他们最终定下来的东西仍然是你想要的:存储一个单向函数,为每个用户加盐,让每次猜测都变得昂贵。md5crypt、bcrypt、scrypt 和 Argon2 都是在拧同样这三个旋钮,下面的日期是每种哈希、每个密码恢复工具出现的时间。

1987 年,LM 哈希。LAN Manager 使用 DES,强制密码转成大写,并把它拆成两个 7 字符的半段,所以破解的是两个短半段而不是整个密码,LM 因此一直很快。

1988 年,Morris 蠕虫。康奈尔大学研究生 Robert Tappan Morris——也就是合著 crypt(3) 的那位 Robert Morris 的儿子——编写并释放了这只蠕虫。它传播的方式之一是用内置字典去尝试账户,那是很多人第一次看到密码猜测在互联网上肆意横行。

1991 年,Crack。Alec Muffett 把它写成针对 Unix 密码的词表加规则,当有人问“crack”这个词从哪来时,我指的就是这个程序。

1993 年,NTLM。Windows NT 3.1 存储密码的 MD4 哈希,而那个哈希至今仍遍布 Active Directory。

1996 年,John the Ripper。Alexander Peslyak(Solar Designer)写了一个密码恢复工具,能接受你实际从机器上抓到的任意哈希。

1997 年,L0phtCrack。Christien Rioux(DilDog)、Peiter Zatko(Mudge)和 Chris Wysopal(Weld Pond)为 Windows 上的 LM 和 NTLM 打造了它,这样你就不必为了攻击一个 Windows 哈希而去搭一个 Unix 密码恢复工具。

1999 年,bcrypt。Niels Provos 和 David Mazières 基于 Blowfish 加一个成本因子构建了它,这样当机器变快时,你调高成本,而不是每隔几年就发明一种新哈希。

2001 年,THC-Hydra。van Hauser(The Hacker's Choice)写它是为了对登录服务做在线猜测(FTP、HTTP、SMB 以及一长串协议),所以你是把密码往一个服务上扔,而不是破解离线哈希。

2001 年,Cain & Abel。Massimiliano Montoro(oxid.it)把嗅探和破解整合进一个 Windows 程序,那个网站已经不在了,不过如果你在那个年代做过 Windows 相关的工作,你仍然记得这个名字。

2003 年,RainbowCrack。Zhu Shuanglei 使用 Philippe Oechslin 的时间-内存权衡,所以你只需付一次计算成本,之后查哈希即可。盐会让这招失效,而由于 LM、NTLM 和裸 MD5 都没有盐,这就是这些哈希所面临的攻击。

2005 年,Medusa。Foofus.net 的 JoMo-Kun 构建它是为了并行发起大量尝试的在线猜测。

2006 年,Ophcrack。又是 Philippe Oechslin,这次是把彩虹表放进一张 Live CD,这样你就不必自己构建表了。

ophcrack.sourceforge.io。Objectif Sécurité。

2009 年,scrypt。Colin Percival 写出了第一个同时消耗大量内存的密码哈希,这样 GPU 或 ASIC 就不能只是往上堆算术了。

2009 年,hashcat。Jens Steube(atom)在 2009 年发布了 GPU 版本 oclHashcat。

2009 年,RockYou。那次泄露中约 1400 万个真实密码变成了 rockyou.txt,如果你破解过哈希,你多半是从它开始的。

2010 年,PasswordsCon。Per Thorsheim 在挪威卑尔根举办了第一场专门关于密码的会议。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →