AES算法加解密原理及安全性分析 下载本文

SubByte()函数是提取状态矩阵State[4][4]中的每一个数组元素进行置换运算,而SubWord()则是提取一unsigned long 整型数字中的某8位数据进行置换运算。SubByte()函数的C语言实现与SubWord()的C语言实现雷同,这里也不再赘述。

(2)使用ShiftRow()函数对状态矩阵State[4][4] 中的各行数据进行循环移位运算。该函数所进行的循环移位规则如下。状态矩阵State[4][4] 中的第一行数据位置不变,第二行数据循环左移一位数字,第三行数据循环左移两位数字,第四行数据循环左移三位数字。在对ShiftRow()函数进行C语言编程时主要是要注意行数以及所对应的移位个数,保证运算的准确性。

3、数据解密

(1)使用InvSubByte()函数依据S置换表的逆表对状态矩阵State[4][4]中的数字进行置换,置换方法与SubByte()函数相同。该函数的C语言实现与SubByte()函数基本相同,在此不再赘述。

(2)使用InvShiftRow()函数对状态矩阵State[4][4] 中的各行数据进行循环移位运算。该函数所进行的循环移位规则如下。状态矩阵State[4][4] 中的第一行数据位置不变,第二行数据循环右移一位数字,第三行数据循环右移两位数字,第四行数据循环右移三位数字。

四、AES实现过程分析

AES 算法是基于置换和代替的,置换是数据的重新排列,而代替是用一个单元数据替换另一个,其基本密码算法Rijndael使用的是置换-组合架构,而非Feistel架构。AES 是一个新的可以用于保护电子数据的加密算法。AES 使用了几种不同的技术来实现置换和替换。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。

对AES算法按加密处理和密钥调度两个方面进行分析:

1、加密处理

加密处理过程:

加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤: (1)、SubBytes — 透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。

(2)、ShiftRows — 将矩阵中的每个横列进行循环式移位。

(3)、MixColumns — 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每行内的四个字节。

(4)、AddRoundKey — 矩阵中的每一个字节都与该次循环的子密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。

最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。

SubBytes 步骤 在SubBytes步骤中,矩阵中各字节被固定的8位查找表中对应的特定字节所替换,S; bij = S(aij).如图所示:

ShiftRows 步骤

在ShiftRows 步骤中,矩阵中每一列的各个字节循环向左方位移。位移量则随着行数递增而递增。在ShiftRows 步骤中,矩阵中每一列的各个字节循环向左方位移。位移量则随着行数递增而递增。

MixColumns 步驟

在 MixColumns 步骤中,每个直行都在modulo x4 + 1之下,和一个固定多项式 c(x) 作乘法。

AddRoundKey 步骤

AddRoundKey步骤,子密钥将会与原矩阵合并。在每次的加密循环中,都会由主密钥产生一把子密钥(透过Rijndael密钥生成方案产生),这把子密钥大小会跟原矩阵一样,以与原矩阵中每个对应的字节作异或(⊕)加法。

类推继续,完成10轮循环:

2、AES密钥调度

密钥调度包括两个部分:密钥扩展和轮密钥选取。

密钥bit的总数=分组长度×(轮数Round+1)例如当分组长度为128bits和轮数Round为10时,轮密钥长度为128×(10+1)=1408bits。

1)、将密码密钥扩展成一个扩展密钥。

类推,经过10轮计算,得到如下轮密钥调度表:

2)、从扩展密钥中取出轮密钥:第一个轮密钥由扩展密钥的第一个Nb个4字节字,第二个圈密钥由接下来的Nb个4字节字组成,以此类推。

五、AES的安全性分析

AES算法作为DES算法和MD5算法的替代产品,10轮循环到目前为止还没有被破解。一般多数人的意见是:它是目前可获得的最安全的加密算法。AES与目前使用广泛的加密算法─DES算法的差別在于,如果一秒可以解DES,则仍需要花費1490000亿年才可破解AES,由此可知AES的安全性。AES 已被列为比任何现今其它加密算法更安全的一种算法。目前针对AES的破解主要可以从以下几个方面着手:

1、暴力破解。如果不针对所有可能的256位密钥使用强力搜索,任何已

知的密码分析学攻击都无法对AES密码进行解密,就这一点来说,用AES加密