我一直在阅读有关 Gawker 事件的文章,并且出现了几篇关于仅使用bcrypt来散列密码的文章,我想确保我的散列机制足够安全以避免切换到另一种方法。在我当前的应用程序中,我选择了使用 sha2-512 和至少 1000 次迭代的PBKDF2实现。
我可以就使用 PBKDF2 与 Bcrypt 以及是否应该实施更改征求意见吗?
从 2022 年开始,最好切换到内存硬函数,例如 scrypt 或 Argon2。Bcrypt 也可能是一种选择,但它并不难记忆。
至于 PBKDF2,使用 1000 次迭代的建议是在 2000 年提出的,现在您想要更多。
此外,使用 bcrypt 时应更加小心:
还值得注意的是,虽然 bcrypt 对于大多数类型的密码都比 PBKDF2 更强,但它在长密码短语方面落后;这是由于 bcrypt 无法使用超过密码短语的前 55 个字符而我们估计的成本和 NIST 的 . 对密码短语熵的估计表明,bcrypt 的 55 个字符的限制目前不太可能导致问题,依赖 bcrypt 的系统的实现者可能会很好地解决这个限制(例如,通过“预散列”密码短语到使其符合 55 个字符的限制)或采取措施防止用户在第 56 个和后续字符中放置过多的密码熵(例如,通过要求网站用户在只有空格的输入框中输入密码55 个字符)。
也就是说,还有scrypt。
如果没有上述 scrypt 论文中的表格,任何比较都是不完整的:
使用的 PBKDF2-HMAC-SHA256 的迭代次数为 86,000 和 4,300,000。
评论(回复:标题):
关于使用 PBKDF2 与 Bcrypt 的意见以及我是否应该实施更改?
我的意见:
在 Bcrypt 上使用 PBKDF2。(我只是比 Blofish 更相信 SHA,无缘无故)
至于你是否应该“实施改变”,我不知道你在问什么。
编辑以更清楚地将加密/散列讨论与陈述我的偏好 w/r/t 算法分开。