Bcrypt(4)(= 4次迭代)与SHA512或每个密码的唯一盐不同的东西?

Suz*_*uzy 5 php passwords cryptography password-protection bcrypt

背景:

我想添加一个登录到我的小网站,这是一个在线php应用程序,我想建立,以便将来能够承担很多用户活动.

在我进一步研究实现LightOpenID之前,我想添加一个正常的登录.我正在学习的这本书名为Head First PHP&MySQL(2008),本章的最终代码SHA('$user_password')用作mysql查询的一部分.

当我对Jeff Atwood的写作感兴趣时,我很清楚bcrypt的scrypt.但是看到没有scrypt的php实现并且没有专用服务器来运行它,我决定至少考虑实现bcrypt.

但是我并不完全天真,我知道我应该注意不要过度扩展我非常谦逊的托管资源.php应用程序本身应始终先出现在资源之前.

Andrew Moore的方法看起来不错(虽然我必须看看如何在我的主机使用的php 5.2.17上实现它)并且它附带了硬件速度提示:

您应该选择导致200-250毫秒工作的轮数.bcrypt安全的部分原因是它很慢.你必须确保有一些保持这种特性的回合. - 安德鲁摩尔

另一个用户表示,对于他来说,跑步microtime()给予Bcrypt(9)0.314,因此接近最佳状态.

问题:

看来我只有非常谦逊的资源可供我使用,我想充分利用它们,留下最多的PHP应用程序本身,我还是更好地使用Bcrypt(4)而不是其他东西?

Bcrypt(4)几乎立即返回true,但是它仍然保留了Moore所说的那个特性吗?(这会是关于RAM的部分会让GPU更难实现吗?)或者SHA512 或其他什么实际上会更快但更安全在此刻?

我希望Bcrypt(4)在这种情况下获胜,但我知道对吗?:p

Cho*_*per 5

安全始终是您要保护的内容.

如果您更关心资源而不是安全性,那么bcrypt(2)已经过度.没有黑客会试图打破正常应用程序,拥有更容易的目标网站,如LinkedIn和许多其他人,只需使用sha系列中的函数,只需一次迭代,并保持不变.他们会选择"低悬的果实".或者他们可以继续尝试破解您的应用程序,而不是密码加密部分.

SHA-512作为密码哈希算法[1]并不比SHA-1安全得多,它并不是为此目的而设计的.它们仍然可以用作创建安全加密算法的原语,但这不是一个人应该做的事情.为了被认为是安全的,加密算法必须公开才能进行同行评审,并且必须通过时间测试.显然,必须针对您将要使用它们进行设计.MD5,SHA-X等是加密算法,但不是为存储密码而设计的.

只需在您的bcrypt中添加或删除回合即可.在这种情况下,我会使用1或2.还要记住1轮!= 1次迭代.它们呈指数增长.如果你读到bcrypt如何工作,你会发现除了迭代之外还有更多内容.例如,您提到了"每个密码的唯一盐".Bcrypt已经有了.

[1]对于其他事情,它显然更安全

  • "SHA-512并不比SHA-1安全得多,它的设计并非如此."**这是不正确的**.尽管SHA-512使用与SHA-1类似的技术,但是一轮SHA-512的内部工作更复杂,更难以破解.内部块大小和输出大小也已扩展.为什么你认为他们首先设计了SHA-2系列?它不是速度,SHA-1比任何SHA-2算法都快. (2认同)
  • @ChocoDeveloper由于我所指出的信息不正确,我正在低估.这是一个关于安全性的问题,您的建议应该考虑到这一点.我不是试图以任何方式打击你,如果你改变或更新信息,我会很高兴.例如,您可以指出使用SHA-1或SHA-2对于密钥派生函数来说并不是那么重要,而不是"SHA-512不比SHA-1安全得多"的一揽子声明.你的答案肯定是正确的. (2认同)