2012-11-15 100 views
3

我最近已经知道使用SHA256为密码生成密码哈希。在阅读了一些关于腌制密码和安全性之后,我在.NET中看到了rfc2898derivebytespasswordderivebytes类。使用rfc2898derivebytes类比通常的哈希方法有什么优势(生成盐,生成盐渍密码,存储在db中)?Rfc2898DeriveBytes与Sha2哈希密码生成

回答

4

标准散列,如SHA256,可以在现代硬件上快速生成。

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

密钥导出算法,如bcryptPBKDF2(又名Rfc2898DeriveBytes)是多比标准散列算法。他们在内部使用标准的散列算法 - 在Rfc2898DeriveBytes的情况下使用SHA1 - 但是它们迭代数千次以生成派生密钥。

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

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

+0

谢谢。清除问题。还有一件事,这只意味着PBKDF2世代在生成期间(用户帐户创建)只是缓慢的,还是我会用它来验证用户登录? – Bahamut

+0

在创建*和*登录过程中会很慢(因为您需要从输入的密码重新生成密钥,然后再将其与存储的密钥进行比较)。使用像PBKDF2这样的迭代算法需要权衡;尝试使用您可以支持的最大迭代次数,但只有您可以决定它是什么(由您的计算机负载,用户准备接受的延迟等决定)。 – LukeH

+0

我说得没错,从你的解释中得出的结论如下:PBKDF2比单纯的SHA256更好,因为它可以进行数千次操作?在我的计算机上,SHA256的计算速度大约快5倍,所以如果我计算的话,比如500K的SHA256而不是100K的PBKDF2,它的安全性会是相同的吗?谢谢! – Mar