【问题标题】:Which of the .NET included hashing algorithms are suitable for password hashing?哪些 .NET 包含的散列算法适用于密码散列?
【发布时间】:2012-06-12 12:31:17
【问题描述】:

password leak of LinkedIn 证明了安全地散列密码的重要性。但是,即使使用“普通”哈希算法(例如 MD5 和 SHA 系列)对密码进行哈希处理也不安全,因为它们针对速度进行了优化,允许黑客每秒计算 23 亿次哈希(蛮力)。

有些哈希算法使用起来更安全,因为它们的计算量更大,例如PBKDF2Bcrypt、PBMAC 和scrypt。然而,这些散列算法似乎并未包含在 .NET 框架中。

那么,.NET 框架中包含哪些性能密集型哈希算法?

回答: PBKDF2 包含在框架中,this site shows how to use it properly

【问题讨论】:

  • 有趣的问题,由于同样的原因,我想知道同样的事情。 :)
  • 没有什么是“安全的”。您选择的安全性将始终与其他要求(如速度、内存使用率、CPU 利用率等)进行权衡。您认为“足够安全”是基于 您的 要求 - 您没有没有提供。
  • @PeterRitchie:这就是我提到“更安全的哈希算法”的原因,这就是问题所在。
  • @Peter Ritchie 虽然我通常都抱着“自己动手”的态度;在哈希函数或任何与安全相关的情况下,除非您真的知道自己在做什么,否则我强烈建议您不要这样做。只是说';)
  • 为什么这个问题被关闭了? .NET 框架中包含有限数量的散列算法,它们对密码散列的相对适用性是相当客观的。

标签: c# .net security hash


【解决方案1】:

【讨论】:

    【解决方案2】:

    没有 100% 安全的散列算法。 LinkedIn hack 更多是由于基础设施/代码安全而不是散列算法。可以计算任何散列,散列算法越复杂,它需要的时间越长。在更复杂的哈希上完成某些攻击(例如碰撞攻击)实际上并不会慢很多。

    我始终确保我散列密码(绝不只是加密),限制对服务器的访问。所有为我工作的开发人员都至少了解安全性的基础知识(sql 注入、溢出等),并且我工作的任何知名网站都经过了笔测试。

    【讨论】:

    • 我不认为 Steven 认为选择安全的散列算法可以保护他免受黑客攻击。但是,如果您的数据库访问受到损害,它确实可以保护他。 LinkedIn 使用了没有盐的 SHA1 (!!) 哈希 (!!);这太糟糕了。 Steven 想选择一个更安全的算法,他这样做是对的。显然,没有什么是 100% 安全的;您只能尝试使哈希在可行的时间内被暴力破解的可能性很小。
    • 好吧,我实际上想让我的用户列表可以从网站上公开访问,并包含散列密码,因为没有人可以解密它们。不,当然不是,开个玩笑:-P。 @Cloud 是绝对正确的,但错在我身上。我应该在我的问题中做得更好,说明我知道这一点,但这对我来说非常明显,很容易忘记。
    • 但是与linkedin 相比,攻击一个体面的哈希值至少要高出十亿倍。
    【解决方案3】:

    我认为这不是一个真正有意义的类名,但我确实认为它包含在 .NET 框架中。根据多个消息来源,Rfc2898DeriveBytes 实际上是一个 PBKDF2 实现。 MSDN 也是这么说的。

    Why do I need to use the Rfc2898DeriveBytes class (in .NET) instead of directly using the password as a key or IV?PBKDF2 implementation in C# with Rfc2898DeriveBytes

    例如。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-06
      • 2021-12-10
      • 1970-01-01
      • 2011-10-05
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      相关资源
      最近更新 更多