Rails 3设计停止更多加密“延伸”

时间:2011-05-08 21:07:09

标签: ruby-on-rails devise authlogic sha1 bcrypt

每当我将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加密器。

2 个答案:

答案 0 :(得分:6)

这是预期的行为(特别是对于bcrypt而言可以说更好)。此值的唯一目的是降低性能以提高安全性。

在散列时你不希望速度,因为这允许攻击者在给定的时间跨度内尝试更多的东西。本文解释了这一点:http://codahale.com/how-to-safely-store-a-password/

在设计中,延伸用于更高地调整工作因子,以便密码花费很长时间来散列。可配置性是必要的,原因有两个:1)不同的应用程序具有不同的可接受性能特征; 2)随着计算机速度的提高,您应该能够增加工作因子以保持相同的性能。

我们的想法是,您应该将此值配置为尽可能高,同时保持可接受的性能。目标不是让登录需要60秒,而是需要花费超过一微秒或两秒。如果您可以找到延伸的值,这会将请求减慢到大约200毫秒左右,那么这可能就是您想要的位置。

答案 1 :(得分:6)

事实证明我没有在我的模型中指定:encryptable选项,并且Devise默默地忽略了config.encryptor设置,并且确实使用了bcrypt,这在20时确实很慢延伸。