我们为了保证消息的完整性,引进了散列函数,那么散列函数会对安全正造成什么影响呢?这是需要好好研究一番的问题。
三个概念:
1.如果y<>x,且h(x)=h(y),则称为碰撞。
2.对于给定的x,要找到一个y满足y<>x,h(x)=h(y),在计算上不可行,称为弱无碰撞。
3.要找到任意一对数,x,y,y<>x,满足h(x)=h(y),在计算上不可行,则称为强无碰撞。(包含弱无碰撞)
假定:一个取整数的随机变量,服从1到n的随机分布,一个含有k个这种变量的集合,至少有一对重复的概率记为P,P大于二分之一,求k的范围
解:对于h(x)=a(a为某个特定的值)的概率为1/n
对于h(x)<>a(a为某个特定的值)的概率为1-1/n
k个变量没有重复的概率为: =1(1-1/n) (1-2/n) (1-3/n)… [1-(k-1)/n]
至少一对重复的概率:P=1 – n!/[(n-k)!nk]
根据不等式:(1-x) ≤e-x (对于0 ≤ x ≤ 1)
P>1-e(-(k(k-1)/(2n))
设E=1-e(-(k(k-1)/(2n))
k约等于(2nln(1/(1-E))0.5
当E=0.5,k约等于1.18n0.5
一间屋子的人数必须达到多少人才能使其中两个生日相同的机会达到50%?
k=1.18 * 3650.5=23,仅需要23人
结论:对于长度为m位的散列码,共有2m个可能的散列码,k个输入值的集合中,若要使其中的任意两个输入x和y,有h(x)=h(y)的概率为0.5,只需k=2m/2
碰撞对于基于Hash的数字签名影响
结果是A等于签了一份他根本不知道的文件02。
但是关键是找到一对想要的碰撞,因为文件02必须是有内容,并且是合乎语言语法的,因为就算找到一个文件02与文件01Hash值一样,文件02是无意义的,那么这样做也是毫无意义的!
在实例应用中,基本的Hash函数
可以看到,经常使用的MD5,和SHA的输出长度分别是128和160,对于弱无碰撞性,被破解成功的可能性低于264和280!