中间相遇攻击与时间—内存权衡
使用 MITM 攻击双重 DES,并学习 Hellman 表
中间相遇攻击与时间—内存权衡 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
中间相遇(MITM)攻击
MITM 攻击将密码算法拆分为两半,分别进行攻击。攻击者从一端建立表,然后从另一端搜索匹配项。这样会将攻击复杂度从 O(2^{2n}) 降低到 O(2^n),代价是需要 O(2^n) 的内存。
攻破双重 DES
双重 DES 会应用两次 DES:C = DES_{K2}(DES_{K1}(P))。密钥空间为 2^{112}。MITM 攻击如下:对于所有 2^{56} 个 K1 值,计算 DES_{K1}(P) 并存储结果。对于所有 2^{56} 个 K2 值,计算 DES_{K2}^{-1}(C),并在表中查找。匹配后得到 (K1, K2) 候选值。总工作量只有 2^{57}。
MITM 算法
步骤 1:使用所有可能的 K1 加密明文 P,建立表 T[DES_{K1}(P)] = K1。步骤 2:对于每个 K2,解密密文 C:v = DES^{-1}_{K2}(C)。检查 v ∈ T 是否成立。如果存在 T[v] = K1,则在第二组明文—密文对上验证 (K1, K2)。预计会有 1–2 个误匹配;将它们丢弃。
三重 DES 的抗性
三重 DES(3DES)使用三个密钥 K1、K2、K3:C = DES_{K3}(DES^{-1}_{K2}(DES_{K1}(P)))。MITM 仍然适用,但效果较弱:双密钥 3DES(K3=K1)将攻击工作量降为 2^{112}。对于三密钥 3DES,存在工作量为 2^{112} 的 MITM 攻击,这解释了为什么尽管密钥长度为 168 位,3DES 提供的有效安全强度却只有约 112 位。
Hellman 时间—内存权衡
Hellman(1980)提出预先计算由 (start_point, end_point) 组成的链表,以加快离线密钥搜索。给定目标哈希值或密文后,在 Hellman 表中搜索包含该目标的链。其权衡关系为:P = N(时间 × 内存 = 空间常数)。这是彩虹表的基础。
彩虹表
彩虹表(Oechslin,2003)通过在链的每个位置使用不同的归约函数改进了 Hellman 表,从而消除误报(合并的链)。彩虹表适合破解未加盐的密码哈希。一次查找需要 O(table_size/chain_length) 的时间。
使用盐值抵御彩虹表
盐值是在哈希前添加到密码前面的随机值:H(salt||password)。不同的盐值会使同一个密码产生不同的哈希值——如果使用了不同的盐值,针对“密码”建立的彩虹表就毫无用处。盐值必须与哈希值一起存储。
AES 密钥调度中的 MITM
针对 AES-128(10 轮)的 MITM 攻击会在第 5 轮分割:从前向后加密 5 轮,再从后向前解密 5 轮,在中间相遇。已知的最佳攻击是双团攻击,将 2^{128} 降低到 2^{126.1}。这并不实用,但表明 AES 针对 MITM 类方法没有安全余量。
针对哈希原像的 MITM
对于 Merkle-Damgard 哈希,MITM 在某些构造上可以比穷举更快地找到原像。攻击方法是:从 IV 开始,根据消息分组建立表;然后从目标哈希值开始向后搜索。针对完整轮数的 SHA-256,仍然需要约 2^{255} 的工作量,相比穷举没有改进。
分割攻击
分割攻击将 MITM 推广到 r 路拆分。对于密码算法的三路拆分:从前向后加密三分之一的轮,在链的中间相遇,然后从后向前解密三分之一的轮。它需要 O(2^{n*2/3}) 的时间和 O(2^{n/3}) 的内存,是一种更加均衡的权衡。
密钥派生可防止 MITM
在协议中,可以通过以下方式防止 MITM 攻击:使用由高熵密码通过 KDF 派生出的长密钥(减少可枚举的密钥空间);使用硬件令牌(FIDO2),让密钥始终不离开设备;或者使用公钥认证(不存在可供枚举的共享密钥)。
快速检查
双重 DES(两次 DES,合计 112 位密钥)针对 MITM 攻击的有效安全强度是多少?
回顾
MITM 攻击将密码算法拆成两半,使用 2^n 的内存将时间复杂度从 2^{2n} 降低到 2^n。它可以攻破双重 DES;3DES 虽能缓解这一问题,但有效安全强度只有 112 位。彩虹表利用了 MITM 的思路来破解密码,而加盐可以抵御这种攻击。下一节:时序攻击和侧信道攻击。
常见问题解答
「中间相遇攻击与时间—内存权衡」课时是免费的吗?
是的 — 「中间相遇攻击与时间—内存权衡」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「中间相遇攻击与时间—内存权衡」这节课中我会学到什么?
使用 MITM 攻击双重 DES,并学习 Hellman 表 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「中间相遇攻击与时间—内存权衡」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 差分密码分析基础
- 线性密码分析与近似表
- 生日攻击与碰撞攻击
- 中间相遇攻击与时间—内存权衡