这是我的计算机网络通讯保密协议的课程报告,因为给定的课题就是关于AES相关的分析研究,但是我本人不是密码方面的,所以在完成这份课程报告期间查阅和参考了很多的资料,报告中相关的图均来源于网上知名资料和博客,实验性能分析部分是我独立完成的分析和测试,在这里贴出来是希望可以帮到需要的同学。
AES-128\192\256加密算法及其安全脆弱分析
摘 要
随着20世纪末差分密码分析及线性密码分析的诞生,70年代中期美国人开创的DES(数据加密标准)逐渐由繁荣走向衰落。在已有的加密算法中,DES的密钥太短,T一DES太慢,IDEA受专利保护且速度不快,为此1997年1月2号,美国国家标准技术研究所宣布希望征集一个安全性能更高的加密算法(AES)用以取代DES,同时要求每一种候选算法应当支持128、192和256比特的密钥长度。AES得到了全世界很多密码工作者的响应,先后有很多人提交了自己的设计方案。最终经过严格的性能测评,Rijndael算法获胜,因此AES算法也叫Rijndael,是一个对称分组密码算法。本文主要对AES-128算法进行原理分析以及脆弱性分析,后两种基本原理与AES-128相同,只是在加密轮数有所区别。
关键词: AES加密算法; Rijndeal算法 ;原理分析;脆弱性分析
1引言
随着信息技术的发展,信息安全问题越来越引起人们的关注。一个好的安全系统如果不依赖于好的密码算法,将是不可想象的。网络和信息已逐渐成为人们从事社会活动的基本工具,但是,由于计算机和网络系统的开放性带来的信息与信息系统的安全问题也拓展到前所未有的程度。日益增多的对信息系统的非法入侵和破坏活动正在以惊人的速度在全世界蔓延,给各国信息系统带来巨大的经济损失和安全威胁。信息与信息系统,网络与网络系统安全并重,保证信息系统能够安全、可靠、不间断的运行,以提供必要的服务。信息系统的的安全总是面临着日益严重的威胁。一方面是由于互联网的开放性及安全性不足,另一方面是众多的攻击手段。为了保证信息系统的安全,需要完整的安全保障体系,应具有保护功能、检测手段、工具的反应以及事故恢复能力。 密码技术的兴起为我们提供了相对高质量的安全保障,自从密码技术诞生以来,各种各样的加密算法应运而生,密码技术获得了广泛度的发展。
2. 什么是密码
百度百科中对密码给出的定义是:密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。按照这些法则,变明文为密文,成为加密变换;变密文为明文,成为脱密变换。密码在早期仅对文字或数码进行加、脱变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。
2.1 密码学的发展历程
密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,成为编码学;应用于破译密码以获取情报的,成为破译学,总称为密码学。
早在公元前,秘密书信就已经用于战争之中,最古典的两个加密技巧是:置换(Transposition cipher)、替代(substitution cipher)。1918年,William F.Friedman发表论文“重合指数及其在密码学中的应用”推动了密码学的发展。1949年,熵的提出者香农发表论文“保密系统的通信理论”奠定了密码学的理论基础。1967年David Kahn 编写《The Codderbreakers》,为密码技术的发展起到了强有力的推动作用。
进入20世纪70年代,密码开始广泛用于实践。美国国家标准局向世界发出数据加密标准 (Data Encryption Standard,DES)的征集,最终于1976年11月23日被正式在政府通信中投入使用;Differ和Hellman的论文“密码学新方向”开辟了公开密钥密码学的新领域,成为现代密码学的一个里程碑。1978年,由RLRivest,AShamir和LAdleman实现了RSA公钥密码体制,一直沿用至今。
2.2 对称密码学
对称加密算法应用的相对较早,技术更为成熟。对称密码学简单来说就是:加密和解密使用同一把密钥。也即,加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。在 通信过程中,密钥的保密性对于通信的安全性起到至关重要的作用,从上世纪一直沿用至今的DES算法也是对称加密算法。DES算法是把64位的明文输出块变为数据长度为64位的密文输出块,其中8位为奇偶校验位,另外的56位作为密码的长度。首先把输入的64位数据块按位重新组合,并把输出分为L0,R0两部分,每部分各长32位,并进行前后置换,最终由L0输出左32位,R0输出右32位,迭代16次后得到L16和R16,将此作为输入,进行与初始置换相反的逆置换,即得到密文的输入。目前最有效的攻击是穷搜索举法,DES算法具有很高的安全性,56位长度的密钥空间大小为(),如果一台计算机的速度是每秒计算100万个密钥,那么搜完整个密钥空间需要2285年的时间。但是随着计算机性能的不断提升,超级计算机的计算能力已经达到了前所未有的高度,由国防科技大学研发的“天河二号”超级计算机系统可以到到每秒5.49亿亿次的计算速度,破解DES密码早已不再是什么难事。因此,新一代的更高安全性的加密算法开始被设计和研发,美国国家标准技术所也开始寻求一种新的更强有力的加密算法来作为新的数据加密标准。
3 高级加密标准算法(Advanced Encryption Standard,AES)
美国国家技术与标准局(NIST)在1997年面向全世界发起征集新一代高级加密标准算法(Advanced Encryption Standard,AES),并于1998年公布了15个AES候选者。截止到最后一轮评选,仍然有5个候选算法:Rijndael,Serpent,Twofish,RC6和MARS。最终,2001年选择Rijndael算法作为美国国家高级加密标准(AES),这套标准最终会取代使用了多年的DES标准,成为21世纪保护国家敏感信息的高级算法。同时,随着网络通信的发展,传送数据量的不断增大,在某些应用场合,对加解密速度的要求成为对AES算法的最关键要求。
2.1 AES算法设计背景及目标
DES这一全球应用最为广泛的加密算法似乎已经走到了生命的尽头,虽然目前为止并没有什么特别致命性的攻击方法可以短时间直接有效地破解DES,大多是针对密钥长度较短的来进行暴力破解。DES的有效加密密钥长度仅为56位,目前已经成功实现了穷举法的破解攻击,DES的安全性已经受到了严重的威胁。3DES密钥长度为168位,可以抵抗穷举攻击,但是轮的数量众多,导致计算速度慢,分组长度为64位导致效率低下;而且难以用软件有效的实现。AES算法起初最基本的要求是:至少跟三重DES一样安全,要比3DES块,密钥长度支持128/192/256,在软件和硬件平台都可以使用。尽管人们对AES还有不同的看法,但是总体来说,AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。
Rijndael算法由比利时密码学家Joan Daemen和Vincent Rijmen共同设计完成,最终被筛选成为了新一代数据的加密标准。AES是在替换置换网络结构基础上设计的一种新的分组加密算法,AES密码是一种迭代分组密码,其分组长度和密钥长度都是可变的。其分组长度为128bits,以字节为处理单位,密钥长度有128bit、192bit、256bit三种选择,使用AES_128、AES_192和AES_256来表示。之所以选择Rijndeal是因为它是安全性、性能、效率、实现方便性和灵活性的最佳组合。它在各种计算机的软硬件中性能表现良好,在反馈和无反馈模式中性能良好,密码的设置时间准确,密码极为敏捷和快速,不需要太多的记忆,而且在电源攻击和定时攻击时有极好的防护。
3.2 AES算法原理简介
AES的加密操作涉及到4种操作,分别是:字节代替(SubBytes)、行移位(ShiftRows)、列混淆(MixColumn)、;轮钥加密(AddRoundKey)。加解密的所有过程顺序正好是相反的,正是这两点保证了解密操作可以完全正确的还原出来明文内容。加解密操作的每轮的密钥分别由初始密钥扩展得到,AES算法的所有操作均以字节为基础,在这里先介绍一些相关的术语:
状态(state):密码运算的中间结果称为状态。其中,状态以字节为基本构成元素的矩阵阵列来表示,该阵列有4行,列数记为Nb。
Nb:为分组长度除以32,Nb可以取值为:4,6,8,与之对应的分组长度分别为:128,192,256 。
密钥(Cipher Key)的表示:密钥类似地使用一个4行的矩阵阵列来表示,列数记为Nk 。
Nk:为密钥长度除以32,Nk取值可以为4,6,8,与之对应的密钥长度分比为:128bits,192bits,256bits。
Nr:表示对一个数据分组加密的轮数。
表1-1 AES算法相关参数联系
密钥长度 | 128 | 192 | 256 |
明文分组长度 | 128 | 128 | 128 |
轮数 | 10 | 12 | 14 |
每轮密钥长度 | 128 | 128 | 128 |
扩展密钥长度 | 176 | 206 | 240 |
State使用4×4矩阵表示,AES算法主循环State矩阵执行(Nr-1)次轮迭代运算,每轮均包含上述4个过程,只在最后一轮循环时省略列混淆变换。
下图为AES算法的加密和解密操作流程。
3.2.1 字节代替
的逆矩阵,S和分别为16x16的矩阵,输入的高4-bit对应的值作为行标,低4-bit位作为列标;假设输入字节的值为:,则输出值为:S[][],的变换也同理。
3.2.2 行移位
行移位的功能是实现一个4×4的矩阵内部字节之间的置换。行移位包括两部分:正向行移位和逆向行移位。
正向行移位实际移位操作位:第一行保持不变,第二行循环左移1个字节,第三行循环左移2个字节,第三行循环左移3个字节。假设矩阵的名字为state,则正向行移位操作公示表示为:[i][j]= state[i][(i+j)%4];其中有i、j∈[0,3],下图为正向行移位原理。
逆向行移位即是正向行移位的相反操作,用公示表示为:[i][j]= state[i][(4+j-i)%4];其中,i、j∈[0,3]。
3.2.3 列混淆
列混淆包括:正向列混淆和逆向列混淆。列混淆是利用了域上的算术特性的一个代替。由一组从0x00到0xff的256个值组成,加上加法和乘法,因此是。GF代表伽罗瓦域,以发明这一理论的数学家命名。一般求一个数的2倍,都是左移一位,在有限域内,要计算有限域的乘法,必须先确定一个GF上的8次不可约多项式,Rijndael密码中,这个多项式确定为x^8+x^4+x^3+x+1,如果最高位是1的话,左移一位的同时要异或0x1B,是因为最高位是1的话,再继续左移会超出域的最大值,这个时候需要取除以同余式,也就是异或0x1B(00011011)。的一个特性是一个加法或者乘法的结果必须在{0x00,...,0xff}之中,的加法实质上就是异或(XOR)操作,将某个数对应的值乘以2其结果就是将该值的二进制位左移一位;域中的乘法满足分配率,多项式相乘结果需要模()。
下图为正向列混淆原理示意图
3.2.4 轮密码加
轮密码加的操作相对与前面3部分的操作更简单一些,依据的原理是:任何数和自身的异或结果是0 。加密过程中,每轮的输入与轮密钥异或一次;因此解密的时候只需要再异或上该轮的密钥即可恢复输入。
3.2.5 密钥扩展
密钥扩展的原理过程为:1)将初始的密钥以列为主转化为4个32 bits的字,分别记为W[0...3]; 2)按照如下的方式依次求解w[j],其中j是整数并且属于[4,43];
3)若j%4=0,则w[j] = w[j-4]g(w[j-1]),否则w[j] = w[j-4]w[j-1]。其中函数g的流程为:将w循环左移一个字节;‚分别对每个字节按S盒进行映射;ƒ与32 bits的常量(RC[j/4],0,0,0)进行异或,RC是一个一维数组,其值为(RC的值只需要有10个,这里给出了11个,实际上RC[0]在运算中是不会使用到的,增加RC[0]只是为了便于程序中用数组表示。由于j的最小取值为4,j/4的最小取值就为1,因此不会产生错误。):
RC={00,01,02,04,08,10,20,40,80,1B,36}
3.3 AES解密算法
解 密 算 法 可 通 过 直 接 利 用 步 骤
4 AES算法的性能分析
4.1 AES算法的安全性与脆弱性分析
AES 的安全性能及实现效率比较高,它具有密钥灵活性及较高的可实现性,此外,Rijndeal 算法也给出了最佳查分特征概率,进行了算法抵抗差分密码分析以及线性密码分析能力,内存寻求低,利于软硬件的执行。 无论使用反馈模式还是无反馈模式, Rijndeal 在广泛的计算环境中的硬件和软件实现性能都表现出始终如一的优秀。 [1]它的密钥建立时间极短,且灵敏性良好。 Rijndeal 极低的内存需求使它非常适合于在存储器受限的环境中使用,并且表现出极好的性能。
从
AES建立在井然有序的代数结构上是其最具争议的热点研究问题,虽然尚未发现行之有效的攻击AES的代数方法,但是众多密码学家达成了一个共识:他们认为把加密算法建立在不能被证明是安全的代数结构上存在很大的隐患。同时AES模块化的设计依然存在这很大的安全缺陷。2000年以来,针对AES的攻击方法不断涌现出来,最著名的包括:代数攻击、不可能差分攻击、积分攻击、能量攻击、旁路攻击、飞来器攻击、矩形攻击、相关密钥攻击、碰撞攻击等。其中不可分差分攻击是针对高级加密标准AES提出的一种有效的密码攻击方法,也是近几年分析其他分组密码的有效方法之一。不可能差分分析的原理为:利用不可能差分路径(存在的概率为0)筛选出错误地候选密钥来达到找到正确的候选密钥。实现不可能差分的步骤包括两步,首先是构造不可能差分路径,接着是筛选带哦错误的密钥。最大限度地缩小可能的正确的密钥空间,然后采用穷举搜索法来暴力破解。
AES密钥的编排存在一定的脆弱性。由于密钥编排的原因,AES_192和AES_256的线性置换层的不完全扩散性比AES_128更为显著,导致针对前两种的攻击进展速度更快。利用密钥编排原理建立密钥之间存在的固有差分关系,然后利用固有差分关系建立不可能的差分路径,利用密钥、明文以及密文之间的固有的关系及猜测相应密钥来计算需要用到的相应差分关系,最后利用这些差分关系来恢复初始密钥。
4.2 AES算法的演示与分析
实验使用python2.7版本,在Linux系统下完成,主要使用python语言实现AES算法的加密、解密整个操作流程的分析。下图为使用AES算法完成加密解密的样例:
输入明文后,选择加密模式为“CBC”,随机生成密钥进行加密,得到的输出密文,以及通过解密算法还原出来原始的明文数据。下表为对AES算法的时间性能进行分析,通过统计数据观察随着加密明文的长度的增长,AES算法的加密解密耗时的情况:
表4-2-1 AES算法时间性能统计表
明文长度 | 加密解密总耗时 | 比率(每字节耗时) |
1632 | 0.48242211341 | 0.000295602 |
2050 | 0.60471200943 | 0.000294981 |
8445 | 2.42742085457 | 0.000287439 |
13239 | 3.79774212837 | 0.00028686 |
15476 | 4.60685610771 | 0.000297677 |
71369 | 20.5018779507 | 0.000287266 |
154778 | 22.06046378794 | 0.00014253 |
由上表分析统计得到AES算法的时间性能曲线如下所示:
易分析知:AES算法的耗时随着加密明文的增长而增加。而且当明文长度急剧增加的时候,AES算法表现出来极为优越的性能,耗时曲线始终比较平稳没有太大的波动,这对于一些存储受限和对于时间要求比较苛刻的通讯环境而言无疑是很好的一个选择。
5 总结
安全,使我们永恒的主题。本文简明扼要得阐述了在当今全球化的计算机互联网中所使用的数据加密算法以及一些相关加密算法的发展历程。在对AES算法的实现与分析的过程中也遇到了一下难题、发现了一些问题。当前的密码学分析研究表明:迭代型分组密码的抗击密码分析攻击的能力会随着轮数的增加为增加,这也是建立在扩充密钥长度的理论基础上。Rijindael算法中轮变换的高扩散性归功于它在所有的状态比特上的均匀结构。AES随着信息化时代的不断进步与发展,数据与信息的安全成为了越来越多的人的关注焦点,对重要的数据加密是保护数据的重要的有效方法。网络信息安全无论是对于国家对于政府还是对于学校对于个人都是极为重要,迫切需要去做好的事。新一代的数据加密标准AES的提出与发展是经过公众广泛的参与和专家学者的严格论证与检验的。AES取代DES以及3DES是现代密码学领域的重要变革,代表着新的技术路线。AES集安全性、高性能和灵活性于一身。目前还未有实质性的对AES的破解威胁,对于分析AES而言可以从算法的原理和算法的实现出发,分析可能存在的安全漏洞,这是一件艰巨的任务,需要全世界最优秀的密码学家不懈的探索。
参考文献:
[1] 鹿钦鹤,高级加密算法的研究[D],长春:长春理工大学,
[2] Joan DaemenVincent Rijmen,谷大武,徐胜波,高级加密标准(
[3] 马虹博著,高级加密标准及短分组加密技术应用研究.湖南:中南大学, 2006
[4] 徐艳平,周玉洁,高级加密标准AES的高速实现[J],上海:上海交通大学,2006
[5] 胡志华,密码算法SERPENT和AES分析的研究[D],武汉:武汉大学,2012,5-36
[6]冯国柱,AES密码的三种等价形式[J],长沙:国防科技大学,2008
[7] 吴昌银,AES安全性及其影响研究[J],成都:空军工程大学,2006
[8] 韦宝典, Rijndael优化实现[J],西安:西安电子科技大学,2002
[9] 吴文玲,简评美国公布的15个AES候选算法[J],北京:中国科学院软件研究所,1999
[10] 肖国镇,AES密码分析的若干新进展[J],西安:西安电子科技大学,2003