现代密码学笔记-Chapter3

一、分组密码概述

扩散和混淆

  • 扩散
    • 明文的统计特性散布到密文中去
  • 混淆
    • 密文与密钥之间的统计关系变得尽可能复杂

二、DES

Feistel结构(迭代与密钥相关的非线性变换)

  • 加解密一致(相同硬件结构,改变(逆序)密钥输入)
  • 扩散性较差(两轮才改变输入的一比特信息)

L i = R i − 1 \qquad L_i=R_{i-1} Li=Ri1
R i = L i − 1 ⊕ F ( R i − 1 , K i ) \qquad R_i=L_{i-1}\oplus F(R_{i-1},K_i) Ri=Li1F(Ri1,Ki)
F : Z n × Z m → Z n \qquad F:\mathbb{Z}^n\times \mathbb{Z}^m\rightarrow \mathbb{Z}^n F:Zn×ZmZn

  1. 64比特输入 → \rightarrow 初始置换IP → \rightarrow 16轮结构(左右32比特) → \rightarrow 左右交换 → \rightarrow 逆初始置换 → \rightarrow 64比特输出
  2. 64比特密钥 → \rightarrow 除去校验位 → \rightarrow 56比特(左右28比特) → \rightarrow (下一轮密钥输入,置换选择2 → \rightarrow K i K_i Ki(48比特))
  3. F函数:( R i − 1 → R_{i-1}\rightarrow Ri1 扩展变换E) ⊕ K i \oplus K_i Ki → \rightarrow S盒 → \rightarrow 置换P,即 P ( S [ E ( R i − 1 ) ⊕ K i ] ) P(S[E(R_{i-1})\oplus K_i]) P(S[E(Ri1)Ki])
  • 扩展变换E:32比特 → \rightarrow 48比特

\qquad ————————————————
\qquad 32 ∣ ∣ 1 2 3 4 ∣ ∣ 5 4 ∣ ∣ 5 6 7 8 ∣ ∣ 9 ⋮ ∣ ∣ ⋮ ⋮ ⋮ ⋮ ∣ ∣ ⋮ 28 ∣ ∣ 29 30 31 32 ∣ ∣ 1 \begin{array}{rccccl} \textbf{32}|| & 1 & 2 & 3 & 4 & ||\textbf{5}\\ \textbf{4}|| & 5 & 6 & 7 & 8 & ||\textbf{9}\\ \vdots|| & \vdots& \vdots& \vdots & \vdots & ||\vdots\\ \textbf{28}|| & 29 & 30 & 31 & 32 & ||\textbf{1}\\ \end{array} 324281529263037314832591
\qquad ————————————————

  • S盒
    • 1、6比特选择4种代换中的某行
    • 2、3、4、5比特选择该代换中16列的某列
    • 110101 → \rightarrow 行号 ( 11 ) 2 (11)_2 (11)2=3,列号 ( 1010 ) 2 (1010)_2 (1010)2=10,即第4行第11列(从0开始)

形式

  • 平衡(平分输入)
  • 非平衡(改变F函数的输出长度)

三、二重DES

1. 112比特攻击难度(密钥长度56比特)

C = E k 2 [ E k 1 ( P ) ] \qquad C=E_{k_2}[E_{k_1}(P)] C=Ek2[Ek1(P)]
P = D k 1 [ D k 2 ( C ) ] \qquad P=D_{k_1}[D_{k_2}(C)] P=Dk1[Dk2(C)]

无法找到另一密钥 k 3 k_3 k3使得 E k 2 [ E k 1 ( P ) ] = E k 3 ( P ) E_{k_2}[E_{k_1}(P)]=E_{k_3}(P) Ek2[Ek1(P)]=Ek3(P)

2.中间相遇攻击

X = E k 1 ( P ) = D k 2 ( C ) \qquad X=E_{k_1}(P)=D_{k_2}(C) X=Ek1(P)=Dk2(C)
对已知明密文对 ( P , C ) (P,C) (P,C),执行如下攻击行为:

  • 2 56 2^{56} 256种潜在的密钥 K 1 K_1 K1对明文 P P P加密得到 C ( k ) C^{(k)} C(k),将临时密文按序存入到表 T T T中( 2 56 2^{56} 256行记录 { K 1 ( k ) , C ( k ) } \{K^{(k)}_1,C^{(k)}\} {K1(k),C(k)});
  • 2 56 2^{56} 256种潜在的密钥 K 2 K_2 K2对密文 P P P解密得到 M ( k ) M^{(k)} M(k),在表 T T T种查找匹配项;
  • 若匹配,记录对应的密钥 K 1 K_1 K1 K 2 K_2 K2,用新的明密文对检验

\qquad 对于已知明文,二重DES产生 2 64 2^{64} 264种潜在的密文,但潜在的密钥有 2 112 2^{112} 2112种。因而,如果已知一个明文,有 2 112 / 2 64 = 2 48 2^{112}/2^{64}=2^{48} 2112/264=248种密钥可产生已知的密文,即存在多对一的映射, 2 48 2^{48} 248种密钥加密已知明文通过不同的映射产生此对应的密文。
\qquad 若再得一组明密文对检验, 2 48 2^{48} 248种密钥对 2 64 2^{64} 264种映射。即没有映射到当前密文的概率是 2 48 / 2 64 = 2 − 12 2^{48}/2^{64}=2^{-12} 248/264=212,也就是虚警(误报率)。
\qquad 因而,获得两份明密文对,中途相遇攻击的成功概率(找到密钥的概率)为 1 − 2 − 16 1-2^{-16} 1216
P.S.书上讲的误报率,直接理解有点迷惑。针对误报率,它的解释就是正例样本中负例的比例。个人理解为潜在的 2 48 2^{48} 248种密钥的错误率,即找错了密钥,加密第二份明文不会映射到当前密文,而是映射为其他的密文,这个概率是 2 − 12 2^{-12} 212。立即推,正确的概率为互补概率 1 − 2 − 16 1-2^{-16} 1216

3. 三重DES

  • 两个密钥 C = E k 2 [ D k 2 [ E k 1 ( P ) ] ] C=E_{k_2}[D_{k_2}[E_{k_1}(P)]] C=Ek2[Dk2[Ek1(P)]]
  • 三个密钥 C = E k 3 [ D k 2 [ E k 1 ( P ) ] ] C=E_{k_3}[D_{k_2}[E_{k_1}(P)]] C=Ek3[Dk2[Ek1(P)]]

四、运行模式

1.电码本ECB

  • 每个分组同一密钥加密
  • 传送短数据
  • C i = E k [ P i ] , P i = D k [ C i ] C_{i}=E_k[P_i],P_i=D_k[C_i] Ci=Ek[Pi],Pi=Dk[Ci]

2. 密码分组链接CBC

  • 当前明文组与前一密文组异或
  • 认证,传送数据分组(64比特)
  • C i = E k [ I V ⊕ P i ] , P i = I V ⊕ D k [ C i ] C_i=E_k[IV\oplus P_i],P_i=IV\oplus D_k[C_i] Ci=Ek[IVPi],Pi=IVDk[Ci]

3.密码反馈CFB

  • 只处理临时密文组 j j j比特最高有效位,与当前明文组异或(输出的密文与IV j j j比特最低有效位相同)
  • 认证,传送数据流
  • C i = P i ⊕ S j ( E ( I V ) ) , P i = C i ⊕ S j ( E ( I V ) ) C_i=P_i\oplus S_j(E(IV)),P_i=C_i\oplus S_j(E(IV)) Ci=PiSj(E(IV))Pi=CiSj(E(IV))

4.输出反馈OFB

  • 类似CFB,不同点:临时密文的 j j j比特直接下一轮IV的 j j j比特最低有效位(不再异或),密文仍然需要异或
  • 干扰信道,传送数据流,错误不传播

五、AES

Rijndael结构(迭代与密钥相关的非线性变换)

  • 轮数更少,扩散更快
  • S盒混淆,P置换扩散
  • 抵抗差分密码攻击、线性密码攻击

在这里插入图片描述
字节代换(非线性) → \rightarrow 行移位 → \rightarrow 列混合(多项式,矩阵乘法) → \rightarrow 轮密钥加(矩阵异或)

