Hash函数的攻击方法

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

素食则气不浊;独宿则神不浊;默坐则心不浊;读书则口不浊。——曾国藩
Hash函数的攻击方法
密码学上的Hash函数是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。Hash函数可用于数字签名、消息的完整性检测、消息的起源认证检测等。安全的Hash函数的存在性依赖于单项函数的存在性。也就是说,已知Hash函数值,构造一个消息,使其Hash函数值相同,应具有计算复杂性意义下的不可行性。
评价Hash方案的一个办法是看一下找到一对碰撞消息所花的代价有多高。攻击Hash函数的主要目标是找到一对或更多对碰撞消息。在目前已有的攻击Hash方案中,一些是一般的方法,可攻击任何类型的Hash方案,例如生日攻击方法,另一些是特殊的方法,只能用于攻击某些特殊类型的Hash方案,例如适用于攻击具有分组链结构的Hash方案的中间相遇攻击,适用于攻击基于模算术的Hash函数的修正分组攻击。
生日攻击方法没有利用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方案。

参考书目:
1.〈〈网络信息安全〉〉樊成丰、林东编著。
2.〈〈密码学导引〉〉冯登国、斐定一编著。
3.〈〈计算机信息系统安全〉〉王锡林、李瑞宏编著。






罗平宇
19880015
信息中心

素食则气不浊;独宿则神不浊;默坐则心不浊;读书则口不浊。——曾国藩




相关文档
最新文档