Rfc2898DeriveBytes和Sha2哈希生成哪个更适合用于密码?

4

我最近了解到使用SHA256生成盐值密码的哈希方法。在阅读有关盐值密码和安全性的内容后,我发现.NET中有rfc2898derivebytespasswordderivebytes类。相比于常规哈希方法(生成盐值、生成盐值密码并将两者存储在数据库中),使用rfc2898derivebytes类是否有任何优势?

1个回答

7

标准哈希算法(例如SHA256)可以在现代硬件上非常快地生成。

这通常被认为是一件好事,但也有一个缺点:试图破解您密码的不良分子也可以非常快速地生成这些哈希值,这意味着他们可以使用暴力破解相对容易地发现您的密码。

密钥派生算法,如bcryptPBKDF2(又名Rfc2898DeriveBytes),比标准哈希算法慢得多。它们在内部使用标准哈希算法——在Rfc2898DeriveBytes中为SHA1——但会迭代数千次来生成派生密钥。

因此,尽管使用迭代式密钥派生算法需要进行更多工作才能生成“哈希”,但试图破解您密码的不良分子也必须做更多的工作。这是一件好事。

Rfc2898DeriveBytes 类允许您指定要使用的迭代次数(我认为默认值为 1,000)。使用更多的迭代次数,将使攻击者使用暴力破解更难破解您的密码。

谢谢。问题解决了。不过还有一件事,这只意味着 PBKDF2 生成只在生成(用户帐户创建)期间变慢,还是我也会用它来验证用户登录? - Bahamut
在创建和登录期间会很慢(因为您需要在将其与存储的密钥进行比较之前从输入的密码重新生成密钥)。使用像PBKDF2这样的迭代算法需要权衡;尝试使用您可以承受的最大迭代次数,尽管只有您可以决定这是什么(由您的机器负载、用户准备接受的延迟等确定)。 - LukeH
请问您的解释是否得出以下结论:仅仅因为它进行了几千个操作,所以PBKDF2比SHA256更好?在我的电脑上,SHA256的计算速度大约快5倍,那么如果我计算500K的SHA256而不是100K的PBKDF2,安全性是否相同?谢谢! - Mar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接