明文 → \rightarrow 初始密钥加 → \rightarrow [[字节代换 → \rightarrow 行移位 → \rightarrow 列混合 → \rightarrow 轮密钥加]] ( k e y 1 ) ^{(key_1)} (key1) → ⋯ → \rightarrow\cdots\rightarrow [[字节代换 → \rightarrow 行移位 → \rightarrow 轮密钥加]] ( k e y r ) ^{(key_r)} (keyr) → \rightarrow 密文
明文 ← \leftarrow [[轮密钥加 ← \leftarrow 逆字节代换 ← \leftarrow 逆行移位]] ( k e y 1 ) ^{(key_1)} (key1) ← ⋯ ← \leftarrow\cdots\leftarrow [[列混合 ← \leftarrow 轮密钥加 ← \leftarrow 逆字节代换 → \rightarrow 逆行移位]] ( k e y r ) ^{(key_r)} (keyr) ← \leftarrow 密钥加 ← \leftarrow 密文

part 1

  • 字节代换ByteSub对每个字节做相同变换(逆元+仿射)
  • 行移位ShiftRow对整行字节进行循环移位
    • InvByteSub → \rightarrow InvShiftRow ≡ \equiv InvShiftRow → \rightarrow InvByteSub

part 2
列混合MixColumn将列视为 G F ( 2 8 ) GF(2^8) GF(28)上的多项式,与 c ( x ) c(x) c(x)进行模 x 4 + 1 x^4+1 x4+1乘法。

  • x i x^i xi ≡ x i − x i − 4 ( x 4 + 1 ) ≡ x i − ( x i + x i − 4 ) \equiv x^i-x^{i-4}(x^4+1)\equiv x^i-(x^i+x^{i-4}) xixi4(x4+1)xi(xi+xi4) ≡ x i − 4 ( mod x 4 + 1 ) \equiv x^{i-4} (\textrm{mod} x^4+1) xi4(modx4+1)
  • c ( x ) = 03 x 3 + 01 x 2 + 01 x + 02 → b ( x ) = c ( x ) ⊗ a ( x ) c(x)=03x^3+01x^2+01x+02\rightarrow b(x)=c(x)\otimes a(x) c(x)=03x3+01x2+01x+02b(x)=c(x)a(x)
  • c ( x ) ⊗ d ( x ) ≡ 01 c(x)\otimes d(x)\equiv 01 c(x)d(x)01
  • d ( x ) = d 3 x 3 + d 2 x 2 + d 1 x + d 0 d(x)=d_3x^3+d_2x^2+d_1x+d_0 d(x)=d3x3+d2x2+d1x+d0存在当且仅当:
    ( 03 x 3 + 01 x 2 + 01 x + 02 ) ( d 3 x 3 + d 2 x 2 + d 1 x + d 0 ) ≡ 1 ( mod x 4 + 1 ) (03x^3+01x^2+01x+02)(d_3x^3+d_2x^2+d_1x+d_0)\equiv 1 (\textrm{mod} x^4+1) (03x3+01x2+01x+02)(d3x3+d2x2+d1x+d0)1(modx4+1)
    因此有:
    • ( 03 x 3 + 01 x 2 + 01 x + 02 ) ( d 2 x 3 + d 1 x 2 + d 0 x + d 3 ) ≡ x ( mod x 4 + 1 ) (03x^3+01x^2+01x+02)(d_2x^3+d_1x^2+d_0x+d_3)\equiv x (\textrm{mod} x^4+1) (03x3+01x2+01x+02)(d2x3+d1x2+d0x+d3)x(modx4+1)
    • ( 03 x 3 + 01 x 2 + 01 x + 02 ) ( d 1 x 3 + d 0 x 2 + d 3 x + d 2 ) ≡ x 2 ( mod x 4 + 1 ) (03x^3+01x^2+01x+02)(d_1x^3+d_0x^2+d_3x+d_2)\equiv x^2 (\textrm{mod} x^4+1) (03x3+01x2+01x+02)(d1x3+d0x2+d3x+d2)x2(modx4+1)
    • ( 03 x 3 + 01 x 2 + 01 x + 02 ) ( d 0 x 3 + d 3 x 2 + d 2 x + d 1 ) ≡ x 3 ( mod x 4 + 1 ) (03x^3+01x^2+01x+02)(d_0x^3+d_3x^2+d_2x+d_1)\equiv x^3 (\textrm{mod} x^4+1) (03x3+01x2+01x+02)(d0x3+d3x2+d2x+d1)x3(modx4+1)
    • 改写成矩阵乘法:
      [ 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 ] ⋅ [ d 0 d 3 d 2 d 1 d 1 d 0 d 3 d 2 d 2 d 1 d 0 d 3 d 3 d 2 d 1 d 0 ] = [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] \left[\begin{array}{llll} 02 & 03 & 01 & 01\\ 01 & 02 & 03& 01\\ 01 & 01& 02& 03\\ 03 & 01& 01& 02\\ \end{array} \right]\cdot\left[\begin{array}{llll} d_0 & d_3& d_2& d_1\\ d_1 & d_0& d_3& d_2\\ d_2 & d_1& d_0& d_3\\ d_3 & d_2& d_1& d_0\\ \end{array} \right]=\left[\begin{array}{llll} 1& 0& 0& 0\\ 0& 1& 0& 0\\ 0& 0& 1& 0\\ 0& 0& 0& 1\\ \end{array} \right] 02010103030201010103020101010302d0d1d2d3d3d0d1d2d2d3d0d1d1d2d3d0=1000010000100001
      得到 d ( x ) = 0 B x 3 + 0 D x 2 + 09 x + 0 E d(x)=0\textrm{B}x^3+0\textrm{D}x^2+09x+0\textrm{E} d(x)=0Bx3+0Dx2+09x+0E
  • 注意此处的加法是指逐比特异或操作,乘法是 G F ( 2 8 ) GF(2^8) GF(28)上的多项式乘法运算:即加法逆元等于自己,乘法逆元模 m ( x ) = x ∗ + x 4 + x 3 + x + 1 m(x)=x^*+x^4+x^3+x+1 m(x)=x+x4+x3+x+1,并可以利用扩展的欧几里得算法求逆。
  • 矩阵的逆元按照正常的逆元求解,但加法和乘法必须满足 G F ( 2 8 ) GF(2^8) GF(28)上的性质。
  • M ( x ) = x 4 + 1 M(x)=x^4+1 M(x)=x4+1来求解AES的列混合中的逆元,但具体求解过程则将每个字节展开为 G F ( 2 8 ) GF(2^8) GF(28)上的多项式进行运算

