AES加密算法详解
AES 是一个对称密码分组算法,分组长度为128bit,密钥长度为128、192 和 256 bit。
整个加密过程如下图所示。
1.密钥生成算法
密钥扩展过程:
1) 将种子密钥按下图所示的格式排列,然后每32bit分别记为w[0]、w[1]、w[2]、w[3];
2)依次取问w[5],w[6].......w[43],记为w[j]
若j%4=0,则w[j]=w[j-4]⊕g(w[j-1]),否则w[j]=w[j-4]⊕w[j-1];
函数g的流程说明:
a) 将w循环左移8比特;
b) 分别对每个字节做S盒置换;
c) 与32比特的常量(RC[j/4],0,0,0)进行异或,RC是一个一维数组,RC = {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B}
2.字节替代(SubBytes)
将状态矩阵中的元素通过S盒映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,取出S盒对应的元素作为输出。
下图(a)为S盒,图(b)为S-1(S盒的逆)
S盒内部计算方法:
y=Ax-1+b
其中x*x-1=1mod(x8+x4+x3+x2+1),则x为输入元素,y为S盒输出元素。
3.行移位(ShiftRows)
将状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节
4.列混合(MixColumns)
将每列的元素乘以一个行列式进行替换。
5.轮密钥加(AddRoundKey)
轮密钥加是将128位轮密钥Ki同状态矩阵中的数据进行逐位异或操作