16-char 和 32-char md5 的冲突可能性
collision possiblity of 16-char and 32-char md5
我知道 16-char md5 字符串是 32-char md5 字符串的第 8 个和第 24 个字符,
例如:
469e80d32c0559f8
7fef6171469e80d32c0559f8
8b377245
我的问题是:给定两个不同的字符串,计算它们的16和32 md5,它们16 md5的碰撞可能性是否比32 md5大得多?或者它们是一样的。
谢谢。
冲突是指两个不同的消息 m1 和 m2 的散列值相同的情况,即 hash(m1) = hash(m2)。
hash(m)函数的输出越长,碰撞的可能性越低。例如,让我们考虑一种情况,当函数 hash(m) 应该将消息 m 映射到一个位时,即它可以只映射到 0 或 1。那么冲突风险会非常高。 :)
然后是散列函数质量的问题。对于所有消息,它应该以相同的概率将消息映射到值。对于 MD5,情况并非如此,某些值的使用频率更高。这增加了碰撞风险。 MD5 存在严重缺陷,如生日攻击。
我们知道 (http://www.faqs.org/rfcs/rfc4270.html) 可以在家用 PC 上成功攻击 MD5。最好切换到 SHA-1。 Microsoft 推荐 SHA256 或 SHA512。
如果 MD5 是一个完美的哈希函数(它不是),那么其十六进制字符串中的每个字符都将是一个从 0 到 15 的随机数。因此,16 个字符的哈希值的碰撞概率为 16-16 = 1 in 1.8×1019,第32个字符的碰撞概率为16-32 = 1 in 3.4×1038,可能性很小。请注意 birthday paradox 适用;在一组只有 4.3×109 个具有较短哈希值的项目中,您有大约 50% 的机会发生碰撞;这是可能的哈希总数的平方根。
但是,由于 MD5 不是一个好的散列函数,因此有可能故意制造冲突。考虑更强的哈希。
我知道 16-char md5 字符串是 32-char md5 字符串的第 8 个和第 24 个字符, 例如:
469e80d32c0559f8
7fef6171469e80d32c0559f8
8b377245
我的问题是:给定两个不同的字符串,计算它们的16和32 md5,它们16 md5的碰撞可能性是否比32 md5大得多?或者它们是一样的。
谢谢。
冲突是指两个不同的消息 m1 和 m2 的散列值相同的情况,即 hash(m1) = hash(m2)。
hash(m)函数的输出越长,碰撞的可能性越低。例如,让我们考虑一种情况,当函数 hash(m) 应该将消息 m 映射到一个位时,即它可以只映射到 0 或 1。那么冲突风险会非常高。 :)
然后是散列函数质量的问题。对于所有消息,它应该以相同的概率将消息映射到值。对于 MD5,情况并非如此,某些值的使用频率更高。这增加了碰撞风险。 MD5 存在严重缺陷,如生日攻击。
我们知道 (http://www.faqs.org/rfcs/rfc4270.html) 可以在家用 PC 上成功攻击 MD5。最好切换到 SHA-1。 Microsoft 推荐 SHA256 或 SHA512。
如果 MD5 是一个完美的哈希函数(它不是),那么其十六进制字符串中的每个字符都将是一个从 0 到 15 的随机数。因此,16 个字符的哈希值的碰撞概率为 16-16 = 1 in 1.8×1019,第32个字符的碰撞概率为16-32 = 1 in 3.4×1038,可能性很小。请注意 birthday paradox 适用;在一组只有 4.3×109 个具有较短哈希值的项目中,您有大约 50% 的机会发生碰撞;这是可能的哈希总数的平方根。
但是,由于 MD5 不是一个好的散列函数,因此有可能故意制造冲突。考虑更强的哈希。