【问题标题】:A few questions about md5 collision in production关于生产中md5碰撞的几个问题
【发布时间】:2015-09-02 03:03:41
【问题描述】:

我在一家游戏公司,我们使用md5算法来做收费顺序检查。

我们是这样做的:

  1. 在支付中心服务器和我们的游戏服务器上都有一个共同的“密钥”。

  2. 支付中心向我们的游戏服务器发送添加游戏币的请求。
    其中有很多常规参数和一个名为“sign”的特殊参数

  3. 当我们在游戏服务器上收到请求时,我们使用 md5("所有常规参数" + "密钥") 来产生结果。
    如果结果等于“sign”参数,我们会认为这个收费订单是有效的。


我的问题是:

如果有人盲目地使用随机生成的“伪密钥”来使用所有其他参数进行 md5 计算以产生符号。
巧合的是,他用他的“伪密钥”之一做了一个有效的标志。

  1. 他需要多少次尝试为每组“常规参数”生成一个有效符号?

  2. pseudo-secret-key 恰好产生一个有效的sign 时,有多少机会与我原来的secret-key 相同?

  3. 如果pseudo-secret-key 与我原来的secret-key 不同,是否几乎不可能使用pseudo-key 使用conventional parameters 的其他不同组合来生成有效符号?

    李>

【问题讨论】:

  • 这有什么意义?您不能只更新到更安全的哈希函数吗?那能有多贵(开发成本方面)?如果您要提交任何类型的安全审计,支付处理功能中的 MD5 将不受欢迎。我并不是在争论盲目地遵循清单,但是 MD5 确实已经被弃用了。
  • 这不是一个真正的编码问题 - 没有示例代码,没有明显的错误 - 它可能更适合 crypto.stackexchange.comsecurity.stackexchange.com
  • @Thilo,我们必须与许多其他 sdk 支付中心打交道,而且几乎所有这些支付中心都使用 md5() 进行加密。
  • 在 MD5 中产生故意碰撞已有十多年的可能:security.stackexchange.com/a/15819/1427 - 也许他只需要尝试一次? md5() 不是加密...

标签: algorithm hash hashmap md5 secret-key


【解决方案1】:

基本:md5 哈希结果是均匀分布的。这是 2 ^ 128 中的 1 的机会。

  1. 你无法确切知道他需要多少次尝试。但是,您可以在t 尝试中计算收集机会:1 - (1 - 1 / (2 ^ 128)) ^ t。例如,在 2^128 次尝试后,他有大约 1/3 的机会。
  2. 取决于您的密钥范围。
  3. 同样,机会是1/(2^128)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    相关资源
    最近更新 更多