¿Cómo puedo hacer que MD5 sea más seguro? ¿O es realmente necesario?

Estoy almacenando el nombre de usuario y la contraseña en una base de datos MySQL y los he procesado usando MD5. Sin embargo, solo estoy usando la función PHP estándar sin ninguna modificación. Ahora, leí que MD5 está roto. ¿Cómo lo haces? ¿Lo ejecuta varias veces a través de un mecanismo hash diferente o agrega alguna forma de sal?

Me sorprende cómo las personas se suben al carro de “maldición, está roto, no lo usaré”, no cometan el mismo error.

No puedes mejorar el MD5. Incluso usar SHA-1 es vulnerable al mismo tipo de ataques que MD5. El uso de bcrypt utilizará MUCHA CPU que los algoritmos MD5 y SHA.

MD5 está diseñado para ser rápido, al igual que SHA. bcrypt no lo es y permite más permutaciones, lo que hace que sea más difícil para alguien tratar de descifrar la cadena original.

Necesita saber por qué MD5 se considera “roto”.

  • Porque es rápido calcular una tabla de contraseñas de hasta 6 caracteres de longitud .

Utilizando la potencia de cómputo de hoy, uno puede crear una matriz de caracteres y MD5 todas las permutaciones y asignarlas a la cadena original. Así es como obtienes una mesa de arcoiris. Si alguien descarga su base de datos y luego compara las contraseñas con su tabla de arcoíris, pueden obtener la contraseña original de los usuarios. La razón por la cual esto es peligroso se debe a que las personas usan las mismas contraseñas para muchas cosas, incluido PayPal y otro servicio de procesamiento de dinero. Es por eso que usas la llamada sal. Eso hace que sea aún más difícil obtener la cadena original, por lo que salar las contraseñas de los usuarios (digamos invirtiéndolas y MD5-ing la entrada invertida) dificultará al atacante revertir el hash a la cadena original.

  • Por colisiones .

¿Qué es una colisión? Si le das a la función hash dos cadenas diferentes y devuelve el mismo hash, eso es una colisión. ¿Cómo se traduce a las contraseñas de hash y web para inicios de sesión? Si tiene el mismo hash para usuario1 / contraseña1 y usuario2 / contraseña2, podría iniciar sesión como otra persona. Ahí es donde las colisiones desempeñan un papel en la seguridad.

La razón por la que se considera que MD5 está roto es porque MD5 devuelve el mismo hash para las cadenas que difieren en un pequeño porcentaje. ¡Y no es fácil calcular qué cadena podría ser! Desde el punto de vista matemático, sí, está “roto” porque si tu cadena tiene 100 caracteres y difiere de otra cadena en 10 caracteres (diferencia del 10%), obtienes el mismo hash.

Lo que aplica para MD5 se aplica a TODOS los algoritmos hash. Al final, todos ellos no tienen un número infinito de hashes posibles. Sin embargo, algunos de ellos (como MD5) tienen menos hashes posibles y se ejecutan más rápido.

Al final, si alguien llegó a su base de datos, tiene un problema mayor que usar MD5 en lugar de bcrypt o SHA1.

Agregue una sal a cada contraseña almacenada que no sea igual para cada contraseña

Simplemente use MD5("yoursite.com".$string);

MD5 no es descifrable. La única forma posible de descifrarlo es a través de tablas hash que fuerzan brutalmente todo. Si agrega una cadena aleatoria que solo usted sepa, no podrá descifrarla.

Si le preocupa la seguridad de la contraseña, debe usar SHA1 () (o alternativa) en lugar de MD5 (). Mientras que MD5 no se puede descifrar, puede ser superado por cualquiera de las tablas de arco iris o haciendo coincidir el hash.

Las sales funcionarán contra la tabla arcoiris, pero no contra la combinación del hash que se ha logrado con MD5.

Hay un par de cosas que debes hacer.

  1. Use SHA en lugar de MD5. SHA es más seguro criptográficamente que MD5. ¡Cuantos más bits, mejor!
  2. Usa una sal Esto hace que los ataques de mesa arcoiris sean más difíciles.
  3. Fortalezca su clave calculando el hash como sigue:

:

 function strenghtened_hash( $password, $salt, $n ) { $crypted = sha( $password . $salt ); for( $i = 0; $i < $n; $i++ ) { $crypted = sha( $crypted . $password . $salt ); } return $crypted; } 

¡Ahora deberías estar en buena forma!

Es mejor que uses el uso de bcrypt para el almacenamiento de contraseñas para evitar ataques de tablas arcoiris en caso de que los tipos malos se apoderen de tu base de datos.

Por lo menos , descargue MD5 (aunque computacionalmente rápido, no muy seguro actualmente) y use algo un poco más seguro como SHA256 con una sal larga.

Cambie a un mecanismo de hash diferente (puede hacerlo de forma incremental a medida que la gente inicie sesión) y definitivamente use una sal (diferente para cada usuario).

Puedes usar algo llamado sal. Significa que también guardas esta sal en tu base de datos. Es una cadena aleatoria que es más o menos larga y es única para cada usuario.

Luego, para verificar la contraseña, debes hacer algo como esto:

  

Puede hacer MD5 o cualquier función de hash más fuerte por un método llamado “bucle de hash” sobre el que escribí, léalo aquí , buen método para cifrar datos , usando un bucle “para” o “mientras” para cifrar una gran cantidad de contraseña veces con un número clave generado al azar, realmente es fuerte y fácil, por lo que no volverá a asustar a los crackers, nadie puede descifrar un “hash de bucle” cifrado en este momento con las bases de datos disponibles.