AES算法分析
1. AES的结构
AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。
明文分组的长度为128位即16个字节,密钥长度可以是128位(16字节)、192位(24字节)、256位(32字节)。密钥长度不同,加密轮数也不相同。根据密钥的长度,算法被称为AES-128、AES-192或AES-256。具体关系如表1所示:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/79bf2a921177b9c7e6307113d44bd6a1.png#pic_center)
本文以密钥长度为128位即16字节进行分析,AES的基本结构如图1所示,加密过程图如图2所示:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5c063d547cccf11a2b3d30ca6176423c.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4e7711489ba0e2d767bd798c7f2e1312.png#pic_center)
AES的处理单位是字节,128位的输入明文P和输入密钥K都被分成16个字节,分别记为P = P 0 P 1 … P 15 和 K = K 0 K 1 … K 15。例如,明文为P = “ abcdefghijklmnop ”,其中的字符a对应P 0,p对应P 15。明文分组被描述为4×4的字节方阵,该方阵被复制到状态数组称为状态矩阵。在算法的每一轮中,状态矩阵的内容不断发生变化,最后的结果作为密文输出。该矩阵中字节的排列顺序为从上到下、从左至右依次排列,如图3所示:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/adce5395edbf9ec559df7b4e59ace617.png#pic_center)
如果明文分组是P = “ abcdefghijklmnop ”,则对应的状态矩阵为图4所示:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fe2e4421d32972d01774fc585d3913e0.png#pic_center)
上图中,0x61为字符“ a ”的十六进制表示。可以看到,明文经过AES加密后,已经面目全非。
类似地,128位密钥也是用字节为单位的矩阵表示,矩阵的每一列(4个字节)被称为1个32位比特字(4个字节被称为一个字)。通过密钥编排函数该密钥矩阵被扩展成一个44个字组成的序列W[0](“ abcd ”),W[1], … ,W[43],该序列的前4个字W[0],W[1],W[2],W[3]是原始密钥,用于加密运算中的初始密钥加(下面