...续差分密码分析-1

CIPHER4CIPHER-4

CIPHER4CIPHER-4已经十分类似我们现在使用的分组密码(见 AESAES 算法 RijndaelRijndael):使用 rr 轮加密,对 16bit  block16-bit\;block 操作,所有的 r+1r+1 轮的密钥都随机均匀选取,每一轮包含结构 S[]  and  P[]S[·]\;and\;P[·] (都可逆)见下图:

其中,每一轮的输入为 16bit16-bit ,被分为 44bit4 * 4-bit 的四个半字节放入 4S[]4 * S[·]P[]P[·] 中运算,也就是说 S[]  and  P[]S[·]\;and\;P[·] 都是在 {0,1}4  (0,f)\{0,1\}^4\;\rightarrow(0,f) 上的置换

#4 轮的 CIPHER4CIPHER-4 实现了充分的扩散(雪崩),这得益于P[]P[·]的设计;

#除 S[]S[·] 外,其余运算对二进制上的加法 \bigoplus 均是线性的,P[]P[·] 运算可以用一个线性的矩阵表示;

下面,考虑对CIPHER4CIPHER-4分析,继承对CIPHER3CIPHER-3的分析方法,寻找前 r1r-1 轮的差分特征,猜第 rr 轮使用的密钥 krk_r,由于有 4 个 S[]S[·] 所以将差分特征表示为:

(α1,α2,α3,α4)S(β1,β2,β3,β4)(\alpha_1,\alpha_2,\alpha_3,\alpha_4)\stackrel{S}{\rightarrow}(\beta_1,\beta_2,\beta_3,\beta_4)

还有一个 P[]P[·] 作用在 S[]S[·] 之后,而 P[]P[·] 不会影响差分值,只会影响其在下一轮出现的位置, P[]P[·]的作用是将差分传播到尽可能多的 S[]S[·] 中,将 P[]P[·]过程表示为:

(β1,β2,β3,β4)P(γ1,γ2,γ3,γ4)(\beta_1,\beta_2,\beta_3,\beta_4)\stackrel{P}{\rightarrow}(\gamma_1,\gamma_2,\gamma_3,\gamma_4)

所以,β1β2β3β4\beta_1||\beta_2||\beta_3||\beta_4 就表示输入差分经 S[]S[·] 之后的输出差分,γ1γ2γ3γ4\gamma_1||\gamma_2||\gamma_3||\gamma_4 表示输出差分经 P[]P[·]之后该轮最后的输出差分,所以一轮的差分总体表示为:

(α1,α2,α3,α4)R(γ1,γ2,γ3,γ4)(\alpha_1,\alpha_2,\alpha_3,\alpha_4)\stackrel{\mathcal{R}}{\rightarrow}(\gamma_1,\gamma_2,\gamma_3,\gamma_4)

通过表Table  6.2Table\;6.2 可以发现,如果输入 S[]S[·] 的差分为 0,则输出差分也为 0 ,所以对于 16bit  block16-bit\;block,可以以没半个字节为单位,构造只在一位(一个 S[]S[·] 输入差分)为非零值的数据。当然,这在分析上是允许的,但变成了*选择明文攻击,因为明文是我们自己构造的。在考虑S[]S[·]的活跃性时,相当于构造只有一个S[]S[·]活跃的轮。构造的输入差分例如(0,0,1,0)(0,0,1,0),每一个位置进入一个S[]S[·],那么至少在第一轮只有一个S[]S[·]的输出会存在差分。

再考虑到前面对CIPHER1,CIPHER2CIPHER-1,CIPHER-2分析的时候,得到一个S[]S[·] 存在最大的差分特征 f  S[]  bf\;\stackrel{S[·]}{\rightarrow}\;b ,概率为1016\frac{10}{16},所以将输入差分令为(0,0,0,f)(0,0,0,f),那么对第一轮,就只有第四个S[]S[·] 存在差分,描述经过一轮差分的传递:

(0,0,0,f)S(0,0,0,d)(0,0,0,f)\stackrel{S}{\rightarrow}(0,0,0,d)

但是,一个好的P[]P[·]置换,会将差分传递到下一轮尽量多的S[]S[·],比如采用 MDSMDS 矩阵的P[]P[·],见Matrix_Branch  and  MDSMatrix\_Branch\;and\;MDS。即使不考虑P[]P[·]有足够好的扩散性能,其也可以将差分特征扩散,比如:

(0,0,0,d)P(1,1,0,1)(0,0,0,d)\stackrel{P}{\rightarrow}(1,1,0,1)

所以上面整个过程描述下来就是:

(0,0,0,f)R(1,1,0,1)(0,0,0,f)\stackrel{\mathcal{R}}{\rightarrow}(1,1,0,1)

因为这是整个一轮,所以其整个过程的概率就是1016\frac{10}{16}.

继续考虑第二轮,通过表 Table  6.2Table\;6.2 可以看到,(1,1,0,1)(1,1,0,1) 存在差分的三位再经过一次 S[]S[·] 的输出差分特征以概率(616)3(\frac{6}{16})^3存在(*因为每个输入差分1到输出差分2的特征概率都是616\frac{6}{16},所以将其概率相乘才是总体输出差分为(2,2,0,2)(2,2,0,2)的概率)且差分特征描述为:

(1,1,0,1)S(2,2,0,2)(1,1,0,1)\stackrel{\mathcal{S}}{\rightarrow}(2,2,0,2)

经过一次 P[]P[·] 置换,以概率 1 获得差分(0,0,d,0)(0,0,d,0)

(2,2,0,2)S(0,0,d,0)(2,2,0,2)\stackrel{\mathcal{S}}{\rightarrow}(0,0,d,0)

所以,两轮的差分传递描述为:

(0,0,0,f)R1(1,1,0,1)R2(0,0,d,0)(inherited  path) (0,0,0,f)\stackrel{\mathcal{R_1}}{\rightarrow}(1,1,0,1)\stackrel{\mathcal{R_2}}{\rightarrow}(0,0,d,0) \tag{inherited\;path}

计算总概率,第一轮概率是 1016\frac{10}{16},第二轮概率是(616)3(\frac{6}{16})^3,乘在一起得到 1016(616)3=1354096\frac{10}{16} * (\frac{6}{16})^3=\frac{135}{4096},也就意味着我们在枚举密钥时,已经失去了对于穷举的优势。当然,对于这个例子可能不十分合适去解释,因为其用来 4 个 S[]S[·] ,那就假设每个S[]S[·] 前面使用的都是相同密钥,密钥是 4 位 2 进制,也就共有 24=162^4=16种可能。很显然 1354096\frac{135}{4096} 要小于 116\frac{1}{16} ,所以对两轮CIPHER4CIPHER-4的差分分析失去了消除噪声的优势。

考虑一下原因,很自然的想到,P[]P[·] 是影响该结构差分传播的一个大问题,在第 2 轮时由于差分特征被 P[]P[·] 扩散开,所有就产生了三条路径,而计算时需要将三条路径的概率相乘,也就造成了经过两轮后差分特征概率变得如此低。同时,在第一轮输入开始就以我们预像的最大差分概率来构造差分,并将其注入明文来构造明文对,这种方法可能并不会给我们带来最佳差分路径(概率最高),因为其在前面 CIPHER1,2,3CIPHER-1,2,3 中使用的差分特征仅仅对 S[]S[·] 而这里有 P[]P[·],所有我们应该将 S[]  and  P[]S[·]\;and\;P[·] 一起考虑。给出一个例子:

(0,0,2,0)S(0,0,2,0)P(0,0,2,0)(0,0,2,0)\stackrel{S}{\rightarrow}(0,0,2,0)\stackrel{P}{\rightarrow}(0,0,2,0)

可能这是将差分扩散性作为优先级考虑的一种路径,但这条路径的差分特征概率确实比上面一条更高,通过表Table  6.2Table\;6.2发现,差分特征概率为616\frac{6}{16},为一轮的差分特征概率,同时为每一轮的差分特征概率。所有经过 4 轮之后,得到概率为 (616)4(\frac{6}{16})^4 的差分特征路径:

(0,0,2,0)R1(0,0,2,0)R2(0,0,2,0)R3(0,0,2,0)R4(0,0,2,0)(better  path) (0,0,2,0)\stackrel{\mathcal{R_1}}{\rightarrow}(0,0,2,0)\stackrel{\mathcal{R_2}}{\rightarrow}(0,0,2,0)\stackrel{\mathcal{R_3}}{\rightarrow}(0,0,2,0)\stackrel{\mathcal{R_4}}{\rightarrow} (0,0,2,0) \tag{better\;path}

以上过程也可以通过寻找满足要求的明密文对来描述,如果要求选择的明密文对对满足在每一轮差分都为一定值,如上面的 (0,0,2,0)(0,0,2,0) ,则在随机密钥的情况下(其实对于我们举例的密码,密钥并没有影响到差分,但为保证其随机性,还是随机选择密钥,选择 5 个种子密钥,没有经过密钥编排,用作 4 轮,每一轮使用一个 4 位 2 进制作为密钥参与密码运算),统计对数并计算平均值,然后与总可能差分数量 216=655362^16=65536 作比,可以得到与计算特征概率几乎相同的结果:

来比较以下,

  • better  pathbetter\;path 的差分特征概率:每一轮的都是 616\frac{6}{16} 所有4轮之后概率为 (616)4(\frac{6}{16})^4
  • inherited  pathinherited\;path 的差分特征概率:1016(610)3610610\frac{10}{16}*(\frac{6}{10})^3*\frac{6}{10}*\frac{6}{10}
(0,0,0,f)R1(1,1,0,1)R2(0,0,d,0)R3(0,0,c,0)R4(e,0,0,0)(inherited  path) (0,0,0,f)\stackrel{\mathcal{R_1}}{\rightarrow}(1,1,0,1)\stackrel{\mathcal{R_2}}{\rightarrow}(0,0,d,0)\stackrel{\mathcal{R_3}}{\rightarrow}(0,0,c,0)\stackrel{\mathcal{R_4}}{\rightarrow}(e,0,0,0) \tag {inherited\;path}

由上面的对比可以看到,better  pathbetter\;path 拥有更大的差分特征概率。那么考虑以下,在找到 4 轮差分特征之后,是否有相对于穷举的优势来猜第五轮的密钥k5k_5,很明显,(616)4<116(\frac{6}{16})^4 <\frac{1}{16},也就是噪声大于我们猜测的概率。

这是否意味着差分分析的失败??(假设上面的better  pathbetter\;path 就是最好的差分特征传播路径)在一定轮数之后就失去了其统计上的意义??可能差分确实在传递到一定论数之后确实会因为特征概率太小而被噪声淹没,但似乎我们漏掉了一些使概率放大的办法...

差分密码分析-3