-1

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

我知道我是对的,这是完全不安全的,但我无法正确地用语言表达并详细谈论这个主题,并且很想了解更多谢谢。

4

1 回答 1

3

简短的回答是 MD5(MD5(pw)) 作为密码哈希很糟糕,因为:

  1. 你没有使用盐
  2. 它很快

如果您不是将 MD5 迭代两次而是一百万次,并且您将包含一个盐,那么它将是一个不错的密码哈希。

无关紧要的是 MD5 的加密弱点,因为这些弱点不适用于密码散列。特别是碰撞攻击在这里并不重要,攻击者需要能够发起第一次原像攻击。简单地将 MD5 换成 SHA-2 也不会给您带来太多好处,因为它仍然快速且无盐。

正确的答案是使用标准的密码散列结构,例如 PBKDF2、bcrypt 或 scrypt。

几个相关的问题:


两次散列确实解决了一件事:它可以防止针对所有Merkle–Damgård散列的长度扩展攻击。这就是为什么有人提倡SHA256(SHA256(m))。但通常 HMAC 在这些情况下是更好的选择,这不适用于密码散列。

于 2013-06-22T16:58:18.307 回答