2013年在IRC上发表论据。
[05:54] <Minus> i use md5* 2
[05:55] <notCIA> you mean you put it back into the md5?
[05:55] <Minus> then sha1 it
[05:55] <notCIA> like md5(md5($pw))?
[05:55] <Minus> yep
[05:55] <notCIA> youre feeding 32 bytes into an output of 32 bytes
[05:55] <notCIA> you have only made it less secure
[05:55] <Minus> md5 is nots weak
我知道我是对的,这是完全没有安全感的,但是我无法正确地说出这个主题,并且很想说明这一点。我很想知道更多的感谢。
答案 0 :(得分:3)
简短的回答是MD5(MD5(pw))作为密码哈希很糟糕,因为:
如果你不是两次但不是一百万次迭代MD5并且你加了一个盐,它就是一个不错的密码哈希。
MD5的加密弱点非常重要,因为那些不适用于密码散列。特别是碰撞攻击在这里并不重要,攻击者需要能够完成第一次前映像攻击。简单地将MD5换成SHA-2也不会让你受到太大的影响,因为它仍然是快速且无懈可击的。
正确的答案是使用标准密码哈希结构,如PBKDF2,bcrypt或scrypt。
一些相关问题:
Hashing两次确实解决了一件事:它可以防止长度扩展攻击,这些攻击对所有Merkle–Damgård哈希都有效。这就是为什么有人提倡SHA256(SHA256(m))。但通常HMAC在这些情况下是更好的选择,这不适用于密码散列。