2011-09-25 7 views
5

Estoy leyendo un poco sobre hash para contraseñas. He visto SHA-256> MD5. Esto me hizo pensar en cómo una aplicación puede ocuparse de cambiar de una función hash a otra. ¿Qué sucede si alguien implementa una aplicación que hashes sus contraseñas usando MD5? Luego deciden que SHA-256 es el camino a seguir. Pero, por supuesto, los hashes de contraseña almacenados en la base de datos están en MD5.Cambiar la función de hashing en una base de datos preexistente

¿Cuál es el proceso para migrar los datos en la base de datos de una función hash a otra?

+0

No creo que eso sea posible. – SLaks

Respuesta

5

No es posible contraseñas "unhash" (al menos no en un modo general, eficiente y fiable - que pueden adivinar algunas contraseñas, eso es lo que los atacantes hacen, y que desea migrar de MD5, precisamente porque los atacantes puede tener cierto éxito en esto). Por lo tanto, la migración se extenderá a lo largo del tiempo: algunas contraseñas se correlacionarán con MD5, otras con SHA-256. Cuando se va a verificar una contraseña:

  • Si se conoce el SHA-256 de esa contraseña, se utiliza SHA-256. Esta contraseña ya se ha migrado.
  • De lo contrario, MD5 se utiliza para verificar la contraseña. Si coincide, la contraseña es buena, y, ya que la aplicación conoce la contraseña en ese momento, la aplicación también hash la contraseña con SHA-256 y reemplaza el hash MD5 con el hash SHA-256 en la base de datos.

Por lo tanto, las contraseñas se migran dinámicamente; Para deshacerte completamente de MD5, tienes que esperar mucho tiempo y/o destruir cuentas a las que no se ha accedido durante mucho tiempo. Necesita poder distinguir un hash MD5 de un hash SHA-256, lo que es fácil ya que tienen distintos tamaños (16 bytes para MD5, 32 bytes para SHA-256). También podría agregar una bandera o cualquier otro truco similar.

Tenga en cuenta que las contraseñas hashing con una aplicación única prima de una función hash es una manera bastante pésimo de hacerlo, la seguridad-sabia, y la sustitución de MD5 con SHA-256 no realmente mejorar las cosas. Tiene contraseñas hash para que un atacante que obtenga acceso de lectura a la base de datos no aprenda las contraseñas. Para realmente evitar que el atacante adivine las contraseñas, también necesita "sales" (datos aleatorios por contraseña, almacenados junto con la contraseña hash) y una función lenta de hash (es decir, miles, posiblemente millones, de la función hash anidada invocaciones). Ver this answer para más detalles. La respuesta corta: ya que está visualizando la migración, haga lo más inteligente y migre a bcrypt, no a SHA-256 (consulte that answer en security.stackexchange).

+0

Agregaré a la gran respuesta de Thomas señalando que bcrypt tampoco tiene este problema de migración. Si desea aumentar el factor de trabajo de las contraseñas, puede hacerlo simplemente cambiando el valor del factor de trabajo al hacer el hash inicial. Todas las contraseñas futuras de ese punto calificarán como el nuevo nivel de factor de trabajo, pero al verificar la contraseña, tanto el nuevo factor de trabajo como los valores hash de factor de trabajo antiguo seguirán funcionando, por lo que solo deberá establecer una caducidad en todas las contraseñas de, por ejemplo, 3 meses. Entonces, todas las contraseñas deberían corresponder al nuevo factor de trabajo dentro de los tres meses. Luego borre o desactive el viejo –

Cuestiones relacionadas