我一直在阅读关于Gawker事件的文章,有几篇文章提到只使用bcrypt来哈希密码,我想确保我的哈希机制足够安全,以避免切换到另一种方法。在我的当前应用程序中,我选择了一个PBKDF2实现,利用sha2-512和至少1000次迭代。 我能否询问使用PBKDF2与Bcrypt的意见,以及是否应该实施更改?
截至2022年,最好使用内存加强函数(例如scrypt或Argon2)。Bcrypt也可以是一种选择,但它不是内存加强的。至于PBKDF2,建议在2000年时使用1000次迭代,现在需要更多。此外,在使用bcrypt时应更加小心:值得注意的是,虽然对于大多数类型的密码来说bcrypt比PBKDF2更强大,但对于长的口令短语而言,它则落后了;这是因为bcrypt无法使用超过口令短语的前55个字符。尽管我们估计的成本和NIST的口令熵估计表明bcrypt的55个字符限制目前不太可能引起问题,但依赖于bcrypt的系统实现者可能会明智地绕过这个限制(例如,通过“预哈希”口令短语使其适合55个字符的限制),或者采取措施防止用户在第56个及其后面的字符中放置太多的口令熵(例如,通过要求网站的用户将其密码输入只有空间容纳55个字符的输入框中)。从scrypt论文[PDF]中可以看到:http://www.tarsnap.com/scrypt/scrypt.pdf 话虽如此,还有scrypt。任何比较都不完整,如果没有上述提到的scrypt论文中的表格:其中PBKDF2-HMAC-SHA256的迭代计数分别为86,000和4,300,000。这张表格显示了一年内破解密码所需的硬件估计成本。
关于标题的评论: 除非必须,否则不要使用加密(可逆)来存储密码。 既然您提出了散列(不可逆)作为一种替代方案,我认为您不需要可逆性。 对于 PBKDF2 和 Bcrypt 的使用意见以及是否应该实施更改? 我的看法: 使用 PBKDF2 而非 Bcrypt。 (我只是比较相信 SHA 胜过 Blofish,没有任何理由) 至于是否应该“实施更改”,我不知道您在问什么。 已编辑以更清晰地将加密/哈希讨论与表述算法偏好分开。
char
更容易被破解。 - Can H. Tartanoglu