2011-12-23 46 views
4

可能重复:
Is “double hashing” a password less secure than just hashing it once?多次加密密码真的会让它更安全吗?

所以,我就确保PHP网站阅读的文章,他们建议哈希密码多次,其实,这是从直接引文章:

md4(md4(md5(sha1(md4(md5(sha1(sha1($_POST['password'])))))))); 

现在,我个人一般在我的密码上使用盐渍的SHA-256哈希,因为我认为t帽子MD4和MD5不再安全,多次散列密码只会给服务器带来太多的压力,没有实际的好处。那是对的吗?

+1

通常建议使用带有密钥的HMAC方法以及该用户特有的盐。 http://php.net/manual/en/function.hash-hmac.php – dqhendricks 2011-12-23 00:09:16

+0

当人们将我的问题标记为可能的重复时,通常会困扰我,但该链接实际上非常有用。 – Bhaxy 2011-12-23 00:26:34

回答

2

由于PHP中没有md4()函数,文章中的直接引用不起作用。然后它仍然没有意义。

通常应用多个哈希函数不会受到伤害。但是当你从sha1md5你失去了输入范围(md5给你128位输出,但sha1是160位长)。这是对缩短的摘录进行重新编排,这意味着可能的输出集合永远不会比md5()大。

1

有点。如果目标是要真正获得原始密码,那么这是一项不可能完成的任务。然而,通常情况并非如此,如果你真的使用md4作为最外层散列,那么...... http://en.wikipedia.org/wiki/MD4#Security

还有很多其他方法可以提高安全性,其中最基本的就是使用某种随机盐不随密码一起存储。

1

你可以做的最好的事情来保护一个密码是1)使用SHA-256或以上的hash_hmac 2)使用每个用户随机随机数并将其存储在数据库3)使用每个用户随机迭代计数并将其存储数据库也是如此。

你也应该阅读:Secure hash and salt for PHP passwords

1

如果您不能散列你的密码的数万次,你不知道自己在做什么。

This is computuallyly expensive;这就是我想说的。为了验证具有正确密码的用户的合法目的,负载是微不足道的。但是对于一个试图在离线攻击中测试大量密码的黑客来说,成本太高了。

使用数千次散列函数迭代是一种成熟且广泛使用的“密钥加强”技术。它被加入到密钥派生的标准中,并用于像bcrypt这样的密码保护算法。

使用bcrypt或PBKDF2,这将需要您使用salt和迭代。不要试图用一些破碎的哈希来弥补自己的方法。

+1

考虑改写这个答案。当在两种不同算法(即'md5(sha1(...))')之间跳动时,多次散列实际上削弱了安全性。 – FtDRbwLXw6 2011-12-23 03:27:20

+0

是否有任何公认的协议可以在两种算法之间反弹? – erickson 2011-12-23 06:39:07