AES算法的主要数学基础是抽象代数,其中算法中的许多运算是按单字节(8bits)和4字节(32bits)定义的,单字节可看成有限域GF(2)中的一个元素,而4字节则可以看成系数在GF(2)中并且次数小于4的多项式(亦可以理解为:GF(256))。单字节上的运算有两种:有限域GF(2)上一个8次不可约多项式的模加、点乘(为方便代码实现,推出了X乘的概念),其中,这个不可约多项式为:m(x)=x+x+x3+x+1。类似地,4字节运算也分为两种:模加、乘法(为方便代码实现,推出了模乘的概念),而此时使用的模取M(x)=x+1,由于x+1=(x2+1)=(x+1),即非不可约,导致非0多项式乘法逆元*不一定存在,所以在AES算法中,只限于乘一个固定的有逆元的多项式:a(x)={03}x2+{01}×2+{01}x+{02}。

加密流程中,Plaintext为明文,Ciphertext为密文,密钥长度可变,可指定为128、192、256比特,不同密钥长度决定了加解密算法的轮数(128位:10轮,192位:12轮,256位:14轮)。AES标准中至少留了4轮余量,按照这种说法,可以推知轮数越多,AES破解难度越大,也就是密钥越长越安全。因此,今年8月份有人声称256bits密钥长度的AES算法被破解,而128bits未被破解是没有根据的。

理解AES需要知道以下两个概念:

  1. 状态:算法中间的结果需要分组,称为状态,状态可以用以字节为元素的矩阵阵列表示,该阵列有4行,列数Nb为分组长度除32。

  2. 种子密钥:以字节为元素的矩阵阵列描述,阵列为4行,列数Nk为密钥长度除32,根据种子密钥,可以推导出各轮子密钥w[,],此过程亦称作密钥扩展,针对不同密钥长度的密钥扩展算法可以参照AES算法标准发布文档。