part 3
密钥加AddRoundKey将轮密钥与状态逐比特异或
当分组长度为128,即 N b = N k = 4 N_b=N_k=4 Nb=Nk=4,列宽为4,则迭代轮数 N r = 10 N_r=10 Nr=10
矩阵4列的4个字依次命名为 W [ 0 ] , W [ 1 ] , W [ 2 ] , W [ 3 ] W[0],W[1],W[2],W[3] W[0],W[1],W[2],W[3],它们构成一个以字为单位的数组 W W W。因而,轮密钥一共 128 × ( N r + 1 ) 128\times (N_r+1) 128×(Nr+1)比特=44列,即需要扩充40个新列。新列以如下的递归方式产生:

  1. 如果 i i i不是4的倍数,那么第 i i i列由如下等式确定: W [ i ] = W [ i − 4 ] ⊕ W [ i − 1 ] W[i]=W[i-4]\oplus W[i-1] W[i]=W[i4]W[i1] .
  2. 如果 i i i是4的倍数,那么第 i i i列由如下等式确定:
    W [ i ] = W [ i − 4 ] ⊕ T ( W [ i − 1 ] ) W[i]=W[i-4]\oplus T(W[i-1]) W[i]=W[i4]T(W[i1])
    函数T由3部分组成:字循环(循环左移1个字节)、字节代换(S盒)和轮常量异或( R c o n [ i / 4 ] = ( R C [ i / 4 ] , 00 , 00 , 00 ) = ( x i / 4 − 1 , 00 , 00 , 00 ) Rcon[i/4]=(RC[i/4],00,00,00)=(x^{i/4-1},00,00,00) Rcon[i/4]=(RC[i/4],00,00,00)=(xi/41,00,00,00))。

part2和part3逆运算交换顺序:
\quad AddRoundKey( ⋅ \cdot ,Key) → \rightarrow InvMinColumn
=(状态阵列 ⊕ \oplus 轮密钥阵列) ⊗ d ( x ) \otimes d(x) d(x)
=(状态阵列 ⊗ d ( x ) \otimes d(x) d(x)) ⊕ \oplus (轮密钥阵列 ⊗ d ( x ) \otimes d(x) d(x))
=InvMinColumn → \rightarrow AddRoundKey( ⋅ \cdot ,InvMinColumn(Key))

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值