【问题标题】:Rfc2898DeriveBytes vs Sha2 hash generation for passwords用于密码的 Rfc2898DeriveBytes 与 Sha2 哈希生成
【发布时间】:2012-11-03 19:51:08
【问题描述】:

我最近知道使用 SHA256 为加盐密码生成密码哈希。在阅读了一些关于加盐密码和安全性的内容后,我在 .NET 中看到了 rfc2898derivebytespasswordderivebytes 类。使用rfc2898derivebytes 类比通常的散列方法(生成盐,生成盐密码,都存储在数据库中)有什么优势吗?

【问题讨论】:

    标签: .net security passwords


    【解决方案1】:

    在现代硬件上可以极快地生成标准哈希,例如 SHA256。

    这通常被认为是一件好事,但也有一个缺点:试图破解您密码的坏人也可以极快地生成这些哈希值,这意味着他们可以使用蛮力相对轻松地发现您的密码。

    诸如bcryptPBKDF2(又名Rfc2898DeriveBytes)之类的密钥派生算法比标准哈希算法。他们在内部使用标准哈希算法——Rfc2898DeriveBytes 的情况下为 SHA1——但他们迭代数千次以生成派生密钥。

    因此,尽管您的机器需要做更多的工作来使用迭代密钥派生算法生成“哈希”,但试图破解您密码的坏人也需要做更多的工作。这是一件好事。

    Rfc2898DeriveBytes 类允许您使用specify the number of iterations to use(我认为默认值为 1,000)。您使用的迭代次数越多,攻击者就越难使用暴力破解您的密码。

    【讨论】:

    • 谢谢。清除问题。不过还有一件事,这只意味着 PBKDF2 的生成只是在生成过程中很慢(用户帐户创建),还是我也会使用它来验证用户登录?
    • 在创建登录过程中会很慢(因为您需要先从输入的密码重新生成一个密钥,然后再将其与存储的密钥进行比较)。使用像 PBKDF2 这样的迭代算法需要权衡取舍;尝试使用您可以承受的最大迭代次数,尽管只有您可以决定那是什么(由您的机器上的负载、您的用户准备接受的延迟等决定)。
    • 我是对的,您的解释得出的结论如下:PBKDF2 only 优于 SHA256,因为它进行了数千次操作?在我的计算机上,SHA256 计算速度大约快 5 倍,所以如果我计算 SHA256 的 500K 而不是 PBKDF2 的 100K,它是否同样安全?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-05-12
    • 2016-02-06
    • 2014-02-24
    • 2018-12-20
    • 1970-01-01
    • 2012-03-19
    • 2017-10-15
    相关资源
    最近更新 更多