AES加密解密算法的设计与实现
- 格式:doc
- 大小:99.50 KB
- 文档页数:19
咨询中心网站建设方案书
页脚内容1 目录
1.引言 ............................................................. 错误!未指定书签。
2.AES加密解密原理 ................................................. 错误!未指定书签。
3.AES加密解密算法的组成部分 ....................................... 错误!未指定书签。
3.1密钥部分 ..................................... 错误!未指定书签。
3.1.1AES的S盒 .............................. 错误!未指定书签。
3.1.2AES的逆S盒 ............................ 错误!未指定书签。
3.1.3轮常量 ................................. 错误!未指定书签。
3.1.4密钥移位函数 ........................... 错误!未指定书签。
3.1.5密钥字代换函数 ......................... 错误!未指定书签。
3.1.6密钥扩展算法 ........................... 错误!未指定书签。
3.2加密的部分 ................................... 错误!未指定书签。
3.2.1轮密钥加变换AddRoundKey(与密钥扩展的异或运算)错误!未指定书签。
3.2.2字节代换SubBytes(即S盒变换) ......... 错误!未指定书签。
3.2.3行移位变换ShiftRows .................... 错误!未指定书签。
3.2.4列混淆变换MixColumns ................... 错误!未指定书签。
3.3解密的部分 ................................... 错误!未指定书签。
3.3.1逆行移位变换InvShiftRows ............... 错误!未指定书签。
3.3.2逆向字节代换(即逆S盒变换) ........... 错误!未指定书签。
3.3.3轮密钥加变换 ........................... 错误!未指定书签。
3.3.4逆列混淆变换 ........................... 错误!未指定书签。
4.AES加密解密算法的改进 ........................................... 错误!未指定书签。
5.结束语 ........................................................... 错误!未指定书签。 咨询中心网站建设方案书
页脚内容1 1.引言
对称密码算法主要用于保证数据的机密性,通信双方在加密/解密过程中使用它们共享的单一密钥。对称密码算法的使用相当广泛,密码学界已经对它们进行了深入的研究[1]。最常用的对称密码算法是数据加密标准(DES)算法,它是由IBM在美国国家安全局(NSA)授意之下研制的一种使用56位密钥的分组密码算法[2]。该算法从1977年公布成为美国政府的商用加密标准后,使用了30多年。
随着社会的发展,科学技术日新月异,密码分析水平、芯片处理能力和计算技术也不断地进步,二十世纪七十年代到现在应用广泛的DES数据加密标准算法因为其密钥长度较小(仅有56位),已经越来越难适应当今社会的加密技术和安全要求,其实现速度、代码大小和跨平台性也不足以适应新的各种应用要求。
1997年,RSA安全赞助了一系列的竞赛,奖励第一个成功破解以DES加密的信息的队伍1万美元,洛克·韦尔谢什(RockeVerser),马特·柯廷(MattCurtin)和贾斯廷·多尔斯基(JustinDolske)领导的DESCHALL计划获胜,该计划使用了数千台连接到互联网的计算机的闲置计算能力[3]。证明了DES的密钥长度(56位),能被当前社会加密解密技术破解,其安全性有待提高。1998年,电子前哨基金会(EFF,一个信息人权组织)制造了一台DES破解器[4]。虽然其制造价格约$250,000,但是它用两天多一点儿的时间就暴力破解了一个密钥,显示出迅速破解DES的可能性,说明了DES的安全性已经开始降低。
DES的主要问题是其密钥长度较短(仅56位),已经不适应当今分布式开放网络对数据加密安全性的要求。随着计算机能力的突飞猛进,已经超期服役的DES终于显得力不从心。在这种形势下,迫切需要设计一种强有力的算法作为新的一代分组加密标准,所以在DES每隔五年的评估会议中,1997年美国国家标准技术研究院(NIST,NationalInstituteofStandardsandTechnology)公开征集新的数据加密标准,最后一次美国政府终于决定不再继续延用DES作为联邦加密标准,也就表明了DES将退出加密标准的舞台,而新的标准:高级加密标准AES(AdvancedEncryptionStandard)走上了历史的舞台[5]。该算法作为新一代的数据加密标准汇聚了安全性、效率、密钥灵活性、多样性、简单性和对称性等优点。
因此1997年美国国家标准技术研究院(NIST,NationalInstituteofStandardsandTechnology)公开征集新的数据加密标准,即AES[6]。该算法作为新一代的数据加密标准汇聚了安全性、效率、密钥灵活性、多样性、简单性和对称性等优点。
高级加密标准(AES),这个标准用来替代上一个世纪的DES,已经被多方分析并且广为全世界所使用。经过长达五年的甄选流程,得出了结果[7]。高级加密标准由美国国家标准与技术研究院(NIST)在2001年11月26日发布于FIPSPUB197,并在2002年5月26日成为有效的标准[8]。2006年,高级加密标准(AES)发展成为了对称密钥加密中最流行的算法之一。
AES是美国国家标准技术研究所NIST旨在取代DES的新一代的加密标准。NIST对AES候选算法的基本要求是:对称分组密码体制;密钥长度支持128、192、256咨询中心网站建设方案书
页脚内容2 位;明文分组长度128位;算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮征集、分析、测试,共产生了15个候选算法。1999年3月完成了第二轮AES的分析、测试。1999年8月NIST公布了五种算法(MARS,RC6,Rijndael,Serpent,Twofish)成为候选算法[9]。经过激烈的角逐,Rijndael,由比利时人设计的算法与其它候选算法在成为高级加密标准(AES)的竞争中取得成功,于2000年10月被NIST宣布成为取代DES的新一代的数据加密标准,即AES(这也是为什么人们将AES算法叫作Rijndael算法的原因)[10]。尽管人们对AES还有不同的看法,但总体来说,Rijndael作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES的三个密钥长度:128、192和256比特。它与DES相比,它的128比特密钥比DES的56比特密钥要强上10^21倍。
2.AES加密解密原理
AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。加密过程中使用的密钥是由Rijndael密钥生成方案产生[11]。
AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES使用几种不同的方法来执行排列和置换运算。大多数AES计算是在一个特别的有限域完成的。
AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)[12]。(Rijndael加密法因支持更大的区块,其矩阵行数可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:
轮密钥加变换AddRoundKey—矩阵中的每一个字节都与该次回合密钥(roundkey)做XOR运算;每个子密钥由密钥生成方案产生。
字节代换(通常叫做S盒变换)SubBytes—将字节变换方法制成S盒表格,通过查表把每个字节进行快速变换成对应的字节。
行移位变换ShiftRows—将矩阵中的每个横列进行循环式移位。
列混淆变换MixColumns—为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代[13]。
AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥长度,并且用128位分组长度加密和解密数据。该算法输入分组、输出分组、状态长度均为128比特[14]。
对于AES算法的运算是在一个称为状态的二维字节数组上进行。一个状态由四行组成,每一行包括Nb个字节,Nb等于分组长度除以32,AES分组长度为128位,咨询中心网站建设方案书
页脚内容3 因此,Nb=4,该值反应了状态中32-bit字的个数(列数);密钥长度128、192和256位可分别表示为Nk=4、6或8,反应了密钥中32-bit字的个数(列数)[15]。而AES算法的轮数Nr仅依赖于密钥长度Nk,轮数和密钥长度的关系可以表示为:Nr=6+Nk密钥长度—分组长度—轮数的关系如表2.1所示。
表2.1Key-Block-Round三者之间关系
密钥长度((Nkwords) 分组长度(Nbwords) 轮数(Nr)
4 4 10
6 4 12
8 4 14
对于加密和解密变换,AES算法使用的轮函数由4个不同的以字节为基本单位的变换复合而成,该过程由四个不同的阶段组成]:
(1)S盒变换,用一个S盒完成分组中的按字节代替;(2)行移位变换,一个简单的置换;(3)列混淆变换,一个利用在域GF(28)上的算术性的代替;(4)轮密钥加变换,一个利用当前分组和扩展密钥的一个部分进行按位异或[16]。
AES对数据的加密过程是通过把输入的明文和密钥由轮函数经Nr轮迭代来实现的,结尾轮与前Nr-1轮不同。前Nr-1轮依次进行S盒变换、行移位变换、列混淆变换和轮密钥加变换;结尾轮与前Nr-1轮相比去掉了列混淆变换[17]。
而解密过程与加密过程相反,通过把输入的密文和密钥由轮函数经Nr轮迭代来实现的,结尾轮与前Nr-1轮不同[18]。前Nr-1轮依次进行逆行移位变换、逆S盒变换、轮密钥加变换和逆列混淆变换;结尾轮与前Nr-1轮相比去掉了逆列混淆变换。