Hash 散列上的多次迭代:不';它不是减少了熵吗?
我在很多地方看到了这种技术的推荐(包括堆栈),我无法忘记这会降低熵!毕竟,您正在再次散列某个已被散列且有冲突机会的内容。碰撞的机会超过碰撞的机会不会导致更多的碰撞机会吗?研究之后,似乎我错了,但为什么呢?既然您标记了md5,我就以它为例。发件人: 如果可以构造具有相同散列的两个前缀,则可以向这两个前缀添加一个公共后缀,以使冲突更有可能被使用它的应用程序接受为有效数据。此外,当前的冲突查找技术允许指定任意前缀:攻击者可以创建以相同内容开头的两个冲突文件。攻击者生成两个冲突文件所需的只是一个包含128字节数据块的模板文件,该模板文件在64字节边界上对齐,可通过冲突查找算法自由更改。两条消息的差异为6位的MD5冲突示例如下: 然后他们给出的示例明文是256字节长。由于冲突攻击依赖于128字节的数据块,而哈希摘要仅为128位,因此在第一次迭代之后不会增加冲突攻击成功的风险——也就是说,在第一次哈希之后,您无法真正影响冲突发生的可能性Hash 散列上的多次迭代:不';它不是减少了熵吗?,hash,md5,iteration,sha1,Hash,Md5,Iteration,Sha1,我在很多地方看到了这种技术的推荐(包括堆栈),我无法忘记这会降低熵!毕竟,您正在再次散列某个已被散列且有冲突机会的内容。碰撞的机会超过碰撞的机会不会导致更多的碰撞机会吗?研究之后,似乎我错了,但为什么呢?既然您标记了md5,我就以它为例。发件人: 如果可以构造具有相同散列的两个前缀,则可以向这两个前缀添加一个公共后缀,以使冲突更有可能被使用它的应用程序接受为有效数据。此外,当前的冲突查找技术允许指定任意前缀:攻击者可以创建以相同内容开头的两个冲突文件。攻击者生成两个冲突文件所需的只是一个包含12
也考虑散列的熵是上述128位。即使考虑到总碰撞概率仅为2^20.96(再次从),也需要大量迭代才能导致两个输入发生碰撞。我认为你是受害者的第一眼理由是:
- 任意两个输入都有可能发生x%的冲突
- 第一个散列的输出本身就是两个这样的输入
- 因此,每次迭代都会增加x%的碰撞几率
- 两个输入发生冲突的几率为1:2^21(从维基百科的MD5密码分析中得出最坏的情况)
- 再次散列会导致发生碰撞的几率相等,因此第二轮碰撞的几率为1:2^20
- 因此,对于任何两个散列次数等于摘要熵的输入,都保证会发生冲突
对于其他哈希算法,我没有精确的数字,但我认为我所提出的所有观点都可以推广到其他哈希函数和单向/映射函数。它确实减少了熵 在Flajolet和Odlyzko的一篇论文中,一个定理(定理2)表明: 如果一个n位随机函数被迭代k次,则图像点的预期数量为(1-t_k)*2^n(对于大n),其中t_k满足递归关系t_0=0和t_{k+1}=e^{-1+t_k}。由此可以看出,当一个随机函数被迭代k=2^i次时,图像点的预期数量为2^{n-i+1} 其他参考资料如下:
- Gligoroski,D.和Klima,V.,2010年9月。理想随机函数窄管道散列设计畸变的实际后果。信息和通信技术创新国际会议(第81-93页)。施普林格柏林海德堡
- Bhumik,R.,Dutta,A.,Guo,J.,Jean,J.,Mouha,N.和Nikolić,I.,2015年
- Dinur,I.和Leurent,G.,2014年8月。改进了针对基于哈希的Mac和HAIFA的通用攻击。国际密码学会议(第149-168页)。施普林格柏林海德堡