desencriptar - sha2 java
¿Usa SHA-512 y salt para hash una contraseña hash MD5? (4)
Estoy trabajando en un sistema que ha estado mezclando contraseñas de usuario con MD5 (sin sal). Quiero almacenar las contraseñas de forma más segura con SHA-512 y una sal.
Si bien esto es bastante fácil de implementar para futuras contraseñas, también me gustaría actualizar las contraseñas hash MD5 existentes, preferiblemente sin forzar a todos los usuarios a cambiar sus contraseñas. Mi idea es usar SHA-512 y una sal apropiada para modificar el hash MD5 existente. También puedo establecer un indicador en la base de datos que indique qué contraseñas fueron heredadas del texto sin formato, y cuáles fueron codificadas a partir de un hash MD5. O podría probar ambos al autenticar usuarios. O incluso simplemente hash nuevas contraseñas con MD5 y luego SHA-512 / salt, por lo que pueden tratarse igual que las contraseñas antiguas.
Programáticamente, no creo que esto sea un problema, pero no sé lo suficiente sobre encriptación / hash para saber si estoy comprometiendo la calidad del hash de alguna manera mediante la aplicación de un hash SHA-512 / salt a un contraseña que ya tenía hash MD5. Mi primer instinto es que, en todo caso, sería aún más fuerte, una extensión de tecla muy ligera.
Mi segundo instinto es que realmente no sé de lo que estoy hablando, así que será mejor que me aconseje. ¿Alguna idea?
Confía en tu segundo instinto. Use una biblioteca existente hecha especialmente para contraseñas hash en lugar de tratar de cocinar la suya propia.
Probablemente hash tus nuevas contraseñas con MD5 y luego hash el MD5 con tu biblioteca hashing de contraseñas. De esta forma, puede mantener la compatibilidad con versiones anteriores de sus contraseñas antiguas.
Es decir password_hash (todas las contraseñas viejas, md5''d) y password_hash (md5 (contraseñas nuevas))
(Advertencia: no soy un experto en criptografía)
http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html
La composición de funciones con primitivas criptográficas es peligrosa y no debe hacerse si es evitable. La solución común para su tipo de problema es mantener ambos valores hash durante un período de migración, utilizando el nuevo hash siempre que sea posible y actualizando transparentemente las contraseñas antiguas (cuando comprueba una contraseña y coincide, la rehace con el nuevo algoritmo y la almacena)
Esto no funcionará si tiene un esquema basado en la respuesta al desafío en el que no puede ver la contraseña del texto simple, pero como parece que tiene un sal almacenada que no cambia, supongo que su aplicación realiza el hash.
Si has hash con MD5 primero, solo tendrás el spread de MD5 (128 bit). Una gran parte del espacio de SHA512 no estará cubierto por sus contraseñas. Por lo tanto, no aprovecha SHA512, pero no será peor que MD5.
Tiene el beneficio de que si alguien obtiene el hash SHA512 y no conoce la sal (esto tiene que aplicarlo de alguna manera) no puede buscar los hashes y obtener las contraseñas, algo que sería posible con la base de datos MD5 que tiene. ahora.
Entonces, sí, puedes repetir las contraseñas MD5 existentes. Pero como se explica en el primer párrafo, sería una mala idea aplicar MD5 a todas las contraseñas nuevas y luego hash como SH512. Una implementación fácil sería tener un campo booleano "salado" en la base de datos al lado de los hashes (pero no pongas la sal ahí).
Si nos fijamos en cómo la mayoría del Banco y la gente de alta seguridad cambian las contraseñas. La mayoría de ellos, básicamente, le preguntan a las personas que están utilizando el antiguo método de encriptación para crear una nueva contraseña. Creo que es la primera vez que se coloca una bandera en todos los antiguos usuarios de contraseñas MD5, y se les notifica que necesitan crear una nueva contraseña y migrarlos lentamente al nuevo sistema. De esta forma, cuando se produce un problema al disparar el sistema si algo sale mal, no se preguntará si este es un nuevo usuario o uno anterior. ¿Somos hash dobles o solteros? Nunca se debe comparar dos hash como una respuesta posible, porque ¿qué pasa si MD5 (''abc'') => 123, SHA (''NO'') => 123, eso significa que alguien podría haber ingresado la contraseña incorrecta, pero aún así obtener.