Skip to content

中间相遇攻击

一、背景与动机

  • 问题起源 :DES 密钥长度仅 56 位,易受暴力破解。
  • 改进方案:提出 2-DES(使用两个独立密钥 K1,K2,加密两次)和 3-DES
  • 关键发现(Diffie & Hellman, 1977):
    2-DES 的安全性并未提升到 2112,而是可被 MitM 攻击在约 256 时间内破解

二、基本中间相遇攻击(Basic MitM)

1. 攻击模型

  • 密码结构:$ C = E_{K_2}(E_{K_1}(P)) $
  • 假设:K1K2 独立,各为 56 位(如 2-DES)
  • 已知一对明密文 (P,C)

2. 攻击步骤

  1. 前向计算:对所有可能的 K1,计算中间值 u=EK1(P),存入哈希表(按 u 索引 K1)。
  2. 后向计算:对所有可能的 K2,计算 v=DK2(C)(即解密),查表看是否存在 u=v
  3. 候选密钥:若匹配,则 (K1,K2) 是候选密钥。
  4. 验证:用另一对 (P,C) 验证候选密钥是否正确。

3. 复杂度分析(以 2-DES 为例)

  • 时间复杂度T256+256=257 次加密/解密操作 → 256
  • 空间复杂度:需存储 256 个中间值 → M=256
  • 数据复杂度:通常只需 1~2 对明密文

✅ 结论:2-DES 安全性 ≈ 256不是 2112


三、MitM 的变种与扩展

1. 3-DES 的安全性

  • 常见形式:EK1DK2EK1(两密钥 3-DES)
  • 若尝试 MitM,因 K1 重复使用,无法直接划分为两个独立密钥集。
  • 但若采用 splice-and-cut 技术(Aoki & Sasaki, 2008),可将已知明文攻击转为选择明文/密文攻击,仍可在 256 时间和空间下攻击。

2. 3-Subset MitM(部分密钥相关)

  • K1K2 不完全独立时(如共享部分比特):
    • 将密钥划分为三部分:A0(公共部分)、A1A2
    • 先猜测 A0,再对每个 A0 执行标准 MitM
  • 时间复杂度max(2|A1|,2|A2|)×2|A0|
  • 空间复杂度min(2|A1|,2|A2|)

3. All SubKeys Recovery (ASR) 攻击

  • 思想:不恢复主密钥,而是直接恢复所有轮密钥(子密钥)
  • 优点:绕过复杂的密钥扩展算法
  • 适用对象:Feistel 结构、SPN 结构等
  • 核心:在中间某状态进行“匹配”,利用多个明密文对缩小子密钥空间

四、MitM 在 Feistel 密码中的应用

  • Feistel-1[n]:分组长 n,密钥长 n
  • Feistel-1[2n]:密钥长 2n,可前后各加 2 轮
  • 攻击能力
    • Feistel-1[2n]:可达 7~8 轮
    • Feistel-2[2n]:可达 9 轮
    • Feistel-3[2n]:可达 11 轮
  • 技巧
    • 固定部分输入(如 L1=const
    • 使用 splice-and-cut 增加可攻击轮数

💡 设计启示:Feistel 密码轮数应显著高于当前 MitM 可攻破的轮数。


五、MitM 在 AES 上的应用(Demirci-Selçuk 攻击)

1. 核心观察

  • 利用 AES 轮函数(SubBytes, ShiftRows, MixColumns)的代数结构
  • 构造“区分器”:特定输入模式下,输出由远少于随机情况的参数决定

2. 四轮 AES 区分器

  • 输入:256 个明文,仅第一个字节变化,其余固定
  • 输出:经 4 轮 AES 后,某个字节序列(或多重集)仅由 24 个字节参数决定
  • 随机置换下输出可能性:22048;AES 下仅 21922184可区分

3. 密钥恢复(以 AES-256 为例)

  • 攻击 1+4+2 = 7 轮
  • 猜测少量轮密钥(如 k0,k1,k6,k7 的部分字节)
  • 利用区分器筛选正确密钥
  • 复杂度D=232, T=280, M=2200 字节

4. 优化技术

  • 序列 → 多重集(ASIACTYPT 2010):忽略输入顺序,减少在线密钥猜测量
  • 差分枚举:结合差分特征进一步压缩搜索空间

六、MitM 的局限性

  • 依赖密钥独立性:若密钥扩展复杂(如 AES、SHA-3),难以划分独立子密钥集
  • 高存储需求:标准 MitM 需 2k/2 存储,对大密钥不现实
  • 应对策略
    • 使用 时间-内存权衡(如彩虹表)
    • 采用 局部匹配(partial matching)+ 多对明密文

复习题与答案

题目 1:为什么 2-DES 的安全性不是 2112


因为可以使用中间相遇攻击(MitM)。攻击者对所有 256K1 计算 EK1(P) 并存储,再对所有 K2 计算 DK2(C) 并查表匹配。总时间约为 256+256257,空间 256,远低于 2112


题目 2:简述 ASR(All SubKeys Recovery)攻击的基本思想及其优势。


ASR 攻击不试图恢复主密钥,而是直接恢复所有轮密钥(子密钥)。其优势在于绕过了复杂的密钥扩展算法,使得 MitM 可应用于密钥扩展较复杂的密码(如 LED、GOST)。攻击通过在中间状态匹配,并利用多对明密文逐步筛减子密钥空间。


题目 3:在 Demirci-Selçuk 对 AES 的 MitM 攻击中,为何四轮 AES 的输出可被区分?


当输入为 256 个仅首字节变化的明文时,四轮 AES 的某个输出字节序列(或多重集)仅由 24 个内部参数决定(如某些轮密钥字节和中间状态),因此仅有约 2192 种可能输出。而随机置换下有 22048 种可能,两者差异巨大,故可构造有效区分器。


题目 4(计算题):

假设某密码 Enc=EK1EK0,其中 K0,K1 各为 128 位且独立。
(a) 给出一种时间复杂度 2128 的 MitM 攻击;
(b) 若只有 2128 字节存储,如何调整攻击?
(c) 若有 8000 台计算机,每台每秒执行 227 次运算,估算攻击所需时间(年)。

(a) 标准 MitM:

  • 前向:计算所有 2128EK0(P),存表 → 时间 2128,空间 2128
  • 后向:对每个 K1,计算 DK1(C) 查表 → 时间 2128
  • 总时间 ≈ 21292128(数量级满足)

(b) 若存储限制为 2128 字节(刚好够存 2128 个 128 位中间值),则可直接使用标准 MitM,无需调整。

(c) 总操作数 ≈ 2129 次加密/解密

  • 总算力:8000 × 227 = 213×227=240 次/秒
  • 所需秒数:2129/240=289
  • 换算:
    • 1 年 ≈ 3.15×107225
    • 时间 ≈ 289/225=264
    • 2641.8×1019 年(远超宇宙年龄)

✅ 结论:即使大规模并行,128 位密钥的 MitM 仍不可行,说明 128 位是安全的。


希望这份提纲和习题能帮助你系统掌握中间相遇攻击的核心内容!如需进一步深入某一部分,欢迎继续提问。