【问题标题】:PasswordDeriveBytes functionPasswordDeriveBytes 函数
【发布时间】:2013-02-25 16:49:10
【问题描述】:

我正在使用 AES (Rijndael) 对称密钥算法来加密-解密数据。 我正在使用 System.Security.Cryptography。 PasswordDeriveBytes 函数;

        PasswordDeriveBytes password = new PasswordDeriveBytes(
                                                        passPhrase,
                                                        saltValueBytes,
                                                        hashAlgorithm,
                                                        passwordIterations);

在 MSDN 等上查找此函数,它并没有明确告诉您“hashAlgoritm”可以采用哪些参数。 互联网上有使用 SHA1 和 SHA256 的示例。我对此进行了实验,发现它可以采用 SHA512。 但是没有文档,我不知道 SHA512 是否真的比 SHA256 或 SHA1 甚至 MD5 更好。 有人能解释一下这个问题吗?

【问题讨论】:

  • MD5 几年前就坏了,所以不要使用那个!
  • PasswordDerivedBytes 只是生成从哈希派生的会话密钥。选择一个目前不知道在某些方面不安全的算法。
  • @PeterRichie 不同意,KDF 有其他安全要求
  • @PeterRitchie 密码哈希和通用哈希非常不同。所以其他问题显然不是重复的。

标签: c# .net encryption


【解决方案1】:

哈希方法的安全性对于密钥派生函数的重要性略低。最好选择与所需密钥大小匹配的密钥,尽管通常不鼓励使用 MD5。其他应用程序可能只使用 SHA-1。

请注意,PasswordDeriveBytes 已被弃用,当然不应将其用于大于散列大小的输出。改用 PBKDF2,见Rfc2898DeriveBytes

【讨论】:

  • 您是否有证据表明哈希算法的安全性对于密钥派生不太重要?
  • @PeterRitchie 1) 随机不可预测的盐可以阻止许多攻击,例如针对 MD5 的碰撞。寻找与随机盐的碰撞是一种普遍的多重碰撞形式,实现起来要困难得多。 2) 碰撞无关紧要。能够找到具有相同哈希值的两个密码的攻击者是没有用的。这将允许他使用两个不同的密码登录自己的帐户,但绝不允许他破解另一个帐户。
  • @CodesInChaos Salting 不是特定于算法的。
  • @PeterRitchie 哈希的安全性仍然至关重要:缺乏第一前映像抵抗将是对密码哈希的主要攻击。然后有一个密码哈希应该具有的属性,但通用哈希不应该:计算成本高,这会减慢暴力攻击。这弥补了典型密码的低熵。
  • @CodesInChaos Salting 可以防止碰撞,无论算法如何。如果您不考虑算法而加盐,那么它会立即回到哪个算法更安全。所以,你还没有回答为什么哈希算法的安全性对于密码哈希不那么重要......
猜你喜欢
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 2019-04-12
  • 1970-01-01
  • 2010-11-24
  • 2017-08-22
  • 1970-01-01
相关资源
最近更新 更多