2012-04-19 66 views
1

我一直在安全地将密码存储在数据库中进行大量的研究,并且bcrypt似乎作为最安全的散列算法之一出现在所有地方,所以我可能会用它来存储我的网站密码(用PHP编写)。其中一个主要卖点似乎是它非常缓慢,因此有助于减缓蛮力/字典攻击。从字面上看,我读过的每篇文章都提到bcrypt是多么的棒,因为它速度很慢,因此可以防止暴力攻击。密码保护 - bcrypt与登录时强制延迟?

因此,我的问题是:使用PHP的sleep()无法手动让我的代码在登录失败后暂停一两秒钟?为什么bcrypt很慢很重要?我的印象是,我可以使用任何加密算法(让我们假设它的加密和bcrypt一样),在登录失败时添加一个PHP sleep(),并且对暴力/字典攻击同样有效bcrypt。

回答

2

bcrypt and 强制延迟登录防止两种不同的攻击。

登录时的强制延迟增加了针对在线攻击的保护,攻击者使用您的登录页面尝试使用不同的密码。

bcrypt增加保护,防止脱机攻击,在攻击者已经获得访问你的密码散列值和可以尝试哈希不使用登录页。

+0

这清理了很多东西,我看到我的困惑在哪里。谢谢 – NZHammer 2012-04-19 18:15:55

+6

强制延迟还可以防止对服务器的CPU *拒绝服务*攻击。 BCrypt的**是故意**昂贵的计算。让用户代理触发您的Web服务器验证数百,数千或数百万个密码,而不会中断,可能导致服务器CPU资源匮乏。 – 2012-06-07 14:16:59

+0

@IanBoyd:好点! – 2012-06-07 19:22:47