

在Rijndael算法中,分组长度和密钥长度分别可以是128位、192位、256位
而在AES中,分组长度只是128位
AES算法中基本的运算单位是字节,即视为一个整体的8比特序列
如果分组长度和密钥长度为128位,假如字节数组将表示为如下形式:

其字节排列方式如图3.18所示。

如果密钥长度(或在Rijndael中的明文分组)为192位、256位时,组成的两个矩阵如图3.19和图3.20所示
它们的特点是行数都是4,列数不同
这些矩阵有4行,分组的列数记为Nb,Nb=分组长度(bits)÷ 32(bits)。
显然Nb可以取的值为4、6和8,分别对应的分组长度为128位、192位和256 位
类似地密钥的列数记为Nk,Nk=密钥长度(bits)÷32(bits) 。Nk可以取的值为4、6和8,对应的密钥长度分别为128位、192位和256位。
密码运算的中间结果都是以上面的形式表示,称之为状态(State)数组
AES将这些中间结果复制到状态(State)数组中
算法的运行过程是将需要加密的分组从一个状态转换为另一个状态,最后该数组被复制到输出矩阵中
如对于128位分组,假设加密和解密的初始阶段将输入字节数组为复制到如图3.21所示的状态(State)矩阵中。加密或解密的运算都在该状态矩阵上进行,最后的结果将被复制到输出字节数组。
状态矩阵中每一列的四个字节可以看作一个32-bit字,用行号r作为每一个字中四个字节的索引
状态可以看作32-bit字(列),的一维数组,用列号c表示该数组的索引
AES密码是一种迭代式密码结构,但不是 Feistel 密码结构
Rijndael算法迭代的轮数与分组长度和密钥长度相关
对于AES算法,算法的轮数依赖于密钥长度
将轮数表示为Nr,当Nk=4时Nr=10;当Nk=6时Nr=12;当Nk=8时Nr=14
| 各省软考办 | ||||||||||