代码之家  ›  专栏  ›  技术社区  ›  Jakub Å turc

MD5和序列号

  •  1
  • Jakub Å turc  · 技术社区  · 16 年前

    我有一些序列号,很容易猜出来。如果有人想查看与这个ID相关的数据,他必须通过我之前给他的令牌来证明他的访问权限。

    token = md5(secret_key + md5(id))
    

    MD5是否足以胜任这项工作?

    6 回复  |  直到 16 年前
        1
  •  5
  •   ewanm89    16 年前

    从技术上讲,在连接之前甚至不需要MD5 ID来保证足够的安全性。

    但是,我通常建议使用sha-256或sha-512,除非有一些严重的性能问题(比如嵌入式编程)。

        2
  •  3
  •   Bill the Lizard    16 年前

    这真的取决于你想保护什么,但可能不是。我看不出任何原因 使用更强大的哈希函数。

        3
  •  3
  •   Accipitridae    16 年前

    假设这是用于身份验证,我将使用 HMAC . 参见例如 FIPS PUB 198 .例如,这允许您使用安全哈希函数(而不是MD5),按照说明截断结果,仍然可以获得安全令牌。

        4
  •  2
  •   austin cheney    16 年前

    不要使用MD5。它坏了。我不能相信所有人的Verisign仍然使用MD5。有测试套件可用于确定MD5的哈希冲突,以用于中断MD5哈希比较。

    绝对最低限度地使用sha-1。我建议使用SHA-5。

        5
  •  1
  •   Eric J.    16 年前

    如果可以很容易地猜到ID,那么除非密钥很长,否则这并不是很安全。

    对于6个字符的密钥,我的电脑可以在大约一天的时间内基于MD5强制一个密钥值。能够使用更快/更多计算机的人可以大大减少这一时间。对于键中的每个额外数字,中断时间增加10倍。由于ID很容易被猜到,因此它是MD5值的计算结果,因此它不会增加反向获取密钥的难度。

        6
  •  1
  •   Robert Venables    16 年前

    我建议使用其他解决方案,或者(如果不可接受)向MD5生成例程中添加更多数据。如果您的密钥是常量,并且我能够反向工程一个哈希,那么我可以为任何其他ID生成正确的密钥。

    如果您将数据中存储的随机salt加上当前时间(如果与您正在保护的记录相关联)构建到MD5生成中,那么它将显著增加攻击的难度。

    参见:

    http://www.freerainbowtables.com/