【发布时间】:2012-11-03 19:51:08
【问题描述】:
我最近知道使用 SHA256 为加盐密码生成密码哈希。在阅读了一些关于加盐密码和安全性的内容后,我在 .NET 中看到了 rfc2898derivebytes 和 passwordderivebytes 类。使用rfc2898derivebytes 类比通常的散列方法(生成盐,生成盐密码,都存储在数据库中)有什么优势吗?
【问题讨论】:
我最近知道使用 SHA256 为加盐密码生成密码哈希。在阅读了一些关于加盐密码和安全性的内容后,我在 .NET 中看到了 rfc2898derivebytes 和 passwordderivebytes 类。使用rfc2898derivebytes 类比通常的散列方法(生成盐,生成盐密码,都存储在数据库中)有什么优势吗?
【问题讨论】:
在现代硬件上可以极快地生成标准哈希,例如 SHA256。
这通常被认为是一件好事,但也有一个缺点:试图破解您密码的坏人也可以极快地生成这些哈希值,这意味着他们可以使用蛮力相对轻松地发现您的密码。
诸如bcrypt 和PBKDF2(又名Rfc2898DeriveBytes)之类的密钥派生算法比标准哈希算法慢。他们在内部使用标准哈希算法——Rfc2898DeriveBytes 的情况下为 SHA1——但他们迭代数千次以生成派生密钥。
因此,尽管您的机器需要做更多的工作来使用迭代密钥派生算法生成“哈希”,但试图破解您密码的坏人也需要做更多的工作。这是一件好事。
Rfc2898DeriveBytes 类允许您使用specify the number of iterations to use(我认为默认值为 1,000)。您使用的迭代次数越多,攻击者就越难使用暴力破解您的密码。
【讨论】: