如果我有一个 16 字节和 16 字节数据的盐,那么找到另一个 16 字节数据的速度有多快,以便 MD5(盐 + 数据)== MD5(盐 + 其他数据)?
我不指望一个精确到纳秒的答案,只是像“几秒钟”、“几个小时”、“几个文明”这样的估计。
如果我有一个 16 字节和 16 字节数据的盐,那么找到另一个 16 字节数据的速度有多快,以便 MD5(盐 + 数据)== MD5(盐 + 其他数据)?
我不指望一个精确到纳秒的答案,只是像“几秒钟”、“几个小时”、“几个文明”这样的估计。
你想要的不是碰撞,而是第二个原像。
冲突是:找到两个不同的消息m和m',它们的哈希值相同。
第二个原像是:给定一条消息m,找到一条不同的消息m'使得两条消息散列到相同的值。
第二个原像更难,因为攻击者不能随意选择两条消息。MD5 对碰撞非常不利(碰撞可以在不到一秒的时间内产生),但对第二个原像却没有。为此,最广为人知的攻击是一种通用的原像攻击,它只是理论上的,因为它的成本为 2 123.4,即比实际可以做的要高得多。
因此,对您的具体问题的原始答案是:无法做到(使用现有技术和已知的 MD5 攻击)。
(我在这里只谈论在 MD5 上找到第二个原像,而不是关于在任何特定上下文中使用 MD5(盐 + 数据)的安全性,无论“盐”和“数据”是否已知。我怀疑任何使用MD5(salt + data) 实际上需要密码散列函数或 HMAC。)