基础差分-线性

前言

汇报文章:

8轮DES攻击

  • 整体思想

通过差分保证线性逼近式中需要的bit不变,应用线性攻击的方法恢复最后一轮的个别子密钥。

  • 整体结构
    • 第1轮:明文对的构造。

    • 第2-4轮:差分路径。

    • 第5-7轮:线性路径。

    • 第8轮:密钥恢复。
      在这里插入图片描述
      在这里插入图片描述

    • 明文输入阶段

      • 整体结构:
        在这里插入图片描述
        我们需要得到满足第2轮的差分输入的明文对。
      • 明文对构造:对于一个结构,遍历L 0 [ 9 , 17 , 23 , 31 ] L_0[9,17,23,31]L0[9,17,23,31]R 0 [ 2 , 3 ] R_0[2,3]R0[2,3]这6个bit位置,同一个结构其他bit位置相同。在第一轮的F函数中,只有S1的输入有差分,所以只有S1的输出值可能不同,S1的输出bit位置经过P置换的位置为[9,17,23,31]从而决定了R 1 R_1R1,所以对于每一个明文,在R 0 [ 2 , 3 ] R_0[2,3]R0[2,3]选取不同的值时,都可以通过L 0 [ 9 , 17 , 23 , 31 ] L_0[9,17,23,31]L0[9,17,23,31]来调节R 1 R_1R1来和选定的明文 Δ \DeltaΔR 1 = 0 R_1=0R1=0.
      • 完成上述操作就需要猜测第一轮中S1中的6bit密钥。
      • 数量分析:对于一个结构,6bit遍历,产生2 6 = 64 2^6=6426=64个明文,对于每一个明文,都能找到3个不同的明文满足第二轮差分输入,但是存在相互重复的情况,所以有64*3/1=96对。
    • 差分阶段:
      在这里插入图片描述

      • 差分输入对:输入对的L 1 L_1L1只在bit位置2或3有异或,输入对的R 1 R^1R1完全相同(所以对于一个第二轮的输入,与之匹配的输入对共有3种)
      • 第二轮输出情况:L 2 L^2L2=R 1 R^1R1,故L 2 L^2L2无异或。进入F函数的输入完全相同,故F函数的输出无异或(完全相同),经过与L 1 L^1L1进行异或后,R 2 R_2R2只在bit位置2或3有异或。
      • 第三轮输出情况:L 3 L^3L3=R 2 R^2R2,故L 3 L_3L3只在bit位置2或3有异或。进入F函数中的输入只在bit位置2或3有差分,故F函数中S2-S8输入相同,仅有S1输入有异或,S1的输出4bit经过P置换操作后的位置为(3,1)/(5,1)/(6,3)/(8,3),对应bit位置为:9/17/23/31,后与之进行异或的L 2 L_2L2无差分,故R 3 R_3R3只有bit位置9/17/23/31可能有差分。
        在这里插入图片描述
      • 第四轮输出情况:L 4 L^4L4=R 3 R^3R3,故L 4 L_4L4只在bit位置9/7/23/31有异或。进入F函数的R 3 R_3R3,首先,经过E扩展后,S2/S3/S4/S5/S6/S8这6个S盒的输入都可能有差分,所以这6个S盒的输出都可能有差分,
        在这里插入图片描述
        S1和S7输出的8bit无差分,对应坐标为:(3,1)(5,1)(6,3)(8,3)和(8,4)(3,4)(6,2)(2,3),对应输出位置:9/17/23/31/32/12/22/7无差分。
        在这里插入图片描述
        经过4轮迭代后,选取的输入差分以概率1在L 4 L_4L4[3,8,14,25]和R 4 R_4R4[17]这5个bit位置无差分。
    • 线性阶段

      • 使用的线性逼近式:
        在这里插入图片描述
        成立的概率:p=0.695。
        因为K 1 [ 26 ] K_1[26]K1[26]K 3 [ 26 ] K_3[26]K3[26]未知,当他们的异或加一定为0或1(在猜测密钥固定的情况下)。所以我们给出以下式子:
        在这里插入图片描述
        其概率:p=0.695或0.305(取决于K 1 [ 26 ] K_1[26]K1[26]K 3 [ 26 ] K_3[26]K3[26]=0或1).
      • 攻击思想:对于输入的明文对,都有上面的线性逼近式成立,我们将这对明文的线性逼近式异或加,就得到:
        Δ \DeltaΔ((L 0 [ 3 , 8 , 14 , 25 ] L_0[3,8,14,25]L0[3,8,14,25]⨁ \bigoplusR 0 [ 17 ] R_0[17]R0[17])⨁ \bigoplus(L 3 [ 3 , 8 , 14 , 25 ] L_3[3,8,14,25]L3[3,8,14,25]⨁ \bigoplusR 3 [ 17 ] R_3[17]R3[17]))=0
        Δ \DeltaΔ(L 0 [ 3 , 8 , 14 , 25 ] L_0[3,8,14,25]L0[3,8,14,25]⨁ \bigoplusR 0 [ 17 ] R_0[17]R0[17])以概率1为0,
        故:Δ \DeltaΔ(L 3 [ 3 , 8 , 14 , 25 ] L_3[3,8,14,25]L3[3,8,14,25]⨁ \bigoplusR 3 [ 17 ] R_3[17]R3[17]))=0成立的概率为:p 2 + q 2 p^2+q^2p2+q2=0.576(q = 1 − p q=1-pq=1p
    • 密钥恢复阶段(上述分析的角标只针对3轮线性分析)

      • 整体结构
        在这里插入图片描述
      • 已知Δ \DeltaΔ(L 7 [ 3 , 8 , 14 , 25 ] L_7[3,8,14,25]L7[3,8,14,25]⨁ \bigoplusR 7 [ 17 ] R_7[17]R7[17]))=0成立的概率为:p 2 + q 2 p^2+q^2p2+q2=0.576(q = 1 − p q=1-pq=1p),
        R 7 [ 3 , 8 , 14 , 25 ] = L 8 [ 3 , 8 , 14 , 25 ] R_7[3,8,14,25]=L_8[3,8,14,25]R7[3,8,14,25]=L8[3,8,14,25](通过明文可知),L 7 [ 17 ] L_7[17]L7[17]我们通过R 8 [ 17 ] R_8[17]R8[17]和F函数的输出异或得出:
        L 7 [ 17 ] = O u t p u t ( F [ 17 ] ) ⨁ R 8 [ 17 ] L_7[17]=Output(F[17])\bigoplus R_8[17]L7[17]=Output(F[17])R8[17],在F中S1的output的第二bit经过P置换后的位置为17,所以我们需要K 8 , 1 K_8,_1K8,1 的6bit密钥值即可的到L 7 [ 17 ] L_7[17]L7[17]的值。
    • 复杂度分析

      • 猜测密钥:K 1 , 1 K_1,_1K1,1K 8 , 1 K_8,_1K8,1共 6bit。
      • 所需明文:根据线性攻击的数据复杂度估计规则,所需明文对数的估计式为:8 / ( r − 0.5 ) 2 8/(r-0.5)^28/(r0.5)2,其中r = 0.576 r=0.576r=0.576,故所需明文对数约为1400对。我们需要1400/96种结构,每个结构产生64个明文,故对于8轮DES进行差分-线性攻击,需要的明文量为1400 ∗ 64 / 96 = 900 1400*64/96=900140064/96=900
      • 时间复杂度:选取明文量为768 = 2 9.58 768=2^{9.58}768=29.58,共猜测10bit密钥值,2 10 2^{10}210种,每次进行2个S盒的运算,故时间复杂度为2 9.58 ∗ 2 10 ∗ 2 / 64 = 2 14.58 2^{9.58}*2^{10}*2/64=2^{14.58}29.582102/64=214.58
    • 具体的攻击流程:

    1. 设立10bit密钥(K 1 , 1 K 8 , 1 K_1,_1K_8,_1K1,1K8,1)的寄存器(两个子秘钥有2bit是重复),共1024 10241024种密钥情况;
    2. 对于每种K 1 , 1 K_1,_1K1,1密钥情况,通过上述结构构造方式,生成900个明文/1400个明文对,满足第二轮的差分输入;
    3. 计算明文输入对应的密文;
    4. 猜测最后一轮子秘钥K 8 , 1 K_8,_1K8,1,得到Δ \DeltaΔ(L 3 [ 3 , 8 , 14 , 25 ] L_3[3,8,14,25]L3[3,8,14,25]⨁ \bigoplusR 3 [ 17 ] R_3[17]R3[17]))的值,若为0,这将此10bit密钥对应计数器+1;
    5. 猜测计数器中的最大值对应的密钥值为10bit正确的子秘钥。
