17

我一直在阅读有关 Gawker 事件的文章,并且出现了几篇关于仅使用bcrypt来散列密码的文章,我想确保我的散列机制足够安全以避免切换到另一种方法。在我当前的应用程序中,我选择了使用 sha2-512 和至少 1000 次迭代的PBKDF2实现。

我可以就使用 PBKDF2 与 Bcrypt 以及是否应该实施更改征求意见吗?

4

2 回答 2

28

从 2022 年开始,最好切换到内存硬函数,例如 scrypt 或 Argon2。Bcrypt 也可能是一种选择,但它并不难记忆。

至于 PBKDF2,使用 1000 次迭代的建议是在 2000 年提出的,现在您想要更多。

此外,使用 bcrypt 时应更加小心:

还值得注意的是,虽然 bcrypt 对于大多数类型的密码都比 PBKDF2 更强,但它在长密码短语方面落后;这是由于 bcrypt 无法使用超过密码短语的前 55 个字符而我们估计的成本和 NIST 的 . 对密码短语熵的估计表明,bcrypt 的 55 个字符的限制目前不太可能导致问题,依赖 bcrypt 的系统的实现者可能会很好地解决这个限制(例如,通过“预散列”密码短语到使其符合 55 个字符的限制)或采取措施防止用户在第 56 个和后续字符中放置过多的密码熵(例如,通过要求网站用户在只有空格的输入框中输入密码55 个字符)。

来自 scrypt 论文 [PDF]

也就是说,还有scrypt

如果没有上述 scrypt 论文中的表格,任何比较都是不完整的:

1 年内破解密码的估计硬件成本。

使用的 PBKDF2-HMAC-SHA256 的迭代次数为 86,000 和 4,300,000。

于 2011-04-03T17:26:05.813 回答
-8

评论(回复:标题):

  • 除非必须,否则不要使用加密(可逆)来存储密码。
  • 由于您提供了一个散列(不可逆)选项作为替代方案,我假设您不需要可逆性。

关于使用 PBKDF2 与 Bcrypt 的意见以及我是否应该实施更改?

我的意见:

在 Bcrypt 上使用 PBKDF2。(我只是比 Blofish 更相信 SHA,无缘无故)

至于你是否应该“实施改变”,我不知道你在问什么。

编辑以更清楚地将加密/散列讨论与陈述我的偏好 w/r/t 算法分开。

于 2010-12-14T05:57:39.733 回答