版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘 要des数据加密算法是使用最广的分组加密算法,它作为最著名的保密密钥或对称密钥加密算法,在计算机密码学及计算机数据通信的发展过程中起了重要作用。本次学年论文是主要是学习介绍des对称密钥数据加密算法,并用c+实现。des算法具有较高的安全性,为我们进行一般的计算机数据传输活动提供了安全保障。 关键词: 加密与解密,des算法,s-盒 目 录摘 要ii目 录iii第一章 引 言1第二章 概 述22.1 加密与解密22.2 单钥密码系统22.3分组密码的总体结构42.4分组密码的安全性4第三章 des算法简介53.1简介53.2 des加密标准63.2.1 初始
2、置换ip73.2.2 ip-1是ip的逆置换73.2.3 des算法的迭代过程83.2.4 子密钥的生成123.3 des算法的解密过程13第四章 des算法用c+语言实现144.1设置密钥函数des_setkey()144.2 f函数和s函数f_func()和s_func()144.3 des算法的运行函数des_run( )164.4 des算法的主函数void main()184.5 des的加密过程和举例194.6 des算法的分析20参考文献22结束语23附录1 des算法用c+实现的源代码2429第一章 引 言密码学是伴随着战争发展起来的一门科学,其历史可以追溯到古代,并且还有过辉
3、煌的经历。但成为一门学科则是近20年来受计算机科学蓬勃发展的刺激结果。今天在计算机被广泛应用的信息时代,信息本身就是时间,就是财富。如何保护信息的安全(即密码学的应用)已不再局限于军事、政治和外交,而是扩大到商务、金融和社会的各个领域。特别是在网络化的今天,大量敏感信息(如考试成绩、个人简历、体检结果、实验数据等)常常要通过互联网进行交换。(现代电子商务也是以互联网为基础的。)由于互联网的开放性,任何人都可以自由地接入互联网,使得有些不诚实者就有可能采用各种非法手段进行破坏。因此人们十分关心在网络上交换信息的安全性。普遍认为密码学方法是解决信息安全保护的一个最有效和可行的方法。有效是指密码能做
4、到使信息不被非法窃取,不被篡改或破坏,可行是说它需要付出的代价是可以接受的。密码是形成一门新的学科是在20世纪70年代。它的理论基础之一应该首推1949年shannon的一篇文章“保密系统的通信理论”,该文章用信息论的观点对信息保密问题作了全面的阐述。这篇文章过了30年后才显示出它的价值。1976年,diffie和hellman发表了论文密码学的新方向,提出了公钥密码体制的新思想,这一思想引发了科技界对研究密码学的极大兴趣,大量密码学论文开始公开发表,改变了过去只是少数人关起门来研究密码学的状况。同时为了适应计算机通信和电子商务迅速发展的需要,密码学的研究领域逐渐从消息加密扩大到数字签名、消息
5、认证、身份识别、抗欺骗协议等新课题。 美国国家标准局(nbs)1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,并批准用于非机密单位及商业上的保密通信。于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。1977年1月,美国政府颁布:采用ibm公司1971年设计出的一个加密算法作为非机密数据的正式数据加密标准(des : data encryption standard)。des广泛应用于商用数据加密,算法完全公开,这在密码学史上是一个创举。在密码学的发展过程中,des算法起了非常重要的作用。本次学年论文介绍的就是分组加密技术中最典型的加密算法d
6、es算法。第二章 概 述2.1 加密与解密加密技术是基于密码学原理来实现计算机、网络乃至一切信息系统安全的理论与技术基础。简单的说,加密的基本意思是改变信息的排列形式,使得只有合法的接受才能读懂,任何他人即使截取了该加密信息也无法使用现有的手段来解读。解密是我们将密文转换成能够直接阅读的文字(即明文)的过程称为解密,它是加密的反向处理,但解密者必须利用相同类型的加密设备和密钥对密文进行解密。2.2 单钥密码系统密码学中有两种重要类型的密码系统,单钥(私钥)和双钥(公钥)密码系统。在单钥密码系统中,明文的加密和密文的解密是用同样的密钥。直到1976年diffie、hellman引入公钥(双钥)密
7、码学之前,所有的密码都是单钥系统,因此单钥系统也称为传统密码系统。传统密码系统广泛地用在今天的世界上,有两种单钥密码体制:流密码和分组密码。流密码是利用密钥k产生一个密钥流z=z0z1,并使用如下规则对明文串x=x0x1x2加密: y=y0y1y2=ez0(x0)ez1(x1)ez2(x2)。密钥流由密钥流发生器f产生: zi=f(k,i),这里i是加密器中的记忆元件(存储器)在时刻i的状态,f是由密钥k和i产生的函数。而分组密码就是将明文消息序列:m,m,m,划分为等长的消息组(m,m,m),(m,m,m),各组明文分别在密钥k=(k1,k2,kt)的控制下,按固定的算法e一组一组进行加密。
8、加密后输出等长密文组(y,y),(y,y),分组密码的模型,如图2.1所示。图2.1 分组密码的模型它与流密码的不同之处在于输出的每一位数字不只与相应时刻输入明文数字有关,而是与一组长为m的明文数组有关。它们的区别就在于有无记忆性(如图2.2)。流密码的滚动密钥z0=f(k,0)由函数f、密钥k和指定的初态0完全确定。此后,由于输入加密器的明文可能影响加密器中内部记忆元件的存储状态,因而i(i>0)可能依赖于k,0,x0,x1,xi-1等参数。图2.2流密码与分组密码的区别分组密码的优点在于其容易实现同步,因为一个密文组的传输错误不会影响其他组,丢失一个明密文组不会对其后的组的解密正确性
9、带来影响。分组密码又分为三类:代替密码(substitution)、移位密码(transposition)和乘积密码。随着计算技术的发展,早期的代替和移位密码已无安全可言。一个增加密码强度的显然的方法是合并代替和移位密码,这样的密码称为乘积密码。如果密文是由明文运用轮函数多次而得,这样的乘积密码又称为迭代分组密码。des和今天的大多数分组密码都是迭代分组密码。目前著名的对称分组密码系统算法有des、idea、blowfish、rc4、rc5、feal等。2.3分组密码的总体结构分组密码采用两种类型的总体结构:sp网络与feistel网络,它们的主要区别在于:sp结构每轮改变整个数据分组,而fe
10、istel密码每轮只改变输入分组的一半。aes和des分别是这两种结构的代表。feistel网络(又称feistel结构)可把任何轮函数转化为一个置换,它是由horst feistel在设计lucifer分组密码时发明的,并因des的使用而流行,“加解密相似”是feistel型密码的实现优点。sp网络(又称sp结构)是feistel网络的一种推广,其结构清晰,s一般称为混淆层,主要起混淆作用,p一般称为扩散层,只要起扩散作用。sp网络可以更快速的扩散,不过sp网络的加解密通常不相似。2.4分组密码的安全性安全性是分组密码最重要的设计原则,它要求即使攻击者知道分组密码的内部结构,仍不能破译该密码
11、,这也意味着,不存在针对该密码的某种攻击方法,其工作量小于穷密钥搜索。但是随着密码分析技术的发展,使得对于具有更多轮的分组密码的破译成为可能。第三章 des算法简介3.1简介des是data encryption standard(数据加密标准)的缩写。它是由ibm公司在1971年设计出的一个加密算法,美国国家标准局(nbs)于1977年公布把它作为非机要部门使用的数据加密标准5。 des自从公布以来,已成为金融界及其他各种行业最广泛应用的对称密钥密码系统。des是分组密码的典型代表,也是第一个被公布出来的标准算法。原来规定des算法的使用期为10年,可能是des尚未受到严重威胁,更主要是新的
12、数据加密标准研制工作尚未完成,或意见尚未统一,所以当时的美国政府宣布延长它的使用期。因而des超期服役到2000年。近三十年来,尽管计算机硬件及破解密码技术的发展日新月异,若撇开des的密钥太短,易于被使用穷举密钥搜寻法找到密钥的攻击法不谈,直到进入20世纪90年代以后,以色列的密码学家shamir等人提出一种“差分分析法”,以后日本人也提出了类似的方法,这才称得上对它有了攻击的方法。严格地说shamir的“差分分析法”也只是理论上的价值。至少到目前为止是这样,比如后来的“线形逼迫法”,它是一种已知明文攻击,需要2434.398×1012个明、密文对,在这样苛刻的要求下,还要付出很大
13、的代价才能解出一个密钥。不管是差分攻击还是线性攻击法,对于des的安全性也仅仅只做到了“质疑”的地步,并未从根本上破解des。也就是说,若是能用类似triple-des或是desx的方式加长密钥长度,仍不失为一个安全的密码系统。早在des提出不久,就有人提出造一专用的装置来对付des,其基本思想无非是借用硬件设备来实现对所有的密钥进行遍历搜索。由于电子技术的突飞猛进,专门设备的造价大大降低,速度有质的飞跃,对des形成了实际的威胁。des确实辉煌过,它的弱点在于专家们一开始就指出的,即密钥太短。美国政府已经征集评估和判定出了新的数据加密标准aes以取代des对现代分组密码理论的发展和应用起了奠
14、基性的作用,它的基本理论和设计思想仍有重要参考价值。3.2 des加密标准现如今,依靠internet的分布式计算能力,用穷举密钥搜索攻击方法破译已成为可能。数据加密标准des已经达到它的信任终点。但是作为一种feistel加密算法的例子仍然有讨论的价值。des是对二元数字分组加密的分组密码算法,分组长度为64比特。每64位明文加密成64位密文,没有数据压缩和扩展,密钥长度为56比特,若输入64比特,则第8,16,24,32,40,48,56,64为奇偶校验位,所以,实际密钥只有56位。des算法完全公开,其保密性完全依赖密钥。它的缺点就在于密钥太短。设明文串m=m1m2m64;密钥串k=k1
15、k2k64。在后面的介绍中可以看到k8,k16,k24,k32,k40,k48,k56,k64实际上是不起作用的。des的加密过程可表示为:des(m)= ip-1t16·t15t2·t1·ip(m).下面是完全16轮des算法框图:图3.1 完全16轮des算法3.2.1 初始置换ip初始置换是将输入的64位明文分为8个数组,每一组包括8位,按1至64编号。ip的置换规则如下表:表3.1 ip置换规则58504234261810 260524436282012 462544638302214 664564840322416 8574941332517 9 159
16、514335271911 361534537292113 563554739312315 7即将输入的第58位换到第1位,第50位换到第2位,依次类推,最后一位是原来的第7位。3.2.2 ip-1是ip的逆置换由于第1位经过初始置换后,已处于第40位。逆置换就是再将第40位换回到第1位。逆置换规则如下表所示:表3.2 ip-1置换40848165624643239 747155523633138 646145422623037 545135321612936 444125220602835 343115119592734 242105018582633 141 949175725初始置换ip及
17、其逆置换ip-1并没有密码学意义,因为置换前后的一一对应关系是已知的。它们的作用在于打乱原来输入明文的asc码字划分的关系,并将原来明文的第位m8,m16,m24,m32,m40,m48,m56,m64位(校验位)变成ip的输出的一个字节。3.2.3 des算法的迭代过程 图3.2 des算法的迭代过程图图中li-1和ri-1分别是第i-1次迭代结果的左右两部分,各32比特。即li=ri-1, ri=li-1 f(ri-1,ki)。其中轮密钥ki为48比特,函数f(r,k)的计算过程如图1.5所示。轮输入的右半部分r为32比特,r首先被扩展成48比特,扩展过程由表3定义,其中将r的
18、16个比特各重复一次。扩展后的48比特再与子密钥ki异或,然后再通过一个s盒,产生32比特的输出。该输出再经过一个由表4定义的置换,产生的结果即为函数f(r,k)的输出。表3.3 扩展e32 1 2 3 4 5 4 5 6 7 8 9 8 9101112131213141516171617181920212021222324252425262728292829303132 1ki是由64比特的初始密钥(亦称种子密钥)导出的第i轮子密钥,ki是48比特des算法的关键是f(ri-1,ki)的功能,其中的重点又在s-盒(substitution boxes)上。f函数的输出是32比特。图3.3 f
19、函数计算过程图将r经过一个扩展运算e变为48位,记为e(r)。计算e(r)k=b,对b施行代换s,此代换由8个代换盒组成,即s-盒。每个s-盒有6个输入,4个输出,将b依次分为8组,每组6位,记b= b1b2b3b4b5b6b7b8其中bj作为第j个s-盒的输入,其输出为cj,c= c1c2c3c4c5c6c7c8就是代换s的输出,所以代换s是一个48位输入,32位输出的选择压缩运算,将结果c再实行一个置换p(表4),即得f(r,k)。其中,扩展运算e与置换p主要作用是增加算法的扩散效果。s-盒是des算法中唯一的非线性部件,当然也就是整个算法的安全性所在。它的设计原则与过程一直因为种种不为人
20、知的因素所限,而未被公布出来。s-盒如下表:表3.4 s-盒函数s114 413 1 21511 8 310 612 5 9 0 7 015 7 414 213 110 61211 9 5 3 8 4 114 813 6 2111512 9 7 310 5 01512 8 2 4 9 1 7 511 31410 0 613s215 1 814 611 3 4 9 7 21312 0 510 313 4 715 2 81412 0 110 6 911 5 014 71110 413 1 5 812 6 9 3 21513 810 1 315 4 211 6 712 0 514 9s310 0 9
21、14 6 315 5 11312 711 4 2 813 7 0 9 3 4 610 2 8 514121115 113 6 4 9 815 3 011 1 212 51014 7 11013 0 6 9 8 7 41514 311 5 212s4 71314 3 0 6 910 1 2 8 51112 41513 811 5 615 0 3 4 7 212 11014 910 6 9 01211 71315 1 314 5 2 8 4 315 0 610 113 8 9 4 51112 7 214s5 212 4 1 71011 6 8 5 31513 014 91411 212 4 713
22、 1 5 01510 3 9 8 6 4 5 1111013 7 815 912 5 6 3 01411 812 7 114 213 615 0 910 4 5 3s612 11015 9 2 6 8 013 3 414 7 5111015 4 2 712 9 5 6 11314 011 3 8 91415 5 2 812 3 7 0 410 11311 6 4 3 212 9 515101114 1 7 6 0 813s7 411 21415 0 813 312 9 7 510 6 113 011 7 4 9 11014 3 512 215 8 6 1 4111312 3 7141015 6
23、 8 0 5 9 2 61113 8 1 410 7 9 5 01514 2 312s813 2 8 4 61511 110 9 314 5 012 7 11513 810 3 7 412 5 611 014 9 2 711 4 1 91214 2 0 6101315 3 5 8 2 114 7 410 8131512 9 0 3 5 611s-盒的置换规则为:取0,1,15上的4个置换,即它的4个排列排成4行,得一4*16矩阵。若给定该s盒的6个输入为b0 b1 b2 b3 b4 b5,在si表中找出b0 b5行,b1b2 b3b4列的元素,以4位二进制表示该元素,此为s-盒si的输出。例3
24、.1 s2的输入为101011, b1 =1,b6=1,b1 b6=(11)2=3 &
25、#160; (b2 b3 b4 b5)2=(0101)2=5查s2表可知第3行第5列的输出是15,15的二进制表示为1111。则s2的输出为1111。8个s-盒的代换方式都是一样的。s盒输出的32比特经p置换,p置换
26、的功能是将32位的输入,按以下顺序置换,然后输入仍为32比特。p置换的顺序如表3.5:表3.5 置换p16 7202129122817 1152326 5183110 2 824143227 3 9191330 62211 4253.2.4 子密钥的生成初始密钥k(64bit)pc-1d0(28bit)c0(28bit)ls1ls1k1pc-2d1c1ls2ls2ls16ls16k16pc-2d16c16图3.4 des子密钥生成流程图图3.4给出了子密钥产生的流程图。首先对初始密钥经过置换pc-1(表2.67),将初始密钥的8个奇偶校验位剔除掉,而留下真正的56比特初始密钥。表3.6 密钥置
27、换pc-1574941332517 9 158504234261810 259514335271911 36052443663554739312315 762544638302214 661534537292113 5282012 4然后将此56位分为c0,d0两部分,各28比特,c0,d0如下:c0=k57k49k44k36d0=k63k55k12k4然后分别进行一个循环左移函数ls1,得到c1,d1,将c1(28位),d1(28位)连成56比特数据,再经过密钥置换pc-2(表3.7)做重排动作,从而便得到了密钥k1(48位)。依次类推,便可得到k2,k3k16。表3.7 密钥置换pc-21
28、4171124 1 5 32815 62110231912 426 816 7272013 2415231374755304051453348444939563453464250362932其中ls1(1i16)表示一个或两个位置的循环左移,当i=1,2,9,16时,移一个位置,当i=3,4,5,6,7,8,10,11,12,13,14,15时,移两个位置。3.3 des算法的解密过程des算法的解密过程跟加密过程是一样的,区别仅仅在于第一次迭代时用密钥k16,第二次k15、,最后一次用k1,算法本身没有任何变化。第四章 des算法用c+语言实现4.1设置密钥函数des_setkey()此函数
29、的功能是由64比特的密钥产生16个子密钥ki。首先将密钥字节组key8转换为64比特的位组,然后进行密钥变换pc-1(祥见pc-1置换表),置换后得到56比特的密钥,把变换后的密钥等分成两部分,前28位记为c0, 后28位记为d0。将c0,d0进行ls1运算,ls1是循环左移运算。得到c1 ,d1,最后将其进行pc-2置换(见pc-2置换表),得到子密钥k1.然后依次按循环左移lsi(i=216,循环次数见循环左移规则), pc-2置换得到k2 k16。void des_setkey(const char key8);static void f_func(bool in32,cons
30、t bool ki48);/f函数static void s_func(bool out32,const bool in48);/s盒代替/变换static void transform(bool *out, bool *in, const char *table, int len);static void xor(bool *ina, const bool *inb, int len);/异或static void rotatel(bool *in, int len, int loop);/循环左移4.2 f函数和s函数f_func()和s_func()此函数的功能是des算法的关键,f是将
31、32比特的输入转化为32比特的输出。这个两个函数中主要用到以下函数:(1) transform()此函数是通用置换函数,根据具体情况确定要执行哪种置换。在f函数中,先用于e置换,然后进行p置换。void transform(bool *out,bool *in,const char *table,int len) static bool tmp256; for(int i=0;i<len;i+) t
32、mpi=intablei-1; memcpy(out,tmp,len);(2)e_table()e置换表,作用是将32比特的输入扩展为48比特。e输出的48比特的数据跟生成的子密钥进行异或运算,然后把得到的48比特的数据按顺序分成8组,每组6比特,分别通过s1, s2 ,,s8盒后又缩为32比特,即每盒输入为6比特,输出为4比特。将输出的32比特的数据经p置换,最后得到32比特的数据。static const char e_table48= 32, 1, 2, 3, 4, 5,4, 5, 6, 7, 8, 9,8, 9,10,11,12,11,12,13,1
33、4,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1。(3)s_box s盒。void s_func(bool out32,const bool in48) for(char i=0,j,k;i<8;i+,in+=6,out+=4) j=(in0<&
34、lt;1)+in5; k=(in1<<3)+(in2<<2)+(in3<<1)+in4; bytetobit(out,&s_boxijk,4); (4)p_table()p置换表。const static char p_table32=16,7,20,21,29,12,28,17
35、,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25。(5)xor()此函数的功能是进行异或运算,异或运算是按位作不进位加法运算。void xor(bool *ina,const bool *inb,int len) for(int i=0;i<len;i+) inai=inbi;(6)
36、bytetobit()此函数的功能是将输入的字节组转换为位组。void bytetobit(bool *out,const char *in,int bits) for(int i=0;i<bits;i+) outi=(ini/8>>(i%8) &1;与此相关的还有函数ttobyte()此函数的功能是将位组转换字节组。void bittobyt
37、e(char *out,const bool *in,int bits) memset(out,0,(bits+7)/8); for(int i=0;i<bits;i+) outi/8|=ini<<(i%8);4.3 des算法的运行函数des_run( )这个函数整个算法运行程序
38、的最主要部分。这个函数用于加密还是解密取决于type的类型,如果type为encrypt,则进行加密;如果type的类型为decrypt,则进行解密。void des_run(char out8,char in8, bool type) static bool m64,tmp32,*li=&m0, *ri=&m32; bytetobit(m,in,64); transform(m,m,ip_table,64); if(type=encr
39、ypt) for(int i=0;i<16;i+) memcpy(tmp,ri,32);
40、 f_func(ri,subkeyi); xor(ri,li,32); memcpy(li,tmp,32);
41、 else for(int i=15;i>=0;i-) memcpy(tmp,li,32);
42、 f_func(li,subkeyi); xor(li,ri,32);
43、memcpy(ri,tmp,32); transform(m,m,ipr_table,64); bittobyte(out,m,64);这个函数用到以下函数:(1) bytetobit()此函数的功能是将输入的字节组转换为位组。(2) transform()此函数是通用置换函数,根据具体情况确定要执行哪种置换。(3) memcpy()此函数是库函数,主要作用是进行内存
44、单元的复制。(4) f_func() 此函数是des_run()函数运行的关键,是将32比特的输入转化为32比特的输出(5)xor()此函数的功能是进行异或运算,异或运算是按位作不进位加法运算。(6)bittobyte()此函数的功能是将位组转换字节组。4.4 des算法的主函数void main()主函数的流程:void main() char key8='p','r','o','g','r',
45、'a','m',str8; puts("*des*"); printf("n"); printf("n"); puts("please input your words");
46、60; gets(str); printf("n"); puts("*"); des_setkey(key); des_run(str,str,encrypt); &
47、#160; puts("after encrypting:"); puts(str); printf("n"); puts("*"); puts("after decrypting:");
48、 des_run(str,str,decrypt); puts(str); printf("n"); puts("*"); printf("n");此函数贯穿整个函数。首先是初设密钥,然后调用密
49、钥设置函数des_setkey()和des算法的运行函数des_run(),最后得出密文以及解密后的文字。4.5 des的加密过程和举例设明文m=computer,密钥k为program,它们用ascii码表示为:m= 01100011 01101111 01101101 01110000 01110101 01110100 01100101 01110010k= 01110000 01110010
50、60; 01101111 01100111 01110010 01101101 01101101这里的k只有56位,由于第8,16,24,32,40,48,58,64位不起作用,所以没有赋值。也就是其中的k8 k16 k24 k32 k40 k48 k56 k64不起作用。其中的密钥为64比特如下: k=0111000*0011100*1001101*1110110*0111011
51、*1001001*1000010*1101101*在这里密钥k是在主函数中已设定,所以在程序运行时只输入明文就可以了。密钥k经过pc-1置换后,分成两组c0,d0。可得c0=11101100 10011001 00011011 1011d0=10110100 01011000 10001110 0111c0,d0 分别进行循环左移运算,得到c1,d1。c1=11011001 00110010 001101
52、11 0111d1=01101000 10110001 00011100 1111依次类推,c1,d1继续进行循环左移,最后得到c2,d2进行循环左移,得到c3,d3c16,d16。c1,d1进行pc-2置换,得到密钥k1,可得:k1=00111101 10001111 11001101 00110111 00111111 01001000依次类推,c2,d
53、2进行pc-2置换,得到密钥k2, c3,d3进行pc-2置换得到k3,c16,d16进行pc-2置换得到k16。明文m进行ip置换后,分成两组:l0,r0,可得:l0=11111111 10111000 01110110 01010111r0=00000000 11111111 00000110 10000011r0进行e膨胀后,与密钥k1进行异或运算,得到48比特的数据s=10111101 10011
54、000 00110011 10110111 11101011 01001110将这些数据分别装入s盒:(1) 101111进入s1,从s1的第3行第7列的元素7,可知其输出为0111(2) 011001进入s2,从s2的第1行第12列的元6,可知其输出为0110(3) 100000进入s3,从s3的第2行第0列的元素13,可知其输出为1101(4) 1100
55、11进入s4,从s4的第3行第9列的元素4,可知其输出为0100(5) 101101进入s5,从s5的第3行第6列的元素2,可知其输出为0010(6) 111110进入s6,从s6的第2行第15列的元素6,可知其输出为0100(7) 101101进入s7,从s7的第3行第6列的元素10,可知其输出为1010(8) 001110进入s8,从s8的第0行第7列的元素1,可知其输出为0001故8个s盒的输出为:01110110 110
56、10100 00100110 10100001最后通过p得f(r0,k1)为:01110110 11010100 00100110 10100001l0 f(r0,k1)得到r1:r1=10111011 10011001 11101001 11001100l1= r0=00000000 11111111
57、0; 00000110 10000011经过16轮的迭代最后得到:l16= r15=01010010 10011000 11000001 01011010r16=11101000 10000011 01111000 01001100最后经过ip逆置换后得到密文如下:00100100 01100001
58、 00000010 10011011 01011001 10001000 11001111 101101004.6 des算法的分析des算法具有极高安全性,最初,除了用穷举搜索法对des算法进行攻击外,并没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近
59、2285年的时间,可见,这是难以实现的,当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把des密钥的长度再增长一些,以此来达到更高的保密程度。在des算法作为一个标准时,曾出现过许多的批评,其中之一就是针对s盒的。des里的所有计算,除去s盒全是线性的,也就是说,计算两个输出的异或与先将两个对应输入异或再计算其输出是相同的。作为非线性部件,s盒针对密码体制的安全性至关重要。在算法提出时,就有人怀疑s盒隐藏了“陷门”。而美国国家安全局能够轻易的解密消息,同时还能宣称des算法是“安全”的。当然无法否认这一猜测,然而到目前为止,并没有任何证据证明des里的确存在陷门。事实上,后来表明d
60、es里的s盒是被设计成能够防止某些类型的攻击的。在20世纪90年代初,biham与shamir发现差分分析时,美国国家安全局就已承认某些未公布的s盒设计原则正是为了使得差分密码分析变得不可行。事实上,差分密码分析在des最初被研发时就已成为ibm的研究者所知,但这种方法却被保留了将近20年,直到biham与shamir又独立地发现了这种攻击。对des算法最中肯的批评是,密钥太短。des算法中只用到64位密钥中的其中56位,第8、16、24、.64位8个位并未参与des运算,而是用作奇偶校验。在所有的密钥空间中有极少量的弱密钥,如全0和全f的密钥等,在选择时应尽量避免。这一点,向我们提出了一个应
61、用上的要求,即des的安全性是基于除了8,16,24,.64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8,16,24,.64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证des算法安全可靠地发挥作用。如果不了解这一点,把密钥key的8,16,24,. .64位作为有效数据使用,将不能保证des加密数据的安全性,对运用des来达到保密作用的系统产生数据被破译的危险,这正是des算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。总之,des密钥太短,超期服役的时间也太长。新的攻击手段不断出现,des以面临实实在在的威胁。直接的威胁还是在于专用设备,由于芯片的速度越来越快,造价越来越便宜,导致专用设备的造价也大大的降低。des算法除了差分密码分析另外两种最重要的密码攻击是穷尽密钥搜索和线性密码分析。对des算法而言,线性攻击更有效。在1994年,一个实际的线性密码分析由其发明者matsui提出。这是一个使用243对明文-密文,又用了40天来找到密钥。这个密码分析并未对des的安全性产生实际影响,由于这个攻击需要数目极大的明-密文对,在现实世界中一个敌手很难积攒下用同一密钥加密的如此众多的明-密文对。虽然des加密算法已经过时,但它的基本理论和设计思想仍有重要参考价值。参考
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年规范化设备采购协议范例
- 2024年设备维护保养服务协议
- 2024年基站场地租赁协议模板
- 店铺出租协议文本 2024 年
- 2024泵车租赁协议定制集锦
- 2024年商业街店铺租赁协议
- 2024年专业委托信用担保服务协议
- 2024年规范化小型物流服务协议
- 2024年定制反担保保障协议
- 2024年度房产指标交易协议模板
- 水泥市场调研报告模板
- 《可靠性管理》课件
- 2024精美体育主题班会
- 《营养卫生》-《烹饪中减少营养素损失的措施》
- 火锅店盈利模式分析报告
- 微生物发酵过程优化方案
- 基药政策及市场课件
- 安监人员考核细则范本
- 节日景观布置投标方案(技术方案)
- 国家中小学智慧教育平台培训专题讲座
- 仓库用电安全自查报告
评论
0/150
提交评论