总体特征分组密码
明文和密文的长度明文和密文的长度为128位,密钥的长度是可变的。 当前选择的是128比特,诸如(128/192/256 ) 128/192/256。面向二进制的密码算法
可以对任何形式的计算机数据进行加密解密。不是对合运算
解密时使用不同的算法。综合运用多种密码技术
替换,替代,代数整体结构
sp结构、基本循环函数迭代、迭代循环数可变() 10 ) )。
迭代次数Rijndael加密算法明文分组长度可变,密钥长度也可变。 明文数据包长度和密钥长度相互独立地为128、192、256bits、因而Rijndael算法有 9种不同的版本,而迭代次数与明文分组长度和密钥长度有关。
NIST选择Rijndael算法作为AES算法,明文组为128bits,而密钥长度可为128、192、256bits,因而实际上AES有三个版本:AES-128、AES-192、AES-256,相应的迭代轮数为10轮、12轮、14轮。
算法流程图(以128位明文和密钥为例,共10次) ) ) ) ) )。
首先,在Nk (密钥串数)、Nb (明文串数) http://www.Sina.com/Rijndael算法的情况下,明文串数是数据包长度除以32,通常标记为Nb。 Nb=分组长度(bits )/32 ) bits Rijndael算法的列数Nb可取4、6、8的值,其中对应的明文分组长度为128、192、256 bits。 另一方面,由于AES算法的分组长度固定为128 bits,因此AES明文串数为固定值状态用以字节(8bits)为基本构成元素,每列4bytes数据,即为32bits。
根据Nb=4(此处明文为分组长度为128所以Nb=4),密钥串数标记为Nk。 Nk=密钥长度(bits )/32 ) bits )AES算法加密和解密过程中密钥同样以字节为单位进行计算,密钥状态矩阵也是4行,每列4bytes数据,即为32bits。
整体加密为两部分明文加密和密钥生成明文加密AES算法的密钥长度的列数为128bits、192bits、256bits三种不同长度,因此不同密钥长度Nk可以取值分别为4、6、8。(此处nk也等于4)
AES算法中的初始状态矩阵一组长度依次从1.明文初始状态矩阵(state)(注意是怎么排的,行数永远四行,因为它要保证一列是4字节)类推,AES算法的明文分组可以构成44的初始字节状态矩阵
输出密文128bits也以列方式以相同顺序从状态矩阵中的类似明文中提取
128bits明文分组构成,以字节为单位,则总共有16bytes,从左到右开始,则前4个字节组成明文状态矩阵第1列,依次后四个字节组成第2列,
AES算法的密钥长度列数为128192256bits三种不同长度,2.密钥初始矩阵(与明文相同,注意Nk取值,后面要用)例如密钥长度为192bits,以字节为单位,共计24bytes
因此不同密钥长度Nk(密钥列数)以取值分别为4、6、8。 初始密钥的列数编排类似明文初始状态矩阵,因而密钥构成一个44、46、48的密钥字节矩阵。
明文矩阵与初始密钥矩阵的异或运算
3.轮密钥加(第一次)
“字节变换”(SubBytes )使用16乘16矩阵的s框,如表所示。 其非线性置换为4.字节代替(SubBytes)
输入的列的每个元素用来指定S盒的地址:前4位指定S盒的行,后4位指定S盒的列。行和列所确定S盒位置的元素取代输入矩阵中相应位置的元素。
状态数组的四个行循环以字节为基本单位向左移动,但每个行循环的移动量由明文组的大小和所在的行数决定。 即5.行移位(ShiftRows)
列数Nb和行号确定。第一行不动,第二行循环左移一位,后面一次增加一位
6.列混合(MixColumns)
补充知识(字节转换为多项式,后面运算用)
不可约多项式
通过将平移得到的结果和固定矩阵进行矩阵乘法运算得到结果,计算中涉及的基本运算遵循gf(8)域上的运算。固定矩阵
加变为异或
3358www.Sina.com/继续进行循环密钥加法运算,直到最后一个循环开始,在循环密钥加法运算后输出密文(乘法则)
最后一轮不进行列混合。
注意以10轮为例,轮密钥加其实执行了11次,进来时多执行了一次