AES 课程设计报告.doc

上传人:精*** 文档编号:852114 上传时间:2023-09-16 格式:DOC 页数:55 大小:986.09KB
下载 相关 举报
AES 课程设计报告.doc_第1页
第1页 / 共55页
AES 课程设计报告.doc_第2页
第2页 / 共55页
AES 课程设计报告.doc_第3页
第3页 / 共55页
AES 课程设计报告.doc_第4页
第4页 / 共55页
AES 课程设计报告.doc_第5页
第5页 / 共55页
点击查看更多>>
资源描述

1、 引 言密码学是一门古老而年轻的科学,密码学经历了几千年的演化与发展,形成了丰富的内涵,并得到了广泛的应用。密码学起源于信息隐藏,就是为了达到机密信息不被非授权地获知目的而采取的某种手段或方式;现代密码学主要基于数学或物理的方法进行某种变换来实现。密码学曾经高深莫测、讳莫如深,主要用于国家外交或军事等重要领域;但随着科学技术的发展(尤其是电子信息技术的发展),网络成为人们生活的必需品,现在密码学与人们的平时生活和工作都息息相关,已成长为网络信息安全的基石。现代密码学中最主要的三大加密算法:DES加密算法、AES加密算法、RSA加密算法已经逐渐成为电子通信、金融、智能卡(IC卡)等众多领域维护自

2、身信息安全的主要工具。因此,了解并掌握这三大算法是我们维护自身通信安全的基本要求。在这三大算法中,DES和AES作为对称密码体制的两大加密标准,具有比非对称密码体制(RSA)密钥长度小、加解密速度快的优点,因此使用范围更广。接下来,针对DES和AES,我就简单分析一下。DES起源于1973年美国国家标准局(NBS)征求国家密码标准方案。IBM就提交了其在20世纪60年代末设立的一个计算机密码编码学方面的项目研究成果,这个项目在1971年结束时研制出了一种称为Lucifer的算法。它是当时提出的最好算法,因而在1977年被选为数据加密标准,有效期为5年,随后在1983、1987、1993年3次再

3、度授权该算法续用5年。由此,DES被美国国家标准局(NBS)确定为联邦信息处理标准(FIPS PUB 46),得到过最广泛的应用,特别是在金融领域,曾是对称密码体制事实上的世界标准。但是,近年来随着新的加密算法AES加密算法的出现,以及其相比于DES有更好的安全性、效率、灵活性,AES渐渐有取代DES的趋势,并成为新的加密标准。AES标准(FIPS 197)在2001年12月由美国国家标准与技术研究所(NIST)正式发布,其要求分组大小为128位,允许3个不同的密钥大小,即128位、192位或256位,并以两个比利时研究者Vincent Rijmen和Joan Daemen发明的Rijndae

4、l算法作为AES加密的核心,特别是Rijndael算法所采用的掩码实现方式非常有利于抵抗能量攻击和计时攻击,因此,AES得到了迅速地推广和应用。正是基于AES具有更好的安全性、效率、灵活性,所以,我决定对AES的加密解密技术做更深一步的探讨与研究。 目 录摘要.(1)Abstract.(2)1. AES出现的背景与开发意义.(3)2. 系统的主要设计.(3) 2.1系统设计的主要目标.(4)2.2系统的开发环境.(4)2.3系统的主要功能模块.(4) 2.4系统开发的结构流程图.(5)3. 系统的主要功能模块设计.(5) 3.1基本模块部分.(5)3.1.1 字节替换.(5)3.1.2 行移位

5、.(7)3.1.3 列混合.(8)3.1.4 轮密钥加.(9)3.1.5 密钥扩展.(10)3.1.6 获取RoundKey.(13)3.1.7 逆字节替换.(13)3.1.8 逆行移位.(14)3.1.9 逆列混合.(14) 3.2主要模块部分.(16) 3.2.1加密.(16) 3.2.1.1调用代码中的明文和密钥加密.(16) 3.2.1.2键盘输入128bit明文和密钥加密.(17) 3.2.1.3键盘输入明文和192bit密钥加密.(19) 3.2.1.4从文件中读取明文和192bit密钥实现加密.(20) 3.2.2解密.(20) 3.2.2.1键盘输入128bit密文和密钥解密.

