每当我在config / initializers / devise.rb中放置config.stretches = 20时,服务器就会超时加密请求.
重新开始时间可以承受15次延伸,然后随着我提高伸展值而迅速增加,并且在19时变得完全无法使用.我不太了解这个值可能造成的性能影响,但它当然不应该是指数级的,是我的经验.显然我不需要为除authlogic兼容性之外的任何东西提高此值,但无论如何它似乎都是错误的.
我用全新安装的https://github.com/plataformatec/devise_example/验证了这一点.
在Ubuntu 11.04,任何3.0.x rails版本,3.1.0.beta1,设计1.3.1和1.3.4,MysqL,pg,sqlite驱动程序上都会出现此行为.这适用于brcypt以及sha1加密器.
解决方法
这是预期的行为(特别是对于bcrypt来说,这可能更好).此值的唯一目的是降低性能以提高安全性.
在散列时你不想要速度,因为这允许攻击者在给定的时间跨度内尝试更多的东西.本文解释了这一点:http://codahale.com/how-to-safely-store-a-password/.
在设计中,延伸用于更高地调整工作因子,以便密码花费很长时间来散列.可配置性是必要的,原因有两个:1)不同的应用程序具有不同的可接受性能特征; 2)随着计算机速度的提高,您应该能够增加工作因子以保持相同的性能.
我们的想法是,您应该将此值配置为尽可能高,同时保持可接受的性能.目标不是让登录花费60秒,而是需要花费超过一微秒或两秒.如果您可以找到延伸的值,将请求减慢到大约200毫秒左右,那么这可能就是您想要的位置.