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
安全始终是您要保护的内容.
如果您更关心资源而不是安全性,那么bcrypt(2)已经过度.没有黑客会试图打破正常应用程序,拥有更容易的目标网站,如LinkedIn和许多其他人,只需使用sha系列中的函数,只需一次迭代,并保持不变.他们会选择"低悬的果实".或者他们可以继续尝试破解您的应用程序,而不是密码加密部分.
SHA-512作为密码哈希算法[1]并不比SHA-1安全得多,它并不是为此目的而设计的.它们仍然可以用作创建安全加密算法的原语,但这不是一个人应该做的事情.为了被认为是安全的,加密算法必须公开才能进行同行评审,并且必须通过时间测试.显然,必须针对您将要使用它们进行设计.MD5,SHA-X等是加密算法,但不是为存储密码而设计的.
只需在您的bcrypt中添加或删除回合即可.在这种情况下,我会使用1或2.还要记住1轮!= 1次迭代.它们呈指数增长.如果你读到bcrypt如何工作,你会发现除了迭代之外还有更多内容.例如,您提到了"每个密码的唯一盐".Bcrypt已经有了.
[1]对于其他事情,它显然更安全
| 归档时间: |
|
| 查看次数: |
1041 次 |
| 最近记录: |