AES加密算法在用户信息管理模块中的应用毕业设计论文_第1页
AES加密算法在用户信息管理模块中的应用毕业设计论文_第2页
AES加密算法在用户信息管理模块中的应用毕业设计论文_第3页
AES加密算法在用户信息管理模块中的应用毕业设计论文_第4页
AES加密算法在用户信息管理模块中的应用毕业设计论文_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、核准通过,归档资料。未经允许,请勿外传!9JWKffwvG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ!djs#XuyUP2kNXpRWXmA&UE9aQGn8xp$R# AES algorithm; encryption; decryption; implementation; application 目 录TOC o 1-3 h u 1绪论1 HYPERLINK l _Toc30488 PAGEREF _Toc30488 1 HYPERLINK l _Toc1995 PAGEREF _Toc1995 1 HYPERLINK l _Toc1

2、0767 1.3 数据加密标准的发展过程 PAGEREF _Toc10767 1 HYPERLINK l _Toc2525 PAGEREF _Toc2525 1 HYPERLINK l _Toc2969 1.3.2 高级加密标准AES PAGEREF _Toc2969 1 HYPERLINK l _Toc1057 1.4 AES的研究现状 PAGEREF _Toc1057 2 HYPERLINK l _Toc15812 PAGEREF _Toc15812 2 HYPERLINK l _Toc4748 2 AES加密算法原理介绍 PAGEREF _Toc4748 3 HYPERLINK l _T

3、oc22988 AES算法的相关数学知识 PAGEREF _Toc22988 3 HYPERLINK l _Toc10096 2.1.1 有限域GF (28)上的运算 PAGEREF _Toc10096 3 HYPERLINK l _Toc5639 2.1.2 系数在有限域GF(28)上的多项式的运算 PAGEREF _Toc5639 4 HYPERLINK l _Toc16044 2.2 AES 算法描述 PAGEREF _Toc16044 6 HYPERLINK l _Toc14000 PAGEREF _Toc14000 6 HYPERLINK l _Toc19263 2.2.2 算法的基

4、本变换 PAGEREF _Toc19263 8 HYPERLINK l _Toc24689 2.2.3 密钥扩展算法 PAGEREF _Toc24689 9 HYPERLINK l _Toc3624 2.2.4 解密算法 PAGEREF _Toc3624 10 HYPERLINK l _Toc19276 2.3 AES安全性能分析 PAGEREF _Toc19276 12 HYPERLINK l _Toc22140 PAGEREF _Toc22140 12 HYPERLINK l _Toc27845 PAGEREF _Toc27845 12 HYPERLINK l _Toc17224 PAGE

5、REF _Toc17224 12 HYPERLINK l _Toc28886 2.3.4 AES算法的安全性 PAGEREF _Toc28886 14 HYPERLINK l _Toc7511 PAGEREF _Toc7511 15 HYPERLINK l _Toc20564 3 AES加密算法的实现 PAGEREF _Toc20564 16 HYPERLINK l _Toc30093 开发工具与环境 PAGEREF _Toc30093 16 HYPERLINK l _Toc1510 3.2用 C+ 编写 AES 类 PAGEREF _Toc1510 16 HYPERLINK l _Toc21

6、120 3.3用C+编写的AES Cipher方法 PAGEREF _Toc21120 20 HYPERLINK l _Toc15026 3.4 用C+编写的AES InCipher方法 PAGEREF _Toc15026 22 HYPERLINK l _Toc843 4 用户信息管理模块设计和实现 PAGEREF _Toc843 24 HYPERLINK l _Toc9321 4.1 用户信息管理模块功能 PAGEREF _Toc9321 24 HYPERLINK l _Toc5377 4.1.1 权限分析 PAGEREF _Toc5377 24 HYPERLINK l _Toc14670

7、4.1.2 用户信息管理 PAGEREF _Toc14670 24 HYPERLINK l _Toc21593 4.2 设计方法 PAGEREF _Toc21593 24 HYPERLINK l _Toc27858 PAGEREF _Toc27858 24 HYPERLINK l _Toc8774 PAGEREF _Toc8774 25 HYPERLINK l _Toc4671 PAGEREF _Toc4671 25 HYPERLINK l _Toc10888 4.4.2 查询记录功能 PAGEREF _Toc10888 26 HYPERLINK l _Toc7557 PAGEREF _Toc

8、7557 26 HYPERLINK l _Toc29620 PAGEREF _Toc29620 27 HYPERLINK l _Toc31655 PAGEREF _Toc31655 27 HYPERLINK l _Toc15485 PAGEREF _Toc15485 28 HYPERLINK l _Toc18268 5 AES加密算法在用户信息管理模块中的应用 PAGEREF _Toc18268 30 HYPERLINK l _Toc30793 PAGEREF _Toc30793 30 HYPERLINK l _Toc986 5.2 AES加密算法在用户信息管理模块中的应用效果演示 PAGER

