AES——分组加密
明文的固定长度128位,密钥长度可以是128、192、256位
按明文与密钥长度都是128位来解释AES的加密过程:
在AES中,明文是以字节的形式排列,一个字节8bit位,排列如下:
AES的整体加密流程:
其中最后一轮第十轮是没有列混合的。
初始变换
初始变换就是将明文的字节矩阵和子密钥矩阵进行异或:
g)]
关于子密钥的产生,在下面有说明。
9轮循环
字节代换
就是经过一个字节代换的表,进行代换,很好理解。
行移位
第一行不动,第二行左移动一个字节,第二行左移动2个字节,第二行左移动3个字节
很easy。
列混合
将输入的4*4矩阵左乘一个给定的4 * 4矩阵。
计算的方式并不是简单的矩阵相乘,是在GF(2^8)域上的乘法,可以参考另一篇文章,密码学数学基础或者ECC加密。
轮密钥加
与子密钥进行一一异或,下面是关于密钥拓展。
密钥拓展
初始是128bit的密钥,转换成和明文一样的字节排列顺序:
之后进行拓展,拓展的规律:
1、如果i不是4的倍数 W[i]=W[i-4]^W[i-1]
2、如果i是4的倍数 W[i]=W[i-4]^T(W[i-1])
函数T由三部分组成:字循环、字节代换、轮常量异或,轮常量异或的表如下
字循环
将1个字中的4个字节循环左移1个字节。即将输⼊字[b0, b1, b2, b3]变换成 [b1,b2,b3,b0]。
字节代换
对字循环的结果使⽤S盒进⾏字节代换。
轮常量异或
将前两步的结果同轮常量Rcon[j]进⾏异或,其中j表示轮数。
拓展的结果:
最后梳理一下AES的整体的加密过程: