AES是一个迭代的、分组密码加密方式,可以使用128 、192和256位密钥。与 公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。
通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结 构,在该循环中重复置换(permutation)和替换(substitution)输入数据,加之 算法本身复杂的加密过程,使得该算法成为数据加密领域的主流。AES加密算法 流程如图6-12所示。
在AES算法中,每一次变换操作产生的中间结果称为状态。将状态表示为二 维字节数组(每个元素为一个字节),包括4行,Nb列。Nb等于数据块长度除以 32 。例如,数据块长度为128时,Nb=4;数据块长度为192时,Nb=6 。同理,密 钥也可表示为二维字节数组(每个元素为一个字节),包括4行,Nk列。Nk等于 密钥块长度除以32。
圈密钥根据圈密钥产生算法由用户密钥产生。圈密钥加密由密钥扩展和圈密 钥选择两步完成。首先将用户的密钥进行密钥扩展,再从扩展密钥中选出圈密
钥。第一个圈密钥由扩展密钥中的前Nb个字组成,第二个圈密钥由接下来的Nb个 字组成,以此类推。最后获得的圈密钥位总数为数据块长度与圈数加l的乘积。
图6-12 AES加密算法流程
RIJNDAEL算法的迭代圈数Nr由Nb和Nk共同决定,可根据表6-2获得相应Nr 的值。
表6-2 RIJNDAEL算法迭代圈数Nr
AES加密算法的轮函数采用代替/置换网络结构,包括S盒变换(ByteSub)、 行移位变换(ShiftRow)、列混合变换(MixColumn)、圈密钥加变换
(AddRoundKey)。下面介绍各种变换方式。
S盒变换是按字节进行的代替变换,是作用在状态中每个字节上的一种非线 性字节变换。首先将字节的值用它的乘法逆来代替,然后将获取的值按式(6-1) 进行仿射变换。
2.行移位变换
行移位变换对状态行进行循环移位。在行移位变换中,状态的后三行以不同 的移位值循环左移。第0行不移位,第1行向左移动C1字节,第2行向左移动C2字 节,第3行向左移动C3字节,移位表如表6-3所示。
表6-3 移位表
3.列混合变换
列混合变换是对状态的列进行混合变换。把状态中的每一列看作GF(28)上 的多项式,并与一个固定多项式c(x )相乘,然后与多项式x4+1进行取模运算,
其中c(x )可表示为
4. 圈密钥加变换
圈密钥加变换是利用圈密钥对状态进行模2相加的变换。圈密钥被简单地异
或到状态中去。其中,圈密钥长度等于数据块长度。
综上所述,AES加密算法由三部分组成:初始圈密钥加、Nr-l圈的标准轮函 数、最后一圈的非标准轮函数。