从文件内容计算的MD5哈希的前4个字节会发生冲突的概率是多少?

Mar*_*rek 9 hash md5 cryptography combinatorics

这是一个组合学问题,需要一些哈希算法的理论.

假设输入可以是30 kB到5 MB大小的任意随机字节序列(我想这会产生很多输入值的组合:))

对于不同的文件,从字节序列计算的MD5哈希的前4个字节(或前n个字节)的概率是多少?

如果不能专门为MD5哈希计算,那么生成均匀分布的m字节哈希值的任何哈希函数在给定输入范围的前n个字节上计算哈希与冲突的概率是多少?

Kon*_*man 9

在没有关于字节值概率的更多信息的情况下,我想它在2 ^ 32中是1.

编辑.实际上,如果您使用的是十六进制字符而不是纯字节,那么1 ^ 2 ^ 16.

根据评论编辑:

可以认为MD5是统一的,计算值绝对是随机的吗?

MD5哈希算法的设计使得输入中的一个小变化导致完全不同的哈希,所以我会说MD5哈希字节以相同的概率分布(我不会在它上面打赌任何东西).无论如何,您可以对哈希应用后处理(例如,您可以使用键控MD5)来增加其随机性(并且使其更安全,顺便说一句,因为普通的MD5哈希已被证明是不安全的).

  • @Marek:生日悖论适用于集合,而不是成对.这里给出的机会对于一对文件是正确的.由于我们不知道总共有多少文件,因此总机会未知. (3认同)
  • 那么,它取决于"前4个字节",意味着第一个真正的4个字节或散列的十六进制表示的前4个数字. (2认同)