AES课程设计报告(共22页).doc
《AES课程设计报告(共22页).doc》由会员分享,可在线阅读,更多相关《AES课程设计报告(共22页).doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上课程设计报告AES加密解密的实现课程名称: 密码算法程序设计 学生姓名: 学生学号: 专业班级: 任课教师: 2011年 6 月 24 日专心-专注-专业附件:课程设计成绩评价表指导老师评阅成绩表学习与工作态度(30%)选题意义(10%)文献综述(10%)研究水平与设计能力(20%)课程设计说明说(论文)撰写质量(20%)设计创新(10%)总分指导老师签名: 年 月 日课程设计答辩记录及评价表学生讲述情况教师主要提问记录学生回答问题情况答辩评分评分项目分值评价参考标准评分总分优良中及格差选题意义1098764文献综述1098764研究水平与设计能力2019171513
2、10课程设计说明书(论文)撰写质量201917151310设计创新1098764答辩效果302825221915答辩小组成员签名答辩小组组长签名: 年 月 日课程设计成绩评定表成绩汇总评分项目评分比例分数课程设计总分指导老师评分50%答辩小组评分50%目 录1 背景与意义 由于AES应用了,感觉这算法的分组为固定长度的128bit,而密钥却有三种,分别为128,192,256bit,对应三种不同轮数分别为10轮,12轮,14轮。这就加大了算法实现的难度,加上每轮的4种变换,更加体现了算法的复杂性,所以我采用的AES来实现。不仅加深了我对密码算法本身的认识,更加巩固了我本来不是很熟悉的C语言。A
3、ES算法采用的不可约多项式是p(x)=(84310),共256个多项余式构成了一个有限域,在这有限域上要用到字节运算和字运算。 随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES1。AES即高级加密标准,作为传统堆成加密算法标准DES的替代者,有美国国家标准与技术研究所于1997年提出征集该算法的公告.1999年3月22日,NIST从15个候选算法中公布了5个候选算法进入第二轮悬着:MARS、RC6、Rijindael、SERPENT和Twofish。经过三轮的筛选,
4、2000年10月2日,以安全性(稳定的数学基础、没有算法弱点、算法抗密码分析的强度、算法输出的随机性)、性能(必须能再多种平台上一较快的速度实现)、大小(不能占用大量的存储空间和内存)、实现特性(灵活性、硬件和软件适应性、算法的简单性等)为标准而最终选定了两个比利时研究者Vincent Rijmen和Joan Daemen发明的Rijndael算法,并于2001年正式发布了AES标准。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。尽管人们对AES还有不同的看法,但总体来说,AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES设计有三个密钥长度:12
5、8,192,256位,相对而言,AES的128密钥比DES的56密钥强1021倍2。AES算法主要包括三个方面:轮变化、圈数和密钥扩展。本文以128为例,介绍算法的基本原理;结合AVR汇编语言,实现高级数据加密算法AES。2. 系统设计先定义后面s盒变换和密钥扩展要用到的s盒数组和rcon数组,然后定义s盒查找函数,行移位,列混合函数,因为这几个函数无论是在10轮还是12轮还是14轮执行时都没变化。然后就是12轮的轮密钥加和密钥扩展。这一步也许有点困难,接着就是12轮的加密函数本身。然后才是10轮的轮米要加和密钥扩展,加密函数。最后是解密要用到的逆字节替代,逆行移位,逆列混合,轮密钥加和密钥扩
6、展函数和加密是一样的,所以不用重新定义。2.1系统主要目标基本要求部分: 1完成一个明文分组的加解密,明文和密钥是十六进制,长度都为128比特(32个16进制数),按照标准输入明文和密钥,输出密文,进行加密后,能够进行正确的解密。2程序运行时,要求输出每一轮使用的密钥,以及每一轮中字节替代、行移位、列混合和密钥加等每一步操作之后的16进制表示的值。3. 提供运行标准示例的选项。4. 能够在文件读取密钥明文。5. 程序有良好的人机交互操作。,2.2主要软件需求(运行环境)本软件适用VC语言编写,编译成功后的EXE文件可以在装有windows系统的任何计算机上使用。测试平台:Windows XP
7、Professional使用软件:Visual C+ 6.02.3功能模块与系统结构主函数:xAESencrypt();128比特加密xAESencrypt6(); 12轮加密xAESdencrypt();128比特解密show();演示void SB() /从文件读取192比特密钥和明文void SA()/从文件读取128比特密钥void subbyte(int col44) /字节替代 void shiftrows(int col44) /行移位void mixcolumn(int col44) /列混合void addroundkey6(int col44,int allkey452,i
8、nt nr) /192比特轮密钥加void addroundkey(int col44,int allkey444,int nr) /128论密钥加void keyschedule6(int key46,int allkey452,int nk,int nr) /192密钥扩展void keyschedule(int key44,int allkey444,int nk,int nr) /128密钥扩展void invsubbyte(int col44) /逆字节替代void invshiftrows(int col44) /逆行移位void invmixcolumn(int col44) /
9、逆列混合总体流程图:S盒置换明文分组数据X与原始密钥K1异或(XK1)行变换列混淆与子密钥Ki异或(XKi)S盒置换行变换与子密钥Kr+1异或(XKi+1)加密分组数据加密分组数据与子密钥Kr+1异或(XKi+1)与子密钥Ki异或(XKi)反行变换反S盒置换反行变换反列混淆反列混淆与原始密钥K1异或(XK1)解密分组数据X先定义s盒查找函数,行移位,列混合函数,因为这几个函数无论是在10轮还是12轮还是14轮执行时都没变化。然后就是12轮的轮密钥加和密钥扩展。这一步也许有点困难,接着就是12轮的加密函数xAESencrypt6()本身。然后才是10轮的轮米要加和密钥扩展,加密函数xAESenc
10、rypt()。最后是解xAESdencrypt()要用到的逆字节替代,逆行移位,逆列混合,轮密钥加和密钥扩展函数和加密是一样的,所以不用重新定义。最后写了一个演示show()。用的是动画上面的明文和密钥作为输入。3 系统功能程序设计3.1基本要求部分3.1.1 字节替换字节代换是非线性变换,独立地对状态的每个字节进行查表代换。代换表(S盒)是可逆的,由以下两个变换合成得到:首先,将字节看作GF(28)上的元素,映射到自己的乘法逆元。b(x)=a(x) mod m(x)其中m(x)=x8+x4+x3+x+1,当a(x)=0时,其逆元素也为0,即00映射到自己。其次,对字节作如下的(GF(2)上的
11、,可逆的)仿射变换,如图2所示。图2 S盒仿射变换将从00到FF的十六进制数经过上述运算就可以得到一个16*16的字节代换表,也就是用于加密的S盒。图3是字节代换示意图。图3 字节代换示意图主要算法:void subbyte(int col44) for(int i=0;i4;i+)for(int j=0;j4;j+)colij=sboxcolij;for(int a=0;a4;a+)for( int b=0;b4;b+)printf( %x,colba);printf(n);S数组表示S-盒,此处采用直接查表的方法实现S-盒替代。对于用于解密的逆S盒,需要通过在GF(2)域上的逆仿射变换生成
12、,下面是进行逆仿射变换的仿射变换矩阵,如图4。图4 逆S盒仿射变换它的逆变换的实现和它十分类似,同样也是通过查逆S-盒完成。3.1.2行移位行移位是根据不同的分组长度将状态矩阵中的各行进行相应循环移位。在加密过程中,状态矩阵的后三行要按字节进行左移位。在解密过程中则要进行逆行移位,即将状态矩阵中的后三行按字节进行右移位。表3给出了在分组不同的情况下移位量,即在后三行的第1行要移位c1个字节,第2行要移位c2个字节,第3行要移位c3个字节。表3 行移位量Nbc1c2c3412361238134加密算法的行移位过程如图5所示。图5 行移位示意图主要算法:void shiftrows(int col
13、44)unsigned char temp4*4; int i,j;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位else if(i=3)colij=temp4*i+(j+3)%4;/第三行左移3位for(int a=0;a4;a+)for(int b=0;b4;b+)printf( %x,colba);printf(n);3.1.3列混合在
14、列混合变换中,将状态矩阵中的一列看作在GF(28)上的多项式,与一个常数多项式c(x)相乘并模x4+1。其中,c(x)=03x3+01x2+01x+02(系数用十六进制表示)c(x)是与x4+1互素的,因此模x4+1是可逆的。列混合预算也可写为矩阵乘法(图6)。设b(x)=c(x)a(x),则图6 列混合的矩阵表示主要算法:void mixcolumn(int col44)int r=0,c=0;int temp44;for(r=0;r4;r+)for(c=0;c4;c+)temprc=colrc;for(c=0;c4;c+)col0c=gfmultby02(temp0c)gfmultby03
15、(temp1c)gfmultby01(temp2c)gfmultby01(temp3c);col1c=gfmultby01(temp0c)gfmultby02(temp1c)gfmultby03(temp2c)gfmultby01(temp3c);col2c=gfmultby01(temp0c)gfmultby01(temp1c)gfmultby02(temp2c)gfmultby03(temp3c);col3c=gfmultby03(temp0c)gfmultby01(temp1c)gfmultby01(temp2c)gfmultby02(temp3c);for(int a=0;a4;a+)
16、for( int b=0;b4;b+)printf( %x,colba);printf(n);这个算法还有点没弄明白,主要是调用上面的函数。在解密过程中,要做的逆列混合运算和列混合类似,即每列都用一个特定的多项式d(x)相乘。d(x)满足(03x3+01x2+01x+02)d(x)=01由此得到d(x)= 0bx3+0dx2+09x+0e逆列混合运算可转变成如下的一个矩阵运算,如图7所示。图7 逆列混合矩阵表示3.1.4密钥加轮密钥加是最后一个阶段,是将列混合的状态与子密钥进行XOR逻辑运算,即将轮密钥与状态按比特异或。轮密钥是通过密钥调度过程从密码密钥中得到的,轮密钥长度等于分组长度。密钥加
17、是将轮密钥简单地与状态进行逐比特异或。轮密钥由种子密钥通过密钥编排算法得到,轮密钥长度等于分组长度Nb。图8是密钥加运算示意图。图8 密钥加示意图主要算法:void addroundkey(int col44,int allkey444,int nr)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(n);3.1.5密钥扩展 密钥扩展我认为是本密码程序的重点也是难点,密钥首先有一个初始密钥,要将密钥扩展出十组子密钥。密
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AES 课程设计 报告 22
限制150内