密码分析(二):线性密码分析



在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 ab=i=1naibi,其中, a i ⋅ b i a_i \cdot b_i aibi表示比特 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 ΓXX代表 X X X某些分量的线性组合,即 Γ X ⋅ X = ⊕ i , Γ X i = 1 X i \Gamma X \cdot X = \underset{i, \Gamma X_i = 1}{\oplus}X_i ΓXX=i,ΓXi=1Xi

定义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 x0123456789
S [ x ] S[x] S[x]2687149530

3.1 S盒线性逼近表

Matsui对DES算法进行线性分析的关键在于观察到由S盒导出的线性逼近表达式的偏差特性,并给出了线性逼近表的概念。
定义3.1(S盒的线性逼近表) m , n ∈ N m,n \in N m,nN,从 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} SF2mF2n 。给定 α ∈ 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(α,β)={xF2m:α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,,N1}
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,bx,S(x)=u})u{Z},wherea,bx,y=axby ⟨ a , x ⟩ 表 示 a 和 x 的 标 量 积 \langle a,x \rangle 表示 a 和x的标量积 a,xax

定义 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,bx,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;ufa,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} 22.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=z1k1x2=yk2 所以,对于任意的 ( α , β 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:x3y=u3k2k1pu=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:2x4y=u4k22k1pu=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:x3y=u3k2k113×2=5=u13k2k1,i.e. 3k2+k1=u1553×8=1=u23k2k1,i.e. 3k2+k1=u21i.e. 3k2+k1=u15=u21 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:2x4y=u4k22k12×14×2=4=u34k22k1i.e. 4k2+2k1=u342×54×8=8=u44k22k1i.e. 4k2+2k1=u48i.e. 4k2+2k1=u34=u48 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×74×4=8=u54k22k14k2+2k1=u34=u48=u58 所以这个明密文对和明密文对 ( 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×64×0=2=u54k22k14k2+2k1=u34=u48=u52 得出 ( 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×84×6=2=u64k22k14k2+2k1=u34=u48=u52=u62 ( 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×94×5=2=u64k22k14k2+2k1=u34=u48=u52=u68 ( 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×04×9=6=u64k22k14k2+2k1=u34=u48=u52=u66 得出 ( 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盒进行线性分析,进而对整个算法进行线性分析,非常期待大家一起交流,共同学习。欢迎各位小伙伴能够评论转发。

由于公式太多,不可避免地会出现一些错误,如果大家发现了,欢迎大家评论,我看到了会及时做出修改。

参考文献


  1. 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
    ↩︎

  • 13
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
当进行线性密码分析时,可以使用以下测试用例来验证算法的正确性: 1. 输入明文和密文对: - 明文:0x1234,密文:0xABCD - 明文:0x5678,密文:0xEFGH 这些测试用例用于检查算法是否能够正确地生成密钥与明文和密文对之间的线性关系。 2. 输入不同的密钥和明文对: - 密钥:0xAAA,明文:0x1234,密文:0xBCEF - 密钥:0xBBB,明文:0x5678,密文:0xDFGH 这些测试用例用于验证算法是否能够处理不同的密钥和明文对,并且能够正确地找到线性关系。 3. 输入相同的密钥和不同的明文对: - 密钥:0xCCC,明文1:0x1234,明文2:0x5678,密文1:0xABCD,密文2:0xEFGH 这些测试用例用于检查算法是否能够找到多个明文和密文对之间的公共线性关系,并生成正确的密钥。 4. 输入不同的密钥和不同的明文对: - 密钥1:0xAAA,密钥2:0xBBB,明文1:0x1234,明文2:0x5678,密文1:0xABCD,密文2:0xEFGH 这些测试用例用于验证算法是否能够处理多个不同的密钥和明文对,并生成正确的线性关系。 5. 输入无效的密文: - 密钥:0xAAA,明文:0x1234,无效的密文:0xXXXX - 密钥:0xBBB,明文:0x5678,无效的密文:0xYYYY 这些测试用例用于检查算法是否能够正确地处理无效的密文输入,并返回适当的错误提示。 以上是一些常见的线性密码分析测试用例,可以根据具体的算法和实现进行调整和扩展。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网安小蔡不辅

在千山万水人海里相遇是缘分

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值