选择明文量成功概率
76895%

改进8轮DES攻击

  • 整体思想:
    引入有概率的差分路径.

  • 差分路径:
    在这里插入图片描述

    • 第1轮:
      在第1轮中输入差分为00 80 82 00 60 00 00 00,F函数的输入为60 00 00 00,我们需要F函数的输出差分为00 80 82 00才能满足第2轮的输入差分,所以F(60 00 00 00)=00 80 82 00的概率为14/64。
    • 第2轮:
      第2轮的F输入无差分,输出无差分。整体输出差分为:00 00 00 00 60 00 00 00。
    • 第3轮:
      F函数的输入差分为:60 00 00 00,只有S1输入有2bit差分,故只有S1的输出的4bit有差分,经过P置换后到[8,17,23,31]这4个bit位置,这4个bit位置分别代表了对应位置异或值为0或1两种可能,我们将其规范表达出来:F ( 60000000 ) = 00 W 0 X Y 0 Z F(60 00 00 00)=00 W0 XY 0ZF(60000000)=00W0XY0Z,其中W ∈ W \inW {0,8},X ∈ X \inX {0,8},Y ∈ Y \inY {0,2},Z ∈ Z \inZ {0,2},所以第3轮的输出差分为:60 00 00 00 00 W0 XY 0Z
    • 第4轮:
      根据基础差分-线性中对于F函数输出的分析,经过E扩展、S盒、P置换后,我们可以确定的是,S1和S7的输出经过P置换后的bit位置:[9,17,23,31,32,12,22,7]无差分,对于[17],它确定了?? ?? M? ??中M的范围0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 {0,1,2,3,4,5,6,7}0,1,2,3,4,5,6,7,不可能为8,因为最高位的位置为[17]=0。
  • 线性路径
    在这里插入图片描述
    我们线性逼近式的输入端掩码bit位置为L [ 3 , 8 , 17 ] L[3,8,17]L[3,8,17]R [ 17 ] R[17]R[17],根据上述差分路径的输出:00 W0 XY 0Z ?? ?? M? ??,线性掩码bit位置对应的差分值都为0(p=14/64)

  • 整体概率计算:

    • 线性
    • **线性逼近式的概率:**使用堆积引理计算
      p = − 20 / 64 p=-20/64p=20/64,1 / 2 + q = 1 / 2 + 2 ( − 20 / 64 ) 2 ≈ 1 / 2 + 0.195 1/2+q=1/2+2(-20/64)^2\approx1/2+0.1951/2+q=1/2+2(20/64)21/2+0.195
    • 经过差分路径后的输出差分满足线性线性逼近式所需bit为0的概率:
      包括满足差分特征的对和不满足差分特征的对。(差分路径概率记为1 / 2 + p ′ = 1 / 2 + 14 / 64 1/2+p'=1/2+14/641/2+p=1/2+14/64
      满足差分特征的对,所需bit异或值必为0,p 1 = p ′ = 14 / 64 p_1=p'=14/64p1=p=14/64
      不满足差分特征的对,在我们所需要的bit位置(L [ 3 , 8 , 17 ] L[3,8,17]L[3,8,17]R [ 17 ] R[17]R[17])异或值也可能为0,将这一部分的概率估计为p 2 = ( 1 − p ′ ) / 2 p_2=(1-p')/2p2=(1p)/2
      所以总体满足线性逼近式中所需bit异或为0的概率为q = p 1 + p 2 = 1 / 2 + p ′ / 2 = 1 / 2 + 0.109 q=p_1+p_2=1/2+p'/2=1/2+0.109q=p1+p2=1/2+p/2=1/2+0.109
    • 整体概率使用堆积引理:两次线性逼近式成立概率
      在这里插入图片描述
  • 具体攻击流程:

  1. 选择2 13.81 2^{13.81}213.81满足差分明文对(0080820060000000 00 80 82 00 60 00 00 000080820060000000)作为输入;
  2. 计算明文输入对应的密文;
  3. 建立针对6bit子秘钥的寄存器(K 8 , 1 K_8,_1K8,12 6 = 64 2^6=6426=64情况);
  4. 猜测最后一轮子秘钥K 8 , 1 K_8,_1K8,1,得到Δ \DeltaΔ(L 3 [ 3 , 8 , 14 , 25 ] L_3[3,8,14,25]L3[3,8,14,25]⨁ \bigoplusR 3 [ 17 ] R_3[17]R3[17]))的值,若为0,这将此10bit密钥对应计数器+1;
  5. 猜测计数器中的最大值对应的密钥值为10bit正确的子秘钥。
  • 复杂度估计:
    • 时间复杂度,选取了2 14.81 2^{14.81}214.81个明文,猜测的密钥总数2 6 = 64 2^6=6426=64,每次需要计算1个S盒,所以时间复杂度为:
      2 14.81 ∗ 2 6 / 64 = 2 14.81 2^{14.81}*2^6/64=2^{14.81}214.8126/64=214.81
选择明文对成功概率
2 13.81 2^{13.81}213.8177.27%

改进9轮DES攻击

  • 改进思想:替换8轮攻击所使用的差分路径,以减少路径中的活动S盒的个数,并在第1轮加上一轮输入构造以满足第2轮的差分输入(构造思想通传统差分-线性攻击第1轮)。
  • 差分路径
    在这里插入图片描述
  • 第1轮结构的构造:
  1. 选取一个初始明文P 0 P_0P0。对P 0 P_0P0中的8个bit位置:(18 22 28 28 00 00 00 00),遍历得到256个明文,记作P 0 P_0P0P 255 P_{255}P255
  2. 再用差分(40 00 00 00 00 00 02 02)与上述产生的256个明文进行异或,得到另外的256个明文。以上对于每一个结构得到了512个明文,记作P 256 P_{256}P256P 511 P_{511}P511
  3. 猜测第一轮K 1 , 6 K_1,_6K1,6K 1 , 8 K_1,_8K1,8 12bit子密钥,验证P i P_iPiP i − 256 P_{i-256}Pi256,因为他们进入F函数的差分为00 00 02 02,活动S盒为S6和S8,猜测S6和S8的12bit子密钥。若经过F函数后,可能产生差分值得位置为18 22 28 28,输入对的Δ \DeltaΔL 0 L_0L0=18 22 28 28,故必然存在差分抵消的情况:Δ \DeltaΔL 0 L_0L0⨁ \bigoplusΔ \DeltaΔF ( R 0 ) F(R_0)F(R0)=00 00 00 00;
  4. 若抵消成功,则满足我们第2轮的差分输入;
  5. 接下来步骤同8轮DES攻击。
  • 复杂度分析:
    • 猜测密钥数为18bit。
    • 所需明文量为2 15.75 2^{15.75}215.75
    • 每次攻击进行3次S盒的运算,故2 15.75 ∗ 2 18 ∗ 3 / 72 = 2 29.17 2^{15.75}*2^{18}*3/72=2^{29.17}215.752183/72=229.17
      在这里插入图片描述

版权声明:本文为weixin_42600531原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。