9、EF _Toc986 30 HYPERLINK l _Toc3405 6 结论 PAGEREF _Toc3405 34 HYPERLINK l _Toc5870 致 谢 PAGEREF _Toc5870 35 HYPERLINK l _Toc18641 参考文献 PAGEREF _Toc18641 36 HYPERLINK l _Toc17603 毕业设计(论文)知识产权声明 PAGEREF _Toc17603 37 HYPERLINK l _Toc25162 毕业设计(论文)独创性声明 PAGEREF _Toc25162 38附录 外文原文及翻译39 主 要 符 号 表 GF(28) 有限域

10、 a-1( x ) 逆元 mod 求模运算符 Nr 加密轮数 Nb 分组长度的列数 Nk 密钥长的列数 异或运算符号 多项式乘法 1 绪论 近年来,随着Internet的迅猛发展,计算机网络技术正在日益广泛的应用到商业,金融,国防等各个领域,人们对用户信息安全性的要求也越来越高,如何保证数据的安全已经成为了一个重要问题,因此本课题主要运用AES加密算法在用户信息管理模块对用户信息进行加密,以提高用户信息的安全性。 AES作为新一代的分组数据加密标准,以其没有显著的攻击方法、编码易于实现和加、解密速度快等优点,满足了人们不同信息安全等级的需要.随着计算机网络的发展,数据加密的重要性也逐渐提高,A

11、ES加密技术得到了迅速的发展和广泛的应用。 密码学的基本思想是对机密信息进行交换,以保护信息在传送过程中不被非法窃取、解读和利用。 密码体制的分类方法有很多,一般是通过加密算法与解密算法所使用的密钥是否相同的原则分为:对称密钥密码体制和公开密钥密码体制。后者一般基于一个数学上的实现,适用于开放的使用环境,可以安全方便的实现数字签名和认证,通常用于密钥的分配与传输上,但对数据加、解密的速度较慢。而前者的安全性基于复杂的非线性变换,由于其加密速度比公钥密码相对较快,因此是目前商业领域比较重要而流行的一种加密体制。对称密钥密码体制从加密模式上又可分为:序列密码和分组密码。序列密码使用密钥短的位串生成

12、长的位串,然后再与明文按位模2相加产生密文,它的安全基于密钥的随机性。如果密钥是真正的随机数,则这种密码体制在理论上就是不可攻破的,这也可以称为一次一密乱码本体制。严格的该体制所需的密钥量不存在上限,且很难得到真正意义上的随机数序列。实际中更多的是采用伪随机数序列。为了提高安全强度,伪随机序列的周期要足够长,并且序列要有很好的随机性,但这也很难做到,因此除了一些高度保密的环境以外,很少使用。应用在网络通信环境中的数据加密方法更多的是采用分组加密体制。分组密码算法通常由加、解密算法和密钥扩展算法两部分组成,密钥扩展算法用于生成m个子密钥。加密算法由一个密码学上的函数f对数据分组进行一系列变换之后

13、,每次与一个子密钥迭代,总共迭代r次完成一个分组加密。分组密码已成为PIesc和SSL等相关协议的应用层数据安全保护的主要手段。我国信息化、网络化建设在技术与装备上对别国的极大依赖性,使信息安全问题尤为突出。据报道,美国出口中国的计算机设备留有“暗门”,供美国政府随时启动,出口中国的计算机系统安全等级也只有CZ级,为美国国防部规定的8个级别中倒数第三。我国的信息网络安全起步较晚,安全防护能力处于发展的初级阶段,与发达国家有较大的差距。当前,国内许多信息网络应用系统尚处于不设防状态,存在很大的风险性:有些重要的网络应用系统使用的安全设备都是从国外直接引进的,难以保证安全利用和有效监控。密码技术特

14、别是加密技术是信息安全技术中的核心技术,国家关键基础设施中不可能引进或采用别人的加密技术,只能自主开发。目前我国在密码技术的应用水平方面与国外还有一定的差距。国外的密码技术必将对我们有一定的冲击力,特别是在加入WTO组织后这种冲击力只会有增无减。因而我们必须自主的开发我们自己的加密解密芯片,从而保证我们信息的安全性。1.3 数据加密标准的发展过程1972年,国家标准局(NBS)拟定了一个旨在保护计算机和通信数据的计划,开发一个单独的标准密码算法,1973年公开征集算法,1974年第二次公开征集,IBM的Lucifer的变形当选,1976年H月宣布成为联邦标准DES,随后投入使用。不久DES的应

15、用范围迅速扩大到涉及美国以外的公司,甚至某些美国的军事部门也使用了DES。DES是世界上第一个公认的实用分组密码算法标准。迄今为止,在针对DES的攻击中最有效的方法还是穷举,遍历密钥空间。由于计算机硬件的速度越来越快,DES密钥长度太短的缺陷就显露了出来。最终能在合理的时间内完成对56位密钥的强力攻击。1987年宣布DES不安全,但由于商业上已广泛使用,且没有合适的方案替代。进入上世纪九十年代后,另一种由DES衍生出来的算法三重DES,被广泛使用。但是它的安全性并不意味着建立在168位的密钥之上,研究表明,可以将其转化为对108位密钥的攻击。最重要的是,三重DES的加密和解密时间消耗较大,不能

