MITM variant No.TwO (3 subset)

从经典的 MITM 考虑,如果子密钥不能独立,那么建表和穷举部分都无法独立进行,参考文章A 3-Subset Meet-in-the-Middle Attack: Cryptanalysis of the Lightweight Block Cipher KTANTAN 和文章Three-Subset Meet-in-the-Middle Attack on Reduced XTEA 了解使用 3 子集来构造具有独立性的子密钥集合,并结合穷举和经典 MITM 来进行中间相遇攻击。 alt 术语解释:

K=k1k2k1k0 be the -bit key. K=k_{\ell-1} k_{\ell-2} \ldots k_{1} k_{0} \text { be the } \ell \text {-bit key. }

K1={ki:ki used by φ1,α}K_{1}=\left\{k_{i}: k_{i} \text { used by } \varphi_{1, \alpha}\right\}

K2={ki:ki used by φRβ+1,R}K_{2}=\left\{k_{i}: k_{i} \text { used by } \varphi_{R-\beta+1, R}\right\}

A0=K1K2A_{0}=K_{1} \cap K_{2}是在前向 α\alpha 和后向 β\beta 都使用的密钥 比特

K=K1K2K = K_1 \cup K_2

NOTE:明确一点:K,KiK,K_i 是以密钥个为单位,AiAi 以比特为单位;

A1=K1\K1K2 and A2=K2\K1K2A_{1}=K_{1} \backslash K_{1} \cap K_{2} \text { and } A_{2}=K_{2} \backslash K_{1} \cap K_{2} 就比较好理解,这里 \ 表示除去而非经典数学的除法。例如:

密钥总位数为 32 bits32\ bits;相关部分为 A0=21 bits|A_0| = 21\ bits 那么 A1=A2=11 bits|A_1|=|A_2|=11\ bits

3-subset MITM: 有迭代的分组密码,分组长度为 nn ,子密钥不独立的分为 K1,K2K_1,K_2,有 A0 bitsA_0\ bits 为公用密钥,A1=K1\K1K2 bits  and  A2=K2\K1K2 bitsA_{1}=K_{1} \backslash K_{1} \cap K_{2}\ bits\ \text { and }\ A_{2}=K_{2} \backslash K_{1} \cap K_{2}\ bits

MITM stage

对任意一个明密文对 (P,C)(P,C)

  1. 穷举所有 A0 bitsA_0\ bits ,并对每一种 A0A_0 情况,进行步骤 2. 3.;
  2. A0A_0A1A_1 拼接获得 K1K_1,前向加密得到中间值 UU,将所有 UU 存入表 TT;
  3. A0A_0A2A_2 拼接获得 K2K_2,向后解密得到中间值 VV,将所有 VV 与表 TT 中所有值进行匹配(不一定匹配中间值的全部比特),匹配到的值存入候选密钥表 TvcT_{vc} 中;

Testing Stage

和经典 MITM 相同,再任选不同的明密文对,对表 TvcT_{vc} 进行筛查,直到仅留下 1 个密钥。这里使用的明密文对数量和 A0|A_0| 有关,显然是成反比的。

复杂度分析

不考虑并行明密文对,这里的 A0,A1,A2A_0,A_1,A_2 表示密钥的长度bits)(bits)

时间复杂度:建表时间 2A02A12^{A_0}*2^{A_1} ,匹配时间 2A02A22^{A_0}*2^{A_2} ,总时间:

T=2A0(2A1+2A2)T = 2^{A_0}*(2^{A_1}+2^{A_2})

空间复杂度:

M=2A0min(2A1+2A2)M = 2^{A_0}*min(2^{A_1}+2^{A_2})

数据复杂度:假设中间值匹配的位数为 m : 1<=m<=nm\ :\ 1<=m<=n ,则留下的候选密钥为 A0(A1+A2)m bitsA_0(A_1+A_2) - m\ bits,所以测试需要的明密文对为:

D=A0(A1+A2)mnD = \frac{A_0(A_1+A_2) - m}{n}