2012-01-14 18 views
10

Al cambiar el algoritmo hash de contraseñas para una aplicación, ¿cómo debería el sistema migrar los valores ya guardados en la base de datos? Soy muy consciente del hecho de que no puedo migrarlos en su forma hash pero que necesito tener los datos de entrada para calcular el nuevo hash.Cómo migrar contraseñas a un método de hashing diferente

Hay dos situaciones en wich tengo acceso a los datos de entrada:

  1. Durante entrada
  2. cuando el usuario cambia su contraseña en sus configuraciones de perfil

, obviamente, sólo durante una de estos puedo guardar el hash nuevo en la base de datos para migrar la contraseña.

Aunque todos mis colegas votan por el método 1, mi instinto me dice que no haga eso. ¿Hay alguna manera recomendada?

+0

# 1 funciona para mí. Todo lo que tiene que hacer es verificar ambos valores hash, y si el anterior coincide con lo que está en el DB, simplemente reemplácelo por el nuevo. Esto permite una transición sin problemas. –

Respuesta

13

No veo ninguna razón para no hacer esto en el inicio de sesión. ¿Hay alguna razón por la que no quieras hacer el n. ° 1? Usted valida con el nuevo hash, si eso falla, la validación contra el viejo algoritmo hash. Si eso funciona, escribiría el nuevo hash sobre el anterior. Esto significa que sus contraseñas se convertirán más rápido, ya que los usuarios probablemente inicien sesión más de lo que cambian su contraseña. A menos que fuerces a la gente, dudo que la mayoría lo cambie por sí mismo.

0

Es difícil obtener asesoramiento específico sin conocer detalles específicos del problema. Voy a suponer que la razón por la que desea cambiar su estrategia de almacenamiento de contraseñas es porque su nueva estrategia será significativamente más segura que su estrategia actual.

Si ese es el caso, entonces ¿cuál es la posible ventaja de esperar? La idea es mitigar el riesgo existente. Los usuarios, de manera realista, muy rara vez cambian sus contraseñas. Si desea migrar a una nueva estrategia de almacenamiento, probablemente debería hacerlo al iniciar sesión o simplemente va a tener una gran base de datos llena de contraseñas con seguridad dudosa.

4

He aquí un solución alternativa si no va a no tocar el código de autenticación de edad (es decir, el cambio a un nuevo marco.) O simplemente quiere deshacerse de los viejos campos de contraseña:

  1. Haga una copia de seguridad de la tabla existente de contraseñas y luego elimine todas las entradas existentes en la columna de contraseñas en esta tabla (y actualice el tipo de columna si es necesario, por supuesto) para que esté listo para recibir contraseñas nuevas con el nuevo cifrado.

  2. La próxima vez que los usuarios intenten iniciar sesión, compruebe la tabla de contraseñas y si el usuario existe sin contraseña, solicíteles "Implementamos una actualización de todo el sistema y todas las cuentas deberán volver a verificarse desde el correo electrónico. Le hemos enviado un correo electrónico, utilice el correo electrónico para completar la actualización de su cuenta. Pedimos disculpas por las molestias. "

  3. Los usuarios deberán ingresar a su correo electrónico y hacer clic en un enlace que diga algo así como" Vuelva a confirmar mi cuenta ". Serán llevados a una página que requiere algún parámetro de token seguro, recibido del enlace que se proporciona en el correo electrónico. Esta página ahora les pedirá que ingresen su nombre de usuario y contraseña (más importante aún, la contraseña) para completar la actualización. Puede solicitar que ingresen la contraseña dos veces para protegerse de los errores tipográficos. Técnicamente, estás creando su contraseña aquí. Simplemente pídalo en 2 entradas con la etiqueta "contraseña" y "confirmar contraseña".

Hay, por supuesto, tanto pro y de Con a esta solución, así, en comparación con los demás. Lo bueno es que no tiene que agregar el código de hash viejo en su nuevo entorno y dejarlo allí hasta que todos los usuarios finalmente hayan iniciado sesión nuevamente. Pero esta solución viene con el precio de escribir código adicional también (código para enviar correos electrónicos/token, etc.). Tendrá que comparar ese trabajo con el trabajo relacionado con la solución propuesta para interceptar el ingreso de entrada del formulario, verificar contra el hash antiguo y luego pasar a un nuevo código de autenticación. Solo otra idea para ti.

+1

"Lo bueno es que no tiene que agregar un código hash antiguo en su nuevo entorno y dejarlo allí hasta que todos los usuarios finalmente hayan iniciado sesión nuevamente". No necesitas hacer eso tampoco; puede detenerlo incluso si no todos se han convertido aún y obligarlos a un flujo de trabajo de contraseña olvidada. – Andy

+0

Sí, tienes razón. – prograhammer

1

Observe este escenario de TI: la empresa A asumió la empresa B con un modelo comercial similar. Todos los clientes deben fusionarse en un sistema mayor propiedad de la empresa A, mientras que el sistema de desmantelamiento en la empresa B , La mejor implementación para hacer esto es Forzar contraseña Cambiar para todos los usuarios migrados a través de su dirección de correo electrónico registrada.

+0

A menos, por supuesto, que los usuarios ya no tengan acceso a sus direcciones de correo electrónico antiguas, en cuyo caso se necesita algún flujo de trabajo alternativo. – Andy

Cuestiones relacionadas