6、(22) 3.2.2.2从文件中读取密文和128bit密钥进行解密.(23) 3.2.3菜单模块.(25) 3.2.4 main()函数模块.(26)4. 程序测试结果与分析.(26) 4.1程序测试结果截图.(26) 4.1.1演示函数AES_128_Show_Encrypt( )运行结果截图.(26) 4.1.2文件解密函数AES_128_File_Decrypt( )结果截图.(28) 4.2对演示函数AES_128_Show_Encrypt( )测试结果的分析.(28)5. 系统开发的优缺点以及需要改进的地方.(31) 5.1系统开发的优缺点.(31) 5.2系统需要改进与提高的地方.

7、(31)6. 小结.(31)7. 参考文献.(32)附录.(32)致谢.(52) AES加密与解密技术的开发 摘要AES加密算法的出现是密码学史上的又一次革命。其大大地弥补了DES加密算法的不足,密钥长度也由原来DES的64bit(实际有效位为56bit)增长到现在的128bit、192bit或256bit。此外,AES加密算法具有比DES加密算法更好的安全性、效率、灵活性。AES加密算法的核心是两个比利时研究者Vincent Rijmen和Joan Daemen发明的Rijndael算法。而本次我对AES的开发亦是以Rijndael算法为核心,主要实现键盘输入16进制明文和128bit(19

8、2bit)密钥的加密,以及简单的从文件读取明文和密钥并加密(文件格式为.txt,加密明文为16进制的128bit数据,密钥长度为192bit)、简单的从文件读取密文和密钥并解密(文件格式为.txt,解密明文为16进制的128bit数据,密钥长度为128bit)。并通过此次开发加深对AES加密算法(尤其是对Rijndael算法)的理解。关键词: AES DES Rijndael算法 文件加密与解密 AES Encryption and Decryption technology development Abstract AES encryption algorithm is the emerge

9、nce of the cryptography another revolution in the history of. It is greatly to make up for the DES encryption algorithm and the lack of a key length also from originally DES 64 bit (a practical and effective for 56 bit) growth to 128 now bit, 192 bit or 256 bit. In addition, AES encryption algorithm

10、 has better than DES encryption algorithm of safety, efficiency and flexibility. AES encryption algorithm that is the core of two Belgian researchers Vincent Rijmen and Joan Daemen invention Rijndael algorithm. And this I of development is also Rijndael AES algorithm as the core, mainly realizes the

11、 keyboard input hexadecimal expressly and 128 bit (192 bit) key encryption, and simple read from the file expressly and key and encryption (file format for TXT, encryption proclaimed. For hexadecimal 128 bit data, a key length for 192 bit), simple read from the file ciphertext and key and decryption

12、 (file format for declassification. TXT, expressly for hexadecimal 128 bit data, a key length for 128 bit). And through the development of AES encryption algorithm deepen (especially to Rijndael algorithm) understanding.Key words: AES DES Rijndael algorithm File Encryption and Decryption AES加密与解密技术的

