搜索
您的当前位置:首页正文

AES加密算法的实现及应用

来源:好走旅游网
第24卷第2期 常熟理工学院学报(自然科学) Vol_24 No.2 2010年2月 Journal of Changshu Institute Technology(Natural Sciences) Feb.,2010 A E S加密算法的实现及应用 赵雪梅 (盐城工学院,江苏盐城224003) 摘要:AES加密算法具有安全性高,运行速度快,对硬件配置要求低,属于对称算法等优点,非常 适合硬件的实现.本文对AES加密算法进行了改进,研究了AES加密算法的c语言实现以及数据流 的加密和解密过程,同时对AES加密算法的应用进行了简单介绍. 关键词:AES;C语言;加密 中图分类号:TP309 文献标识码:A 文章编号:1008—2794(2010)02—0105—06 分组密码是目前应用较为广泛的一种密码体制.DES(Data Encryption Standard) 加密算法开创了公开密 码算法的先例,使了解算法但不具有正确密钥的密文持有者不能通过算法找出明文数据,其安全性来源于破解 密码计算上和时间上的困难性.然而随着计算机及网络技术的发展,DES经实践检验证明已经不是可靠的密码 算法了,从各方面来看已经走到了它生命的尽头.事实上,1997年由RSA公司发起的DES挑战赛已经证明DES 的56bit密钥太短,虽然三重DES可以解决密钥长度的问题,但是它并不十分有效,而且DES的设计主要是针对 硬件实现 .而今,在许多领域,需要针对软件实现相对有效的算法,鉴于此,AESt 加密算法在这样一种背景下 应运而生,AES全称是Advance Encryption Standard,即高级加密标准.该项目由美国国家标准技术研究所 (NIST)于1997年开始启动并征集算法,在2000年确定采用Rijndael作为其最终算法,并于2001年被美国商务 部批准为新的联邦信息加密标准(FIPS PUB 197).AES加密算法作为DES加密算法的替代品,具有安全、高效 以及在不同硬件和软件嗍运行环境下表现出的始终如一的良好性能,因此该算法具有较高的开发潜力和良好 的实用价值.本研究主要包括AES加密算法的改进,c语言实现,以及对数据流的加密和解密过程,同时对AES 加密算法的应用进行了简单介绍. 1 AES加密算法的改进及实现 1.1 AES加密算法的理论背景 AES ̄JIl密算法所依据的数学理论是GF(28)域川,算法本身涉及的数学运算只有两种.一种是乘法运算,即 , 另一种是异或运算,即0.并且在算法的加密和解密核心公式中所使用的常数参数只有7个,它们分别是0 01、 Ox02、0x03、Ox09、0x0b、0x0d和0x0e.核心公式参考如下: 加密的核心公式,即列混合运算 : 收稿日期:2009—10—26 作者简介:赵雪梅(1975--),女,江苏盐城人,盐城工学院讲师,研究方向:计算机软件开发 106 常熟理工学院学报(自然科学) 2010矩 fS .c 一({02}*S。. )O((03}*S . )o({01)*S。. )o({01)*S。, ) 一({01}*S。, )④({O2)*S 。 )o((O3)*S。. )臼≥({01)*S。. ) 一({O1}*S。. )0({01)*S . )①({02)*S z, ) ({03}*S。, ) 【;S, 一解密的核心公式,即列混 合运算的逆运算[((03}*S o,c)0({01}*S )o((01}*S 43: 2,c)①({O2}*S。。 ) 一({Oe)*S。. )o((Ob)*S , )臼≥({Od}*S。, )∈ ({O9)*S 3. ) 一({09)*S。, )①({Oe)*S . )龟≥({Ob)*S 2, )①({Od)*S。, ) (2) 一({Od)*S。. )o({09)*S 1. )o({Oe}*S . )o({Ob)*S。. ) 一({Ob)*S。. )①({Od}*S , )O({O9)*S。. )①({Oe)*S。, 1.2 AES加密算法流程 l 读进嗷 f (1)AES加密算法的流程图 图1中,Round代表加密的轮数,即程序循环次数. l 读进密钥 l ‘ State代表状态矩阵,一个存储原始数据的数组.RoundKey f 进行密钥扩展 } 代表经过扩展运算后的密钥数组.ByteSub0代表置换函 轮变换 数,对状态矩阵State中的数据进行置换.Shi ̄Row0代表移 Round(State,RoundKey) 位函数,对状态矩阵State中的数据进行移位运算.MixCol— { I 读进密文 l ● ByteSub(State); umn0代表列混合运算函数,对状态矩阵State中的数据进 轮变换 ShiftRow(State); Round(statel Rqundgey) 行列混合运算.AddRoundKey0代表异或运送函数,对数组 Mixc0lumn(state); 【 AddRoundKey(State,Roundkey); InvByteSub(State); State和数组RoundKey进行异或运算.由图1可以看出,最 lnvShiftRow(tsate); InvMixColumn(State); 后一次轮变换比前几次轮变换少执行一次MixColumn0 ̄数. 最后轮变换 FinalRound(State,RoundKey) ● (2)AES解密算法的流程图 { 最后轮变换 FinalRound(tsate.RoundKey) 图2中,Round代表加密的轮数,即程序循环次数. ByteSub(State); { ShiftRowfstate); lnvByteSub(tsate); State代表状态矩阵,一个存储原始数据的数组.RoundKey AddR0undKey(State,Roundkey); lnvShiRRow(State); ● ● 代表经过扩展运算后的密钥数组.InvByteSub0代表置换函 I 密文 } f 明文 f 数,对状态矩阵State中的数据进行置换.InvshiftRowO代表 图1 AEs加密算法流程图 图2 AEs解密算法流程图 移位函数,对状态矩阵State中的数据进行移位运算.InvMixColumn0代表列混合运算函数,对状态矩阵State中 的数据进行列混合运算.由图2可以看出,最后一次轮变换比前几次轮变换少执行一次MixColumnO ̄数. 2 AES加密算法复杂度分析 下面对改进前的算法和改进后的算法进行复杂度分析 并对程序执行效率进行分析. 设b为OxOO--Oxff中的任意常数,以0x09*b为例进行讨论.该算式分解如下: OxO9 =(0x08+l1木b =Ox08 +b :f0x06+0x021 +b =0x06:#b+0xO2术b+b =f0x04+0xO21半b+0x02术b+b =0xO4木b+0x02木b+0x02木b+b =f0x02+0x021半b+0x02术b+0x02球b+b ’ =0x02术b+0x02木b+0x02丰b+0x02术b+b 将上述算式进行c语言实现得到以下程序: 第2期 赵雪梅:AES加密算法的实现及应用 107 (1)程序1 int i,t; t—b; t—t<<2; for(i一0;i<3;i++){ t=tat: } t—tab; 由此可见,该程序的时间复杂度为O(n).将上述程序做一改进可得到如下程序: (2)程序2 int i,t; t—b: t—t<<2; t=:=t t: t—t‘t: t tat: t—tat; t—t-b; 由此可见,该程序的时间复杂度为O(1)。 若通过表格法对公式进行编成,可以得到如下程序: (3)程序3 int t; t—TabOe[OxOe]r-b-I: 由此可见,该程序的时间复杂度为0(1). 通过上述程序可以发现,程序2与程序3的时间复杂度相同.但这只能说明两程序的时间效率相似,并不一 定相同,具体判断还要看程序的规模. 虽然程序之间的规模只有几行代码的差距,但如果将这些程序放在循环体中执行,程序之间在时间上的执 行效率就会表现出较大的差距,循环次数越多,循环层数越多,效率差距就越明显.AES加密算法本身是一种非 常适用于硬件加密的算法,因此当该算法应用于硬件编程时,就更要把算法的时间效率考虑在内,否则很可能 由于算法执行时间过长,导致尚未加密的数据被新加入的数据冲掉,造成数据的遗失,如此一来也就失去了数 据加密的意义.这也是为什么要对算法的程序实现进行效率考察的主要原因. 3 AES加密算法的C语言实现 AES加密算法主要分为三大块 ,即密钥扩展,数据加密和数据解密.其中密钥扩展是独立进行的,不受后 面两者的限制,同时又是数据加密和数据解密的关键要素之一.数据加密和数据解密两者之间相互独立,互不 依赖,它们的执行在一定程度上要受到密钥扩展的影响.下面对密钥扩展、数据加密和数据解密进行阐述,并说 明其中一些主要函数是如何通过C语言实现的. 3.1 密钥扩展 (1)使用Rotword0数对数组中的数字实现循环左移一位的运算,即将数组中左端第一个数字移至数组的 末端,而原来在它之后的数字依次前移一位.这是一个简单的常规操作,但这里要说明的是,由于数组中的4个 数字已经合并为一个数字,因此在程序的实际执行过程中并不是做数组的循环左移运算,而是进行数字的循环 移位运算,这样一来便大大简化了运算过程,对运算效率有一定程度的提高. l08 常熟理工学院学报(自然科学) 2010矩 (2)使用SubWord0函数依据s置换表对4个数字进行置换,规则如下.例如,有一个数字为Ox2a,则在表1 中查找‘2’行‘a’列的数字,得到数字e5,则该数字即是数字0x2a的置换数字.此函数的C语言实现相对简单,只 是一个查表的问题,但过程比较繁琐细碎,编程时应仔细对待,避免出错. (3)常数数组Rcon[il的使用问题.第(3)项是密钥扩展过程中一个应该引起注意的地方,因为该条目并不是 每一轮密钥扩展中都要进行的,而是在满足一定条件的前提下才能执行.序号为1,2,3,4的四组数据即由用户 输入的原始密钥数据分别存放在w[0】至w[3]中.而密钥扩展的操作是从w[31开始的.即由w[31生成w[4],再由W [4]生成w[5],依此类推,直至w[43].第(1)(2)项在每一轮操作都是必须执行的,而第(3)项的执行条件是当w[k】 中的k是4的整数倍时,该项才可执行.而Rcon[i冲i的值即为k除以4所得的商.很显然,i的值是从1到10的 数字.在执行第(3)项时,需将w[k】中的数字与Rcon[i】中的数字进行异或运算.由于第(3)条的存在,在c语言 实现过程中要有一个判断语句,判断当前扩展的数组的序号是否能被4整除.是则执行第(3)项操作,不是则跳 过该项直接执行第(4)项操作.在编程的实现过程中选用if…else…语句进行判断. (4)将通过前两项的执行所得到的结果与w[k一11 ̄的数字进行异或运算,所得结果便是w[k】的数值. 3.2数据加密 (1)使用SubByte0函数依据S置换表对状态矩阵State[4][4】中的数字进行置换,查表的方法在前文已经介 绍,这里不再赘述.有一点需要注意的是,虽然SubByte0Ni数与SubWord0Ni数原理相同,但在程序中的运算过 程却不尽相同.SubByte0 ̄数是提取状态矩阵State[4][4]O0的每一个数组元素进行置换运算,而SubWordO ̄1]是 提取一个unsigned long整型数字中的某8位数据进行置换运算.SubByte0函数的C语言实现与SubWord0的C语 言实现相同,这里也不再赘述. (2)使用ShiftRow0i ̄i数对状态矩阵State[4][4冲的各行数据进行循环移位运算.该函数所进行的循环移位 规则如下.状态矩阵State[4][4】中的第一行数据位置不变,第二行数据循环左移一位数字,第三行数据循环左 移两位数字,第四行数据循环左移三位数字.在对ShilfRow0函数进行C语言编程时主要是要注意行数以及所 对应的移位个数,保证运算的准确性. (3)使用Mjxc0lumns0——列混合运算函数对状态矩阵State[4][4]实施列混合运算.列混合运算应该算是 AES加密算法的加密部分的核心内容.该运算的原理实际上是在GF(2。)域上实行的多项式间的除法运算,对于 那些对GF(28)域了解不多的人来说比较繁琐复杂.但该多项式运算经过矩阵运算的处理之后可以总结出如下 的公式,该公式最大的好处便是为计算机编程提供了方便. f . :({o2)*S。, )0({03)*S lIc)o({01)*S . )0({O1)*S 3.c) j u 、 】s 。 一({01)*S )0({02)*S )①({03}*S . )o({01)*S 3Ic) ,  JS;. 一({01)*S。. )①({01)*S . )O({02)*S 2, )①({O3)*S。. ) ls , 一({03)*S o—r)o({o1)*S )O({01)*S。, )o({02)*S。, ) 上述三项是加密过程的基本要素.在加密的执行过程中,并不只是简单的将这三个函数执行一遍即可.加 密时,不仅要多次调用上述三个函数,同时还要结合密钥扩展所得的数据对文件进行加密.加密过程简述如下: (1)第0轮加密 ’ 之所以称之为第0轮是因为这并不是完整的一轮加密,上面所提到的三个函数均未参与到运算中来.本轮 加密是将状态矩阵State[4][4]@的16字节数字与密钥扩展数组中的w【0]至w【3]这l6字节数字进行异或运算,得 到l6字节新的数字,这些数字存放于状态矩阵State[4][4]@,取代原来的数据. (2)第1至9轮加密 这9轮加密过程相同,因此在用C语言实现时可写入循环之中运行.为说明方便,在这里设轮数为k,显然k 的值是从1至9.程序执行当中,首先对状态矩阵State[4][4]使用SubByte0函数,将矩阵中的数字进行置换.其次, 对置换后的状态矩阵使用ShiftRow0函数,将矩阵中相应行中的数字进行移位.再次,对移位后的状态矩阵使用 MixColumns0 ̄数,利用上述的列混合运算公式对状态矩阵中的数字进行运算,得到一个新的状态矩阵.最后, 第2期 赵雪梅:AES加密算法的实现及应用 109 将经过列混合运算之后的状态矩阵与密钥扩展数组中wt4k]至w[4k+4]的数字进行异或运算,将所得结果存入 状态矩阵中,至此一轮加密完成. (3)第10轮加密 这一轮加密之所以要单独列出,是因为第10轮加密与第1至9轮加密的过程相似,但不相同,因此不能写 入这9轮加密的循环之中.第10轮加密的不同之处在于,该轮加密不进行列混合运算,即不调用MixColumns0 函数,其他部分与第1至9轮加密相同. 经过第0至10轮加密后所得到的状态矩阵State[4][4]便是实验所需要的密文. 3.3数据解密 数据解密的过程与数据加密的过程大致相同,有点像是数据加密的逆运算.下面对数据解密进行简略描 述,同时附以C语言的实现方法. (1)使用InvSubByte0函数依据S置换表的逆表对状态矩阵State[4][4]中的数字进行置换,置换方法与 SubByte()函数相同.该函数的C语言实现与SubByte0函数基本相同. (2)使用InvShiftRow0i ̄数对状态矩阵State[4][4] ̄的各行数据进行循环移位运算.该函数所进行的循环移 位规则如下.状态矩阵State[4l[4ld ̄的第一行数据位置不变,第二行数据循环右移一位数字,第三行数据循环右 移两位数字,第四行数据循环右移三位数字.该函数的C语言实现与ShiftRow0函数基本相同,在此不再赘述. (3)使用InvMixcolumnsO——列混合运算的逆运算函数对状态矩阵State[4][4]实施列混合运算.虽然被称为 列混合运算的逆运算函数,但实质上该函数所执行的依然是列混合运算,运算的原理与MixColumns0的运算原 理相同.列混合运算的逆运算应该算是AES加密算法的解密部分的核心内容.该函数的实现同样需要密钥扩展 数组w[44]1 ̄I参与才能完成.下面对解密过程进行简要介绍. (1)第0轮解密 与第0轮加密类似,第0轮解密也不是一轮完整的解密.InvSubByte0函数,InvShiftRow0函数和InvMixCol— umn80函数均未参与到该轮运算中来.在这里设轮数为k.本轮解密是将状态矩阵State[4l[4]q ̄的16字节数字与 密钥扩展数组中的w[44一k]至w[44—4k]这16字节数字进行异或运算,得到16字节新的数字,这些数字存放于状 态矩阵State[4][4] ̄,取代原来的数据. (2)第1至9轮解密 这9轮解密过程相同,因此在用C语言实现时可写入循环之中运行.程序执行当中,首先对状态矩阵State 【4】【4】使用InvSubByte0函数,将矩阵中的数字进行置换.其次,对置换后的状态矩阵使用InvShiftRow0函数,将矩 阵中相应行中的数字进行移位.其次,将移位后的状态矩阵与密钥扩展数组中w[44一k]至w[44—4klff ̄数字进行 异或运算.最后,对经过异或运算后的状态矩阵使用InvMixColumns0函数,对矩阵中的数字进行列混合运算,至 此一轮加密完成. (3)第lO轮解密 该轮解密与第1至9轮解密相比少了一步对InvMixColumns0数的调用,即不进行列混合运算,其他部分 与第1至9轮解密相同. 经过第0至1O轮解密后所得到的状态矩阵State[4][4]便是刚开始所输入的原文. 4 AES加密算法的应用 在现代生活中,由于科学技术的提高,USB闪存盘因其价格较低,存储容量较大,便于携带而受到广大消费 者的青睐.与此同时,USB闪存盘的数据保护也成为了人们关注的问题.一旦闪存盘失窃或者丢失,那么闪存中 所存储的重要信息就很有可能被他人盗用,有时会造成严重的损失.因此,出于这一问题的考虑,利用AES加 密算法提出了一种闪存盘的加密方法. 当一组数据向闪存盘内写入时,对数据流进行实时加密,即输入闪存盘内的数据以加密的形式存储于盘 内;当对盘中的数据进行读取时,通过加密算法对输出的密文进行实时解密,即输出的数据为解密后的原文.计 1l0 常熟理工学院学报(自然科学) 2010年 算机中所有类型的文件都是以01数字的形式进行存储的,文件的输入和输出过程实际上就是数据流的输入与 输出,只要实现了数据流的加密,便可以实现对任意形式文件的加密.因此,通过AES加密算法完成数据流的 加密和解密具有实际的应用价值和意义. 5 结 论 AES ̄I1密算法是一种新近推出的加密算法,虽然该算法使用时间较短,且人们对于该算法还存在不同的看 法,但因其高质量的加密,稳定的表现,对硬件的配置要求低以及使用灵活而展现出了很好的使用前景,有望取 代DES]JIl密算法而成为世界通用的主流加密算法. 本文通过对AES加密算法进行了改进,提高了程序的执行效率.同时使用C语言完成了AES ̄I1密算法的程 序实现. 参考文献: 【1]张洁,朱丽娟.DES加密算法分析与实现【J】.软件导刊,2007,(3):95—97. 【2】罗祖玲.基于DES算法的数据库加密『J】.2007,装备制造技术,(6):81—83. [31吴文玲,冯登国,卿斯汉.简评美国公布的l5个AES候选算法fJ】.软件学报,1999,19(3):23~25. 【4】Raghavan N S.AES:Croptography Advances into the Future[J1.Java World,2000,12(4):47—51. [5】何明星,范平志.新一代私钥加密标准AES进展与评述[J】.计算机应用研究,2001,18(10):4-6. f6】ELISABETH OSWALD.STATE OF THE ART IN HARDWARE ARCHITECTURES[M].NIST,2005:1—46. 【7】Announcing the ADVANCED ENCRYPTION STANDARD(AES)【P].NIST,2001:1-53. [8王晓东.计算机算法设计与分析[8】M】.北京:电子工业出版社,2005:I-5. [9】BRIANGLADMAN.Implementations ofAES(Rijndae1)in C/C++andAssembler[M].NIST,2002:1-6. Implementation and Application of AES Encryption Arithmetic ZHA0 Xue—mei (Yaneheng Institute of Technology,Yaneheng 224003,China) Abstract:AES arithmetic has high quality in encryption and high rate of execution,but has low demand for config- uration of hardware.Furthermore,AES arithmetic belongs to the category of symmetric arithmetic and is very suit. able to run in hardware.The improvement of the AES arithmetic to enhance execution efficiency of program is stud- ied.The research of the subject includes the improvement of one respect of AES arithmetic,the application of C language to the AES arithmetic,and the encryption and decryption of data flow.At the same time,application of AES arithmetic is briefly introduced. Key words:AES;C language;encryption 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top