2011-05-08 5 views
6

Cada vez que pongo config.stretches = 20 en config/initializers/devise.rb, el servidor agota las solicitudes de cifrado.Rieles 3 Diseñar rutinas para detener con más "alargamientos" de cifrado

El tiempo de reposo es soportable en 15 tramos, luego aumenta rápidamente a medida que aumenta el valor, y se vuelve totalmente inutilizable en 19. No sé mucho sobre el impacto en el rendimiento que este valor puede tener, pero ciertamente no debería ser exponencial, que es lo que experimento. Aparentemente, no necesito elevar este valor para nada excepto la compatibilidad automática, pero de todos modos parece estar mal.

Comprobé esto con una instalación totalmente nueva de https://github.com/plataformatec/devise_example/.

Este comportamiento se observa en Ubuntu 11.04, cualquier versión 3.0.x rails, 3.1.0.beta1, diseñar 1.3.1 y 1.3.4, los controladores mysql, pg, sqlite. Esto es válido para brcypt, así como para los encriptadores sha1.

Respuesta

6

Resultó que no especifiqué la opción :encryptable en mi modelo, y Devise estaba ignorando config.encryptor configurando silenciosamente, y estaba, de hecho, usando bcrypt, que es realmente tan lento en 20 tramos.

+1

Estaba depurando el código de un amigo y se encontró con el mismo problema (sin agregar: encriptable al modelo). ¡Gracias! –

6

Este es el comportamiento esperado (especialmente para bcrypt que es posiblemente mejor). El único propósito de este valor es degradar el rendimiento para aumentar la seguridad.

No desea la velocidad cuando se usa hashing, ya que esto permite a un atacante probar más cosas en un lapso de tiempo dado. Este artículo explica esto: http://codahale.com/how-to-safely-store-a-password/.

De acuerdo, los estiramientos se utilizan para ajustar el factor de trabajo más alto de modo que las contraseñas tarden un tiempo configurable en el hash. La naturaleza configurable es necesaria por dos razones: 1) diferentes aplicaciones tienen diferentes características de rendimiento aceptables y 2) a medida que las computadoras se aceleran, se debe poder aumentar el factor de trabajo para mantener el mismo rendimiento.

La idea es que debe configurar este valor para que sea lo más alto posible mientras se mantiene un rendimiento aceptable. El objetivo no es hacer que el inicio de sesión tarde 60 segundos, sino que lo hace tomar más de un microsegundo o dos. Si puede encontrar un valor para los tramos que ralentiza las solicitudes hasta alrededor de 200 milisegundos más o menos, probablemente sea donde quiera estar.

+0

Entiendo la idea, pero sigo creyendo que algo anda mal. Con authlogic, cuyo comportamiento ideó supuestamente Devise al configurar el cifrado en: authlogic_sha512 y se extiende a 20, no hubo un retraso notable con el inicio de sesión o el registro. – punund

+0

No debería ser un problema: el código es el mismo. https://github.com/binarylogic/authlogic/blob/master/lib/authlogic/crypto_providers/sha512.rb vs. https://github.com/plataformatec/devise/blob/master/lib/devise/encryptors/authlogic_sha512 .rb –

+0

Además, bcrypt es diferente, con el factor de trabajo siendo mucho más lento. –

Cuestiones relacionadas