1、1Information Security:Principles and Practice,2nd Edition美Mark Stamp著张 戈译第6章 高级密码分析26.1 引言 本章内容 一个针对最著名的第二次世界大战密码机Enigma的攻击。针对RC4算法的攻击,该算法用于WEP通信协议中。对于分组密码加密方案的线性和差分密码分析。针对背包加密方案的格归约攻击。针对RSA算法的计时攻击。旁路通道攻击36.2 Enigma密码机分析纳粹德国从第二次世界大战之前就开始使用Enigma密码机,并且在二战中自始至终都在使用这台著名的轮转密码机。我们这里要介绍的Enigma密码机版本是德国军方在二
2、战期间自始至终都在使用的。该设备曾被用于发送战争中的战术战场消息,也用于高层之间战略层面的通信。后来Enigma密码机被盟军破解,由此而提供的情报当之无愧是无价之宝称其为ULTRA也确属实至名归了。46.2.1 Enigma密码机在使用Enigma密码机对消息实施加密之前,操作员必须先初始化设备,包括各种转子的设定以及电缆插头的插接。这些初始化设置就建立了密钥始化设置就建立了密钥。一旦Enigma密码机被初始化之后,明文消息就可以通过键盘敲入,伴随着每一个明文字母的输入,相应的密文字母就在显示板上呈现出来。密文字母一出现在显示板上,就被写下来并随即传送出去。要想解密密文,接收方必须按照与发送方
3、完全一样的方式对Enigma密码机进行初始化。然后通过键盘将密文逐一敲入,相应的明文字母就会出现在显示板上。5我们使用如下标记来表示出现在Enigma密码机中的各种置换:进而得到密码机的加密方式:其中,x是明文字母,而y是相对应的密文字母。6简单替换简单替换密码密码一个单独的Enigma密码机转子的步进过程:这个例子显示了转子步进的方向。从操作者的视角看,字母是以阿拉伯字母表的顺序出现的。Enigma密码机是替换加密,是基于字母表的置换,将每一个字母进行加密。但是,Enigma密码机远不止这么简单,因为随着字母被加密(或者被解密),里程表计数效应将使得置换发生改变。这样的加密方法就是所谓的多元
4、字母替换密码加密法。对于Enigma密码机来说,可能的“字母表”(也就相当于置换)的数量是巨大的。76.2.2 Enigma的密钥空间Enigma密码机中具有密码学意义的组成部分分别是插头、三个转子以及反射器。构成密钥的这些可变化的设置分别是:1)转子的选择。2)对于最右边的两个转子,其每一个对应的可移动环的初始位置。这个环使得转子外面的部分(即用26个字母标示的那部分)随着环里面的部分(也就是与实际置换相连接的部分)而轮转。这个环的轮转就在转子上形成了相应字母的移位,于是就产生了类似于里程表计数的效果。3)每个转子的初始位置。3.这就类似于旋转汽车轮胎相对于轮毂的位置。4)插头中电缆的数量和
5、插入的状态。5)反射器的选取。每一个转子都实现了26个阿拉伯字母的一个置换。可移动环可以被设置于对应字母的26个可能的位置中的任何一个。8转子的初始化:每一个的初始化位置都可以设定为26个位置中的任何一个,因此,共有262626=214.1种方式来初始化转子。插头的初始化:令F(p)是在插头中插入p条电缆的方式种类,则有总共有超过248.9种可能的插头配置方式。但是最大数出现在有11条电缆插入的情况,而F(10)247.1。反射器:Enigma密码机的反射器相当于一个拥有13条电缆的插头,所以总共就有F(13)242.8种不同的反射器。9Enigma密码机密钥空间的大小理论上大约是:2265.
6、29.4.248.9.242.8 2366 理论上,Enigma密码机的密钥空间相当于一个366位二进制的密钥的空间。6.2.3 转子转子的吸引力?有可能通过一个简单的机电设备,以一种鲁棒的方式生成数量巨大的不同的置换。例子:有4个字母的转子ABCDEnigma密码机就是其自身的逆,这就意味着,使用同样的机器,进行完全相同的设置,就可以进行加密和解密10基于这种三个转子的框架,仅仅通过对这三个转子的64种配置状态执行步进操作,就可以生成由字母ABCD所构成的64个置换的一个环。并非所有这些置换都会是唯一的,因为对于4个字母ABCD来说,最多只有24个不同的置换。通过选择这些转子不同的初始化设置
7、,能够生成不同的置换序列。更进一步地,通过选择一个不同的转子集合(或者重新排列给定的转子),我们也能够生成置换的不同序列。对于某个单一转子来说,仅仅需要将信号以相反的传递方向通过转子,就很容易从一系列的转子中得到其逆置换。对于解密运算来说,逆置换是必须的。116.2.4 对Enigma密码机的攻击由Marian Rejewski、Henryk Zygalski和Jerzy Rozycki 三位领衔的波兰密码分析专家们率先成功地攻击了Enigma密码机。本文介绍的针对Enigma密码机的攻击有点类似于Turing所提出的方案,不过从某种程度上看相对简化。这个攻击需要已知明文,它在第二次世界大战中
8、有一个特定的术语,被称作“候选单词”(crib)。该攻击的基本思想是:首先,我们忽略掉插头,并对密钥的其他部分做一个猜测。根据思考题1,将会有不多于230个这样的猜测。对每一个这样的猜测,我们使用源自“候选单词”(已知明文)的信息来剔除不正确的猜测。这样的攻击,其成本开销在230的量级水平,在现代计算机上实施起来轻而易举,但是对于第二次世界大战年代的技术而言却是不可思议的。12假设我们已经获得了明文信息和相对应的密文文本如下:令S(x)是字母x从键盘输入直到通过插头后的结果。那么S-1(x)就是x以不同的方向通过插头的结果。对于一个给定的初始化设置,令Pi为在第i步骤的置换,该置换由三个转子的
9、组合、紧跟着反射器、再紧跟着的三个转子所共同决定。这样,使用在等式(6.1)中定义的标识方式,整个置换可以表示为下式:为简化表示,我们忽略掉Rl、Rm以及Rr对于步骤i的依赖关系。注注意意:既然Pi是一个置换,那么它的逆Pi-1就存在。由于转子的轮转,当每个字母输入时,置换都不会相同。因此,Pi确实要依赖于i。13考虑一下在表6-1中标识为8的列。其中,明文字母A通过插头,然后再通过P8,最后通过S-1生成了密文文本M,即S-1 P8S(A)=M,这里也可以重新表示为P8S(A)=S(M)。根据表6-1中的已知明文,我们得到:三个等式合并得到:假设我们选定了该机器的其中一种可能的初始化设置,并
10、忽略掉插头部分。那么,所有的Pi和Pi-1都与这个已知的设置相关。接下来,假如我们开始猜测,比如说S(E)=G。如果情况确实如此,即在插头中确有线缆连接了E和G,再假如我们对于该机器的初始化设置的猜测是正确的,那么,根据等式6.2,我们必然可得到:如果我们尝试了S(E)的所有26个选择,都始终没有满足等式(6.2),那么我们能够知道对于转子初始化设置的猜测不正确,于是可以剔除这一种选择。对于S(E)来说,存在26种可能的猜测,而且,对于其中每一种猜测等式(6.2)成立的可能性都有1/26。所以,当仅仅使用一种循环重复,即“候选单词”时,我们并不能获得对于可能正确的密钥在数量上的筛减。14如果将
11、4个等式进行合并:如果我们开始猜测S(E)=G,就有了两个等式,如果我们的猜测是正确的,那么两个等式必须都成立。因为有两个循环重复,在随机情况下,两个等式都成立的可能性就只有(1/26)2的可能性。所以,当S(E)中有两个循环重复,就能够以26为因子的速度来降低各种可能的机器初始化(也就是密钥)设置的数目。基于这样的观测,我们就能够轻而易举地开发出一个攻击。15这里所谓的至关重要的观测是指,一旦我们指定了转子的初始化设置,所有的置换P0,P1,P2,以及 P0-1,P1-1,P2-1,就都是已知的了。然后,如果我们为S(E)替换一个假设的值,我们就能够立刻检验所有可能得到的循环迭代等式的有效性
12、。对于一个关于S(E)的错误猜测(或者说错误的转子初始化设置),任何一个给定的循环迭代能够成立的概率会有1/26。但是,由于有n个循环迭代,因此所有的循环迭代等式都成立的概率将只有(1/26)n。所以,对于具有n个循环迭代的S(E)来说,我们能够大幅降低可能正确的初始化转子设置的数目。通过这种方式来恢复出初始化的转子设置,插头部分的值也能够被恢复出来基本上代价为零。还有很重要的一点需要大家了解,就是对于本文此处所描述的攻击,利用20世纪40年代的技术来实施,是不现实的。在第二次世界大战中实际可行的攻击,需要密码分析专家们将可测验的实例的数目降低到一个远远小于230的水平上。166.3 WEP协
13、议中使用的RC4WEP协议一直享有安全协议领域中的“瑞士乳酪”的 盛誉。从某种程度上看,该协议几乎是以不安全的方式实现了其所有的安全功能,包括RC4算法。在WEP协议中,加密数据时采用了流加密算法RC4,并使用了一个极少变更(如果确有变更的话)的长效的密钥。为避免密钥流的重复出现,将一个初始化向量IV以明文方式与每一条消息一起发送,这里每一个数据包都被视为一条新的消息。初始化向量IV与前述长效密钥混合共同生成消息的密钥。致命弱点:重复出现的初始化向量IV就意味着一个重复出现的密钥流,是为攻击者提供了统计信息,从而使得该攻击者随后能够有十足的把握从密文文本中解出密钥流。在WEP协议中,还存在其他
14、几个可能的捷径攻击。176.3.1 RC4算法RC4算法执行过程:初始化使用一个密钥对置换进行混淆,该密钥可以标识为keyi,其中i=0,1,.,N-1(i可以从0到256)执行:查找表S:包含了所有字节值的一个置换,0,1,2,.,255,并以两级索引i和j标识。18RC4算法的密钥流是一次一个字节生成的。基于查找表S的当前内容就可以决定索引,而被索引的字节则被选中作为密钥流字节。与常规的初始化过程类似,在每一个步骤中,置换S都将被修改,并确保S总是包含一个0,1,2,.,255的置换。196.3.2 RC4密码分析攻击 2000年,Fluhrer、Mantin和Shamir三人公布了一个针
15、对WEP协议中使用的RC4加密方案行之有效的攻击。假设对于一个特定的消息,三个字节长的初始化向量的形式如下:其中V可以是任意字节值。那么这三个字节的初始化向量IV将变成K0,K1,K2。该消息的密钥是:其中V对于Trudy来说是已知的,但是K3,K4,K5,是未知的。在RC4算法的初始化计算中,首先将S赋值给等值置换,这样可得到:假定K如式(6.5)所示的形式。然后,在i=0的初始化步骤中,我们计算索引值j=0+S0+K0=3,并且将元素i和j进行互换,结果就得到了下表20下一步,i=1和j=3+S1+K1=3+1+255=3,因为加法是模256的加法。元素i和j再一次互换,如下所示:再下一步
16、,i=2 就有 j=3+S2+K2=3+2+V=5+V,经过互换之后得到:接下来的步骤中,i=3和j=5+V+S3+K3=6+V+K3,其中K3是未知的。经过互换,查找表如下:假定,经过模256的归约之后,我们得到6+V+K3 5+V。如果情况并非如此,那么6+V+K3将会出现在5+V的左侧,这对于该攻击的大功告成并无影响。21现在假设在某一个时刻,RC4算法初始化过程在完成i=3步骤的计算之后停下来。如果我们根据表6-4所示的算法生成了密钥流的第一个字节,得到i=1和j=Si=S1=0,于是t=S1+S0=0+3=3。那么,第一个密钥流字节将会是:keystreamByte=S3=(6+V+
17、K3)(mod 256)式(6.6)假如Trudy知道了(或者是能够猜测出)明文文本的第一个字节,她就可以确定密钥流的第一个字节。如果这种情况确实发生了,那么Trudy能够轻而易举地求解等式(6.6),从而获得这未知的第一个字节,因为K3=(keystreamByte 6 V)(mod 256)式(6.7)遗憾的是,对于Trudy来说算法的初始化阶段有256个步骤,而不是仅仅4个步骤。但是,只要S0,S1和S3在随后的任何初始化步骤中都不改变,那么式(6.7)始终成立。从i=4到i=255的初始化计算中,索引i对这些元素不会产生任何的影响,因为从4到255,其每一步骤都遵循同样的规律。如果我们
18、将索引j看成是随机的,那么,在每一个步骤中,这三个指标全部都不受影响的概率是253/256。于是,对于所有后面的252个初始化计算步骤,这个概率就是:22假定Trudy已经恢复出了K3,我们来证明她能够恢复出密钥字节K4。在这种情况下,Trudy将寻找如下式所示的初始化向量:IV=(4,255,V)式(6.8)在初始化i=0的步骤,j=0+S0+K0=4,并且将元素i和j互换,如下:当i=1时,j=4+S1+K1=4(因为这里是采用模256的加法),并且将元素S1和S4进行互换,如下式所示:在i=2时,j=4+S2+K2=6+V,经过互换之后,得到下式当i=3 以及 j=5+V+S3+K3=9
19、+V+K3,这里K3是已知的。再经过互换之后,得到:23假定取模256,9+V+K3 6+V。进一步执行这个操作就得到i=4,并有j=9+V+K3+S4+K4=10+V+K3+K4只有K4是未知的。再经过互换之后,表S就成为如下所示的形式:假如初始化过程终止于这一点(在执行完i=4的步骤之后),那么对于密钥流的第一个字节,我们将得到i=1 和 j=Si=S1=0,于是,t=S1+S0=4+0=4。最终生成的密钥流字节就可以表示为:keystreamByte=S4=(10+V+K3+K4)(mod 256)唯一未知的就是K4。于是就可以得到K4=(keystreamByte10VK3)(mod
20、256)式(6.9)当然,这个初始化过程不会在i=4这一步骤就戛然而止,但是,式(6.9)成立的概率大约是0.05。所以,只要拥有足够数量的形如式(6.8)所示的初始化向量IV,Trudy就能够确定出K4。如此进行,只要有足够的形式匹配的初始化向量IV可用,并且Trudy能够知晓每个相对应的数据包的首个密钥流字节,那么任何数量的密钥字节都能够被恢复出来。24事实上,如果有足够数量的数据包可用,任何长度的密钥就都能以微小的代价进行破解。这就是为什么WEP协议被称为是“任何长度(密钥)都不安全”的原因之一。用于恢复未知密钥的首个字节K3的攻击方式:假定初始化向量IV是(2,253,0),那么,经过
21、i=3的初始化计算步骤之后,得到的排列S就是:如果S1、S2和S3不会在后续的初始化步骤中改变,那么第一个密钥流字节将会是3+K3,据此Trudy就能够恢复出K3。不难看出,对于一个给定的三字节初始化向量IV,Trudy可以计算初始化过程直至步骤i=3,并且,基于这种方式,她能够很容易地确定一个给定的向量IV对于她的攻击来说是否有用。后续的密钥字节,也可以同理解释。通过利用所有有效的向量IV,Trudy就能够在恢复密钥之前,减少她所必须侦听的数据包的数量。256.3.3 RC4攻击的预防对于RC4算法的攻击,如果其针对的是该算法的初始化过程,有几种可能的预防方法。真正有效的标准的建议是在初始化
22、过程中增加256个步骤。还有许多变通的方式来合成密钥和初始化向量IV,也能够有效地预防在本小节中所描述的攻击类型。266.4 线性和差分密码分析线性和差分密码分析都是为了攻击DES算法应运而生的,即线性和差分“攻击”针对的是分组密码加密方案中的设计缺陷。这些技术已经演变成为基本的分析工具,用于分析当今所有的分组密码加密方案。差分密码分析源于Biham 和 Shamir,是一种选择明文攻击,而这会使得在真实世界中实际运用这种攻击显得有些困难。线性密码分析是由Matsui于1993年发明的。对于真实世界中的攻击来说,线性密码分析要比差分密码分析稍微理想一些,主要原因在于它属于已知明文攻击类型,而并
23、非属于选择明文攻击类型。276.4.1 数据加密标准DES之快速浏览DES算法共有8个S-box,其中每一个S-box都将6位二进制输入,这里表示为x0 x1 x2 x3 x4 x5,映射为4位二进制输出,此处表示为y0 y1 y2 y3。下图显示了十六进制形式表示的DES算法中的一号S-box S-box是DES算法中唯一的非线性组成286.4.2 差分密码分析概览DES算法中除了S-box外其他部分都是线性的,而非线性部分才能代表密码分析的主要障碍。所以,无论是差分密码分析还是线性密码分析,都是聚焦于处理DES算法中的非线性部分,也即其中的S-box。差分密码分析攻击背后的基本思想是比较输
24、入和输出的差异。例子:一个类似DES的加密算法使用了3位二进制输入和2位二进制输出的S-box 对于输入二进制位x0 x1x2,位x0用于索引行,而位x1 x2用于索引列。下面考虑两个输入值,X1=110 和 X2=010,同时假设密钥K=011。那么有X1 K=101 和X2 K=001,这样就可以得到下式:假设等式(6.11)中的K未知,但是其输入已知,比方说X1=110和X2=010,以及相对应的输出也是已知的,即Sbox(X1 K)=10 和 Sbox(X2 K)=01,可以得到:这就意味着K=011。这这里的里的“攻击攻击”本质上是针对如本质上是针对如(6.10)所示的单一所示的单一
25、S-box的一个已知的一个已知明文攻击,以破解密钥明文攻击,以破解密钥K。29假如我们已知输入X1和X2,那么对于输入X1,实际输入给S-box的是X1 K,对于输入X2,实际输入给S-box的是X2 K,这里密钥K是未知的。差分运算是以模2方式定义的,即等价于异或运算XOR。这样,S-box的输入差分就是(X1 K)(X2 K)=X1 X2 式(6.12)输入差分是独立于密钥K的。这是差分密码分析能够奏效的基本前提。令Yl=Sbox(X1 K),Y2=Sbox(X2 K),则输出差分Yl Y2就是下一轮运算的输入差分了。因此,目标是精心地构造输入差分,以便我们能够“串接”差分来贯通多轮运算。
26、差分攻击的另一个非常关键的要素是,S-box的输入差分为零往往会生成一个同样为零的输出差分。通过选择这些S-box的输入差分为零,我们能够使得S-box对于差分密码分析而言处于“非激活状态”。给定任意的S-box,我们可以对其进行分析,以找到如下所述的有用的输入差分。对于每一个可能的输入值X,找到所有成对的X1和X2,使得:X=X1 X2 计算出相对应的输出差分为:Y=Y1 Y2 其中:Y1=Sbox(X1)和Y2=Sbox(X1)将所得的结果数据依次排列成表,我们就能够找出最匹配的输入值。30对于(6.10)中所示的S-box,这个分析就生成如图6-11中的结果:对于任意的S-box,输入差
27、分为000的情况没什么可分析的输入值相同,相应的S-box就会处于“非激活状态”。对于图6-11所示的例子,输入差分为010的情况总是会得到结果为01的输出,这就是可能得到的最佳匹配数据了。同时,正如式(6.12)所示,通过某种特定的选择,比方说,在Xl X2=010的情况下,一个S-box的实际输入差分将会是010,因为毕竟密钥K与差分运算结果无关。316.4.3 线性密码分析概览与差分密码分析一样,线性密码分析也是聚焦在分组加密方案中的非线性部分上。不同的是,线性密码分析仅仅需要已知明文,而不是选择明文。线性密码分析的目标是将一个加密方案中的非线性部分向线性方程的方向去逼近。再回过头考虑(
28、6.10)中所示的简化S-box。我们将三位输入二进制数表示为x0 x1x2,同时将两位输出二进制数表示为y0y1。然后,用x0来确定行,用x1x2来确定列。图6-12已经列出了每种可能有效的线性逼近的值的数量,其中其值为非4的情况就意味着一个非随机的输出。32假设y0=x1 x2 1的情况发生的概率为1,而y0 yl=x1 x2的情况发生的概率为3/4。利用诸如此类的信息,我们可以在密码分析中用线性方程来替换相应的S-box。事实上,结果就是我们将非线性的S-box替换成了线性方程,其中所谓的线性方程并不是一定会有效,而是在某些相当大的概率条件下有效。在DES加密方案中,每一个S-box都是
29、精心设计的,要确保无法找到某个输入二进制位的线性组合能够很好地逼近一个独立的二进制输出位。但是,仍然存在对于输出二进制位的线性组合能够被输入二进制位的线性组合所逼近的情况。于是,对于DES加密方案,线性密码分析就存在了成功的可能性。336.4.4 微小DES微小DES,简称为TDES,是一个类DES的加密方案,相比DES加密方案而言更简单,也更容易分析。TDES是由本书作者自己设计的,目的是为了使线性和差分密码分析攻击更容易研究。TDES是一个大幅简化的DES加密版本,其具备如下特性:16位分组长度。16位密钥长度。包含4轮运算。包含两个S-box,每个S-box实现从6位二进制数向4位二进制
30、数的映射。每轮运算都包含一个12位的子密钥。TDES不包含P-box,不包含初始化过程和最后的置换操作。34TDES是Feistel密码结构,如果明文表示为(L0,R0),对于i=1,2,3,4有:其结果密文是(L4,R4)。TDES加密方案中单独一轮运算的图解:35-1=1=1(,)iiiiiiLRRLF RK-TDES包含了两个S-box,分别表示为SboxLeft(X)和SboxRight(X)。这两个S-box都将6位二进制数映射为4位二进制数。定义函数 式(6.13)得到Sboxes(x0 x1x2x11)=(SboxLeft(x0 x1.x5),SboxRight(x6x7x11)
31、扩展置换为(,)=Sboxes(expand()K)F R KR 0 174 7 2 1 5 7 0 2 6 5 0 3expand()expand(r r.r)=()Rr r r rr r r r r r r r我们以SboxLeft(X)来表示TDES算法中左侧的S-box。这个S-box以十六进制形式表示如下:右侧的Sbox即SboxRight(X),表示如下:与DES加密方案一样,在TDES的S-box中,每一行都是十六进制数字0,1,2,.,E,F的一个置换。36TDES加密方案的密钥调度是非常简单的。16位二进制长的密钥可以表示如下:K=k0k1k2k3k4k5k6k7k8k9k1
32、0k11k12k13k14k15子密钥的生成方式如下。首先令:LK=k0k1k7RK=k8k9k15对于i=1,2,3,4的每一轮运算,都要执行如下操作:LK=rotate LK left by 2(以2位为单位将LK向左轮转)RK=rotate RK left by 1(以1位为单位将RK向左轮转)然后通过选择当前(LK,RK)的二进制位中的第0,2,3,4,5,7,9,10,11,13,14以及第15位来得到Ki。子密钥Ki可以如下方式明确无误地表示:K1=k2k4k5k6k7k1k10k11k12k14k15k8K2=k4k6k7k0k1k3k11k12k13k15k8k9K3=k6k0
33、k1k2k3k5k12k13k14k8k9k10K4=k0k2k3k4k5k7k13k14k15 k9k10k11376.4.5 针对TDES加密方案的差分密码分析针对TDES加密方案的差分密码分析攻击将集中在右侧S-box上。假设我们对所有满足条件的输入值X1和X2,将SboxRight(X1)SboxRight(X2)的值排列出来,其中X1和X2要满足条件Xl X2=001000。那么我们可以得出,如下推导成立的概率是3/4。式(6.17)对于任何的S-box,都有:式(6.18)我们的目标是充分利用这些因素来开发出一个切实可行的针对TDES加密方案的差分密码分析攻击。381212()()
34、=001000SboxRight()SboxRight()=0010XXXX1212()()=000000SboxRight()SboxRight()=0000XXXX差分密码分析是一种选择明文攻击。假如我们对两个选定的明文分组进行加密,P=(L,R)和 ,要求其满足下式:首先,我们考虑下式:从(6.14)中对于expand的定义,我们不难看出:expand(0000 0010)=000000 001000既然expand是线性的,那么如果Xl X2=0000 0010,就有:对于在式(6.19)中选择的明文,我们有R R=00000010。那么,根据等式(6.20)中的计算,可以得到以下推导
35、:39=(,)(,)=0000 0000 0000 0010=0 x0002PPL RL R(,)(,)=Sboxes(expand()Sboxes(expand()F R KF R KRKRK,PL R 且 。利用这个结果,再结合等式(6.17)和等式(6.18),就能够得出以下等式成立的概率为3/4。总结一下,如果R=0000 0010,那么对于任意(未知)的子密钥K,我们都能够得到下式成立的概率为3/4。式(6.21)对于特定的输入值,轮运算函数的输出差分与输入差分相同的情况会有一个很高的概率。40 =000000 AA =001000 BB(,)(,)0000 0010F R KF R
36、 K(,)(,)0000 0010F R KF R K既然差分密码分析是一种选择明文攻击,我们就可以选择P 和 ,使其满足等式(6.19)。通过对P 和的选择,我们就可以得到下式:然后,根据等式(6.21),下式成立的概率为3/4。从这个结果,我们接下来就可以得到如下的推导:上式成立的概率为(3/4)2=9/16=0.5625。根据类似的方式,我们可以得到图6-14中给出的有关R3 R3 和 R4 R4的结果。4100000000 0010 0000 0000RRLL和110000 0010RR因为TDES算法是一个Feistel密码结构,所以有:因为有L4=R3 和 ,可以得到:上式也可以写
37、作:如果现在有 ,那么根据图6-14,我们基本上可以肯定 L3 =0000 0000,也就是说,L3=。这遵循如下等式:我们也可以将该式写作 式(6.23)4243344334(,)(,)RLF R KRLF R K和43LR43444344(,)(,)RLF L KRLF L K和34443444(,)(,)LRF L KLRF L K和=0 x0202CC3L3L(,)(,)444444RF L KRF L K444444(,)(,)RRF L KF L K对于一对满足式(6.19)的选定明文来说,如果加密后的结果密文对满足式(6.22),那么我们知道式(6.23)成立。然后,由于下式:可
38、以得到:式(6.24)还可以得到:式(6.25)令:式(6.25)就包含了 ,其中i=0,1,2,3,4,5,7以及 。现在,将式(6.24)代入式(6.23),就得到:434444(,)(,)0 x0202CCL RL R440000 0010RR440000 0010LL0 1 2 3 4 5 6 740 1 2 3 4 5 6 7 and 4Ll l l l l l l lLl l l l l l l l iill66ll另一方面,从式(6.26)中的右边4位,我们能够得到:当对子密钥位k13k14k15k9k10k11拥有正确的选择时,该式必然成立,而且,对于这些子密钥位的不正确选择,
39、该式成立的概率仅在特定的水平上。既然右侧S-box和L4以及 的位是已知的,我们就能够确定式(6.27)中所示的未知子密钥位的值。图6-15中给出了恢复这些密钥位值的算法。444L对于图6-15所示的算法,我们做了一个具体的测试案例,其中我们生成了100对能够满足条件的 的 。我们发现有47对结果密文能够满足 ,并且对于其中的每一对,我们都要尝试图6-15的算法中所需要的全部64种可能的6位二进制子密钥。在这个试验中,我们发现有4个推测出的子密钥000001、001001、110000和000111都达到了最大计数47,而其他的子密钥的计数都没有超过39。然后,根据K4的定义我们可以得到:45
40、=0 x0002Pp Pp 和=0 x0202CC运用这种方法,要恢复出完整的密钥K,可以预计的全部运算开销大约是211次加密,另外还要加上差分密码分析攻击所需的开销,当然,相比较而言,差分密码分析攻击所需的开销几乎可以忽略了。于是,我们就可以大约211次加密的计算成本来恢复出完整的16位密钥,这要比穷举式密钥检索好得多了。这就证明了,存在一个捷径攻击,所以TDES加密方案是不安全的。466.4.6 针对TDES加密方案的线性密码分析攻击针对TDES的差分密码分析重点聚焦在右侧S-box上,而线性密码分析攻击则重点关注的是左侧S-box,同样如前面式(6.15)所示:y0y1y2y3=Sbox
41、Left(x0 x1x2x3x4x5)对于TDES加密方案中的左侧S-box,很容易去验证如下的线性逼近有效的概率均为3/4。y1=x2 和 y2=x3 式(6.29)假定明文可以表示为P=(L0,R0)并且令R0r0r1r2r3r4r5r6r7。扩展置换表示如下:expand(Ro)=expand(r0r1r2r3r4r5r6r7)=r4r7r2r1r5r7r0r2r6r5r0r3 式(6.30)根据式(6.30)和子密钥K1的定义可以知道,第一轮运算中左侧S-box的输入如下:r4r7r2r1r5r7 k2k4k5k6k7k1令y0y1y2y3是左侧S-box第一轮运算的输出。那么由式(6
42、.29)可以得到:y1=r2 k5和y2=r1 k6 式(6.31)其中两个等式成立的概率都是3/4。47在TDES加密方案中,S-box的输出将会和左半侧的二进制位进行异或。令L0=l0l1l2l3l4l5l6l7,再令 那么第一轮运算中左侧S-box的输出将会和l0l1l2l3进行异或,以生成 ,将其合并到等式(6.31),就得到:式(6.32)其中每一个等式成立的概率都是3/4。式(6.32)的结果就是,我们能够将式(6.29)中的线性逼近串接起来以贯穿到多轮运算。因为线性密码分析是一个已知明文攻击,所以攻击者能够知道明文P=p0p1p2.p15以及相应的密文C=c0c1c2c15。48
43、10 1 2 3 4 5 6 7=Rr rr r r r r r 0 1 2 3r rr r 2512162=r rklrrkl和在图6-16中的最后一行,遵循了这样一个事实:L4=c0c1c2c3c4c5c6c7。我们可以将这些等式重新写作k0 k1=c1 p10 式(6.33)k7 k2=c2 p9 式(6.34)两个等式成立的概率均为(3/4)3。因为c1、c2、p9和p10均为已知,所以我们就得到了有关密钥位k0、k1、k2以及k7的一些信息。基于图6-16中的结果很容易就能够实施一个线性密码分析攻击。我们先得到已知明文P=p0p1p2.p15以及相应的密文C=c0c1c2c15。对于
44、每一对这样的数据,依据下式是否成立来对一个计数器执行递增操作:c1 p10=0或c1 p10=1同时依据下式是否成立来对另一个计数器执行递增操作:c2 p9=0或c2 p9=1通过使用100对已知明文,就可以得到如下的结果:我们根据式(6.33)可以推出:k0 k1=1根据式(6.34)可以推出:k7 k2=0实际的密钥值是:K=1010 0011 0101 0110491101102929=0 occurred 38 times=1 occurred 62 times=0 occurred 62 times=1 occurred 38 timescpcpcpcp6.4.7 对分组加密方案设计
45、的提示在分组密码加密方案的设计中,主要的目标就是使得线性密码分析攻击和差分密码分析攻击不可行。在其他条件相同的情况下,从线性密码分析攻击和差分密码分析攻击的角度看,一个具有更多轮次运算的分组密码加密方案会更加安全。使线性密码分析攻击和差分密码分析攻击更加困难的另一个途径是尽力获得更高程度的扰乱。更好的扩散水平也会趋于促成线性密码分析攻击和差分密码分析攻击更加难以实施。TEA(Tiny Encryption Algorithm)加密算法就是一个包含了简单轮运算结构的分组加密方案的很好的实例。因为TEA算法的每一轮运算都极其简单,这就导致了其扰乱和扩散的特性相当弱,于是就需要执行很多轮次的运算。A
46、ES(Advanced Encryption Standard)加密算法的每一轮运算都包含了强大的线性混合和卓越的非线性特性。所以,AES算法就需要相对而言较少的运算轮次,但是每一轮的AES运算都比TEA算法的一轮运算更加复杂。DES加密算法就相当于是介于上述两者之间的折中情形。506.5 格规约和背包加密针对原始版本的Merkle-Hellman背包加密系统的攻击的细节。令bl,b2,.,bn均为m维欧式空间Rm中的向量,格就是可以表示为如下多个向量bi相加的形式的所有元素构成的集合:1b1+2b2+nbn例子:向量 因为bl和b2是线性无关的,所以该平面上任何一点都可以表示为1b1+2b2
47、。我们称平面R2是基(bl,b2)的生成空间。51211 112bb 和背包加密问题都可以被规约为在一个格中寻找一个“简约”向量的问题。在格中求解短向量的问题可以利用格规约技术来实现。精确覆盖问题 给定一个集合S以及一系列S的子集,要找到这些子集的一个组合,使得S中每一个元素都恰好在其中一个子集当中。并不是总能够找到这样的一个子集的组合,但是,如果确实找到了这样的子集的组合,我们就将这个解决方案看成是一个特定格中的短向量。例子:例子:令:S=0,1,2,3,4,5,6 假设给定了S的13个子集,用S0到S12来分别标识它们。m表示集合S的元素的个数,n表示子集的个数。52对于这13个子集,共有
48、213种不同的组合结果,可以采用穷举式检索来遍历所有可能的组合,直到找到一个符合条件的组合或者完成了整个遍历为止。一种替代的方法是启发式搜索技术。格规约就可以被视为启发式搜索的一种形式。事实上,我们并不能保证使用格规约的方法就一定能够找出一个解决方案,但是,对于许多问题这个技术确实在很大概率上能够找到解决方案,而且所需要的开销相对于穷举式搜索来说还很小。定义一个mn的矩阵A,其中,如果集合S中的元素i在子集Sj中,则aij=1,否则aij=0。定义长度为m的向量B,其中所有元素均为1。然后,如果我们能够求解矩阵方程AU=B,得到一个由若干个0和1组成的向量,那么我们已经解决了这个精确覆盖的问题
49、。53精确覆盖问题可以被重新描述为:找出一个矩阵方程AU=B的一个解U,其中向量U仅由0和1组成。这并不是一个标准的线性代数问题,可以证实,这是可以利用格规约技术来求解的一类问题。假设AU=B,其中A是一个矩阵,U和B是列向量。令a1,a2,.,an表示矩阵A的各列,令u1、u2,un为列向量U的各个元素。那么可得:B=u1a1+u2 a2+unan 式(6.36)例子:现在给定AU=B,考虑如下矩阵方程:我们将这个矩阵方程表示为MV=W。于是,找到方程MV=W的一个解V就等价于找到了原始方程AU=B的一个解U。543423430261561520 111111 1 0UU -B01n nnn
50、nm nmmIA令c0,c1,c2,cn为矩阵M的n+1个列,再令v0,v1,v2,vn为向量V的各个元素。那么,根据等式(6.36)可以得到下式:W=v0c0+v0c1+vncn 式(6.37)令L为c0,c1,c2,cn,也是矩阵M的各列所生成的格。那么,L就包含了矩阵M中各列的所有整数倍组合。回来再看MV=W,其中:我们的目标是找到U。根据等式(6.37),这个目标解W就在格空间L中。根据对向量长度的欧式定义,一个向量Y=(y0,y1,.,yn-1)Rn的长度可以用下面的公式来表示:W的长度就是:5501n1W00-uuu22201n-1y+y+yY22201n-1y+y+yY22201
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。