高级加密标准(AES,advanced encryption standard)是美国的商用标准。2001年11月26日公布的AES加密标准文本替代了已使用20多年的数据加密标准(DES,data encryption standard)。
一、概述
1、AES的产生背景:1996年美国国家标准技术协会(NIST)开始着手开发替代DES的新标准--高级加密标准AES。2000年10月2日,对DES继承的竞争结束。NIST认为由Katholieke大学的Vincent Rijmen、比利时的Leuven和质子世界国际性组织的Joan Daemen联合提交的荣代尔(Rijndael)算法是高级加密标准最好的候选者。并于2001年11月26日公布了AES加密标准文本(它是在荣代尔(Rijndael)算法基础上整理修改而成的)。
DES最初由IBM提出,并在1975年被美国国家标准技术协会作为标准,从1977年开始,DES已经经历了每一个有抱负密码分析专家的攻击。随着计算机技术的快速发展,对DES执行一次蛮力攻击所需要的时间也愈来愈短,并且到20世纪末,大约用5天就能把它破译。很明显,作为安全装置的DES的生命已经结束。作为延长DES使用寿命的一种方法,三倍的DES通过使用两倍或三倍56比特密钥稍微改进这种情况,但是三倍的DES速度非常慢。
比较DES和AES可以发现,DES使用的密钥长度为56比特,AES用的密钥长度为128比特。后者提供更高的安全性,能抵御蛮力攻击,并且存在扩充的可能,它能支持256比特的密钥长度。AES算法是分组密码,并且能够在一个广泛的应用中使用硬件和软件实现,如smart卡、门阵列器件、FPGA或PC软件。这个能力也是AES算法超过竞争者的一个特征。
对于DES的怀疑,刺激了密码工业产生多种可供选择的算法,而人们感兴趣的是AES所产生的影响。因为新标准应用于市场需要一段时间,所以使密码工业处于暂时的休止状态。无可置疑,这加剧了安全市场的竞争。高级加密标准AES的确立,使美国有了支持电子商务发展的关键性安全工具,其电子商务和政务将更加安全保密。
2、AES的优势和限制
1)AES的优势:由于Rijndael算法总体上存在下列优势,因此它成为高级加密标准AES:一是对称和平行的结构,给实现者许多适应性;不存在有效的密码分析攻击。二是适合现代计算机处理器,如奔腾、RISC和并行处理器。三是适合smart卡。四是在专用硬件中具有可塑性。下表1-2给出更为具体的说明,主要表现在实现方面、设计的简化、可变的分组长度和可扩充性等。
表1-2:AES的优势
2)限制:密码的限制主要表现在其逆向情况。①逆向密码不如密码更适合在smart卡上实现,它需要更多的代码和周期(尽管如此,和其他密码相比较,逆向密码的处理速度还是非常快的)。 ②在软件中,密码和它的逆向密码使用不同的代码和/或表。③在硬件中,逆向密码仅仅能够使用密码实现中的一部分电路。
二、定义
1、术语和缩写词表:下表2-1的解释贯穿在AES标准中。
表2-1:术语和缩写词及解释
2、算法参数、符号和函数:下表2-2的算法参数、符号和函数贯穿在AES标准中。
表2-2:算法参数、符号、函数及其解释
三、符号和约定
AES标准中使用的符号和约定,包括输入和输出、字节、字节的数组、状态和作为列数组的状态。
1、输入和输出:AES算法的每一个输入和输出是由128比特(值为0或1)序列组成的。这个序列有时称作块或分组,它们包含的比特数目称作分组长度。对于AES算法的密码密钥是含有128比特、192比特或256比特的序列。其他的输入、输出和密码密钥长度在这个标准中是不允许的。
序列中的比特编号从0开始,结尾处的编号值小于序列长度(分组长度或密钥长度)。附加的一个比特的号码i是它的指针,i的变化范围依赖于分组长度和密钥长度,即i的范围如下:
0≤i<128,0≤i<192或0≤i<256
2、字节:在AES算法中,基本的处理单位是字节(byte),一个8比特的序列作为一个单一处理的实体。上述的输入、输出和密码密钥比特序列是作为字节的数组处理的,在构成字节的数组时(下述),把比特序列中每8个相邻的比特分划成一组,构成一个字节。当一个输入、输出或密码密钥用字符a表示时,那么得到的字节数组可以表示成an或a[n],其中n的范围详细见下表3-2-1。
表3-2-1:密钥长度与n的范围
在AES算法中,所有字节值可表示在大括号内,按由高至低位次序方式排列{b7b6b5b4 b3b2b1b0}。这些字节认为是有限域的元素,因此可以用下面的多项式表示:
b7x7+b6 x6+b5x5+b4x4+b3 x3+b2 x2+b1x1+b0=∑bixi
例如,由{01100011}可以确定一个特殊的有限域的元素为x6+x5+x+1。为方便起见,用十六进制符号表示字节值,也就是把两个4比特组分别用表3-2-2所示的单一字符表示。
表3-2-2:比特模式的十六进制表示
例如元素{01100011}能够表示为{63},其中每一个字符表示一个4比特组。一些有限域的操作包含一个位于8比特字节左侧的附加比特(b8)。当存在这个额外的比特时,可以作为‘{01}’添加到前述8比特字节的左侧。例如,一个9比特序列将可表示为{01}{1b}。
3、字节的数组:字节的数组形式如下:a0a1a2…a15
字节和字节内部的比特排序是由下面的128比特输入序列得到的:
input0input1input2…input126 input127
按照下列顺序确定字节和字节内部的比特排序:
a0={input0input1…input7};a1={input8input9…input15};…;a15={input120input121…input127}
上述表示的模式能够延伸到更长的序列(也就是对于192比特和256比特密钥的情况),因而一般可表示为:
an={input8ninput8n+1…input8n+7}
根据符号和约定组合起来考虑,可以得到在每一个范围内比特的编号方法,如表3-3所示。
表3-3:对于字节及比特的指针
4、状态:状态是AES密码的中间结果,AES算法的操作都是在状态上完成的。状态由4行字节组成,每行包含Nb字节,其中Nb等于分组长度除以32。在用符号s表示状态数组时,每个字节有两个指针,一个是它所在的行数r,范围为0≤r<4;另一个是它的列数c,范围为0≤c<Nb。状态的每个字节可以表示为Sr,c或s[r,c]。对于这个标准,Nb=4,也就是0≤r<4。
在密码和逆向密码开始时,字节的输人数组in0,in1,…in15要复制到如图3-4所示的状态数组中。然后,密码或逆向密码操作在这个状态数组上进行,在它达到最终值后,要复制到输出字节数组out0,out1 …out15中。因此,在密码或逆向密码开始时,输入数组in按照下列形式复制到状态数组:
s[r,c]= in[r+4c],0≤r<4和0≤c<Nb
并在密码和逆向密码结束时,状态数组按照下列形式复制到输出数组:
out[r+4c]=s[r,c],0≤r<4和0≤c<Nb
图3-4:状态数组的输入和输出
5、作为列数组的状态:状态数组的每一列的4个字节构成一个32比特字,在每个32比特字范围内的4个字节可以用其所在行数r作为指针来加以区分。因此,可以认为状态是由32比特字(列)构成的一维数组,即为w0,w1,w2,w3,其中列数c提供这个数组的指针。对于图3-4所示的例子,可以认为状态是4个字的数组,其形式如下所示:
w0=s0,0s1,0s2,0s3,0;w1=s0,1s1,1s2,1s3,1;w2=s0,2s1,2s2,2s3,2;w3=s0,3s1,3s2,3s3,3
四、关于Rijndael算法
1、Rijndael加密:Rijndael是一个密钥迭代分组密码,包含了轮变换对状态的重复作用。轮数Nr 的值取决于分组和密钥的长度。对于AES,当密钥长度为128比特时,Nr=10;当密钥长度为192比特时,Nr=12;当密钥长度为256比特时,Nr =14。它包括一个初始密钥加法,记作AddRoundKey,接着进行Nr-1次轮变换(Round),最后再使用一个轮变换(FinalRound)。轮变换由4个步骤组成:SubBytes,ShiftRows,MixColumns和AddRoundKey。最后一轮与前Nr -1次轮变换稍有不同,省掉了其中的MixColumns步骤。这四个步骤的含义详见下表4-1。
表4-1:轮变换由4个步骤的含义
2、Rijndael解密:Rijndael解密算法有2种形式。一种是直接解密算法,即直接利用步骤InsubBytes,InvShiftRows,InvMixColumns和AddRoundKey的逆并倒置其次序对数据进行解密。另一种是等价解密算法。等价解密算法有利于有效实现良好的运算次序。
欲更多了解关于信息安全技术知识的请进入。