【发布时间】:2015-09-02 03:03:41
【问题描述】:
我在一家游戏公司,我们使用md5算法来做收费顺序检查。
我们是这样做的:
在支付中心服务器和我们的游戏服务器上都有一个共同的“密钥”。
支付中心向我们的游戏服务器发送添加游戏币的请求。
其中有很多常规参数和一个名为“sign”的特殊参数当我们在游戏服务器上收到请求时,我们使用 md5("所有常规参数" + "密钥") 来产生结果。
如果结果等于“sign”参数,我们会认为这个收费订单是有效的。
我的问题是:
如果有人盲目地使用随机生成的“伪密钥”来使用所有其他参数进行 md5 计算以产生符号。
巧合的是,他用他的“伪密钥”之一做了一个有效的标志。
他需要多少次尝试为每组“常规参数”生成一个有效符号?
当
pseudo-secret-key恰好产生一个有效的sign时,有多少机会与我原来的secret-key相同?-
如果
李>pseudo-secret-key与我原来的secret-key不同,是否几乎不可能使用pseudo-key使用conventional parameters的其他不同组合来生成有效符号?
【问题讨论】:
-
这有什么意义?您不能只更新到更安全的哈希函数吗?那能有多贵(开发成本方面)?如果您要提交任何类型的安全审计,支付处理功能中的 MD5 将不受欢迎。我并不是在争论盲目地遵循清单,但是 MD5 确实已经被弃用了。
-
这不是一个真正的编码问题 - 没有示例代码,没有明显的错误 - 它可能更适合 crypto.stackexchange.com 或 security.stackexchange.com
-
@Thilo,我们必须与许多其他 sdk 支付中心打交道,而且几乎所有这些支付中心都使用 md5() 进行加密。
-
在 MD5 中产生故意碰撞已有十多年的可能:security.stackexchange.com/a/15819/1427 - 也许他只需要尝试一次? md5() 不是加密...
标签: algorithm hash hashmap md5 secret-key