我有一些可以轻易猜到的顺序ID。如果有人想看到与这个id相关的数据,他必须通过我以前给过他的令牌来证明他的访问权。

token = md5(secret_key + md5(id))

MD5对这项工作是否足够好?

有帮助吗?

解决方案

从技术上讲,连接之前甚至不需要md5 id以确保足够安全。

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

其他提示

这实际上取决于你想要保护的东西,但可能不是。我认为没有任何理由使用更强的散列函数。

假设这用于身份验证,我会使用 HMAC 。例如,参见 FIPS PUB 198 。例如,这允许您使用安全散列函数(而不是MD5),按描述截断结果并仍然获得安全令牌。

不要使用MD5。它被打破。我无法相信所有人的VeriSign仍然使用MD5。有一些测试套件可用于确定MD5的哈希冲突,以用于破坏MD5哈希比较。

绝对最少使用SHA-1。我建议使用SHA-5。

如果ID很容易被猜到,除非密钥很长,否则这不是很安全。

对于6个字符的secret_key,我的电脑可以在大约一天内根据MD5强制执行secret_key值。能够访问更快/更多计算机的人可以大大缩短时间。对于密钥中的每个附加数字,中断时间增加10倍。由于可以很容易地猜到ID,因此计算出它的MD5值,因此不会增加反转的难度以获得secret_key。

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

如果您将存储有数据的随机盐以及当前时间(如果与您正在保护的记录相关联)构建到md5代中,那么它将大大增加攻击的难度。

请参阅:

http://www.freerainbowtables.com/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top