Skip to content

差分分析学习(二)

Published: at 08:26 AM

在上一篇文章的最后,我们画出了一张差分分布表:

0123456789abcdef
016---------------
1--6----2-2--2-4-
2-66------22-----
3---6-2--2---4-2-
4---2-24--222--2-
5-22-4--42--2----
6--2-4--22-222---
7-----44-2222----
8-----2-24--4-2-2
9-2---222-42----2
a----22---44-22--
b---22-222--4--2-
c-4-2-2--2-----6-
d------22----62-4
e-2-42-----2----6
f----2-2------10-2

为了分析接下来的 CipherThree,我们需要做一个抽象,定义一下 差分特征(differential characteristic):两个具有差分 α\alpha 的输入,在经过操作 S[]S[\cdot ] 后得到两个具有差分 β\beta 的输出,那么这一对 (α,β)(\alpha,\beta) 就被称为 差分特征,可以表示为 αSβ\alpha \xrightarrow S \beta.

CipherThree

c=S[S[S[mk0]k1]k2]k3c = S [S [S[m \oplus k_0] \oplus k_1]\oplus k_2]\oplus k_3

CipherThree 按照前面所说的对 CipherTwo 的攻击,攻击者猜测 k3k_3,计算 y0y_0y1y_1,计算 x0x1x_0\oplus x_1. 为了验证猜测是否正确,攻击者输入的消息 需要通过 2 个 S 盒.

从差分分布表中,我们可以读出:

因此我们可以组合两个 S 盒的操作:

如果假设这些特征是相互独立的,那么这个 2 轮特征 fSdSc\texttt{f} \xrightarrow S \texttt{d} \xrightarrow S \texttt{c} 的概率就是 1016×616\frac{10}{16}\times \frac{6}{16}. 也就是说,攻击者输入具有差分 f\texttt{f} 的消息,可以以 1564\frac{15}{64} 的概率预期 y0y1y_0\oplus y_1 的值是 c\texttt{c}. 给定足够多的明文-密文对,像 CipherTwo 的攻击那样操作,我们就可以恢复密钥 k3k_3.

CipherFour

CipherFour 是一个 rr 轮的迭代加密,块大小为 16-bit.

i01234567
P [i]0481215913
i89101112131415
P [i]261014371115

CipherFour 让我们考虑对 CipherFour 的差分攻击. 如果我们试图进行 CipherThree 中类似的攻击,那么首先需要找到一个特征,这个特征可以预测 r1r-1 轮后两个部分加密的消息的差分. 如果能够找到一个具有足够高概率的特征,那么原则上,我们就能够恢复轮密钥 krk_r.

为了构建多轮的特征,我们先尝试找到 一轮的特征.

一轮的特征

我们需要研究 4 个 S 盒,找到存在高概率输出差分的输入差分. 由于 P 盒是线性的,可以直接计算一轮的输入差分. 4 个 S 盒的输入和输出差分可以记为

(α1,α2,α3,α4)S(β1,β2,β3,β4)(\alpha_1,\alpha_2,\alpha_3,\alpha_4)\xrightarrow S (\beta_1,\beta_2,\beta_3,\beta_4)

其中 αi\alpha_i 是输入到每个 S 盒的值 AiA_i 之间的差分,βi\beta_i 是输出值 S[Ai]S[A_i] 之间的差分. 因为 P 盒是固定的,我们可以 确切地预测 差分通过 P 盒发生的变化

(β1,β2,β3,β4)P(γ1,γ2,γ3,γ4)(\beta_1,\beta_2,\beta_3,\beta_4)\xrightarrow P (\gamma_1,\gamma_2,\gamma_3,\gamma_4)

其中 β1β2β3β4\beta_1\Vert \beta_2\Vert \beta_3 \Vert\beta_4 是 P 盒 16-bit 的输入差分. 对于一整轮 R\mathscr{R}

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

表示 CipherFour 一轮的特征.

注意到差分分布表左上角的项是 16,也就是说「输入差分为 0 时,输出差分为 0」发生的概率为 1. 很显然,对于相同的输入,S 盒会有相同的输出,选择所有 4 个 S 盒输入差分都为 0 会得到一个概率为 1 的一轮特征. 但这对密码分析来说没有意义,一个 非平凡 的一轮特征必须最多具有 3 个输入差分为 0 的 S 盒.

