2011-05-08 22 views
6

每当我将config.stretches = 20放在config/initializers/devise.rb中,服务器就会在加密请求上超时。Rails 3设计使用更多加密“延伸”来停止

收回时间在15段时间内是可承受的,然后在我提高延伸值时迅速增加,并在19时完全无法使用。我对这个值可能处理的性能影响不太了解,但肯定不应该是指数级的,这是我的经验。显然,除了authlogic兼容性外,我不需要提高此值,但似乎是错误的。

我用全新安装的https://github.com/plataformatec/devise_example/对此进行了验证。

在Ubuntu 11.04,任何3.0.x rails版本,3.1.0.beta1,devise 1.3.1和1.3.4,mysql,pg,sqlite驱动程序中都会观察到此行为。这适用于brcypt以及sha1加密器。

回答

6

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

+1

只是调试朋友的代码并遇到同样的问题(不添加:可对模型加密)。谢谢! – 2012-04-23 05:22:03

6

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

散列时不需要加速,因为这可以让攻击者在给定的时间范围内尝试更多的事情。本文解释如下:http://codahale.com/how-to-safely-store-a-password/

在设计中,使用拉伸来调整工作因子以使密码需要花费相当长的时间散列。可配置的性质是必要的,原因有两个:1)不同的应用程序具有不同的可接受的性能特征; 2)当计算机变得更快时,应该能够增加工作因子以保持相同的性能。

这个想法是,你应该配置这个值尽可能高,同时保持可接受的性能。目标不是让登录花费60秒,而是花费比微秒或两个更长的时间。如果您可以找到延迟请求的值,将请求降低到大约200毫秒左右,那么这可能就是您想要的位置。

+0

我明白这个主意,但我仍然相信有什么不对。在authlogic中,Devise的行为被认为是通过将加密器设置为authlogic_sha512并延伸到20来模仿的,但是登录或注册并没有明显的延迟。 – punund 2011-05-08 21:55:07

+0

不应该是一个问题:代码是相同的。 https://github.com/binarylogic/authlogic/blob/master/lib/authlogic/crypto_providers/sha512.rb与https://github.com/plataformatec/devise/blob/master/lib/devise/encryptors/authlogic_sha512 .rb – 2011-05-08 22:33:30

+0

另外,bcrypt是不同的,工作因素要慢得多。 – 2011-05-08 22:33:49