首页百科经济理论博弈论文章详细

生日攻击

外汇网2021-06-19 16:02:53 107

定义

生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依靠于消息摘要的长度,即Hash值的长度。该种攻击对Hash函数提出了一个必要的安全条件,即消息摘要务必充足长。生日攻击这个术语来自于所谓的生日困难,在一个教室中最少应有多少学生才致使起码有两个学生的生日在与一天的几率不差于1/2?这个困难的答案为23。

简述

数学上,假使一部分函数,当供应一个任意的输入时,返回k相似相等的值中的一个,然后通过重复地计算不同输入的举动,我们期望得到相同的输出大约1.2sqrt(k)。对上述的生日悖论,用365替代了k。生日攻击一般用于寻求哈希函数的矛盾。为了防止该种攻击,针对一个签名方案的哈希函数的输出的长度能够被普遍选择所以生日攻击变得计算上不可行的。 [1]

生日攻击的方法解释

下面详细描述生日攻击的方法。

设h:X->Y是一个Hash函数,X和Y均为有限的,而且|X|>=2|Y|,记|X|=m,|Y|=n。显然起码有n个碰撞,困难是如何去寻到这些碰撞。一个很自然的方法是随机选择k个不同的元素x1,x2,x3,.....,xk ∈X,计算yI=h(xi),1<=i<=k,然后确定能否有一个碰撞发生。这个过程相似于把k个球随机地扔到n个箱子里边,然后检查看能否某一箱子里边起码有两个球。k个球对应于k个随机数x1,x2,x3,.....,xk,n个箱子对应于Y中的n个或许的元素。我们将计算用该种方法寻到一个碰撞的几率的下界,该下界只依靠于k和n,而不依靠于m。

由于我们关心的是碰撞几率的下界,所以可以假定对所有y∈Y,有|h-1(y)|≈m/n。这个假定是合理的,这是由于假使原像集h-1(y)( y∈Y)不是近似相等的,那么寻到一个碰撞的几率将放大。 由于原像集h-1(y)( y∈Y)的个数都近似相等,而且xI(1<=i<=k)是随机选择的,所以可将yI=h(xi),1<=i<=k视作Y中的随机元素(yi(1<=i<=k)未必不同)。但计算k个随机元素y1,y2, .....yk∈Y是不同的几率是一件容易的事情。依次考虑y1,y2, .....yk。y1可任意地选择;y2 ≠y1的几率为1-1/n;y3 ≠y1 ,y2的几率为1-2/n;.....;yk ≠y1,y2, .....,yk-1的几率为1-(k-1)/n。 所以,没有碰撞的几率是(1-1/n)(1-2/n).....(1-(k-1)/n)。假使x是一个比较小的实数,那么1-x≈e-x,这个预期可由下式推出:e-x=1-x+x2/2!-x3/3!+ .....。当下预期没有碰撞的几率(1-1/n)(1-2/n).....(1-(k-1)/n)约为1-e-k(k-1)/2n。我们设ε是起码有一个碰撞的几率,则ε≈1-e-k(k-1)/2n,进而有k2-k≈nln(1/(1-ε)2)。去掉-k这一项,我们有k2≈nln(1/(1-ε)2),即k≈sqrt(2nln(1/(1-ε)2))。 假使我们取ε=0.5,那么k≈1.17 sqrt(n)。这显示,仅sqrt(n)个X的随机的元素就能以50%的几率造成一个碰撞。注意ε的不同选择将致使一个不同的常数因子,但k与sqrt(n)仍成正比例。

假使X是一个教室中的所有学生的集合,Y是一个非闰年的365日的集合,h(x)表明学生x的生日,这时n=365,ε=0.5,由k≈1.17 sqrt(n)可知,k≈22.3。所以,此生日困难的答案为23。

生日攻击隐含着消息摘要的长度的一个下界。一个40比特长的消息摘若是很恐慌全的,由于仅仅用220(大概一百万)次随机Hash可起码以1/2的几率寻到一个碰撞。为了抵抗生日攻击,一般建议消息摘要的长度起码应取为128比特,此时生日攻击需要约264次Hash。安全的Hash标准的输出长度选为160比特是出于该种考虑。

中间相遇攻击是生日攻击的一种变形,它不比较Hash值,而是比较链中的中间变量。该种攻击首要适用于攻击具有分组链结构的Hash方案。中间相遇攻击的基本原理为:将消息分成两部分,对伪造消息的第一部分从初试值开始逐渐向中间阶段造成r1个变量;对伪造消息的第二部分从Hash结果开始逐渐退回中间阶段造成r2个变量。在中间阶段有一个匹配的几率与生日攻击成功的几率一样。

在修正分组攻击中,为了修正Hash结果并得到期望的值,伪造消息和一个分组级联。该种攻击一般应用于最后一个组,所以也称为修正最后分组攻击。差分分析是攻击分组密码的一种方法。该种攻击也可用来攻击某些Hash算法。

针对Hash算法的一部分弱点可对Hash算法执行攻击,可利用Hash算法的代数结构及其所运用的分组密码的弱点来攻击一部分Hash方案。比如针对DES的一部分弱点(即互补性、弱密钥、密钥碰撞等)来攻击基于DES的Hash方案。

生日悖论

使k个人中起码有两个人生日相同的几率大于0.5的最小k值是多少?不考虑2月29号假定每个生日显现的几率一样

则定义:P(n,k)=Pr[k个元素中起码有一个元素重复显现,其中每个元素显现的几率都是1/n]

所以,导致找出致使P(365,k)>=0.5的最小的k,用Q(365,k)表明没有显现的几率,若k>365,则所有值都不等是不或许的。所以假定k<=365。设k个元素均不重复的数为N,那么,第一个元素有365种取值,第二种元素有364种取值,等等,所以,不同的方式数为:N=365*364*--(365-k+1)=365!/(365-k)!

假使允许重复那么每一个元素有365种取法,共365^k种取法,所以不重复的几率为无重复数除以总数:Q(365,k)=365!/(365-k)!365^k则P(365,k)=1-365!/(365-k)!

对于那些没考虑过该困难的人来看,该几率大的出奇。很多人以为要使起码有一个重复的几率大于0.5,那么大概应有100人,实际上,由于P(365,23)=0.5037,所以人数为23,k=100时起码有一个重复的几率为0.9999997,结果显得出乎意料的原因也许如下:假使你考虑某个组里有其余人和这个人有相同生日的几率很小

但是这里我们考虑的是任意两个人生日相同的几率在23个人中有23*(23-1)/2=253种不同的双人组合,所以生日的几率比较大。

有关条目

生日悖论

标签:

随机快审展示
加入快审,优先展示

加入VIP