16、很好的适用飞速增长的实时信息加密需求。2000年,原设计寿命10年左右的DES已使用23年,单重已攻击成功。1.3.2 高级加密标准AES 1997年1月2日,美国国家标准和技术研究所(NIST)宣布启动高级加密标准(AES)的开发研究工作,并于同年9月12日正式发出了征集算法的公告。NIST的目标是确定一种保护敏感信息的、公开的、免费的并且全球通用的算法作为AES,以弥补DES退出后,数据加密标准留下的空缺。在征集公告中,NIST对算法作了最低要求:算法必须是对称密钥体制的分组密码,并且要支持128位的分组长度和128、192、256位的密钥长度。1998年8月20日,NIST召开了第一次A

17、ES候选会议,在会议上宣布了15个AES候选算法,并恳请公众对这15个算法进行评估。经过一年时间的评估,NIST于1999年8月又召开了第二次候选会议,在这次会议上,NIST宣布从巧个候选算法中选出了5个候选算法参加最后的决赛,并再次恳请公众对这5个候选算法进行评估,并规定评估于2000年5月25日结束。为了更好的选出一种候选算法作为AES,NslT在评估正式结束前的一个多月又召开了第三次AES候选会议,在这次会议上,对各种评估结果作了详细的分析,为AES算法的确定提供了详尽的材料。2000年10月2日,NIST宣布采用助Rijndael算法作为AES,此后NIST授权联邦信息处理标准出版社为

18、AES制定了标准草案用以征集公众的评议,随后在公众评议的基础上对草案进行修改,于2001年11月26日发布了正式的197号标准AES标准,并指出标准生效的具体时间为2002年5月26号,至此经历数年的AES开发研究才大功告成。1.4 AES的研究现状 目前对高级加密标准算法的研究主要集中在三个方面:设计原理、安全性能分析和统计性能分析。设计原理方面主要研究算法在设计时所遵循的原则、算法采用的整体结构以及各组成部分的数学基础和性能。安全性能研究主要集中在分析抵抗现有已知密码攻击方法上,主要包括强力攻击、差分密码分析、线性密码分析、专用攻击和插值攻击。目前对差分密码分析和线性密码分析研究的比较深入

19、,对专用攻击主要集中在基本攻击原理上,对插值攻击的研究主要集中在寻找算法的代数表示。统计性能主要是研究算法随机化数据的能力,目前有关助Rijndael算法的统计性能方面的研究还较少,所见统计测试在测试项目的选择和测试数据的构造上也不尽相同,但大多测试都基于NIST统计测试工具包进行。本论文中用户信息加密的实现采用了美国最新公布的AES加密算法,AES算法被认为是至今为止理论上最为成功的加密算法。本文主要研究的是AES加密算法及其应用,采用C+语言对算法进行简单的实现,模拟加密及其解密的过程,并在用户信息管理模块中得到应用。 2 AES加密算法原理介绍 AES算法的相关数学知识 AES 算法中的

20、许多运算是按字节定义的,一个字节为8位。AES 算法中还有一些运算是以4个字节的字定义的,一个4字节的字为32位。一个字节可以看成是有限域GF(28)中的一个元素。一个4字节的字可以看成是系数在GF(28)中并且次数小于4的多项式。2.1.1 有限域GF (28)上的运算 有限域GF(28)中的元素可以用许多不同的方式来表示,如多项式表示,二进制表示,十六进制表示等等,但是不同的表示方式对实现的复杂度是有影响的。AES 加密算法选择用多项式表示有限域GF(28)中的元素。GF(28)中共有256个元素,每个元素都可以用GF(2)中的元素表示,而且多项式的次幂都小于8。 由b7b6b5b4b3b

21、2b1b0构成的一个字看成多项式 b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x + b0 (2.1) 其中 bi GF(2),0 i 7,因此,GF(28)中的每一个元素都可以看成是一个字节,例如,一个由 01010111 组成的字节可表示多项式x6 + x4+ x 2+ x+ 1,也可以是十六进制的57。在实际操作过程中,到底采用哪种表示方法,要看具体的情况。 a.有限域GF(28)中的两个元素相加,输入的元素用多项式表示,其系数是两个元素中的对应系数的模2相加。显然,有限域GF(28)中的两个元素的加法与两个字节的按位模2加是一致的。两个字节的

