每当我将config.stretches = 20
放入config/initializers/devise.rb
时,服务器就会超时加密请求。
恢复时间可以承受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
加密器。
答案 0 :(得分:6)
这是预期的行为(特别是对于bcrypt而言可以说更好)。此值的唯一目的是降低性能以提高安全性。
在散列时你不希望速度,因为这允许攻击者在给定的时间跨度内尝试更多的东西。本文解释了这一点:http://codahale.com/how-to-safely-store-a-password/。
在设计中,延伸用于更高地调整工作因子,以便密码花费很长时间来散列。可配置性是必要的,原因有两个:1)不同的应用程序具有不同的可接受性能特征; 2)随着计算机速度的提高,您应该能够增加工作因子以保持相同的性能。
我们的想法是,您应该将此值配置为尽可能高,同时保持可接受的性能。目标不是让登录需要60秒,而是需要花费超过一微秒或两秒。如果您可以找到延伸的值,这会将请求减慢到大约200毫秒左右,那么这可能就是您想要的位置。
答案 1 :(得分:6)
事实证明我没有在我的模型中指定:encryptable
选项,并且Devise默默地忽略了config.encryptor
设置,并且确实使用了bcrypt,这在20时确实很慢延伸。