2010-12-13 133 views
15

我一直在阅读有关Gawker事件,并且有几篇文章关于仅使用bcrypt来哈希密码冒出来,我想确保我的哈希机制足够安全避免切换到另一种方法。在我目前的应用程序中,我选择了使用sha2-512和最少1000次迭代的PBKDF2实现。密码加密:PBKDF2(使用sha512 x 1000)vs Bcrypt

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

回答

27

你对PBKDF2很好,不需要跳到bcrypt。

尽管在2000年推荐使用1000次迭代,但现在您还需要更多。

此外,你应该使用bcrypt时多加小心:

还值得一提的是,虽然bcrypt比PBKDF2强于大多数类型的密码,它落后于长密码短语;这是由于bcrypt无法使用密码的前55个字符,而我们的估计成本和NIST的。密码熵的估计表明bcrypt的55个字符的限制不是可能导致当前问题的系统,依赖于加密的系统的实现者可能被建议或者绕过这个限制(例如,通过“预处理”一个密码,以使其适合55个字符的限制)或采取步骤 防止用户在第56个字符和后续字符中放置太多密码熵(例如,通过询问网站的用户将他们的密码输入到输入 只有55个字符的空格)。

From scrypt paper [PDF]

这就是说,有也scrypt

任何比较将是不完整不脱离scrypt纸上面提到的表:

Estimated cost of hardware to crack a password in 1 year.

为PBKDF2-HMAC-SHA256迭代计数使用有86000和4300000。

+5

“要求网站用户将密码输入到只有55个字符的输入框中。”我很抱歉,但这如何适用于现实世界?我几乎不能提供8个字符的密码。 – m33lky 2012-03-03 22:39:36

+6

我认识一个使用伟大的国际象棋游戏序列作为密码的人。他将这些序列与玩家姓名,日期,所玩城市等进行了盐化。我知道另一个使用史诗诗歌的人,并引入了故意的错误。有很多方法可以获得长密码。 – Cheeso 2012-06-08 06:24:47

+1

应该注意的是,scrypt文件中有一个错误,并且bcrypt的实际算法截止值为72个字符。所以仍然有一个临界值,但它有128位的熵。这是非常重要的。 – ircmaxell 2013-11-26 22:01:13

-7

评论(RE:标题):

  • 不要使用加密(可逆)来存储密码,除非你必须。
  • 既然你提出了一个哈希(不可逆)选项作为替代,我假设你不需要可逆性。使用PBKDF2 VS Bcrypt

意见和 我是否应该实施 变化?

我的看法:

使用PBKDF2超过Bcrypt。 (我对SHA的信心比Blofish更强,无缘无故)

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

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

+0

“执行更改”意思是将脚本转换为使用bcrypt而不是PBKDF2算法。 – buggedcom 2010-12-14 08:22:37

+4

我不相信bcrypt是加密。它是基于BLOWFISH的单向哈希机制 – buggedcom 2010-12-14 08:23:37

+0

BCrypt *是一种哈希算法。 – 2010-12-15 20:03:21