¿Cómo reemplazar un método antiguo de hash de contraseñas con uno más nuevo en software? [duplicar]

21

El software que construye nuestra empresa acaba de pasar por una auditoría de seguridad. Los auditores señalaron nuestro uso de MD5 para las contraseñas de hash que los usuarios pueden establecer si desean una contraseña en sus archivos. Habiéndolo consultado, parece que debería reemplazarlo con PBKDF2.

¿Pero para eliminar todos los métodos de hash MD5 del software, esto significará que los usuarios necesitarán perder temporalmente todas sus contraseñas? Al igual que en, deberemos comunicarnos a los clientes que, si se actualizan, todos sus archivos no estarán protegidos por contraseña. Quiero decir, puedo verificar que exista un hash antiguo y forzarlos a establecer manualmente una nueva contraseña, pero cualquiera puede establecer la contraseña, lo que parece ser un gran defecto. Si un atacante tiene acceso a su archivo y a la nueva versión de nuestro software, obtendrá acceso al archivo sin contraseña.

    
pregunta robertkroll 01.06.2015 - 09:47
fuente

3 respuestas

33

Este es un problema común.

La respuesta habitual es doble:

  • Para los usuarios que no han iniciado sesión desde el cambio: use el valor de hash anterior como entrada para el nuevo esquema de hashing.
  • Siempre que alguien inicie sesión después del cambio: use la nueva contraseña directamente como entrada para el nuevo esquema de hashing.

Use una columna adicional en la nueva tabla para indicar cómo se calculó el nuevo hash.

Lectura adicional

respondido por el StackzOfZtuff 01.06.2015 - 10:12
fuente
8

¿Por qué no ejecutar un PBKDF2 sobre la salida del hash MD5? El hash resultante aún debe ser válido y se puede usar para convertir tus hashes antiguos en nuevos una vez sin que sea necesario restablecer la contraseña de tus usuarios ni comprometer a tus usuarios más antiguos.

Tenga en cuenta que el hash de resolución es al menos tan seguro como PBKDF2 y no debería ser significativamente más costoso que el PBKDF2 (el MD5 es fácil de calcular, por lo que es una mala idea usarlo). Debería poder explicar / marcar que esta es una forma segura de manejar las cosas en el código si tiene miedo de que reciba advertencias al respecto en el futuro.

Tenga en cuenta que puede combinar esto con el método de StackzOfZtuff como una forma de guardar las contraseñas de los usuarios que aún no se han actualizado guardar, actualizando la contraseña de un usuario cuando inician sesión en PBKDF2 pero por ahora cambiándola a PBKDF2 (MD5) como Una forma de mantener las contraseñas de usuario seguras por ahora.

    
respondido por el Thijser 01.06.2015 - 11:50
fuente
1

Acabamos de implementar esto: pasar de los hashes md5 salados a blowfish (a través de la API de contraseña de PHP ).

Hemos gestionado la migración colocando un indicador en la base de datos: si el indicador no está establecido, entonces ese registro todavía está utilizando el md5 con sal. Nos autenticamos con el método anterior, y luego lo reinventamos con el método nuevo. Estamos implementando una política en la que, después de un arreglo desde el lanzamiento de producción de este nuevo método, las cuentas que usen el algoritmo anterior tendrán su campo de contraseña vacío, lo que requiere que se establezca una nueva contraseña y se bloquee el acceso hasta que se reinicie.

Una cosa buena sobre la forma en que funciona la API de contraseña de PHP es que la cadena devuelta por las funciones de hashing contiene información sobre cómo se hizo hash (qué método criptográfico, parámetros para el método y un salt), junto con el hash all en una cuerda Esta estrategia significa que podemos cambiar el método y los parámetros de encriptación en un archivo de configuración, y la API proporciona una función que compara la configuración con los parámetros en el valor almacenado actual, informándole si es necesario realizar un rehash con los nuevos parámetros.

    
respondido por el HorusKol 02.06.2015 - 01:25
fuente

Lea otras preguntas en las etiquetas