AES算法主要包括四个部件:
字节代换,行移位,列混合和轮密钥异或。各个部件详细讲解如下:
1.字节代换:根据输入字节,高四位作为S盒查询行号,低四位作为S盒查询列号。是唯一的非线性组件,起混淆的作用。
在解密的时候,查逆S盒即可。
2.行移位:左循环移位,第一行不移位,第二行左移一个字节(AES输入128bit,分成16个字节,每个字节8bit),第三行左移两个字节,第四行左移三个字节。行移位起扩散作用。
在解密时,将每一行执行相反的移位操作:第一行不移位,第二行右移一个字节,第三行右移两个字节,第四行右移三个字节。
3.列混合:每一列乘以一个矩阵,该矩阵为
(
2
3
1
1
1
2
3
1
1
1
2
3
3
1
1
2
)
\begin{pmatrix} 2&3 &1 &1 \\ 1&2 & 3 &1 \\ 1&1 & 2 &3 \\ 3& 1 & 1 &2 \end{pmatrix}
⎝
⎜
⎜
⎛
2
1
1
3
3
2
1
1
1
3
2
1
1
1
3
2
⎠
⎟
⎟
⎞
,需要注意的是,乘法和加法都是定义在
G
F
(
2
8
)
GF(2^{8})
G
F
(
2
8
)
上的二元运算。列混合起到混淆和扩散作用。
解密时,乘
(
0
E
0
B
0
D
09
09
0
E
0
B
0
D
0
D
09
0
E
0
B
0
B
0
D
09
0
E
)
\begin{pmatrix} 0E&0B & 0D &09 \\ 09&0E &0B &0D \\ 0D&09 &0E &0B \\ 0B& 0D &09 &0E \end{pmatrix}
⎝
⎜
⎜
⎛
0
E
0
9
0
D
0
B
0
B
0
E
0
9
0
D
0
D
0
B
0
E
0
9
0
9
0
D
0
B
0
E
⎠
⎟
⎟
⎞
即可。
4.轮密钥异或
此处以128bit的密钥举例,先将128bit的密钥扩展,将128bit写成,4*4的字节矩阵,每四列即一个轮密钥,将4列拓展成44列,组成11个轮密钥。加密时,将信息矩阵和轮密钥逐位异或,轮密钥异或加起到混淆作用。
在整个过程中,值得注意的是:第一轮之前先进行一轮密钥异或,第十轮不进行列混合。
具体的过程如图所示: