【安全课件】第9讲--des安全性
- 格式:pptx
- 大小:604.78 KB
- 文档页数:27
DES算法的实现及安全性分析专业班级:计算机科学与技术1班姓名:廖孜孜完成日期: 2015年5月17日引言如果一个密码体制的加密密钥等于脱密密钥,或者其中一个很容易推出另一个,则称此密码体制为单密钥密码体制,也称为对称密码体制或传统密码体制。
最具有代表性的近代传统密码体制是DES(数据加密标准)。
为了适应社会对计算机数据安全保密越来越高的要求,美国国家标准局(NBS)于1973年向社会公开征集一种用于政府部门及民间进行计算机数据加密算法,许多公司提出了自己的加密算法,最后选中了IBM公司提出的一种加密算法。
经过一段时间的试用与征求意见,美国国家标准局于1977年公布了由IBM 公司研制的一种加密算法,批准把它作为非机要部门使用的数据加密标准,简称DES,DES是Data Encryption Standard的缩写。
自从公布以来,它一直超越国界成为国际上商用保密通信和计算机通信的最常用的加密算法。
原先规定使用期10年,可能是DES尚未受到严重的威胁,更主要的是新的数据加密标准还没有完成,或意见未一致,所以当时的美国政府宣布延长它的使用期。
因而DES超期服役了很长时间,20年来它一直活跃在国际上保密通信的舞台上,扮演了十分突出的角色。
进入20世纪九十年代后以色列的密码学家Shamir 等人提出了一种“差分分析法”,以后日本人又提出类似的方法,这才正式有一种称得上对它的攻击的方法。
严格地说,Shamir 的“差分分析法”也只有理论上的价值,至少目前为止是这样的。
又如,后来的“线性逼近法”,它是一种已知明文攻击法,需要2的43次方也就是4.398×10的12次方对明文-密文对,在这样强的要求条件下,有十多台工作站协同作战,还需要十天的时间。
在这以前已有人建议造专用装置来对付它,其基本想法无非是借用硬件来实现对所有密钥的遍历搜索。
当时估计一天可以搜索到一个密钥。
技术的进步使得搜索的时间进一步缩短,使DES受到了威胁,但DES毕竟辉煌过。
对称分组加密算法:处理固定大小的明文输入分组,且对每个明文分组产生同等大小的密文分组。
有DES(数据加密标准)和AES(高级加密标准)、3DES。
DES:1.DES算法是一种用56位密钥来加密分组长度为64位数据的对称密钥算法(实际上函数要求一个64位的密钥作为输入,但是第8、16、24、32、40、48、56、64 等8位是校验位,使得每个密钥都有奇数个1,所以参与加密过程的只有56位)。
2.DES算法的入口参数有三个:Key:8个字节共64位,是DES算法的工作密钥;Data:8个字节64位,是要被加密或被解密的数据;Mode:DES的工作方式,有两种:加密或解密。
3.DES的解密过程和加密相似,解密时使用与加密同样的算法,不过子密钥(见文中解释)的使用次序要反过来。
DES算法的组成:初始置换函数IP、子密钥Ki及获取、密码函数F、逆置换函IP-1。
DES的明文分组长度为64位(比特)。
初始置换函数IP接受长度为64位的明文输入,逆置换函数IP-1输出64位的密文。
在子密钥的获取过程中,通过密钥置换Pc-1获取从Kl到K16共16个子密钥,这16个子密钥分别顺序应用于密码函数的16次完全相同的迭代运算中。
求密钥:PC2的压缩置换:输入:56位;输出:48位。
加密明文:扩展运算E:32位的R0扩展成48位。
然后R0(t48)与密钥K1进行异或得到48位结果。
S盒:S盒接收6位的输出,经过置换输出4位的数据。
总共输入有:48位;输出有:32位,得到R0(S32)。
对R0(S32)进行置换运算P,得到R0(P32)。
将R0(P32)与L0进行XOR运算得R1(32位)。
R1(32位)与L1(32位)构成第一轮加密后的结果。
s盒是DES算法的核心,它是算法中唯一的非线性部分,是算法安全的关键;有8个s盒,每个s盒输入6位,输出四位,即输入48位,输出32位;输入的6位中的第一位和第六位表示行数,中间四位表示列数,找到s盒中对应的数值。
DES算法及安全性分析第22卷第6期2OO2年12月上饶师范学院JOURNALOFSHANGRAONORMALCOUEGEVd.22,No.6Dee.2002DES算法及安全性分析肖力(鄂州大学教育系,湖北鄂州436ooo)摘要:简要介绍了DES算法的基本原理及具体实现步骤,并分析了该算法的安全性,同时提出了在实现中应注意事项.关键词:算法;密钥;安全性中图分类号:TP2571文献标识码:A文章编号:1004—2237(2002)06—0014—06 1948年,c.E.Shannon发表了关于通信的数学理论的重要文章,标志着信息论的诞生.1949年,他在另一篇着名文章"CommunicationTheoryofSecrecySystem(秘密系统的通信理论)"中,指出了通信和信息加密的一般特征,以及将信息论用于密码学的基本方法.Shannon建议交替使用代替和换位两种方法(他称为混乱(confusion)和扩散(diffusion)的过程),来隐蔽明文消息中的冗余度以破坏对密码系统所进行的各种统计分析.从1968年到1975年,在Shannon的这种思想的影响下,以w.L.Tuchman为首的IBM公司设计小组设计了一种保密性很好的乘积密码算法,被美国国家标准局NBS于1977年7月15日接受,并作为联邦信息处理标准46号(数据加密标准(DataEncryptionStandard)),即DES正式颁布rl】.1DES密码体制DES是一个分组乘积加密算法,它用56位密钥将64位的明文转换为64位的密文,其中密钥可以是任意的数,通常表示为64位,但每个字节的第8位作为奇偶校验位(确保密钥不发生错误,可以忽略).同时,又是一个对称算法:其加密和解密使用同样的算法(除密钥顺序不同以外)简单地说,DES算法就是混乱(confusion)和扩散(diffusion)的组合:混乱使得输出成为输入的非线性函数;扩散扩展了输出对输入的依赖性,从对少数几位的依赖到很多位的依赖.以下为DES加密的实现步骤J:1.1初始置换收稿日期:2oo2—05—09作者简介:肖力(1970一),男,汉族,湖北鄂州人,鄂州大学教育系讲师.研究方向:计算机应用及软件开发.第6期肖力:DES算法及安全性分析15将需加密的64位二进制明文T按位进行如表1所示的II)初始置换,其结果To=II)(T):表15850423426181026o5244362820124 62544638302214664564840322416857494133251791595143352719ll3 615345372921135635547393123157由上表不难看出,初始置换II)将明文T=tt2......t64置换成To=t58t50 (7)1.2密钥置换在这一步,将对密钥进行处理.将舍弃了奇偶校验位的56位密钥,进行如表2所示的按位置换,将置换所得的56位密钥平均分为两部分,每部分28位.表257494133251791585042342618102595143352719ll36o5244366355473931231576254463830221466153453729211352820124然后,进行移位置换,根据轮数(从第1轮开始),将以上两部分分别左移1位或2位.每轮左移的位数如表3所示:表3其中,每一轮移位后,连接两部分得到一个56位数,从中选出48位(具体选择的位数如表4所示),此48位数就构成一个子密钥(subkey).记为:(代表轮数,从1到16).表41.3扩展置换将表1数据的右半部分从32位按表5所示方法扩展到48位.由于此运算改变了位的次序,且重复了某些位,故被称为扩展置换(expansionpermutation).在此过程中,尽管输出分组大于输入分组,但每一个输入分组将产生唯一的输出分组.上饶师范学院20o2(第22卷)表51.4S一盒替换将1.3步扩展置换得到的输出分组分别与子密钥k[i]进行异或运算以后,将得到的48位结果进行S一盒替换运算.替换由8个替换盒(substitutionbox)(或称为S一盒(S—box))完成.每一个S一盒都有6位输入,4位输出,且这8个s一盒是不同的.48位的输入被分成8个6位的分组,每一个分组对应一个s一盒替换操作.S一盒的6个位输入确定了其对应的输出在哪一行哪一列上.具体方法是:假定将S一盒的6位输入记为:bii=1,2,3,4,5,6.则b和组合成了一个2位数(二进制),从0到3(--进制:00到11),它对应表中的一行.从b2到构成了一个4位数(二进制),从0到l5(二进制".0000到1111),对应表中的一列.然后用S一盒中相应行,列的数来替换输入值,作为输出值.例如:假设第5个S一盒的6位输入(即扩展置换得到的输出分组与密钥进行异或运算结果的第25位到30位)为l10011.第l位和第6位组合形成11,它对应着第5个s一盒的第3行.中间的4位组合在一起形成了1001,它对应着同一个S一盒的第9列.S一盒5的第3行第9列处的数是15(S 一盒的行,列的记数均从0开始),则值1111(15的二进制表示)就代替了110011.此替换过程的结果是8个4位分组,将它们重新合并在一起就形成了一个32位的分组.下表列出了所有8个S一盒:S一盒1:1441312151183lO61259070l574l4213ll06l2l195384ll48l362ll151********l5l28249l75ll3l4lO0613S一盒2:1518146ll34972131205lO3l347l528l4120llO69ll50147lll04l3l58l26932l5138l0l31542ll671205149S一盒3:lO091461134972131205lO13709346102851412lll5l136498153011l2l25lO147ll0l306987415143ll52l2第6期肖力:DES算法及安全性分析S一盒4:7l31430691012851112415l38ll56l503472l2ll0149lO69012ll7l3l5l31452843l5O6lOll38945lll27214S一盒5:2124171011685315130149l4ll2l247l3l5Ol5lO398642llllOl37815912563014ll8l27l142136*********S一盒6:1211015926801334147511lOl542712956ll3l4Oll389141552812370410ll3ll643312951510lll4l760813S一盒7:4112141508133129751061130ll749llOl435l22l586l4lll3l237l4lO156805926lll38l4lO795015142312S一盒8:1328461511110931450127ll5l38lO374l256llO14927ll4l912142061013153582ll474lO8l3l51290356ll1.5P一盒置换将S一盒替换运算的32位输出依照P一盒进行置换.该置换把每个输入位映射到相应的输出位.下表给出了每一位移至的位置.然后,将P一盒置换的结果与表1中的64位分组的左半部分进行异或运算,再将左,右半部分交换,接着转回到1.2步,开始下一轮(直到l6轮完成为止).但要注意的是,在最后一轮(即l6轮)后,左半部分和右半部分并不交换,只是合并在一起形成一个64位的分组作为下一步末置换的输入(这样做的目的在于,使该算法既能用于加密,又能用于解密).1.6末置换上一步l6轮置换完成后,将其结果64位分组进行末置换,从而得到64位二进制密文输出.其中,末置换IP是1.1中初始置换IP的逆过程,下表列出了该置换的实现方式:18上饶师范学院2002(第22卷)至此,通过以上6个步骤,就实现了明文的加密.实际上,以上步骤中第1.1步的初始置换和第1.6步的末置换不影响DES的安全性,其目的在于方便硬件实现,但这两种位方式的置换用软件实现却较困难,因此在DES的许多软件实现中都删除了初始置换和末置换(尽管这样做安全性并没有降低,但由于其没有遵循DES标准,因此严格来说,其不应该被称为DES系统).至于DES的解密,则和其加密使用相同的算法,二者唯一的不同在于密钥的次序是相反的.也就是说,若每一轮的加密密钥为:K[1],KE2],KE3],……,K[16],,那么相应每一轮的解密密钥就是:K[16],K[15],K『14],……,K[1].2安全性分析DES的安全性可以从以下几个方面来分析:2.1密钥长度从穷举搜索法的角度来看,DES的56位密钥长度可能不够.所谓穷举搜索法为:设已知一段密码文C及与它对应的明码文M,用一切可能的密钥K加密M,直到得到E(M)=C,这时所用的密钥K即为要破译密码的密钥.1979年,W.Dilfie和M.E.Hellman认为,可以通过造价约2000万美元的并行计算机,采用穷举搜索,可在一天内找到密钥,从而破译DES.1981年,Diffle将这个数据增加到2天的搜索时间和5000万美元.Diflie预料,在1985--1990年期间,可以用多重加密的方法(仍然用56位密钥)来提高DES 的保密性能.但在1990年以后,就应该增加DES密钥的长度了.1998年,电子边境基金会(EFF)动用一台价值25万美元的高速电脑,在26小时内利用穷举搜索的方法破译了56位密钥长度的DES,证明了以上论断J.2.2弱密钥在DES算法中,密钥初始值被分成了两部分,每一部分独立地移动.如果每一部分的所有位都是0或1,那么算法的任意一轮的子密钥都是相同的.当密钥全是1,全是0或一半是1一半是0的时候,就会发生这种情况,这种子密钥称为"弱密钥(weakkey)".另外,还有一些密钥会把不同的明文加密成相同的密文.即密钥对里的一个密钥能解密另一个密钥加密的信息,这些子密钥称为"半弱密钥(semiweakkey)".这些都是由DES产生子密钥的方式所决定的,是无法避免的,但其个数在子密钥集中是可以忽略的.在DES的实际工作过程中,在产生子密钥时可以通过不断检查,以避免产生弱密钥.2.3迭代的次数在DES中,迭代的次数控制因换位而产生的扩散量,如果DES迭代的次数不够,一个输出位就会只依赖于少数几个输入位.A.Konheim指出:经过5轮迭代后,密文的每一位基本上是所有明文和密钥位的函数,而经过8轮迭代后,密文基本上是所有明文和密钥位的随机函数.那么为什么要迭代l6次呢?这是因为由以色列学者EliBiharn和AdiShamir发明的对分组密码进行分析的最佳手段之一的差分密码分析方法已经证明:通过已知明文的攻击,任何少于l6轮迭代的DES算法都可以用比穷举搜索法更有效的方法破译.因此,DES算法选取3l976655319722ll53195554¨9753l4444753197533333如勰∞642O5555642O铝8642∞勰弱第6期肖力:DES算法及安全性分析19l6次迭代是适宜的,既不增加加密的难度,又恰好能抵抗差分分析的攻击.除以上讨论的几个方面外,对DES安全性的批评还有:s一盒中可能有不安全因素;DES的一些关键部分(如代替和换位等的设计标准)不应保密等.3总结DES算法有四种工作方式:电子密文(ECB),密码分组链接(CBC),输出反馈(OFB)及密文反馈(cFB)H.其中,ECB是最简单的方式,虽然它最易受攻击,但在流行的商业软件产品中,它仍是最常采用的方式;CBC则经常以软件方法实现,尽管它比ECB方式仅仅复杂一点,但它提供了更好的安全性;至于OFB和CFB,其安全性最强,往往只在硬件实现的算法中使用.总之,作为20世纪70年代密码学的一个重要成果,DES算法只使用了标准的算术和逻辑运算,其作用的数最多只有64位,且算法具有重复特性,所有这些使得它很容易用硬件技术来实现,可以非常理想地用在一个专用芯片中.同时,也有了许多软件的实现方式.参考文献:[1]BruceSchneier.ApedCryptography—Protocols,algoritlmasandSourcecodeinC[M].JohnWiley&Sons,Inc.SecondEdition ,1996l88—194.[2]王育民,何大可.保密学一基础与应用[M].西安:西安电子科技大学出版社.1990.178—182.[3]卿斯汉.密码学与计算机网络安全[M].清华大学出版社,2001.22—23.[4]陈爱民,等.计算机的安全与保密[M].电子工业出版社,1992.212—214. DESarithmeticandsecurityanalyze×lAOLi(Educationdepartment,Ezhouuniversity,HuBeiEzIl0u436000,China)Abstract:ThispaperintroducesthebasicelementsofDESarithmeticandthestepofrealize,analyzethesecurityofDESari~c' andprovidethenoticeitemsinrealize. KeyWords:DESaridmaetie;secretkey;security。
计算机⽹络安全——对称加密算法DES(⼀)⼀、对称加密算法概念我们通过计算机⽹络传输数据时,如果⽆法防⽌他⼈窃听,可以利⽤密码学技术将发送的数据变换成对任何不知道如何做逆变换的⼈都不可理解的形式,从⽽保证了数据的机密性。
这种变换被称为加密( encryption),被加密的数据被称为密⽂( ciphertext),⽽加密前的数据被称为明⽂( plaintext)。
接收⽅必须能通过某种逆变换将密⽂重新变换回原来的明⽂,该逆变换被称为解密(decryption)。
加密和解密过程可以以⼀个密钥( key)为参数,并且加密和解密过程可以公开,⽽只有密钥需要保密。
即只有知道密钥的⼈才能解密密⽂,⽽任何⼈,即使知道加密或解密算法也⽆法解密密⽂。
加密密钥和解密密钥可以相同,也可以不同,取决于采⽤的是对称密钥密码体制还是公开密钥密码体制。
所谓对称密钥密码体制是⼀种加密密钥与解密密钥相同的密码体制。
在这种加密系统中,两个参与者共享同⼀个秘密密钥,如果⽤⼀个特定的密钥加密⼀条消息,也必须要使⽤相同的密钥来解密该消息。
该系统⼜称为对称密钥系统。
数据加密标准( Data Encryption Standard, DES)是对称密钥密码的典型代表,由IBM公司研制,于1977年被美国定为联邦信息标准。
其加密解密基本流程如下图:⼆、.NET 使⽤ DES 加密DES使⽤的密钥为64 位(实际密钥长度为56 位,有8位⽤于奇偶校验)。
密码的字节长度不能低于64位(8个字节),下⾯是实现代码:1 using System;2 using System.IO;3 using System.Linq;4 using System.Security.Cryptography;5 using System.Text;67 namespace encryption.des8 {9 /// <summary>10 /// DES 加密与解密11 /// DES加密:https:///question/3676782912 /// 加密基本知识:https:///des.html13 /// </summary>14 public class DesAlgorithm15 {16 public Encoding Encoding { get; set; }17 public PaddingMode Padding { get; set; }18 public CipherMode Mode { get; set; }19 public string PassWord { get; private set; }20 private DESCryptoServiceProvider _des;2122 #region .ctor2324 public DesAlgorithm()25 {26 _des = new DESCryptoServiceProvider();27 PassWord = Convert.ToBase64String(_des.Key);28 Encoding = Encoding.UTF8;29 Padding = PaddingMode.PKCS7;30 Mode = CipherMode.CBC;31 }32 #endregion333435 /// <summary>36 /// 通过字符串⽣成新的密钥37 /// </summary>38 /// <param name="password">密码</param>39 /// <returns></returns>40 public DESCryptoServiceProvider CreateNewkey(string password)41 {42 try43 {44 byte[] buffer = Encoding.GetBytes(password).Skip(0).Take(8).ToArray();45 _des = new DESCryptoServiceProvider()46 {47 Key = buffer,48 IV=buffer,49 };50 PassWord = password;51 return _des;52 }53 catch (Exception e)54 {55 Console.WriteLine($"Wrong Length:{e.Message},{e.InnerException}");56 return null;57 }58 }5960 /// <summary>61 /// DES加密62 /// </summary>63 /// <param name="pToEncrypt">需要加密的字符串<see cref="string"/></param>64 /// <returns></returns>65 public string Encrypt(string pToEncrypt)66 {67 byte[] inputByteArray = Encoding.GetBytes(pToEncrypt);68 return Convert.ToBase64String(this.Encrypt(inputByteArray));69 }7071 /// <summary>72 /// DES加密73 /// </summary>74 /// <param name="pToEncrypt">待加密的byte数组<see cref="byte"/></param>75 /// <returns></returns>76 public byte[] Encrypt(byte[] pToEncrypt)77 {78 byte[] base64 = null;79 using (var ms = new MemoryStream())80 {81 using (var cs = new CryptoStream(ms, _des.CreateEncryptor(), CryptoStreamMode.Write))82 {83 cs.Write(pToEncrypt, 0, pToEncrypt.Length);84 cs.FlushFinalBlock();85 }86 base64 = ms.ToArray();87 }88 return base64;89 }9091 /// <summary>92 /// DES解密93 /// </summary>94 /// <param name="pToDecrypt">需要解密的字符串</param>95 /// <returns></returns>96 public string Decrypt(string pToDecrypt)97 {98 byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);99 return Encoding.GetString(this.Decrypt(inputByteArray));100 }101102 /// <summary>103 /// DES解密104 /// </summary>105 /// <param name="pToDecrypt">待解密的byte数组<see cref="byte"/></param>106 /// <returns></returns>107 public byte[] Decrypt(byte[] pToDecrypt)108 {109 byte[] data = null;110 using (var ms = new MemoryStream())111 {112 using (CryptoStream cs = new CryptoStream(ms, _des.CreateDecryptor(), CryptoStreamMode.Write))113 {114 cs.Write(pToDecrypt, 0, pToDecrypt.Length);115 cs.FlushFinalBlock();116 }117 data = ms.ToArray();118 }119 return data;120 }121 }122 }三、.NET 使⽤ 3DES 加密DES使⽤的密钥为64 位,它是⼀个优秀的密码算法,⽬前还没有发现⽐蛮⼒攻击更好的破解⽅法。