1密码基础-对称密码信息安全导论(模块4-密码基础)2现代密码学密码体制的分类:对称、非对称分组、序列3分组密码的设计原则混乱:所设计的密码应使得密钥、明文以及密文之间的依赖关系相当复杂,以至于这种依赖性对密码分析者来说是无法利用的扩散:所设计的密码应使得密钥的每一位数字影响密文的许多位数字,以防止对密钥进行逐段破译,而且明文的每一位数字也应影响密文的许多位数字,以便隐蔽明文数字统计特性4典型的分组密码算法—DESDES的历史1971年,IBM,由HorstFeistel领导的密码研究项目组研究出LUCIFER算法,并应用于商业领域1973年美国标准局征求标准,IBM提交结果,之后被选为数据加密标准5分组密码的例子——DESDES是1975年被美国联邦政府确定为非敏感信息的加密标准,它利用64比特长度的密钥K来加密长度为64比特的明文,得到64比特长的密文1997年,由于计算机技术迅速发展,DES的密钥长度已经太短,NIST建议停止使用DES算法作为标准.目前,二重DES和三重DES仍然广泛使用56DES算法的整体结构——Feistel结构DES算法的轮函数DES算法的密钥编排算法DES的解密变换7DES算法的整体结构——Feistel结构7K1……K168DES算法的整体结构——Feistel结构1.给定明文,通过一个固定的初始置换IP来重排输入明文块P中的比特,得到比特串P0=IP(P)=L0R0,这里L0和R0分别是P0的前32比特和后32比特8IP58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157初始置换IP9DES算法的整体结构——Feistel结构2.按下述规则进行16次迭代,即1≤i≤16这里是对应比特的模2加,f是一个函数(称为轮函数);16个长度为48比特的子密钥Ki(1≤i≤16)是由密钥k经密钥编排函数计算出来的.ii-1ii-11LRRL(,)iifRKLi-1Ri-1f+LiRiki第16轮迭代左右两块不交换10DES算法的整体结构——Feistel结构10IP-140848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725初始置换的逆置换IP3.对比特串R16L16使用逆置换IP-1得到密文C,即C=IP-1(R16L16)。11分组密码的轮函数函数f以长度为32比特串Ri-1作为第一输入,以长度为48比特串Ki作为第二个输入,产生长度为32比特的输出:1112分组密码的轮函数Ri-1KiE(Ri-1)B1B2B3B4B5B6B7B8S1S2S3S4S5S6S7S8C1C2C3C4C5C6C7C8f(Ri-1,Ki)+PEE扩展S盒代换P置换32323246484848密钥加13分组密码的轮函数E扩展:Ri-1根据扩展规则扩展为48比特长度的串;E:比特——选择表321234545678989101112131213141516171617181920212021222324252425262728292829303132114E扩展(32bit扩展到48bit)1234567812345679884599132323215分组密码的轮函数密钥加:计算,并将结果写成8个比特串,每个6比特,B=B1B2B3B4B5B6B7B8.1()iiERK16分组密码的轮函数S盒代换:6入4出,查表8个S盒S1……S8.每个S盒是一个固定的4*16阶矩阵,其元素取0~15之间的整数.输入6比特b1b2b3b4b5b6,输出如下1)b1b6两个比特确定了S盒的行2)b2b3b4b5四个比特确定了S盒的列3)行、列确定的值即为输出161717S11441312151183106125907015741521311061211953841148136211151297310501512824917511314100613S21518146113497213120510313471528141201106911501471110413158126932151381013154211671205149S31009146315511312711428137093461028514121115113649815301112125101471101306987415143115212S47131430691012851112415128115615034721211014910690121171315131452843150610113894511127214S52124171011685315130149141121247131501510398642111101378159125630141181271142136150910453S61211015926801334147511101542712956113140113891415528123704101131164321295151011141760813S74112141508133129751061130117491101435122158614111312371410156805926111381410795015142312S813284615111109314501271151381037412561101492711419121420610131535821147410813151290356111818S11441312151183106125907015741521311061211953841148136211151297310501512824917511314100613例如:输入101100,行”10“=2,列”0110“=6输出2,即0010例如:输入111001,行”11“=3,列”1100“=12输出10,即101019分组密码的轮函数19P置换1672021291228171152326518311028241432273919133062211425P置换:长度为32比特串C=C1C2C3C4C5C6C7C8,根据固定置换P(*)进行置换,得到比特串P(C).20DES算法的密钥编排算法根据密钥K来获得每轮中所使用的子密钥Ki20KPC-1C0D0C1D1C16D16LS1LS1LS2LS16LS2LS16……PC-2PC-2K1K16……642828564821DES算法的密钥编排算法1.给定64比特密钥K,根据固定的置换PC-1来处理K得到C0D0,其中C0和D0分别由最前和最后28比特组成PC-15749413325179158504234261810259514335271911360524436635547393123157625446383022146615345372921135282012422DES算法的密钥编排算法2.计算Ci=LSi(Ci-1)和Di=LSi(Di-1),且Ki=PC-2(CiDi),LSi表示循环左移两个或一个位置,具体地,如果i=1,2,9,16就移一个位置,否则就移两个位置PC-2是另一个固定的置换.23DES算法的密钥编排算法PC-2141711241532815621102319124268167272013241523137475530405145334844493956345346425036293224DES的解密变换DES的解密与加密一样使用相同的算法,它以密文y作为输入,但以相反的顺序使用密钥编排K16,K15,…,K1,输出的是明文x25DES加密的例子设16进制明文X为:0123456789ABCDEF密钥K为:133457799BBCDFF1去掉奇偶校验位后,以二进制表示的K加密后的密文为:26DES的核心是S盒,除此之外的计算是线性的S盒作为该密码体制的非线性组件对安全性至关重要。S盒的设计准则:S盒不是它输入变量的线性函数改变S盒的一个输入位至少要引起两位的输出改变对任何一个S盒,如果固定一个输入比特,其它输入变化时,输出数字中0和1的总数近于相等。27分组密码的分析方法如果密码分析者能够确定正在使用的密钥,则他就可以像合法用户一样阅读所有消息,则称该密码是完全可破译的如果密码分析者仅能从所窃获的密文恢复明文,却不能发现密钥,则称该密码是部分可破译的28DES的破解DES的实际密钥长度为56-bit,就目前计算机的计算能力而言,DES不能抵抗对密钥的穷举搜索攻击。1997年1月28日,RSA数据安全公司在RSA安全年会上悬赏10000美金破解DES,克罗拉多州的程序员Verser在Inrernet上数万名志愿者的协作下用96天的时间找到了密钥长度为40-bit和48-bit的DES密钥。1998年7月电子边境基金会(EFF)使用一台价值25万美元的计算机在56小时之内破译了56-bit的DES。1999年1月电子边境基金会(EFF)通过互联网上的10万台计算机合作,仅用22小时15分就破解了56-bit的DES。不过这些破译的前提是,破译者能识别出破译的结果确实是明文,也即破译的结果必须容易辩认。如果明文加密之前经过压缩等处理,辩认工作就比较困难。29DES算法的公开性与脆弱性DES的两个主要弱点:密钥容量:56位不太可能提供足够的安全性S盒:可能隐含有陷井(Hiddentrapdoors)DES的半公开性:S盒的设计原理至今未公布30DES小结充分混乱:密钥、明文以及密文之间的依赖关系相当复杂充分扩散:密钥的每一位数字影响密文的许多位数字,明文的每一位数字也应影响密文的许多位数字31密码分析的几种情况根据攻击者掌握的信息,密码分析分为仅知密文攻击:攻击者除了所截获的密文外,没有其他可以利用的信息已知明文攻击:攻击者仅知道当前密钥下的一些明密文对选择明文攻击:攻击者能获得当前密钥下的一些特定的明文所对应的密文选择密文攻击:攻击者能获得当前密钥下的一些特定的密文所对应的明文32分组密码序列密码(流密码)33流密码(序列密码)分组密码将待加密的明文分为若干个字符一组,逐组进行加密流密码将待加密的明文分成连续的字符或比特,然后用相应的密钥流对其进行加密密钥流由种子密钥通过密钥流生成器产生34流密码基本原理通过随机数发生器产生性能优良的伪随机序列(密钥流),使用该序列加密信息流(逐比特加密),得到密文序列种子密钥K随机数发生器加密变换密钥流Ki明文流mi密文流Ci35按照加解密的工作方式,流密码分为同步流密码和自同步流密码36同步流密码密钥流的产生完全独立于消息流(明文流或者密文流)特点:无错误扩散。如果传输过程产生一位错误,只影响当前位的解密结果,不影响后续位自同步流密码37同步流密码1(,)(,)(,)(,)iiiiiiiiiiFkkGkcEkmmDkc=密钥流生成器ki种子密钥kcikiim解密变换密钥流生成器ci加密变换种子密钥Kimi:密钥流生成器的内部状态F:状态转移函数G:密钥流产生函数38同步流密码自同步流密码每一个密钥字符是由前面n个密文字符参与运算得到的特点:有错误扩散。如果传输过程中产生1位错误,则错误会传播n个字符。收到n个正确的密文字符后,密码系统会实现重新同步39自同步流密码),(),(),(),,,,,(111iiiiiiiiniiiiickDmmkEckGkkcccF=密钥流生成器ki种子密钥kcikiim解密变换密钥流生成器ci加密变换im种子密钥ki:密钥流