线性密码分析
在1993年欧洲密码年会上,日本学者Matsui提出对DES算法的一种新的攻击方法,即线性密码分析。
与差分密码分析不一样的是,线性密码分析属于已知明文攻击,它通过研究明文和密文之间的线性关系来恢复密钥。目前线性密码分析和差分密码分析已经成为了攻击迭代型分组密码最为典型的两种方法。
一、已知明文攻击(known-plaintext attack)
密码分析者不仅可以得到一些消息的密文,而且也知道这些消息的明文。分析者的任务就是就是用加密信息推出用来加密的密钥或导出一个算法,此算法可以对使用相同密钥加密的任何消息进行解密。
已知: P 1 , C 1 = E k ( P 1 ) , P 2 , C 2 = E k ( P 2 ) , . . . , P i , C i = E k ( P i ) P_1,C_1=E_k(P_1),P_2,C_2=E_k(P_2),... ,P_i,C_i=E_k(P_i) P1,C1=Ek(P1),P2,C2=Ek(P2),...,Pi,Ci=Ek(Pi)
推导出:密钥 K K K,或从 C i + 1 = E k ( P i + 1 ) C_{i+1}=E_k(P_{i+1}) Ci+1=Ek(Pi+1)推导出 P i + 1 P_{i+1} Pi+1的算法。
二、线性密码分析基本原理
线性密码分析属于已知明文攻击方法,它通过寻找明文和密文之间的一个“有效”的线性逼近表达式,将分组密码与随机置换分开,并在此基础上进行恢复密钥攻击。
这部分内容会涉及到很多的定义,如果觉得难以读下去的小伙伴,可以先读下面一部分,当下面需要到上面的定义的时候,再返回来看一下,会读起来没有那么的难。或者参考《分组密码的攻击方法与实例分析》(李超 孙兵 李瑞林 著)这本书。
定义2.1(内积) 设 ( a , b ) ∈ { 0 , 1 } n , a = ( a 1 , a 2 , ⋯ , a n ) , b = ( b 1 , b 2 , ⋯ , b n ) (a,b) \in \{0,1\}^n,a=(a_1,a_2,\cdots ,a_n),b= (b_1,b_2,\cdots,b_n) (a,b)∈{0,1}n,a=(a1,a2,⋯,an),b=(b1,b2,⋯,bn),向量 a a a和 b b b的内积定义为 a ⋅ b = ⊕ i = 1 n a i ⋅ b i a\cdot b=\overset{n} {\underset{i=1}{\oplus}}a_i \cdot b_i a⋅b=i=1⊕nai⋅bi,其中, a i ⋅ b i a_i \cdot b_i ai⋅bi表示比特 a i a_i ai和 b i b_i bi的与运算,即二元域的乘法运算。
定义2.2(线性掩码) 设 X ∈ { 0 , 1 } n , X X \in \{0,1\}^n,X X∈{0,1}n,X的线性掩码定义为某个向量 Γ X ∈ { 0 , 1 } n \Gamma X \in \{0,1\}^n ΓX∈{0,1}n, Γ X \Gamma X ΓX和 X X X的内积 Γ X ⋅ X \Gamma X \cdot X ΓX⋅X代表 X X X某些分量的线性组合,即 Γ X ⋅ X = ⊕ i , Γ X i = 1 X i \Gamma X \cdot X = \underset{i, \Gamma X_i = 1}{\oplus}X_i ΓX⋅X=i,ΓXi=1⊕Xi。
定义2.3(线性逼近表达式) 设迭代分组密码的轮函数为 F ( x , k ) F(x,k) F(x,k),给定一对线性掩码 ( α , β ) (\alpha,\beta) (α,β),称 α ⋅ x ⊕ β ⋅ F ( x , k ) \alpha \cdot x \oplus \beta \cdot F(x,k) α⋅x⊕β⋅F(x,k)为 F ( x , k ) F(x,k) F(x,k)的线性逼近表达式,同样称 α ⋅ x ⊕ β ⋅ E ( x , k ) \alpha \cdot x \oplus \beta \cdot E(x,k) α⋅x⊕β⋅E(x,k)为分组密码 E ( x , k ) E(x,k) E(x,k)的线性逼近表达式。
假设
p
(
α
,
β
)
=
P
r
o
b
X
,
K
{
α
⋅
X
=
β
⋅
F
(
X
,
K
)
}
p(\alpha,\beta)=\underset{X,K}{Prob}\{\alpha\cdot X = \beta \cdot F(X,K) \}
p(α,β)=X,KProb{α⋅X=β⋅F(X,K)},则
p
p
p表示线性逼近表达式
(
α
,
β
)
(\alpha,\beta)
(α,β),称
α
⋅
x
⊕
β
⋅
F
(
x
,
k
)
=
0
\alpha \cdot x \oplus \beta \cdot F(x,k)=0
α⋅x⊕β⋅F(x,k)=0的概率。在线性密码分析中一般采用偏差、相关性或势的概念来描述线性逼近表达式的概率特性,依次定义为
ε
F
(
α
,
β
)
=
p
(
α
,
β
)
−
1
2
C
o
r
F
(
α
,
β
)
=
2
p
(
α
,
β
)
−
1
P
o
t
F
(
α
,
β
)
=
(
p
(
α
,
β
)
−
1
2
)
2
\varepsilon _F(\alpha,\beta) = p(\alpha,\beta) - \frac{1}{2} \\ Cor_F(\alpha,\beta) = 2p(\alpha,\beta) - 1 \\ Pot_F(\alpha,\beta) = (p(\alpha,\beta) - \frac{1}{2})^2
εF(α,β)=p(α,β)−21CorF(α,β)=2p(α,β)−1PotF(α,β)=(p(α,β)−21)2
由于,我们的机器内部都是以二进制存储的,所以这些定义呢,是对于二进制 即二元域上的定义。
三、实例
能读到这里的小伙伴非常的厉害了。返回去看了一下,我觉得呢,嗯~,有点难理解。但是,这些都是很有必要的,我们的分析是需要用到他们的,所以,你懂的。
了解了线性密码分析的基本原理,我相信大部分人也跟我一样似懂非懂,很虚,感觉一点儿也不连贯,不是很好理解,那么接下来我就使用S盒来讲解一下线性分析方法。
依然使用我在差分密码分析中用到的S盒,还是给大家放出来。
x x x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
S [ x ] S[x] S[x] | 2 | 6 | 8 | 7 | 1 | 4 | 9 | 5 | 3 | 0 |
3.1 S盒线性逼近表
Matsui对DES算法进行线性分析的关键在于观察到由S盒导出的线性逼近表达式的偏差特性,并给出了线性逼近表的概念。
定义3.1(S盒的线性逼近表) 设
m
,
n
∈
N
m,n \in N
m,n∈N,从
F
2
m
F_2^{m}
F2m到
F
2
n
F_2^{n}
F2n的非线性映射(也称为S盒)记为
S
:
F
2
m
→
F
2
n
S:F_2^{m} \rarr F_2^{n}
S:F2m→F2n 。给定
α
∈
F
2
m
,
β
∈
F
2
n
\alpha \in F_2^{m},\beta \in F_2^{n}
α∈F2m,β∈F2n,定义
I
N
S
(
α
,
β
)
=
{
x
∈
F
2
m
:
α
⋅
x
=
β
⋅
S
(
x
)
}
,
N
S
(
α
,
β
)
=
#
I
N
S
(
α
,
β
)
.
IN_S(\alpha,\beta) = \{x \in F_2^{m}: \alpha \cdot x = \beta \cdot S(x) \},\\ N_S(\alpha, \beta) = \#IN_S(\alpha,\beta).
INS(α,β)={x∈F2m:α⋅x=β⋅S(x)},NS(α,β)=#INS(α,β).
由于我们的S盒不是使用二进制,在FSE 2006上,Granboulan等人1定义了当分组不是比特串时的一个通用的框架。使用到的符号表示的含义:
Σ 数字集合 { 0 , 1 , 2 , ⋯ , N − 1 } \Sigma \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{数字集合} \{0,1,2,\cdots,N-1\} Σ 数字集合{0,1,2,⋯,N−1}
N 数字集合的大小 ∣ Σ ∣ N \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{数字集合的大小} |\Sigma| N 数字集合的大小∣Σ∣
定义3.2 (分布向量即线性逼近)
Λ 0 ( S ) { a , b } = ( # { x ∈ Σ ∣ ⟨ a , b ∣ x , S ( x ) ⟩ = u } ) u ∈ { Z } , w h e r e ⟨ a , b ∣ x , y ⟩ = ⟨ a ∣ x ⟩ − ⟨ b ∣ y ⟩ \Lambda _0(S)_{\{a,b\}}=(\# \{x \in \Sigma | \langle a,b|x,S(x) \rangle =u\})_{u \in \{Z\}},where \langle a,b|x,y \rangle = \langle a|x \rangle - \langle b|y \rangle Λ0(S){a,b}=(#{x∈Σ∣⟨a,b∣x,S(x)⟩=u})u∈{Z},where⟨a,b∣x,y⟩=⟨a∣x⟩−⟨b∣y⟩ ⟨ a , x ⟩ 表 示 a 和 x 的 标 量 积 \langle a,x \rangle 表示 a 和x的标量积 ⟨a,x⟩表示a和x的标量积
定义 3.3 随机行为
f a , b ; u = 1 N # ( x , y ) ∈ Σ × Σ ∣ ⟨ a , b ∣ x , y ⟩ = u f_{a,b;u}=\frac 1 N \#(x,y) \in \Sigma \times \Sigma| \langle a,b|x,y \rangle =u fa,b;u=N1#(x,y)∈Σ×Σ∣⟨a,b∣x,y⟩=u
偏差表示为S盒和随机情况的行为差异
定义3.4 偏差
Λ S ( S ) a , b ; u = Λ 0 ( S ) a , b ; u − f a , b ; u \Lambda _S(S)_{a,b;u} = \Lambda _0(S)_{a,b;u}-f_{a,b;u} ΛS(S)a,b;u=Λ0(S)a,b;u−fa,b;u
最高偏差度量了S盒的非线性度。
所以利用偏差概念来刻画线性密码分析。
当
u
=
0
u = 0
u=0时,代码如下:
% Matlab
function [Lambda_S,N,f] = linear_attack()
S = [2 6 8 7 1 4 9 5 3 0];
for u = 0:9
N = Lambda_0(S,u);
f = fabu(u);
Lambda_S = N - f;
end
function N = Lambda_0(S,u)
for i = 1:10 % a
for j = 1:10 % b
n = 0;
for x = 1:10 % x
if mod((i-1)*(x-1) -(j-1)*S(x),10) == u
n = n + 1;
end
end
N(i,j) = n;
end
end
function f = fabu(u)
for i = 1:10 % a
for j = 1:10 % b
n = 0;
for x = 1:10 % x
for y = 1:10 % y
if mod((i-1)*(x-1) - (j-1)*(y-1),10) == u
n = n + 1;
end
end
end
N(i,j) = n / 10;
end
end
f = N;
二进制可以构造出
2
m
×
2
n
2^m \times 2^n
2m×2n的表格,根据我们的S盒,可以构造
10
×
10
10 \times 10
10×10线性逼近表。对于二进制来说只有
{
0
,
1
}
\{0,1\}
{0,1},这样我们对于
Λ
0
(
S
)
{
a
,
b
}
,
f
a
,
b
;
u
,
Λ
S
(
S
)
{
a
,
b
,
u
}
=
Λ
0
(
S
)
{
a
,
b
}
−
f
a
,
b
;
u
\Lambda _0(S)_{\{a,b\}} ,f_{a,b;u},\Lambda _S(S)_{\{a,b,u\}}=\Lambda _0(S)_{\{a,b\}} - f_{a,b;u}
Λ0(S){a,b},fa,b;u,ΛS(S){a,b,u}=Λ0(S){a,b}−fa,b;u能够运行出10个,如下图所示。
从偏差
Λ
S
\Lambda _S
ΛS我们可以看出最大的偏差为
2
10
\frac {2} {10}
102,即
2
−
2.31
2^{-2.31}
2−2.31。
如果这个偏差大于0,表明
(
α
⋅
x
)
−
(
β
⋅
S
(
x
)
)
(
m
o
d
10
)
=
u
(\alpha \cdot x) - (\beta \cdot S(x)) \pmod {10} = u
(α⋅x)−(β⋅S(x))(mod10)=u的可能性大,如果这个偏差小于0,表明
(
α
⋅
x
)
−
(
β
⋅
S
(
x
)
)
(
m
o
d
10
)
≠
u
(\alpha \cdot x) - (\beta \cdot S(x)) \ \pmod {10} \neq u
(α⋅x)−(β⋅S(x)) (mod10)=u的可能性大。
3.2 例题分析
攻击的关键是首先寻找明文和密文之间的一个有效的线性逼近表达式。
S盒的线性逼近表,实际上是研究随机输入
x
x
x,经过S盒作用后得到的
S
(
x
)
S(x)
S(x) ,输入掩码
α
\alpha
α所确定的
α
⋅
x
\alpha \cdot x
α⋅x 和输出掩码
β
\beta
β所确定的
β
⋅
S
(
x
)
\beta \cdot S(x)
β⋅S(x) 之间的符合率。
3.2.1 分析算法的过程
明文为 x x x,密钥为 k = ( k 1 , k 2 ) k=(k_1,k_2) k=(k1,k2),密文为 y y y,进行运算, x 1 = x , z 1 = x 1 + k 1 x 2 = S ( z 1 ) , z 2 = x 2 + k 2 y = z 2 x_1 = x , z_1 = x_1+k_1\\ x_2= S(z_1) ,z_2 = x_2 + k_2 \\ y=z_2 x1=x,z1=x1+k1x2=S(z1),z2=x2+k2y=z2
根据上面,我们可以知道
x
=
z
1
−
k
1
x
2
=
y
−
k
2
x = z_1 - k_1 \\ x_2 = y - k_2
x=z1−k1x2=y−k2 所以,对于任意的
(
α
,
β
1
,
β
2
,
β
)
(\alpha,\beta_1,\beta_2,\beta)
(α,β1,β2,β),都有
α
⋅
x
=
α
⋅
z
1
−
α
⋅
k
1
β
⋅
x
2
=
β
⋅
y
−
β
⋅
k
2
\alpha \cdot x = \alpha \cdot z_1 - \alpha \cdot k_1 \\ \beta \cdot x_2 = \beta \cdot y - \beta \cdot k_2
α⋅x=α⋅z1−α⋅k1β⋅x2=β⋅y−β⋅k2 对于中间的S盒,如果
α
⋅
z
1
−
β
⋅
x
2
=
u
即
α
⋅
z
1
=
β
⋅
x
2
+
u
\alpha \cdot z_1 - \beta \cdot x_2 = u \\ \text{即} \alpha \cdot z_1 = \beta \cdot x_2 + u
α⋅z1−β⋅x2=u即α⋅z1=β⋅x2+u 则可以知道
α
⋅
x
−
β
⋅
y
=
u
−
β
⋅
k
2
−
α
⋅
k
1
\alpha \cdot x - \beta \cdot y = u- \beta \cdot k_2 - \alpha \cdot k_1
α⋅x−β⋅y=u−β⋅k2−α⋅k1其中
u
∈
{
0
,
1
,
2
,
⋯
,
9
}
u \in \{0,1,2,\cdots,9\}
u∈{0,1,2,⋯,9}
3.2.2 攻击过程
加密
现在假设所采用的密钥是
k
1
=
4
,
k
2
=
8
k_1=4,k_2=8
k1=4,k2=8,加密过程如下:
若已知一对明文输入为
x
1
=
1
x_1 = 1
x1=1和
x
1
∗
=
5
x_1^* = 5
x1∗=5,则加密流程为
x
1
=
1
,
z
1
=
x
1
+
k
1
=
5
,
x
2
=
S
(
z
1
)
=
4
,
y
1
=
x
2
+
k
2
=
2
x
1
∗
=
5
,
z
1
∗
=
x
1
∗
+
k
1
=
9
,
x
2
∗
=
S
(
z
2
∗
)
=
0
,
y
2
∗
=
x
2
∗
+
k
2
=
8
x_1 = 1, z_1 =x_1 +k_1=5, x_2 = S(z_1) = 4, y_1 = x_2 + k_2= 2 \\ x_1^* = 5, z_1^* = x_1^* +k_1 =9,x_2^*=S(z_2^* )= 0,y_2^*=x_2^* + k_2 = 8
x1=1,z1=x1+k1=5,x2=S(z1)=4,y1=x2+k2=2x1∗=5,z1∗=x1∗+k1=9,x2∗=S(z2∗)=0,y2∗=x2∗+k2=8
攻击分析
从上面我们可以看出来,需要两个子密钥。所以我们至少需要两个掩码对(我是这么觉得的,为什么至少呢,请往下看)。
根据S盒的线性逼近表,假设掩码对
(
α
,
β
)
=
(
1
,
3
)
,
(
2
,
4
)
(\alpha,\beta) = (1,3),(2,4)
(α,β)=(1,3),(2,4)时
Λ
0
(
S
)
(
1
,
3
;
0
)
=
0
,
ε
(
1
,
3
;
0
)
=
−
1
,
Λ
0
(
S
)
(
2
,
4
;
0
)
=
0
,
ε
(
2
,
4
;
0
)
=
−
2
Λ
1
(
S
)
(
1
,
3
;
1
)
=
1
,
ε
(
1
,
3
;
1
)
=
0
,
Λ
1
(
S
)
(
2
,
4
;
1
)
=
0
,
ε
(
2
,
4
;
1
)
=
0
Λ
2
(
S
)
(
1
,
3
;
2
)
=
2
,
ε
(
1
,
3
;
2
)
=
1
,
Λ
2
(
S
)
(
2
,
4
;
2
)
=
2
,
ε
(
2
,
4
;
2
)
=
0
Λ
3
(
S
)
(
1
,
3
;
3
)
=
2
,
ε
(
1
,
3
;
3
)
=
1
,
Λ
3
(
S
)
(
2
,
4
;
3
)
=
0
,
ε
(
2
,
4
;
3
)
=
0
Λ
4
(
S
)
(
1
,
3
;
4
)
=
1
,
ε
(
1
,
3
;
4
)
=
0
,
Λ
4
(
S
)
(
2
,
4
;
4
)
=
4
,
ε
(
2
,
4
;
4
)
=
2
Λ
5
(
S
)
(
1
,
3
;
5
)
=
0
,
ε
(
1
,
3
;
5
)
=
−
1
,
Λ
5
(
S
)
(
2
,
4
;
5
)
=
0
,
ε
(
2
,
4
;
5
)
=
0
Λ
6
(
S
)
(
1
,
3
;
6
)
=
0
,
ε
(
1
,
3
;
6
)
=
−
1
,
Λ
6
(
S
)
(
2
,
4
;
6
)
=
1
,
ε
(
2
,
4
;
6
)
=
−
1
Λ
7
(
S
)
(
1
,
3
;
7
)
=
0
,
ε
(
1
,
3
;
7
)
=
−
1
,
Λ
7
(
S
)
(
2
,
4
;
7
)
=
0
,
ε
(
2
,
4
;
7
)
=
0
Λ
8
(
S
)
(
1
,
3
;
8
)
=
1
,
ε
(
1
,
3
;
8
)
=
0
,
Λ
8
(
S
)
(
2
,
4
;
8
)
=
3
,
ε
(
2
,
4
;
8
)
=
1
Λ
9
(
S
)
(
1
,
3
;
9
)
=
3
,
ε
(
1
,
3
;
9
)
=
2
,
Λ
9
(
S
)
(
2
,
4
;
9
)
=
0
,
ε
(
2
,
4
;
9
)
=
0
\Lambda _0(S)_{(1,3;0) }=0,\varepsilon_{(1,3;0)}=-1, \Lambda _0(S)_{(2,4;0) }=0, \varepsilon_{(2,4;0)}=-2 \\ \Lambda _1(S)_{(1,3;1) }=1,\varepsilon_{(1,3;1)}=0, \Lambda _1(S)_{(2,4;1) }=0, \varepsilon_{(2,4;1)}=0 \\ \Lambda _2(S)_{(1,3;2) }=2,\varepsilon_{(1,3;2)}=1, \Lambda _2(S)_{(2,4;2) }=2, \varepsilon_{(2,4;2)}=0 \\ \Lambda _3(S)_{(1,3;3) }=2,\varepsilon_{(1,3;3)}=1, \Lambda _3(S)_{(2,4;3) }=0, \varepsilon_{(2,4;3)}=0 \\ \Lambda _4(S)_{(1,3;4) }=1,\varepsilon_{(1,3;4)}=0, \Lambda _4(S)_{(2,4;4) }=4 , \varepsilon_{(2,4;4)}=2\\ \Lambda _5(S)_{(1,3;5) }=0,\varepsilon_{(1,3;5)}=-1, \Lambda _5(S)_{(2,4;5) }=0 , \varepsilon_{(2,4;5)}=0 \\ \Lambda _6(S)_{(1,3;6) }=0,\varepsilon_{(1,3;6)}=-1, \Lambda _6(S)_{(2,4;6) }=1, \varepsilon_{(2,4;6)}=-1 \\ \Lambda _7(S)_{(1,3;7) }=0,\varepsilon_{(1,3;7)}=-1, \Lambda _7(S)_{(2,4;7) }=0 , \varepsilon_{(2,4;7)}=0\\ \Lambda _8(S)_{(1,3;8) }=1,\varepsilon_{(1,3;8)}=0, \Lambda _8(S)_{(2,4;8) }=3, \varepsilon_{(2,4;8)}=1 \\ \Lambda _9(S)_{(1,3;9) }=3,\varepsilon_{(1,3;9)}=2,\Lambda _9(S)_{(2,4;9) }=0 , \varepsilon_{(2,4;9)}=0
Λ0(S)(1,3;0)=0,ε(1,3;0)=−1,Λ0(S)(2,4;0)=0,ε(2,4;0)=−2Λ1(S)(1,3;1)=1,ε(1,3;1)=0,Λ1(S)(2,4;1)=0,ε(2,4;1)=0Λ2(S)(1,3;2)=2,ε(1,3;2)=1,Λ2(S)(2,4;2)=2,ε(2,4;2)=0Λ3(S)(1,3;3)=2,ε(1,3;3)=1,Λ3(S)(2,4;3)=0,ε(2,4;3)=0Λ4(S)(1,3;4)=1,ε(1,3;4)=0,Λ4(S)(2,4;4)=4,ε(2,4;4)=2Λ5(S)(1,3;5)=0,ε(1,3;5)=−1,Λ5(S)(2,4;5)=0,ε(2,4;5)=0Λ6(S)(1,3;6)=0,ε(1,3;6)=−1,Λ6(S)(2,4;6)=1,ε(2,4;6)=−1Λ7(S)(1,3;7)=0,ε(1,3;7)=−1,Λ7(S)(2,4;7)=0,ε(2,4;7)=0Λ8(S)(1,3;8)=1,ε(1,3;8)=0,Λ8(S)(2,4;8)=3,ε(2,4;8)=1Λ9(S)(1,3;9)=3,ε(1,3;9)=2,Λ9(S)(2,4;9)=0,ε(2,4;9)=0
掩码对
(
α
,
β
)
=
(
1
,
3
)
,
(
2
,
4
)
(\alpha,\beta) = (1,3),(2,4)
(α,β)=(1,3),(2,4),可得到2个线性逼近表达式及其相应的概率和偏差:
A
:
x
−
3
y
=
u
−
3
k
2
−
k
1
p
u
=
0
,
5
,
6
,
7
=
0
,
p
u
=
1
,
4
,
8
=
1
10
,
p
u
=
2
,
3
=
2
10
,
p
u
=
9
=
3
10
,
ε
u
=
0
,
5
,
6
,
7
=
−
1
10
,
ε
u
=
1
,
4
,
8
=
0
,
ε
u
=
2
,
3
=
1
10
,
ε
u
=
9
=
2
10
A:x - 3y = u - 3 k_2 - k_1 \\ p_{u=0,5,6,7} = 0,p_{u=1,4,8}=\frac 1 {10}, p_{u = 2,3}=\frac 2 {10},p_{u = 9} = \frac 3 {10},\\ \varepsilon _{u=0,5,6,7}=- \frac 1{10},\varepsilon _{u=1,4,8}=0,\varepsilon _{u=2,3}= \frac 1{10},\varepsilon _{u=9}= \frac 2{10} \\
A:x−3y=u−3k2−k1pu=0,5,6,7=0,pu=1,4,8=101,pu=2,3=102,pu=9=103,εu=0,5,6,7=−101,εu=1,4,8=0,εu=2,3=101,εu=9=102
B
:
2
x
−
4
y
=
u
−
4
k
2
−
2
k
1
p
u
=
0
,
1
,
3
,
5
,
7
,
9
=
0
,
p
u
=
6
=
1
10
,
p
u
=
2
=
2
10
,
p
u
=
4
=
4
10
,
p
u
=
8
=
3
10
ε
u
=
0
=
−
2
10
,
ε
u
=
1
,
2
,
3
,
5
,
7
,
9
=
0
,
ε
u
=
4
=
2
10
,
ε
u
=
6
=
−
1
10
,
ε
u
=
8
=
1
10
B:2x - 4y = u - 4 k_2 - 2 k_1 \\ p_{u=0,1,3,5,7,9} = 0,p_{u=6}=\frac 1 {10}, p_{u = 2}=\frac 2 {10},p_{u = 4} = \frac 4 {10} ,p_{u = 8} = \frac 3 {10} \\ \varepsilon _{u=0}=- \frac 2{10},\varepsilon _{u=1,2,3,5,7,9}=0,\varepsilon _{u=4}= \frac 2{10},\varepsilon _{u=6}=- \frac 1{10},\varepsilon _{u=8}=\frac 1{10}
B:2x−4y=u−4k2−2k1pu=0,1,3,5,7,9=0,pu=6=101,pu=2=102,pu=4=104,pu=8=103εu=0=−102,εu=1,2,3,5,7,9=0,εu=4=102,εu=6=−101,εu=8=101
从线性逼近表中可以看到,当掩码对为
(
1
,
3
)
(1,3)
(1,3)时,
u
∈
{
0
,
2
,
3
,
4
,
5
,
9
}
u \in \{0,2,3,4,5,9\}
u∈{0,2,3,4,5,9},同理,当掩码对为
(
2
,
4
)
(2,4)
(2,4)时,
u
∈
{
2
,
4
,
6
,
8
}
u \in \{2,4,6,8\}
u∈{2,4,6,8},所以对于
A
A
A逼近表达式,至少需要6个明密文对,才能确定
u
u
u的取值,对于
B
B
B逼近表达式,至少需要4个明密文对,才能确定
u
u
u的取值。
对于每一个逼近表达式,知道了 u u u的取值,可以建立出密钥的一个方程,我们只有两个子密钥,所以需要建立2个方程,我们通过解方程就可以获得 k 1 , k 2 k_1,k_2 k1,k2的值。
具体过程
已知明密文对
(
x
,
y
)
=
(
1
,
2
)
,
(
5
,
8
)
(x,y) = (1,2),(5,8)
(x,y)=(1,2),(5,8),
A
:
x
−
3
y
=
u
−
3
k
2
−
k
1
1
−
3
×
2
=
5
=
u
1
−
3
k
2
−
k
1
,
i
.
e
.
3
k
2
+
k
1
=
u
1
−
5
5
−
3
×
8
=
1
=
u
2
−
3
k
2
−
k
1
,
i
.
e
.
3
k
2
+
k
1
=
u
2
−
1
i
.
e
.
3
k
2
+
k
1
=
u
1
−
5
=
u
2
−
1
A:x - 3y = u - 3 k_2 - k_1 \\ 1-3 \times 2 = 5 =u_1 - 3 k_2 - k_1,i.e. \ 3k_2 + k_1 = u_1-5 \\ 5-3 \times 8 = 1 =u_2 - 3 k_2 - k_1 , i.e. \ 3k_2 + k_1 = u_2-1 \\ i.e. \ 3k_2 + k_1 = u_1-5 = u_2-1
A:x−3y=u−3k2−k11−3×2=5=u1−3k2−k1,i.e. 3k2+k1=u1−55−3×8=1=u2−3k2−k1,i.e. 3k2+k1=u2−1i.e. 3k2+k1=u1−5=u2−1
u
1
,
u
2
∈
{
0
,
2
,
3
,
4
,
5
,
9
}
u_1,u_2 \in \{0,2,3,4,5,9\}
u1,u2∈{0,2,3,4,5,9},当
u
1
=
0
u_1 = 0
u1=0时,
u
2
=
6
∉
{
0
,
2
,
3
,
4
,
5
,
9
}
u_2 = 6 \notin \{0,2,3,4,5,9\}
u2=6∈/{0,2,3,4,5,9},所以
u
1
≠
0
u_1 \neq 0
u1=0,同理,我们可以求出来,
u
1
=
3
,
u
2
=
9
u_1 = 3,u_2 = 9
u1=3,u2=9只有这一个成立,所以
3
k
2
+
k
1
=
8
3k_2 + k_1 = 8
3k2+k1=8
我们可以看到, 只用一个掩码对和2对明密文对,还不能破解,因为有2个未知数,1个方程,所以使用另外一个线性表达式,同理,对于
B
B
B
B
:
2
x
−
4
y
=
u
−
4
k
2
−
2
k
1
2
×
1
−
4
×
2
=
4
=
u
3
−
4
k
2
−
2
k
1
i
.
e
.
4
k
2
+
2
k
1
=
u
3
−
4
2
×
5
−
4
×
8
=
8
=
u
4
−
4
k
2
−
2
k
1
i
.
e
.
4
k
2
+
2
k
1
=
u
4
−
8
i
.
e
.
4
k
2
+
2
k
1
=
u
3
−
4
=
u
4
−
8
B:2x - 4y = u - 4 k_2 - 2 k_1 \\ 2 \times 1 - 4 \times 2 =4 = u_3 - 4k_2 -2 k_1 i.e. \ 4k_2 + 2 k_1 = u_3 - 4\\ 2 \times 5 - 4 \times 8 = 8 = u_4 - 4k_2 -2 k_1 i.e. \ 4k_2 + 2 k_1 = u_4 - 8\\ i.e. \ 4k_2 + 2 k_1 = u_3 - 4 = u_4 - 8
B:2x−4y=u−4k2−2k12×1−4×2=4=u3−4k2−2k1i.e. 4k2+2k1=u3−42×5−4×8=8=u4−4k2−2k1i.e. 4k2+2k1=u4−8i.e. 4k2+2k1=u3−4=u4−8
u
3
,
u
4
∈
{
2
,
4
,
6
,
8
}
u_3,u_4 \in \{2,4,6,8\}
u3,u4∈{2,4,6,8},当
u
3
=
2
u_3 = 2
u3=2时,
u
4
=
6
∈
{
2
,
4
,
6
,
8
}
u_4 = 6 \in \{2,4,6,8\}
u4=6∈{2,4,6,8},当
u
3
=
4
u_3 = 4
u3=4时,
u
4
=
8
∈
{
2
,
4
,
6
,
8
}
u_4 = 8 \in \{2,4,6,8\}
u4=8∈{2,4,6,8},当
u
3
=
6
u_3 = 6
u3=6时,
u
4
=
0
∉
{
2
,
4
,
6
,
8
}
u_4 = 0 \notin \{2,4,6,8\}
u4=0∈/{2,4,6,8},当
u
3
=
8
u_3 = 8
u3=8时,
u
2
=
2
∈
{
2
,
4
,
6
,
8
}
u_2 = 2 \in \{2,4,6,8\}
u2=2∈{2,4,6,8},
所以
u
3
≠
6
u_3 \neq 6
u3=6,我们可以求出来,
(
u
3
,
u
4
)
=
(
2
,
6
)
,
(
4
,
8
)
,
(
8
,
2
)
(u_3,u_4) = (2,6),(4,8),(8,2)
(u3,u4)=(2,6),(4,8),(8,2)所以对B线性逼近表达式,只用两个明文无法确定出一个方程,需要更多的明密文对来确定
u
3
,
u
4
u_3,u_4
u3,u4的值。目前,
4
k
2
+
2
k
1
=
8
,
0
,
4
4k_2 + 2 k_1 = 8,0,4
4k2+2k1=8,0,4
使用(7,4),可以得出
2
×
7
−
4
×
4
=
8
=
u
5
−
4
k
2
−
2
k
1
4
k
2
+
2
k
1
=
u
3
−
4
=
u
4
−
8
=
u
5
−
8
2 \times 7 - 4 \times 4 = 8 = u_5 - 4k_2 -2 k_1 \\ 4k_2 + 2 k_1 = u_3 - 4 = u_4 - 8 = u_5 - 8
2×7−4×4=8=u5−4k2−2k14k2+2k1=u3−4=u4−8=u5−8 所以这个明密文对和明密文对
(
5
,
8
)
(5,8)
(5,8)达到了一样的效果。继续选取明密文对
(
6
,
0
)
(6,0)
(6,0),可以得出
2
×
6
−
4
×
0
=
2
=
u
5
−
4
k
2
−
2
k
1
4
k
2
+
2
k
1
=
u
3
−
4
=
u
4
−
8
=
u
5
−
2
2 \times 6 - 4 \times 0 = 2 = u_5 - 4k_2 -2 k_1 \\ 4k_2 + 2 k_1 = u_3 - 4 = u_4 - 8 = u_5 - 2
2×6−4×0=2=u5−4k2−2k14k2+2k1=u3−4=u4−8=u5−2 得出
(
u
3
,
u
4
,
u
5
)
=
(
4
,
8
,
2
)
,
(
8
,
2
,
6
)
(u_3,u_4,u_5) = (4,8,2),(8,2,6)
(u3,u4,u5)=(4,8,2),(8,2,6)则
4
k
2
+
2
k
1
=
0
,
4
4k_2 + 2 k_1 = 0,4
4k2+2k1=0,4,继续选取明密文对
(
8
,
6
)
(8,6)
(8,6),可以得出
2
×
8
−
4
×
6
=
2
=
u
6
−
4
k
2
−
2
k
1
4
k
2
+
2
k
1
=
u
3
−
4
=
u
4
−
8
=
u
5
−
2
=
u
6
−
2
2 \times 8 - 4 \times 6 = 2 = u_6 - 4k_2 -2 k_1 \\ 4k_2 + 2 k_1 = u_3 - 4 = u_4 - 8 = u_5 - 2 = u_6 - 2
2×8−4×6=2=u6−4k2−2k14k2+2k1=u3−4=u4−8=u5−2=u6−2 和
(
6
,
0
)
(6,0)
(6,0)达到了一样的效果。继续选取明密文对
(
9
,
5
)
(9,5)
(9,5),可以得出
2
×
9
−
4
×
5
=
2
=
u
6
−
4
k
2
−
2
k
1
4
k
2
+
2
k
1
=
u
3
−
4
=
u
4
−
8
=
u
5
−
2
=
u
6
−
8
2 \times 9 - 4 \times 5 = 2 = u_6 - 4k_2 -2 k_1 \\ 4k_2 + 2 k_1 = u_3 - 4 = u_4 - 8 = u_5 - 2 = u_6 - 8
2×9−4×5=2=u6−4k2−2k14k2+2k1=u3−4=u4−8=u5−2=u6−8 和
(
5
,
8
)
,
(
7
,
4
)
(5,8),(7,4)
(5,8),(7,4)达到了一样的效果。继续选取明密文对
(
0
,
9
)
(0,9)
(0,9),可以得出
2
×
0
−
4
×
9
=
6
=
u
6
−
4
k
2
−
2
k
1
4
k
2
+
2
k
1
=
u
3
−
4
=
u
4
−
8
=
u
5
−
2
=
u
6
−
6
2 \times 0 - 4 \times 9 = 6 = u_6 - 4k_2 -2 k_1 \\ 4k_2 + 2 k_1 = u_3 - 4 = u_4 - 8 = u_5 - 2 = u_6 - 6
2×0−4×9=6=u6−4k2−2k14k2+2k1=u3−4=u4−8=u5−2=u6−6 得出
(
u
3
,
u
4
,
u
5
,
u
6
)
=
(
4
,
8
,
2
,
6
)
(u_3,u_4,u_5,u_6) = (4,8,2,6)
(u3,u4,u5,u6)=(4,8,2,6)则
4
k
2
+
2
k
1
=
0
4k_2 + 2 k_1 = 0
4k2+2k1=0,故
3
k
2
+
k
1
=
8
4
k
2
+
2
k
1
=
0
3k_2 + k_1 = 8 \\ 4k_2 + 2 k_1 = 0
3k2+k1=84k2+2k1=0
求出
k
1
=
4
,
k
2
=
8
k_1 = 4,k_2 = 8
k1=4,k2=8 ,攻击成功。
总结
大家如果理解了本文的线性分析方法,那么就可以对DES和AES的S盒进行线性分析,进而对整个算法进行线性分析,非常期待大家一起交流,共同学习。欢迎各位小伙伴能够评论转发。
由于公式太多,不可避免地会出现一些错误,如果大家发现了,欢迎大家评论,我看到了会及时做出修改。
参考文献
Granboulan, L., Levieil,´E., Piret, G.: Pseudorandom permutation families overabelian groups. In: Robshaw, M. (ed.) FSE 2006. LNCS, vol. 4047, pp. 57–77.Springer, Heidelberg (2006). doi:10.1007/11799313_5
↩︎