6

每当我输入config.stretches = 20config/initializers/devise.rb,服务器都会在加密请求上超时。

响应时间在 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

4

2 回答 2

6

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

于 2011-05-09T10:55:10.127 回答
6

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

散列时你不想要速度,因为这允许攻击者在给定的时间跨度内尝试更多的事情。本文对此进行了解释:http ://codahale.com/how-to-safely-store-a-password/ 。

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

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

于 2011-05-08T21:26:20.173 回答