【代替-置换网络】【对代替-置换网络的攻击】【现代密码学】

代替-置换网络

混淆扩散范例

  • 混淆

F k ( x ) = f 1 ( x 1 ) ⋯ f 16 ( x 16 ) F_k(x) = f_1(x_1)\cdots f_{16}(x_{16}) Fk(x)=f1(x1)f16(x16)

  • 分散
    • 对得到的值进行重新排列
  • 混淆-分散
    • 重复使用混淆与扩散确保输入中任何微小的改变都将混合以及传递到所有的输出比特

代替置换(SP)网络

  • 单轮
    1. 输入明文 m m m,子密钥 K 1 K_1 K1,输出 m ⊕ K 1 m \oplus K_1 mK1,作为S盒的输入
    2. S盒对输入进行(区域)混淆,输出混淆值
    3. 对S盒的输出进行重排列,输出密文 c c c
  • 安全性的决定因素
    • S盒(Sbox)
    • 混合置换(MP, mixing permutations)
    • 密钥编排

设计原则

  1. S盒可逆
    • 必须可逆,为了解密 c c c
    • 需要小心的设计,而是盲目的随机选择,为了满足雪崩效应
  2. 雪崩效应
    • 随机混合置换产生非常弱的雪崩效应
    • 雪崩效应的要求
      1. S盒输入改变单比特,输出至少改变两比特
      2. 混合置换的设计要使任何给定的 S S S盒的输出比特被传递到下一轮不同的 S S S盒中

攻击1、2、3轮代替置换网络

  • 1轮 y = F k ( x ) y = F_k(x) y=Fk(x)
    1. y 2 ← M P − 1 y y_2 \overset{MP^{-1}}{\leftarrow} y y2MP1y
    2. y 1 ← S b o x − 1 y 2 y_1 \overset{Sbox^{-1}}{\leftarrow} y_2 y1Sbox1y2
    3. k = x ⊕ y 1 k = x \oplus y_1 k=xy1
  • 2轮 b l o c k = 64 b i t S b o x = 4 b i t k ∈ { 0 , 1 } 128 block = 64bit \quad Sbox = 4bit \quad k \in \{0, 1\}^{128} block=64bitSbox=4bitk{ 0,1}128
    1. y 2 b ← M P 2 − 1 y y^b_2 \overset{MP_2^{-1}}{\leftarrow} y y2bMP21y

    2. y 1 b ← S b o x 1 − 1 y 2 b y^b_1 \overset{Sbox_1^{-1}}{\leftarrow} y^b_2 y1bSbox11y2b y 1 b = w 1 w 2 ⋯ w 16 y^b_1 = w_1w_2 \cdots w_{16} y1b=w1w2w16

    3. w 1 = k 1 b ⊕ α 1 w_1 = k^b_1 \oplus \alpha_1 w1=k1bα1,其中

      α = α 1 α 2 ⋯ α 16 \alpha = \alpha_1\alpha_2\cdots\alpha_{16} α=α1α2α16为第一轮输出(未知),且

      α ← M P 1 y 2 a ← S b o x 1 y 1 a = x ⊕ k a \alpha \overset{MP_1}{\leftarrow} y^a_2 \overset{Sbox_1}{\leftarrow} y^a_1 = x \oplus k^a αMP1y2aSbox1y1a=xka

    4. 逆转 α \alpha α(不需要知道具体值)的混合置换,可以知道 α 1 \alpha_1 α1的4bit来自哪些 S b o x Sbox Sbox,最坏情况下,4bit分别来自4个不同的 S b o x Sbox Sbox,4个 S b o x Sbox Sbox的输入共16bit,由输入 x x x和第一轮密钥 k a k^a ka的对应16bit异或得到,设 k a k^a ka的对应16bit为 k l 1 a k^a_{l_1} kl1a

    5. 猜测 k l 1 a k^a_{l_1} kl1a,并得到相应的 α 1 ← k l 1 a \alpha_1 \leftarrow k^a_{l_1} α1kl1a;同时猜测 k 1 b k^b_1 k1b,用 S t e p 3 Step3 Step3中的 w 1 = k 1 b ⊕ α 1 w_1 = k^b_1 \oplus \alpha_1 w1=k1bα1验证猜测

      由于该过程的映射为 { 0 , 1 } 16 + 4 → { 0 , 1 } 4 \{0, 1\}^{16 + 4} \rightarrow \{0, 1\}^4 { 0,1}16+4{ 0,1}4,因此穷举空间为 2 20 2^{20} 220,通过测试的概率为 1 2 ∣ w 1 ∣ = 1 2 4 = 1 16 \frac{1}{2^{|w_1|}} = \frac{1}{2^4} = \frac{1}{16} 2w11=241=161,因此通过测试的 k l 1 a ∣ k 1 b k^a_{l_1}|k^b_1 kl1ak1b的个数为 2 20 × 2 − 4 = 2 16 2^{20} \times 2^{-4} = 2^{16} 220×24=216

    6. 使用多对不同 ( x , y ) (x, y) (x,y)测试,每对测试期望筛除 15 16 \frac{15}{16} 1615(留下 1 2 4 \frac{1}{2^4} 241)的候选 k l 1 a ∣ k 1 b k^a_{l_1}|k^b_1 kl1ak1b,至少需要 5 ( 1 + 4 ) 5(1 + 4) 5(1+4)对输入/输出 ( x , y ) (x, y) (x,y)进行验证,才可能留下唯一的一种 k l 1 a ∣ k 1 b k^a_{l_1}|k^b_1 kl1ak1b

    复杂度分析
    1. 假设使用8对 ( x , y ) (x, y) (x,y)最终确定了唯一可能的 k l 1 a ∣ k 1 b k^a_{l_1}|k^b_1 kl1ak1b,复杂度为 8 × 2 20 = 2 23 8 \times 2^{20} = 2^{23} 8×220=223(实际小于这个值)

      扫描二维码关注公众号,回复: 13472463 查看本文章
    2. k b k^b kb的所有16个部分按上述方法攻击,复杂度为 16 × 2 23 = 2 27 16 \times 2^{23} = 2^{27} 16×223=227(实际也小于这个值)

    3. 在确定 k b k^b kb同时,也确定了 k a k^a ka的所有位,因此总复杂度为 2 27 2^{27} 227,这远小于穷举密钥空间 2 128 2^{128} 2128的复杂度

      原因在于,2轮并没有使密钥的所有比特影响输出的所有比特(仅有20bit影响了输出的前4bit)

  • 3轮
    • 雪崩效应依然未完成,改变输入的1bit,输出将会有很多保持不变,因此很容易和随机置换区别开来
    • 获得密钥需要更高的复杂度

猜你喜欢

转载自blog.csdn.net/weixin_39578432/article/details/120649235