词条 | 生日攻击 |
释义 | 什么是生日攻击 生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即Hash值的长度。这种攻击对Hash函数提出了一个必要的安全条件,即消息摘要必须足够长。生日攻击这个术语来自于所谓的生日问题,在一个教室中最少应有多少学生才使得至少有两个学生的生日在同一天的概率不小于1/2?这个问题的答案为23。 生日攻击的方法解释 下面详细描述生日攻击的方法。 设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方案。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。