13、开发 1. AES出现的背景与开发意义 随着对称密码的发展,DES数据加密标准(Data Encryption Standard)算法由于密钥长度较小(64位,但有效位为56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年美国国家标准与技术研究所(NIST)公开征集新的数据加密标准,即AES1。 AES即高级加密标准(Adcanced Encryption Standard) ,作为传统对称加密算法标准DES的替代者,有美国国家标准与技术研究所于1997年提出征集该算法的公告。1999年3月22日,NIST从15个候选算法中公布了5个候选算法进入第二轮悬着:MARS、R

14、C6、Rijindael、SERPENT和Twofish。经过三轮的筛选,2000年10月2日,以安全性(稳定的数学基础、没有算法弱点、算法抗密码分析的强度、算法输出的随机性)、性能(必须能再多种平台上一较快的速度实现)、大小(不能占用大量的存储空间和内存)、实现特性(灵活性、硬件和软件适应性、算法的简单性等)为标准而最终选定了两个比利时研究者Vincent Rijmen和Joan Daemen发明的Rijndael算法,并于2001年正式发布了AES标准。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。尽管人们对AES还有不同的看法,但总体来说,AES作为新一代的数据加密标准汇聚了

15、强安全性、高性能、高效率、易用和灵活等优点。由于AES的核心Rijndael算法的分组为固定长度的128bit,而密钥却有三种,分别为128bit、192bit、256bit,对应三种不同加密轮数分别为10轮、12轮、14轮。这就加大了算法实现的难度,加上每轮的4种变换,更加体现了算法的复杂性,所以我决定开发AES。而这样不仅加深了我对密码算法本身的认识,更加巩固了我本来不是很熟悉的C语言。AES算法采用的不可约多项式是p(x)=(84310),共256个多项余式构成了一个有限域,在这有限域上要用到字节运算和字运算。AES设计有三个密钥长度:128bit、192bit、256bit,相对而言,

16、AES的128bit密钥比DES的56bit密钥强1021倍2。AES算法主要包括三个方面:轮变化、圈数和密钥扩展。本文将以128bit和192bit为例,介绍Rijndael算法的基本原理;并结合C语言,实现高级数据加密算法AES。2. 系统的主要设计 首先定义后面s盒变换和密钥扩展要用到的s盒数组和rcon数组(当然这时逆s盒数组也一起定义),然后定义s盒查找函数,行移位函数,列混合函数,因为这几个函数无论是在10轮还是12轮还是14轮执行时都没变化。然后就是12轮的轮密钥加和密钥扩展,接着就是12轮的加密函数本身。然后才是10轮的轮密钥加和密钥扩展,加密函数。最后是解密要用到的逆字节替代

17、,逆行移位,逆列混合函数。由于轮密钥加和密钥扩展函数和加密是一样的,所以不用重新定义。2.1 系统设计的主要目标基本要求部分:1. 完成一个明文分组的加解密,明文和密钥是十六进制,长度都为128bit(32 个16进制数),按照标准输入明文和密钥,输出密文,进行加密后,能够进 行正确的解密。2. 程序运行时,要求输出每一轮使用的密钥,以及每一轮中字节替代、行移位、 列混合和密钥加等每一步操作之后的16进制表示的值。3. 提供运行标准示例的选项。4. 能够从文件读取密钥和明文(或读取密钥和密文),并能将加解密结果以文 件形式保存,同时也能在屏幕上看到加解密过程,并通过和文件加解密结果 的对比,验

18、证加解密的正确性,以完成简单的文件加解密。5. 有良好的系统检错功能,当发现输入不合法时,立即退出程序,不会进入死 循环。2.2 系统的开发环境本次AES加密算法开发适用C语言编写,编译成功后的.EXE文件可以在装有Windows系统的任何计算机上使用。测试平台:Windows 7 Ultimate使用软件:Dev-C+ 4.9.9.22.3 系统的主要功能模块主要函数:AES_128_Encrypt( ); /128bit(10轮)加密AES_192_Encrypt( ); /192bit(12轮)加密AES_128_Decrypt( ); /128bit(10轮)解密AES_128_Sho

19、w_Encrypt( ); /演示在给定明文和128bit(10轮)密钥的情况下的加密AES_192_File_Encrypt( ); /从文件读取192bit密钥和明文进行加密AES_128_File_Decrypt( ); /从文件读取128bit密钥和密文进行解密void SubByte(int Col44) /字节替代 void ShiftRows(int Col44) /行移位void MixColumn(int Col44) /列混合void AddRoundKey_192(int Col44,int AllKey452,int nr) /192bit轮密钥加void AddRou

20、ndKey_128(int Col44,int AllKey444,int nr) /128bit 轮密钥加void KeySchedule_192(int key46,int AllKey452,int nk,int nr) /192bit密钥扩展void KeySchedule_128(int key44,int AllKey444,int nk,int nr) /128bit密钥扩展void InvSubByte(int Col44) /逆字节替代void InvShiftRows(int Col44) /逆行移位void InvMixColumn(int Col44) /逆列混合2.4

21、 系统开发的结构流程图总体流程图如下示:S盒置换明文分组数据X与原始密钥K1异或(XK1)行变换列混淆与子密钥Ki异或(XKi)S盒置换行变换与子密钥Kr+1异或(XKi+1)加密分组数据加密分组数据与子密钥Kr+1异或(XKi+1)与子密钥Ki异或(XKi) 逆行变换逆S盒置换逆行变换逆列混淆逆列混淆与原始密钥K1异或(XK1)解密分组数据X3. 系统的主要功能模块设计3.1 基本模块部分3.1.1 字节替换SubByte( ) SubByte( )变换是一个基于S-盒(见附录一)的非线性置换,它用于将输入或中间态的每一个字节通过一个简单的查表操作,将其映射为另一个字节。 SubByte(

22、)变换方法如下图1示: 实际上,SubByte( )变换由两个步骤组成: (1)把S-盒中的每个字节看作GF()域上的元素,把该字节映射为它在有限域GF()中的乘法逆元。 ,其中,当时,其逆元也为0,即“00”映射到自己。 (2)将S盒中每个字节(上一步得到的乘法逆)记为,对S盒中的每个字节的每位做变换(称为仿射变换): , 式中,是指字节的第位。上式用矩阵表示为(下图2示): 图1 字节代换示意图 图2 S-盒仿射变换 将从“00”到“FF”的16进制数经过上述运算就可以得到一个16*16的字节代换表,也就是用于加密的S-盒。主要算法:void SubByte(int Col44) /字节替

23、代 int i,j,a,b;for( i=0;i4;i+)for( j=0;j4;j+)Colij=S_BoxColij;for(a=0;a4;a+) for(b=0;b4;b+) printf( %x,Colba);printf(n); S_Box 数组表示S-盒,此处采用直接查表的方法实现S-盒替代。3.1.2 行移位ShiftRows( )行移位是根据不同的分组长度将状态矩阵中的各行进行相应循环移位。在加密过程中,状态矩阵的后三行要按字节进行左移位。在解密过程中则要进行逆行移位,即将状态矩阵中的后三行按字节进行右移位。表1给出了在分组不同的情况下移位量,即在后三行的第1行要移位c1个字节

24、,第2行要移位c2个字节,第3行要移位c3个字节。表1 行移位量Nbc1c2c3412361238134加密算法的行移位过程如图3所示。 图3 行移位示意图主要算法:void ShiftRows(int Col44) /行移位int i,j,a,b; unsigned char temp4*4;for(j=0;j4;j+)for(i=0;i4;i+)temp4*i+j=Colij; for(i=1;i4;i+)for(j=0;j4;j+)if(i=1)Colij=temp4*i+(j+1)%4;/第一行左移1位else if(i=2)Colij=temp4*i+(j+2)%4;/第二行左移2位

25、else if(i=3)Colij=temp4*i+(j+3)%4;/第三行左移3位for(a=0;a4;a+)for(b=0;b4;b+)printf( %x,Colba); printf(n);3.1.3 列混合MixColumn( )在列混合变换中,将状态矩阵中的一列看作在GF(28)上的多项式,与一个常数多项式c(x)相乘并模x4+1。也即,其中,c(x)=03x3+01x2+01x+02,(内的数表示是字节):;。 代表与相乘后的指数等于的项的系数之和,利用,可得: 其余类似,因此上式可用矩阵表示,如图4示。设b(x)=c(x)a(x),则图4 列混合的矩阵表示主要算法:void M

26、ixColumn(int Col44) /列混合 int r=0,c=0,a,b;int temp44;for(r=0;r4;r+)for(c=0;c4;c+)temprc=Colrc;for(c=0;c4;c+) Col0c=gfmultby_02(temp0c)gfmultby_03(temp1c)gfmultby_01(temp2c)gfmultby_01(temp3c);Col1c=gfmultby_01(temp0c)gfmultby_02(temp1c)gfmultby_03(temp2c)gfmultby_01(temp3c);Col2c=gfmultby_01(temp0c)g

27、fmultby_01(temp1c)gfmultby_02(temp2c)gfmultby_03(temp3c);Col3c=gfmultby_03(temp0c)gfmultby_01(temp1c)gfmultby_01(temp2c)gfmultby_02(temp3c);for(a=0;a4;a+) for(b=0;b4;b+) printf( %x,Colba);printf(n); 在解密过程中,要做的逆列混合运算和列混合类似,即每列都用一个特定的多项式d(x)相乘。d(x)满足(03x3+01x2+01x+02)d(x)=01由此得到d(x)= 0b+d2+9+e逆列混合运算可转

28、变成如下的一个矩阵运算,如图5所示。图5 逆列混合矩阵表示3.1.4 轮密钥加AddRoundKey_128( )和AddRoundKey_192( )AddRoundKey( )用于将输入或中间态S的每一列与一个密钥字进行XOR逻辑运算(按位异或运算),即AddRoundKey(S,)=S+,(=0,1,)由原始密钥通过密钥扩展算法产生。每一个轮密钥由个字组成,表示第轮的第个轮密钥字。轮密钥加变换可表示为:,或可以表示为图6示。图6 密钥加示意图主要算法:void AddRoundKey_192(int Col44,int AllKey452,int nr) /轮密钥加(192bit) in

29、t a,b,j,i;for(i=0;i4;i+)for(j=0;j4;j+)Colij=AllKeyij+4*nr; for(a=0;a4;a+) for(b=0;b4;b+) printf( %x,Colba);printf(n);void AddRoundKey_128(int Col44,int AllKey444,int nr) /轮密钥加(128bit) int a,b,i,j;for(i=0;i4;i+)for(j=0;j4;j+)Colij=AllKeyij+4*nr; for(a=0;a4;a+) for(b=0;b4;b+) printf( %x,Colba); printf

30、(n);3.1.5 密钥扩展KeySchedule_128( )和KeySchedule_192( ) 我认为密钥扩展是本密码程序的重点也是难点,密钥首先有一个初始密钥,要将密钥扩展出十组子密钥。密钥bit的总数=分组长度*(轮数Round+1)。例如:当分组长度为128bit和轮数Round为10时,轮密钥长度为128*(10+1)=1408bit。密钥的长度是够使用的,所以必须将密码密钥扩展成一个扩展密钥。扩展算法:第i-1轮的分组长度个字节的子密钥被分成四组来处理,每组4个字节。最后一组的4个字节先执行一个字节的循环左移,由S盒来进行替代处理,然后这4个字节结果中的第一个字节和轮常数相异

31、或,这个轮常数是预先定义的,并且固定值。最后,为了得到第i轮的密钥,把得到的4个字节的结果和轮密钥的最初4字节按位异或,得到i轮密钥的最初4个字节,然后又和密钥的下面的4个字节按位异或,得到i轮密钥的下面四个字节,以此类推。具体如下图7示: 图7 密钥扩展算法示意图主要算法:void KeySchedule_192(int key46,int AllKey452,int nk,int nr)/密钥扩展192bit int temp41;int a,b,g,h,i,j,k,q,t,w,x,y;for( a=0;a4;a+)/AllKey初始化 for( b=0;b52;b+) AllKeyab=

32、0;/置零 for(i=0;i4;i+)/将key保存在AllKey的前4列 for(j=0;j6;j+) AllKeyij=keyij;i=nk;while(i(4*(nr+1)for(int x=0;x4;x+) tempx0=AllKeyxi-1;if(i%nk=0)/rotwordt=temp00;temp00=temp10;temp10=temp20;temp20=temp30;temp30=t;for(k=0;k4;k+)/ subwordtempk0=S_Boxtempk0;for(h=0;h4;h+) temph0=Rconhi/4;for(y=0;y4;y+) AllKeyyi=AllKeyyi-6tempy0;i+;for(g=0;g=12;g+) printf(第 %d 轮密钥,g);for( q=0;q4;q+)for(w=0;w4;w+)printf( %x,AllKeyw

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 技术资料 > 课程设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922