我们考虑发生概率为 1016\frac{10}{16} 的特征

(0,0,0, f)S(0,0,0, d)(\texttt{0,0,0, f})\xrightarrow{S}(\texttt{0,0,0, d})

经过 P 盒

(0,0,0, d)P(1,1,0,1)(\texttt{0,0,0, d})\xrightarrow{P}(\texttt{1,1,0,1})

这就得到了完整的一轮

(0,0,0, f)R(1,1,0,1)(\texttt{0,0,0, f})\xrightarrow{\mathscr{R}}(\texttt{1,1,0,1})

在这个基础上再扩展一轮,发生概率为 (616)3(\frac{6}{16})^3 的特征

(1,1,0,1)S(2,2,0,1)(\texttt{1,1,0,1})\xrightarrow{S}(\texttt{2,2,0,1})

经过 P 盒

(2,2,0,2)P(0,0, d,0)(\texttt{2,2,0,2})\xrightarrow{P}(\texttt{0,0, d,0})

假设两个一轮特征相互独立,那么我们就得到了 CipherFour 的一个发生的概率为 1016×(616)3=1354096\frac{10}{16}\times (\frac{6}{16})^3=\frac{135}{4096} 的二轮特征

(0,0,0, f)R(1,1,0,1)R(0,0, d,0)(\texttt{0,0,0, f})\xrightarrow{\mathscr{R}}(\texttt{1,1,0,1})\xrightarrow{\mathscr{R}}(\texttt{0,0, d,0})

注意,上面描述的过程从差分分布表中查找每个 S 盒最高概率的特征. 但是这样找到的特征可能在一轮中是最佳的,但其他密码组件(例子中为 P 盒)可能会让这个特征在多轮中变得不那么理想.

例如,我们考虑输入差分 (0,0,2,0)(\texttt{0,0,2,0}),发生概率为 616\frac{6}{16} 的一轮差分

(0,0,2,0)R(0,0,2,0)(\texttt{0,0,2,0})\xrightarrow{\mathscr{R}}(\texttt{0,0,2,0})

由于输入差分等于输出差异,这个特征可以与其自身连接,产生我们想要的任意多轮的特征. 这样的特性称为 迭代特性. 我们有概率为 (616)2(\frac{6}{16})^2 的二轮差分

(0,0,2,0)R(0,0,2,0)R(0,0,2,0)(\texttt{0,0,2,0})\xrightarrow{\mathscr{R}}(\texttt{0,0,2,0})\xrightarrow{\mathscr{R}}(\texttt{0,0,2,0})

概率为 (616)3(\frac{6}{16})^3 的三轮差分

(0,0,2,0)R(0,0,2,0)R(0,0,2,0)R(0,0,2,0)(\texttt{0,0,2,0})\xrightarrow{\mathscr{R}}(\texttt{0,0,2,0})\xrightarrow{\mathscr{R}}(\texttt{0,0,2,0})\xrightarrow{\mathscr{R}}(\texttt{0,0,2,0})

概率为 (616)4(\frac{6}{16})^4 的四轮差分

(0,0,2,0)R(0,0,2,0)R(0,0,2,0)R(0,0,2,0)R(0,0,2,0)(\texttt{0,0,2,0})\xrightarrow{\mathscr{R}}(\texttt{0,0,2,0})\xrightarrow{\mathscr{R}}(\texttt{0,0,2,0})\xrightarrow{\mathscr{R}}(\texttt{0,0,2,0})\xrightarrow{\mathscr{R}}(\texttt{0,0,2,0})

类似前几次攻击,如果攻击者选择输入差分 (0,0,2,0)(0,0,2,0) ,从密文反向计算,根据四轮后部分加密的密文中的差异是否符合预期,得到最后一个子密钥 k5k_5(的某些位).

这样做的问题是:这个差分发生的概率是 0.020.02,而随机指定的差分发生的概率是 116>0.02\frac{1}{16}>0.02 ,无法从中有效区分出正确的密钥信息. 在下一篇文章中我们会解决这个问题.


Previous Post
差分分析学习(三)
Next Post
差分分析学习(一)