MITM variant No.ThreE (All Subkey Recovery)
原始文章: All Subkeys Recovery Attack on Block Ciphers: Extending Meet-in-the-Middle Approach
从经典中间相遇攻击而来,考虑到经典中间相遇攻击的局限性:
-
需要子密钥相互独立,不独立情况见 “MITM variant No.TwO (3 subset)” 部分
-
由于密钥编排算法的限制,可能无法在仅获得部分子密钥的情况下获取主密钥
ASR 攻击注意针对第 2 个局限进行改进,即试图使用中间相遇的思想来恢复全部子密钥,从而忽略密钥编排算法的影响,如果密钥编排可逆,也可以利用所有子密钥恢复主密钥。
ASR attack
假设分组密码分组长度为 n ,加密函数为 E ,有 R 轮,且每轮使用不同的加密子密钥,子密钥不需要全部独立(但需要有部分独立的情况存在)
MITM stage
-
攻击者确定中间碰撞状态 S (s−bits) ;这个过程并不能独立后面的步骤,和 K1,K2 的选取有很大关系
状态 S 可以从两个方向计算得来,即 S=F1(P,K1)=F2−1(C,K2) ,其中 F1,F2 分别是前向和后向的(部分)加密函数
但并不是仅有 K1,K2 就可以从明文加密到密文,还有剩余没有用上的密钥 K3 ,所以有 ∣∣K(1)∣∣+∣∣K(2)∣∣+∣∣K(3)∣∣=R⋅ℓ
对于此处的 K1,K2 ,需要能够保证 F1(P,K1)=F2−1(C,K2) 的计算是独立的;
-
将 min(K1,K2) 得到的 (P/C,S) 拿来存表,而另一部分用来做匹配,如果能够在状态 S 匹配到,即 S=F1(P,K1)=F2−1(C,K2) ,则将使用的密钥 K1,K2 加入候选密钥表;
-
考虑到并行操作,可以对多个明密文对并行操作进行步骤 2.
Test Stage
同样的,使用不同明密文对测试,但测试的不是是否能够从明文加密到密文,因为整个过程没有考虑 K3 ,而是测试使用不同的明密文能否找到状态 S 的匹配 ? 是这样吗??
NOTE
-
在步骤 2. 有 2−s 的概率在状态 S 匹配到,而总可能密钥数为 2R∗l 所以留下的候选密钥为 2R∗l−s 个,而并行使用 N 个明密文对留下的候选密钥就为 2R∗l−N∗s 个;
-
这里可以并行使用的明密文对数量 N 为,需要有一定的限制:
2R∗l−N∗s≤2R∗l−(∣K1∣+∣K2∣) 即 N≤(∣K1∣+∣K2∣)/s,如果不满足,则意味着使用 2∣K1∣+∣K2∣ 种密钥筛掉了超过大于 2∣K1∣+∣K2∣ 个密钥,这是不合理的;
复杂度分析
- 时间复杂度:选 ∣K1∣,∣K2∣ 更大的用来做匹配,对 N 个明密文对,就需要 max(2∣K(1)∣,2∣K(2)∣)×N 的计算,而对剩余的密钥 K3 就需要穷举,需要 2R⋅ℓ−N⋅s 的计算,所以总时间复杂度为:
Tn=Ccomp=max(2∣K(1)∣,2∣K(2)∣)×N+2R⋅ℓ−N⋅s.
- 空间复杂度:选 ∣K1∣,∣K2∣ 更小的用来建表,对 N 个明密文对,总空间复杂度为:
Sn=min(2∣K(1)∣,2∣K(2)∣∣)×N
- 数据复杂度:并行 N 个不同的明密文对,在测试阶段,留下密钥 R∗l−N∗s bits,因为分组长度为 n ,所以每个新的明密文对可以筛掉 n bits(注意这个过程:P→Ek→C ,这里的 k 会遍历所有留下的候选密钥,而理论上会有 n 个被筛掉)所以需要进行 ⌈(R⋅ℓ−N⋅s)/n⌉ 次筛查,数据复杂度为:
Dn=max(N,⌈(R⋅ℓ−N⋅s)/n⌉)