22、按位模2加用+表示。例如:57+83=D4 0 1 0 1 0 1 1 1 +1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 0实际上,加法就是最简单的二进制的按位异或的结果,或者也可用多项式概念:( x6 + x4 + x2+ x + 1) + ( x7 + x + 1)= x7 + x6 + x4 + x2 (2.2) b.有限域GF(28)中两个元素的乘法为模GF(2)域上的一个8次不可约多项式的多项式乘法,乘法用*表示。一个多项式是不可约的,就是它除 1 和其自身之外没有其他的因子。对于 AES,这个不可约多项式为m ( x ) = x8+ x4+ x3+ x+ 1 (2.

23、3)m ( x )用二进制表示为 0000000100011011( 两个字节 ) ,用十六进制表示为0 x011b 。有限域乘法比较复杂,先把两个输入化为多项式的形式,然后进行乘法运算,合并同类项,当x次幂的系数大于2时,此项消去,剩下次数为1的式子。 例如:5783=C1由( x6 + x4 + x2 + x + 1) *( x7 + x + 1) = x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3+1 (x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1)mod m ( x ) = (x13 + x11 + x9 + x

24、8 + x6 + x5 + x4 + x3 + 1)mod m ( x8 + x4 + x3 +x+1 )= x7 + x6+1如果 a ( x )b ( x )mod m ( x) = 1,则称b ( x )是 a ( x )的逆元。但是实际计算时用此方法的比较少,因为b ( x )很难找到,需要很多次的尝试。所以经常用欧几里德扩展算法来求输入元素的逆元。对任何的系数在二元域GF (2)中并且次数小于8的多项式b ( x ),利用欧几里德扩展算法可以计算b ( x )和c ( x ),使得 a ( x )b ( x ) + c ( x ) m ( x) = 1 (2.4)这就说明b ( x

25、)的逆元素为 a ( x )-1= b( x ) mod m( x) (2.5)其中a ( x )为输入元素的多项式表示,b ( x )就是输入元素的逆元。另外,对于任意的a ( x ), b ( x ), c ( x ) GF(28),都有 a ( x )(b ( x ) + c ( x ) = a ( x )b ( x ) + a ( x )c ( x) (2.6)由上面的讨论不难看出,在按位模2加法运算+和乘法运算*下,256个可能字节值的集合构成了有限域GF(28)。2.1.2 系数在有限域GF(28)上的多项式的运算 在 AES 算法中还要用到有限环GF(28) x / ( x4 +

26、 1)中的运算。该环中的加法定义为简单的比特位异或,乘法运算相对复杂。假定有两个系数为GF(28)上的多项式:a ( x )= a3x3 + a2x2+ a1x + a0和b ( x )= b3x3 + b2x2 + b1x + b0,则显然c ( x ) = b ( x ) a ( x),乘积定义如下: c ( x )= c6x 6+ c5x5 + c4 x4+ c3x3+ c2x2 + c1x +c0 (2.7)其中 c0 = a0b0 (2.8) c1= a1 b0 a0b1 (2.9) c2= a2b0 a1b1 a0b2 (2.10) c3= a3b0 a2 b1 a1 b2 a0b

27、3 (2.11) c4= a3b1 a2b2 a1b3 (2.12) c5= a3b2 a2b3 (2.13) c6 = a3b3 (2.14) 可以看出,c ( x )不是一个4字节的字。通过对c ( x )模一个4次多项式求余可以得到一个次数小于4的多项式。在AES中,这一模多项式为:M ( x ) = x4+ 1。 AES中两个GF(28)上的多项式的乘法定义为模M(x)乘法,这种乘法可以用表示。 设 d ( x ) = a ( x )b ( x) 可计算为:d ( x )= d3 x3 + d2 x2 + d 1x + d0,其中 d3 = a3b0 a2b1 a1b2 a0b3 (2

28、.15) d2 = a2b0 a1b1 a0b2 a3b3 (2.16) d1 = a1b0 a0b1 a3b2 a2b3 (2.17) d0 = a0b0 a3b1 a2b2 a1b3 (2.18)可以看出,用一个固定的多项式a ( x )与多项式b ( x )作运算可以写成矩阵乘法,即 (2.19)其中矩阵是一个循环矩阵。由于x4 + 1不是GF(28)上的不可约多项式,因此多项式 a ( x )= a3x3 + a2x2 + a1x + a0,ai GF(28)不一定有可逆元素,但是如果 gcd( a ( x ), x4 + 1) = 1,则a ( x )在GF(28) x / ( x4

29、 + 1)中有可逆元。那么在 AES 中选择一个由逆元的固定多项式: a ( x ) = 03 x3 + 01 x2 + 01x+02 (2.20) a-1( x ) = 0b x3 + 0d x2 + 09x + 0e (2.21) a ( x ) a -1( x ) = a ( x ) a -1( x) = 01 (2.22)考虑用多项式x乘b ( x ),显然 x b ( x )= b2 x3 + b1 x2 + b0 x +b3假设 c ( x ) = x b ( x )= c3x3 + c2x2 + c1x + c0则矩阵形式表示为 (2.23)因此,用x或者x的方幂GF(28)上的

30、多项式等于一个4字节的左循环移位。2.2 AES 算法描述AES分组长度为128位,有三种可选的密钥长度,即128位、192位和256位。AES是一个迭代型密码;轮数Nr依赖于密钥长度。如果密钥长度为128位,则Nr = 10;如果密钥长度位192位,Nr = 12;如果密钥长度位256位,则Nr = 14。AES的密钥长度与加密轮数之间的变动,如表2.1所示。 表2.1 AES的密钥长度与加密轮数的对照 标准 密钥长度 加解密轮数(Nr) AES-128 AES-192 AES-256 128 192 256 10 12 14AES 算法中分组长和密钥长的组合决定了需要加密多少轮后才能达到安

31、全性的要求。加密轮数与分组长和密钥长的对照表如表2.2,Nb 是分组长度的列数,Nr 加密轮数,Nk 密钥长的列数。 表2.2 加密轮数与分组长和密钥长的对照表 AES中的操作都是以字节为基础的,所有用到的变量都是由适当数量的字节组成。中间变量State用4 * 4字节矩阵表示,如表2.3所示。 表2.3 四行四列的矩阵 a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 a30 a31 a32 a33下面给我出AES加密的总体描述: a.给定一个明文M,将State初始化为M,并将轮密钥和State异或(称为AddRoundKey); b.对前Nr

32、-1轮中的第一轮,用S-盒进行一次替换操作(称为SubBytes);对替换结果State做行移位操作(称为ShiftRows);再对State做列混合变换(MixColumns,也称为列混淆变换);然后进行AddRoundKey操作。 c.在最后一轮中依次进行SubBytes,ShiftRows和AddRoundKey操作。d.将State定义为密文C。AES的加密过程可用如下的伪代码进行描述。AESCipher(byte in16,byte out16,word w4*(Nr + 1)/in、out和w分别表示AES加密的输入、输入和子密钥byte state4,4; /中间变量state

33、= in; /用输入以列为顺序来初始化中间变量,即,stater,c = inr+4c,0 = r、4 cAddRoundKey(state,w0,3);/前Nr - 1轮加密for(int round = 1;round Nr - 1;round+)SubBytes(state);ShiftRows(state);MixColumns(state);AddRoundKey(state,w4 * round,4 * round + 3);/最后一轮加密 SubBytes(state);ShiftRows(state);AddRoundKey(state,w4 * Nr,4 * Nr + 3);

34、 out = state;2.2.2 算法的基本变换字节替换变换(SubBytes) 字节替换操作使用一个S-盒对State的每个字节都进行独立的替换。表2.4给出了AES的S-盒。 与DES的S-盒相比,AES的S-盒能进行代数上的定义,而不是DES的S-盒那样是比较明显的“随机”代换。 S-盒按如下的方式构造:行x列y的字节初始化为十六进制的xy。(2)把S-盒中的每一个字节映射为在有限域GF(28)中的逆;00不变。(3)把S-盒中的每一个字节转换为二进制表示(b7,b6,b5,b4,b3,b2,b1,b0),然后进行如下的仿射变化 (2.24) 表2.3 AES的S-盒 行移位变换(S

35、hiftRows)State的第一行保持不动,第二行循环左移动一个字节,第三行循环左移动两个字节,第四行移动循环左移动三个字节,如图1.1所示。 图2.2 行移位变换列混淆变换(MixColumns)列混合变换对State中的每列进行独立的操作,它把每个列都看成GF(28)中的一个四项多项式s(x),再与GF(28)上的固定多项式a(x) = 03x3 + 01x2 + 01x + 02进行x4 + 1的乘法运算。如对第c列(0 = c = 3),其对应的GF(28)中的多项式sc(x) = s0,c + s1,cx + s2,cx2+ s3,cx3,则列混合变换后的值为sc(x) = sc(

36、x)a(x)。其矩阵乘法表示如下 (2.25)其中0 = c =3。2.2.3 密钥扩展算法 AES 算法中每轮加密的轮密钥是利用密钥扩展算法对加密密钥扩展得到的。密钥扩展及轮密钥选择的原理是:对加密密钥扩展得到轮密钥,轮密钥的总位数等于分组长度乘以轮数加 1;在密钥扩展得到的轮密钥中依次选取与分组长度相同数目的密钥用于轮密钥加运算。采用密钥扩展函数对加密密钥的扩展算法如下。ExpandedKey (byte K4*Nk word WNb*(Nr+1)/K表示初始密钥,w表示扩展后的密钥,Nk为密钥长度(以字节为单位)for (i=0;iNk;i+)/扩展密钥的前Nk个字节是初始密钥Wi=(K

37、4*i, K4*i+1, K4*i+2, K4*i+3);/把四个单位字节按照从高到低位的顺序表示为一个字for(i=Nk;i0;round-)/前Nr-1轮解密InvShiftRows(state);InvSubBytes(state);AddRoundKey(state,w4*round,4*round+3);InvMixColumns(state);/最后一轮加密InvShiftRows(state);InvSubBytes(state);AddRoundKey(state,w0,3);容易看出,AES的解密过程使用了四种的逆变换,即InvSubBytes()、InvShiftRows(

38、)、InvMixColumns()及AddRoundKey()(AddRoundKey的逆变换是它本身),以相反的顺序对由密文映射得到状态矩阵进行变换完成。另外,AES的解密过程使用的子密钥相同,但使用的顺序相反。InvSubBytes变换 InvSubBytes变换是字节替换变换(SubBytes)的逆变换,即先用到了仿射变换的逆变换,在计算GF(28)中的乘法逆。逆S-盒对状态矩阵中的每一字节进行逆变换。InvSubBytes变换可以通过表2.4所示的逆S-盒实现。 InvShiftRows变换是行移位变换(ShiftRows)的逆变换,即它对状态矩阵的各行按相反的方向进行循环移位操作。因

39、此,状态矩阵各行的移位情况如下:第一行保持不变;第二行循环右移一个字节;第三行循环右移两个字节;第四行循环右移三个字节。 InMixColumns变换是列混合变换(MixColumns)的逆变换。InMixColumns()同样逐列处理状态矩阵,它把每一列都当作系数GF(28)有限域上的四项多项式。与MixColumns变换对应,InMixColumns变换把列多项式与多项式a(x)相对于模多项式x4+1的逆a-1(x)相乘 a-1(x) = 0bx3 + 0dx2 + 09x + 0e (2.26)设列多项式为sc(x) = s0,c + s1,cx + s2,cx2+ s3,cx3,0=c

40、=3,InMixColumns变换可以写为如下矩阵的形式 (2.27)表2.4 AES解密过程的逆S-盒2.3 AES安全性能分析 针对各种攻击,对用户的隐私进行保护,使用户可以很安全的将自己的信息存储在各种服务器终端。 针对某一特定的分组密码算法,其攻击方法可以分为通用攻击方法和专用攻击方法。所谓通用攻击方法就是对所有的分组加密算法攻击都有效的方法,而专用攻击方法只对该特定算法有效,一般与具体密码算法某种特定的结构有关。设计现代实用密码算法时,为了有效的抵抗通用攻击,一般都遵循香农所提出的混乱原则和扩散原则。同时,混乱和扩散也是分组密码算法的设计理论中保证明文能够可靠、隐蔽的最基本技术。所谓

41、混乱原则就是所设计的密码应使得密文对密钥和明文的依赖关系相当复杂以至于这种依赖性对密码分析者来说是无法利用的。混乱用于掩盖明文、密文和密钥之间的关系。这可以挫败通过研究密文以获取冗余度和统计模式的企图。做到这点最容易的方法是通过代替,一个简单的代替密码,如单字母密码,其中每一个确定的明文字符被一个密文字符所代替。现代的代替密码更复杂:一个长的明文分组彼代替成一个不同的密文分组,并且代替的机制随明文或者密钥中的每一位发生变化。好的混乱可以使这种统计关系变得复杂以致强有力的密码分析工具都不能有效。扩散原则指的是所设计的密码应使得密钥的每一位数字影响到密文的许多位数字以防止对密钥进行逐段破译,同时明

42、文的每一位数字也应影响密文的许多位数字以便隐蔽明文数字统计特性。扩散通过将明文冗余度分散到密文中使之分散开来,把单个明文位和密钥位的影响尽可能扩大到更多的密文中去。密码分析者寻求这些冗余度将会更难。产生扩散最简单的办法是通过换位(也称为置换)。一个简单的换位密码,如列换位体制,只简单地重新排列明文字符。为了有效的抵抗密码算法的专用攻击方法,则要对算法的自身结构进行分析,消除其中的不安全因素。算法比较分析自DES算法1977年首次公诸于世以来,学术界对其进行了深入的研究,围绕它的安全性等方面展开了激烈的争论。在技术上,对DES的批评主要集中在以下几个方面:作为分组密码,DES的加密单位仅有64位

43、二进制,这对于数据传输来说太小,因为每个分组仅含8个字符,而且其中某些位还要用于奇偶校验或其他通讯开销。b. DES的密钥的位数太短,只有56比特,而且各次迭代中使用的密钥是递推产生的,这种相关必然降低密码体制的安全性, 在现有技术下用穷举法寻找密钥已趋于可行。不能对抗差分和线性密码分析。 迄今为止, DES算法中的S盒8个选择函数矩阵的设计原理因美国政府方面的干预, 不予公布。从这一方面严格地讲DES算法并不是一个真正的公开加密算法。S盒设计中利用了重复因子, 致使加密或解密变换的密钥具有多值性, 造成使用DES合法用户的不安全性。而且, 在DES加密算法的所有部件中, S盒是唯一的具有差分

44、扩散功能的部件(相对于逐位异或), 其它都是简单的位置交换, 添加或删减等功能, 毫无差分扩散能力。这样, DES的安全性几乎全部依赖于S盒,攻击者只要集中力量对付S盒就行了。d.DES用户实际使用的密钥长度为56bit, 理论上最大加密强度为256。DES算法要提高加密强度(例如增加密钥长度), 则系统开销呈指数增长。除采用提高硬件功能和增加并行处理功能外,从算法本身和软件技术方面无法提高DES算法的加密强度。相对DES算法来说,AES算法无疑解决了上述问题,主要表现在如下几方面: a.运算速度快,在有反馈模式、无反馈模式的软硬件中,Rijndael都表现出非常好的性能。b.对内存的需求非常

45、低,适合于受限环境。是一个分组迭代密码,分组长度和密钥长度设计灵活。标准支持可变分组长度,分组长度可设定为32比特的任意倍数,最小值为128比特,最大值为256比特。e. AES的密钥长度比DES大,它也可设定为32比特的任意倍数,最小值为128比特,最大值为256比特, 所以用穷举法是不可能破解的。在可预计的将来,如果计算机的运行速度没有根本性的提高,用穷举法破解AES密钥几乎不可能。f. AES算法的设计策略是宽轨迹策略(Wide Trail Strategy, WTS)。WTS是针对差分分析和线性分析提出的,可对抗差分密码分析和线性密码分析。总之,如表2.5所示,AES算法汇聚了安全性、

46、效率高、易实现性和灵活性等优点,是一种较DES更好的算法。表2.5 算法比较算法名称密钥长度 实现加密速度安全性资源消耗特点适用情况AES 128、192、256位 AES 算法基于排列和置换运算。快高低 AES能提供更快的数据加密方法,且与各种不同的产品兼容 速度快,安全级别高AES 正日益成为加密各种形式的电子数据的实际标准。 3DES 112位或168位 基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高 慢高高强度更高 ,资源消耗大 HYPERLINK ://wiki/电子货币电子货币业界普遍使用3DES,并持续开发和宣传基于其的标准 DES

47、56 DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。 慢低低分组比较短、密钥太短、密码生命周期短、运算速度较慢 适用于加密大量数据的场合 2.3.4 AES算法的安全性现代密码分析技术包括差分密码分析技术、线性密码分析技术和密钥相关的密码分析,它改善了破译速度,但是破译速度还是很慢。差分密码分析是一个选择明文攻击,其中使用大量的明密文对来确定密钥比特位的值。Eli Biham和Adi Shamir提出了差分密码分析方法,该方法比穷举攻击有效。差分密码分析考察那些明文有特定差分的密文对,当明文使用相同的密钥加密时,分析其在通过AES的轮扩散时差分的演变。简单地,选择具有

48、固定差分的一对明文,这两个明文可随机选取,只要求他们符合特定差分条件,密码分析者甚至不必知道他们的值,然后使用输出密文中的差分,按照不同的概率分配给不同的密钥。随着你分析的密文对越来越多,其中最可能的一个密钥将显现出来,这就是正确的密钥。但是,这里有几个要点要特别注意。首先,差分分析主要是理论上的。差分分析所要求的巨大时间量和数据量几乎超过了每个人的承受能力。首先要获得差分分析所不可少的数据;其次,这首先是一种选择明文攻击,为了得到有用的明文一密文对,必须对所有的明文一密文对进行筛选。线性密码是一个己知明文攻击,其中使用大量的明文密文对来确定密钥比特位的值。线性密码分析是Mitsuru Mat

49、usi提出的,这种攻击使用线性近似值来描绘分组密码的操作。这意味着如果将明文的一些位、密文的一些位分别进行异或运算,然后再将这两个结果异或,那么你将得到一个位,这一位是将密钥的一些位进行异或运算的结果。这就是概率位p的线性近似值。如果p不等于1/2,那么就可以使用该偏差,用得到的明文及对应的密文来猜测密钥的位置。得到的数据越多,猜测越可靠。概率越大,用同样数据量的成功率越高。线性分析极大的依赖于S盒的结构,而AES的S盒有良好非线性和较高的数学复杂度。宽轨道策略是一种用于设计密钥交替分组密码轮变换的手段,它具有抗差分和线性密码分析的特性。它将轮变换分成两个可逆步骤: 一个局部的非线性变换。所谓

50、局部性是指任何一位输出比特只依赖于有限数量的输入比特,并且邻近的输出比特只依赖于邻近的输入比特。 一个可提供高度扩散性的线性混合变换。SubBytes变换、ShiftRows变换和MixColumns变换正式宽轨道策略在Rijndael中的体现,从而足以抵抗差分和线性攻击。考虑到与密钥有关的密码攻击,在密钥扩展中还运用了字代替(SubWord)和字旋转(RotWord)访法为子密钥提供了高扩散性和混乱性。Rijndael算法在设计时,设计者通过合适轮函数的多轮迭代为抵抗通用攻击提供了必要的混乱和扩散,同时这种多轮迭代的方法也消除了Rijndael算法面向字节处理的不安全因素,即也有效的抵抗了该

51、算法的专用攻击。现有已知的强力攻击主要有穷尽密钥搜索攻击、字典攻击、查表攻击和时间存储权衡攻击,这些攻击的共同点是可作用于任何分组密码,攻击的复杂度只依赖于分组长度和密钥长度。AES所采用的助Rijndael算法,以密钥是128位来进行强力攻击,则必须处理个(约为3.4*)可能密钥,这在时间和空间都是不可行的。总之,对所有已知攻击而言,AES是安全的。它的设计的各个方面融合了各种特色,从而为抵抗各种攻击提供了安全性。例如,S盒构造中有限域逆操作的使用导致了线性逼近和差分分布表中的各项趋近于均匀分布,这就为抵御差分和线性攻击提供了安全性。类似地,线性变换Mixcolumns使得找到包含“较少”活

52、动S盒的差分和线性攻击成为不可能事件(设计者将这一特色称为宽轨道策略)。显然,对AES现在还不存在快于穷尽密钥搜索的攻击。即使是对AES减少迭代轮数的各种变体而言“最好”的攻击,也对10轮的AES无效。2.3.5结论经过对DES 算法和AES 算法的比较分析,我们可以得出结论, 后者的效率明显高于前者, 而且由于AES 算法的简洁性,使得它的实现更为容易。AES 作为新一代的数据加密标准, 其安全性也远远高于DES 算法。AES算法的优点:速度快;占用空间小;可并行运算,适合于未来处理器和专用芯片实现;设计简单,没有借用其他密码,没有从随机表获得随机数等随意环节;紧致的密码设计结构;可变的分组

53、长度。局限性:该密码的局限性与其逆有关。逆密码与密码自身相比,不适于在智能卡上实现,它要占用较多的代码和时间(但与其他密码相比,逆密码也是非常快的);在软件实现上,该密码及其逆密码使用不同的代码或表;硬件实现上,该密码及其逆密码不能在同一个有限状态机或结构中实现。3 AES加密算法的实现开发工具与环境 美国AT&T HYPERLINK :/baike.baidu /view/37115.htm t _blank 贝尔实验室的 HYPERLINK :/baike.baidu /view/687922.htm t _blank Bjarne Stroustrup博士在20世纪80年代初期发明并实现

54、了C+,1998年国际标准组织(ISO)颁布了C+程序设计语言的国际标准ISO/IEC 1488-1998。C+是具有国际标准的编程语言,通常称作ANSI/ISO C+。C+设计成静态类型、和C同样高效且可移植的多用途程序设计语言。 C+是一种使用非常广泛的计算机编程语言,是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。C+被设计成给程序设计者更多的选择的语言。C+设计成尽可能与C兼容,借此提供一个从C到C+的平滑过渡。C+避免平台限定或没有普遍用途的特性。C+不使用会带来额外开销的特性。C+被设计

55、成无需复杂的程序设计环境。 相比与其他的开发工具,使用VC+的向导(Wizard)可以生成大量的代码,而不必人工地大量编写代码。从编写程序的难易程度和程序的性能综合考虑,C+是最佳的选择。C+性能良好,因为它被编译后生成机器代码。对于VB和Java等语言,代码在运行时由对应的解释程序解释,而且每次运行程序时都要将代码转换为可直接由机器执行的机器码,这样做效率偏低,不仅仅是已编译过的C+程序运行得较快,而且微软C+编译器已存在多年,这一事实意味着微软的编译器程序员已经把许多优点和经验集中到编译器上,以至于它能产生非常高效的机器码。因为C+是编译语言,而且非常自然,比其他语言更接近机器代码,所以由

56、C+编译器产生的代码比其他的编译代码效率更高。3.2用 C+ 编写 AES 类现在我已研究了构成 AES 加密算法的各个成分,我将用 C+ 来实现它。实现AES算法时,只设计了一个类AES。如图3.1所示的AES类中的各个方法。我的设计使用9个数据成员和一个枚举类型,public enum KeySize Bits128, Bits192, Bits256 ; private int Nb; private int Nk; private int Nr; private byte key; private byte, Sbox; private byte, iSbox; private byt

57、e, w; private byte, Rcon; private byte, State; 图3.1 AES类的方法 AES算法设置的一些主要的关键函数如表3.1所示: 表3.1 关键函数列表 函数含义KeyExpansion密钥扩展SutBytes字节替代ShiftRows行移位变换MixColumns列混合变换AddRoundkey轮密钥加InvCipher解密一个分组Cipher加密一个分组InvMixColumns逆列混合InvShiftRows逆行移位InvSubBytes逆字节替代 因为密钥长度只能是128位、192位或256位比特,它是非常适于用枚举类型:public enum

58、 KeySize Bits128, Bits192, Bits256 ;数据一般用字节作为基本储存单元而不是用4字节的字作为两个重要数据成员的长度。这两个成员Nb和Nk代表以字为单位的块长以及以字为单位的密钥长度。Nr代表轮数。块长度总是16字节(或这说是 128 位,即为 AES 的 4个字),因此它可以被声明为一个常量。密钥长度依照枚举参数KeySize的值被赋值为 4、6 或 8。AES 算法强调通过大量轮数来增加加密数据的复杂性。轮数是10、12或14中的任意一个并且是基于密码分析学理论的。它直接取决于密钥长度。为实现AES加解密算法,所以本次设计的主要接口为Cipher和InvCip

59、her两个接口函数。Cipher接口主要是用于加密算法的功能实现。InvCipher接口主要是用于解密算法的功能实现。当设计一个类接口时,我喜欢向后来做。我设想从应用程序中调用构造函数和方法。使用这个办法,我决定向下面这样来实例化一个 AES 对象:Aes a = new Aes(the key size, the seed key);我调用的加密和解密例程如下:a.Cipher();a.InvCipher();这里是 AES 类构造函数的代码为: public Aes(KeySize keySize, byte keyBytes) SetNbNkNr(keySize); /设置Nb,Nr的值

60、 this.key = new bytethis.Nk * 4; keyBytes.CopyTo(this.key, 0); BuildSbox(); /建立S-盒 BuildInvSbox(); /建立逆 S-盒 BuildRcon(); /置换轮数 KeyExpansion(); /密钥扩展函数 该构造函数首先调用一个辅助方法SetNbNkNr 给Nb、Nk和Nr赋值。具体赋值见表2.2。接下来,你必须将传入构造函数的字节拷贝到类域变量中。密钥用其它的域声明,并且用如下方法获得它的值: this.key = new bytethis.Nk * 4; keyBytes.CopyTo(this

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论