AES的基本要求是:比三重DES快、至少与三重DES一样安全、数据分组长度为128-bit、密钥长度为128/192/256-bit,对应于密钥的不同长度,加密轮的次数也不尽相同。选定Rijndael算法为新的AES算法。算法的原型是Square算法,其设计策略为宽轨迹策略(针对差分分析和线性分析提出的,最大优点是可以给出算法的最佳差分特征的概率以及最佳线性逼近的偏差的界;由此可以分析算法抵抗差分密码分析以及线性密码分析的能力。)
AES加密标准是当下最广泛使用的对称密钥加密体系。AES加密标准已经广泛应用在互联网安全领域,譬如IPsec、TLS、Wi-Fi加密标准IEEE 802.11i、SSH、Skype等领域。
Rijndael设计思想
Rijndael没有Feistel结构,其轮函数是由三个不同的可逆均匀变换(每个比特都是用类似的方法进行处理的)组成的,称它们为3个“层”。不同的层选择的大部分是建立在“宽轨迹策略”的应用基础之上。
- 线性混合层 确保多轮之上的高度扩散
- 非线性层 将具有最优的“最坏情况非线性特征”的S盒并行使用
- 密钥加密 单轮子密钥简单地异或到中间状态上,实现一次性掩盖
在第一轮之前,用了一个初始密钥加层(其目的为在不知道密钥的情况下,对最后一个密钥加层以后的任一曾可简单地剥去,因此初始密钥加层对密码的安全性无任何意义。为了使加密算法和解密算法在结构上更加接近,最后一轮的线性混合曾与前面各轮的线性混合层不同,这类似于DES的最后一轮不做左右交换(这种设计不以任何方式提高或降低该密码的安全性)
Rijndael算法说明
该算法是一个迭代型分组密码,分组长度和密钥长度都可改变,各自可以独自地制定为128-bit、192-bit、256-bit
状态、种子密钥和轮数
算法的中间结果需要进行分组,称该分组为状态。所有的操作都在状态上进行。状态可以用以字节为元素的矩阵阵列表示,该阵列有4行,列数计为 Nb 。 Nb 等于明文分组长度除以32。
种子密钥类似地用一个以字节为元素的矩阵阵列表示,该阵列有4行,列数记为 Nk , Nk 等于分组长度除以32。
当然,可以将这些分组看成一维数组,数组中的每一个元素是上述阵列中的四个字节元素组成的列向量,显然,数组的长度可以分为4,6,8三种。四个字节的元素构成的列向量有时也称为字。
算法的输入和输出被看作是由8-bit字节构成的一维数组,其元素的下标范围为0~ 4N