0Pricing
Cryptology Academy · 课时

字典攻击与彩虹表

了解预计算哈希表如何加速密码破解,以及加盐如何挫败这类攻击

字典攻击与彩虹表 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

字典攻击:基于密码词表的破解

字典攻击不会尝试每一种可能的组合,而是尝试一份精心整理的常见密码列表。真实用户会从有限的词汇中选择密码,包括常见单词、姓名、日期和短语。测试包含一百万个常见密码的词表,远比测试所有可能的 8 个字符字符串(200 万亿种组合)快得多。字典攻击之所以有效,是因为人们选择密码的方式具有可预测性。

rockyou.txt:密码泄露数据集

2009 年,社交网络网站 RockYou 遭遇数据泄露,导致 3200 万个用户密码以明文形式曝光。由此产生的密码列表如今被称为 rockyou.txt,其中包含约 1400 万个不重复的密码,是密码破解中使用的标准首选词表。检查 rockyou.txt 可以发现,最常见的密码包括 123456、password,以及在名字后加数字形成的各种变体。

混合攻击:结合字典和规则

混合攻击会通过应用变换规则来扩展基础词表。例如,单词 password 可以变成 Password、P@ssword、p4ssword、password1、password123 以及数百种其他变体。Hashcat 的规则引擎可以精确指定要应用的变换,例如将首字母大写、追加两位数字,或用符号替换字母。这样可以大幅扩大覆盖范围,而无需测试真正随机的字符串。

基于规则的攻击与字母数字替换

人们曾经认为,字母数字替换(用数字替换字母:e=3、a=4、i=1、o=0、s=5)可以提高密码安全性。基于规则的破解工具会将这些替换作为标准变换。像 s3cur1ty 这样的密码,只需从基础单词 security 应用字母数字替换规则,就能轻易破解。破解工具还会尝试常见模式,例如在任何字典单词后追加 !、123 或当前年份。

彩虹表:预计算哈希链

彩虹表是一种大型预计算数据库,可以将哈希值映射回原始密码。攻击者无需计算候选密码的哈希值并进行比较,而是直接在表中查询该哈希值。构建彩虹表需要巨大的时间和存储空间,但每次查询都可以瞬间完成。包含所有 8 位字母数字密码的 MD5 彩虹表只需几太字节的空间,就能在几毫秒内破解任何匹配的密码。

彩虹表中的时间与内存权衡

彩虹表体现了时间与内存之间的权衡:先花时间计算一次表,再利用内存加快之后的查询。表中存储的是哈希链:每条链从一个猜测开始,对其进行哈希运算,再应用归约函数生成另一个猜测,并不断重复。只存储链的端点,就可以通过链重建过程从哈希值中恢复密码,在存储空间和计算量之间取得平衡。

盐值如何抵御彩虹表攻击

盐值是在哈希前追加到密码末尾的随机值。由于每个用户的盐值都不相同,即使两个用户使用相同的密码,生成的哈希值也会不同。这意味着攻击者无法为加盐后的密码预先计算彩虹表;他们必须针对每个可能的盐值分别构建一张表,而这在计算上无法实现。对于任何安全的密码存储系统,加盐都是强制要求。

未加盐的 MD5:可瞬间破解

许多早期网站应用会将密码存储为未加盐的 MD5 哈希值。字符串 password 的 MD5 值是 5f4dcc3b5aa765d61d8327deb882cf99,这是一个固定值。任何见过这个哈希值的人,或在预计算数据库中查询过它的人,都能立即知道对应的密码。CrackStation 等网站维护着数十亿个预计算的 MD5 和 SHA-1 哈希值。未加盐的常见密码可以在不到一秒内被破解。

我是否被攻破过

我是否被攻破过(HIBP)由安全研究员特洛伊·亨特创建,汇总了来自重大数据泄露事件的密码哈希值。用户可以查询自己的电子邮件地址或密码是否曾出现在数据泄露事件中。开发者可以使用 HIBP 应用程序接口,根据 k-匿名模型检查候选密码是否出现在 8.5 亿个已泄露的哈希值中:应用程序接口只会收到 SHA-1 哈希值的前 5 个十六进制字符,然后返回匹配的后缀,而服务器不会得知完整哈希值。

使用泄露密码列表进行凭据填充

凭据填充攻击会从一次数据泄露事件中获取用户名—密码对,然后在其他服务上测试这些凭据。由于许多用户会在不同网站重复使用密码,安全性较低的网站发生数据泄露后,可能会为银行和电子邮件等高价值目标提供仍然有效的凭据。自动化工具可以在多个服务上每秒提交数千次登录尝试。速率限制和多因素身份验证是抵御凭据填充攻击的主要防御措施。

防御措施:加盐自适应哈希

安全的密码存储会将加盐与慢速的自适应哈希函数结合起来。bcrypt、Argon2 和 scrypt 的设计目标是让计算成本较高,每次哈希运算需要几毫秒,而不是几微秒。这样可以将攻击者的处理能力从每秒数十亿次尝试限制到每秒数千次。随着硬件速度提升,可以增加成本参数,从而维持稳定的工作量要求。这些算法是当前密码存储的标准方案。

加盐与彩虹表

为什么在哈希前为每个密码添加唯一的随机盐值,可以抵御预计算彩虹表攻击?

字典攻击和彩虹表:要点总结

字典攻击会测试常见密码,而不是测试所有组合。rockyou.txt 提供了 1400 万个真实世界的密码示例。混合攻击和基于规则的攻击会通过变换扩展词表。彩虹表可以为未加盐的哈希值提供瞬时查询。加盐会使每个哈希值都不同,从而抵御彩虹表。HIBP 可以检查密码是否出现在已知的数据泄露事件中。为了安全存储密码,必须使用 bcrypt 和 Argon2 等自适应哈希函数。

常见问题解答

「字典攻击与彩虹表」课时是免费的吗?

是的 — 「字典攻击与彩虹表」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「字典攻击与彩虹表」这节课中我会学到什么?

了解预计算哈希表如何加速密码破解,以及加盐如何挫败这类攻击 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「字典攻击与彩虹表」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 暴力破解攻击的工作原理
  2. 字典攻击与彩虹表
  3. 密码学密钥长度为何重要
  4. 速率限制与账户锁定防御
← 返回 Cryptology Academy