题目
使用Rijndael的一些组件构建Feistel密码。密码的基本参数是:
- 32位明文输入M.
- 32位密钥K.
- 6轮加密
- Feistel函数在2×2状态矩阵上工作,每个结果最多是x的3次方对应的多项式。所有算术运算在
F24
F
2
4
中相对于不可约多项式
p(x)=x4+x+1
p
(
x
)
=
x
4
+
x
+
1
执行。单个操作更改如下:
- SubBytes(替换字节):获得输入项在在
F24
F
2
4
下的逆元,然后执行转换:
⎡⎣⎢⎢⎢y0y1y2y3⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢1110011100110011⎤⎦⎥⎥⎥⋅⎡⎣⎢⎢⎢x0x1x2x3⎤⎦⎥⎥⎥+⎡⎣⎢⎢⎢1001⎤⎦⎥⎥⎥ [ y 0 y 1 y 2 y 3 ] = [ 1 0 0 0 1 1 0 0 1 1 1 1 0 1 1 1 ] ⋅ [ x 0 x 1 x 2 x 3 ] + [ 1 0 0 1 ] - MixColumns(混合列):执行i = 0,1的转换:
[b0,ib1,i]=[0x030x040x070x03]⋅[a0,ia1,i] [ b 0 , i b 1 , i ] = [ 0 x 03 0 x 07 0 x 04 0 x 03 ] ⋅ [ a 0 , i a 1 , i ] - ShiftRows(移动行):不要移动第一行,左移第二行。
- MultRoundKey(多轮加密):密钥
Ki=k1||k2||k3||k4
K
i
=
k
1
|
|
k
2
|
|
k
3
|
|
k
4
和状态矩阵A,
[k1k2k3k4]=[a1a2a3a4]⋅[a′1a′2a′3a′4] [ k 1 k 3 k 2 k 4 ] = [ a 1 a 3 a 2 a 4 ] ⋅ [ a 1 ′ a 3 ′ a 2 ′ a 4 ′ ]其中 kj,αj k j , α j 都是4位。 - Key schedule(关键进程):
K0,K1,…,K5
K
0
,
K
1
,
…
,
K
5
计算如下:
该算法被改变为具有8位,即一个字长度执行每个操作,每个Wi是长度为8位的。
我们用 T:=W4i−1<<<3 T : = W 4 i − 1 <<< 3 替换旋转操作,并将圆常数计算为 RCi=xi+3(modx4+x+1) R C i = x i + 3 ( m o d x 4 + x + 1 ) 。
我们定义了两个函数l,r来分别访问8位字的前4位和后4位,使得 T=1(T)||r(T) T = 1 ( T ) | | r ( T ) 。 SubBytes函数如上定义并应用为 T:=SubBytes(l(T))||SubBytes(r(T)) T : = S u b B y t e s ( l ( T ) ) | | S u b B y t e s ( r ( T ) ) 。
我们计算2x2的密钥矩阵:
Ki=[[l(W4i)⊗r(W4i)]⊕l(W4i)⊕r(W4i)[l(W4i+1)⊗r(W4i+1)]⊕l(W4i+1)⊕r(W4i+1)[l(W4i+2)⊗r(W4i+2)]⊕l(W4i+2)⊕r(W4i+2)[l(W4i+3)⊗r(W4i+3)]⊕l(W4i+3)⊕r(W4i+3)] K i = [ [ l ( W 4 i ) ⊗ r ( W 4 i ) ] ⊕ l ( W 4 i ) ⊕ r ( W 4 i ) [ l ( W 4 i + 2 ) ⊗ r ( W 4 i + 2 ) ] ⊕ l ( W 4 i + 2 ) ⊕ r ( W 4 i + 2 ) [ l ( W 4 i + 1 ) ⊗ r ( W 4 i + 1 ) ] ⊕ l ( W 4 i + 1 ) ⊕ r ( W 4 i + 1 ) [ l ( W 4 i + 3 ) ⊗ r ( W 4 i + 3 ) ] ⊕ l ( W 4 i + 3 ) ⊕ r ( W 4 i + 3 ) ]
然后计算Feistel函数:令第i轮的输入为 Mi=Li||Ri M i = L i | | R i ,其中右边 Ri=r1||r2||r3||r4 R i = r 1 | | r 2 | | r 3 | | r 4 ,其中 rj,j=1,…4 r j , j = 1 , … 4 各为4位。
F(Ri,Ki):= F ( R i , K i ) :=
A=[a1a2a3a4]:=[r1r2r3r4] A = [ a 1 a 3 a 2 a 4 ] := [ r 1 r 3 r 2 r 4 ]
A:=SubBytes(A) A := S u b B y t e s ( A )
A:=MultRoundKey(A) A := M u l t R o u n d K e y ( A )
A:=MixColumns(A) A := M i x C o l u m n s ( A )
A:=ShiftRows(A) A := S h i f t R o w s ( A )
Ri+1:=a1||a2||a3||a4 R i + 1 := a 1 | | a 2 | | a 3 | | a 4
使用带有初始化向量IV = 0xA7E42F5B的密码反馈模式(CFB)实现密码,以加密8条消息。
- SubBytes(替换字节):获得输入项在在
F24
F
2
4
下的逆元,然后执行转换: