¿Es cierto que md5 no es lo suficientemente seguro para las aplicaciones web?

Decir que MD5 no es lo suficientemente seguro es un malentendido que raya en un mito urbano.

MD5 se puede usar para crear un resumen de hash a partir de una entrada larga. Gregory Delrue da un ejemplo de cómo usa MD5 para reducir un archivo a un valor hash, solo para que pueda verificar si hay duplicados. Este es un ejemplo de muchos usos legítimos para MD5. MD5 también tiene la ventaja de que funciona bastante rápido, por lo que si desea, por ejemplo, generar hashes para unos pocos miles de archivos, puede hacerlo con un buen rendimiento.

Tienes que entender lo que las personas quieren decir cuando dicen que MD5 está “roto”.

¿Significa esto que podrían revertir un hash MD5 y descubrir la entrada original? ¡No!

La debilidad en MD5 y SHA1 es que no son suficientemente resistentes a las colisiones. Por ejemplo, los investigadores demostraron que podían generar un segundo archivo de entrada que producía el mismo hash MD5 que un primer archivo de entrada conocido . Pero todavía no pueden revertir un hash.

En otras palabras, si una aplicación almacena su contraseña como un hash MD5, nadie puede descubrir cuál es su contraseña. Pero si les dice su contraseña , pueden crear una contraseña diferente que produzca el mismo hash MD5.

Del mismo modo, si usa MD5 para demostrar la autenticidad de, por ejemplo, un certificado SSL, y comparte el archivo del certificado, entonces alguien puede sustituir un certificado diferente que produce el mismo hash MD5.

Por lo tanto, MD5 no es inútil, es solo que no debe usarse como un algoritmo de hash seguro . Es decir, si confía en un resumen de hash para asegurarse de que un archivo es el original, entonces debe usar un algoritmo de hash más fuerte. La recomendación actual de NIST es usar SHA256. Otras buenas opciones son Bcrypt (Blowfish) o PBKDF2.

MD5 es adecuado en el ejemplo de Gregory porque supongo que si encuentra dos hash MD5 que son iguales, realiza una comparación completa entre los dos archivos que aparecen como duplicados.

Depende de qué.

Escribí una pequeña herramienta hace algún tiempo que encontró archivos duplicados en mi disco basados ​​en el hash MD5 en lugar del nombre del archivo. Para este propósito, MD5 era lo suficientemente seguro.

Pero si desea usarlo para la autenticación, es decir, asegurarse de que un atacante no haya cambiado mal algún archivo, entonces MD5 no es lo suficientemente seguro.

Incluso SHA-1 (reemplazo de MD5) se considera roto.

Si necesita un algoritmo de hash criptográficamente seguro, use SHA2 o SHA3.

Para las contraseñas, use funciones dedicadas de hashing de contraseñas, están diseñadas para resistir ataques de fuerza bruta.

Sí, definitivamente no para las contraseñas. Al igual que con suficiente tiempo (solo horas a días) y persistencia, el hacker puede comparar sus contraseñas hash md5 con su lista conocida / contraseña común para encontrar una coincidencia. Incluso con sal. Su conocido md5 se ha debilitado.

Pero si desea utilizar md5 para otras cosas, como comparar hash de ciertos atributos o datos para la aplicación, puede confiar en eso. Mientras ese hash no se use para representar nada para fortalecer la seguridad de su sistema.

Nota: los valores hash de Md5 no se pueden descifrar … es un hash unidireccional. Cuando usa esto para contraseñas, se puede exportar, comparar y el hacker puede volver a crear la contraseña original para iniciar sesión. Pero eso no es lo mismo cuando lo usa para aplicaciones como la comparación de archivos o algo así.

Además, si está comenzando / actualizando, es mejor elegir el algoritmo Hash más reciente, ya que md5 está siendo cada vez más obsoleto, ya sea directamente o en combinación con firmas digitales. La versión Java 8 cambia lo mismo de Microsoft para no admitir Certs con cifrados más débiles.

La imagen completa: MD5 es una función hash criptográfica que, como tal, se espera que cumpla con tres características:

  • Resistencia a las preimágenes: dado x , no es factible encontrar m tal que MD5 (m) = x .
  • Resistencia a las segundas preimágenes: dado m , no es factible encontrar m ‘ distinto de my tal que MD5 (m) = MD5 (m’) .
  • Resistencia a las colisiones: no es factible encontrar mym , distintos entre sí, y de modo que MD5 (m) = MD5 (m’) .

MD5 está completamente roto con respecto a las colisiones , pero no para preimágenes o segundas preimágenes. Además, el ataque de 1996 (por Dobbertin) no rompió MD5 en absoluto; fue una “colisión en la función de compresión”, es decir, un ataque a uno de los elementos internos de MD5, pero no la función completa. Los criptógrafos lo tomaron como una bandera de advertencia, y tenían razón porque el ataque de colisión real que se publicó en 2004 (por Wang) se construyó a partir de los hallazgos de Dobbertin. Pero MD5 se rompió solo en 2004, no en 1996, y fue un ataque de colisión .

Las colisiones no son relevantes para la seguridad de hashing de contraseñas. La mayoría de los usos de una función hash para el hash de contraseña dependen de la resistencia previa a la imagen o de otras propiedades (por ejemplo, qué tan bien funciona la función hash cuando se usa dentro de HMAC, algo que no se puede reducir a ninguna de las propiedades anteriores). MD5 en realidad se ha “debilitado” con respecto a las preimágenes, pero solo de una manera teórica, porque el costo del ataque sigue siendo miles de millones de veces demasiado caro para ser realmente probado (por lo que MD5 no está “realmente” roto con respecto a las preimágenes, no de manera práctica).

Pero no use MD5 de todos modos . No por ninguna debilidad criptográfica, sino porque MD5 no tiene sal y es muy rápido . Eso es exactamente lo que no desea en una función de hash de contraseña. Las personas que “recomiendan MD5” para el hashing de contraseñas simplemente no conocen mejor, y son un testimonio de una Verdad que siempre debe tener en cuenta: no todo lo que encuentra en Internet es correcto y confiable. Se conocen mejores soluciones para el hash de contraseñas, y se han utilizado e implementado durante más de una década.

Respuesta teórica: es falsa.
Respuesta práctica: no hay una buena razón para no usar nada más nuevo.

La resistencia a la colisión de md5 se ha roto. Eso significa que es posible, dado un mensaje y su hash, crear un segundo mensaje con el mismo hash. Esto afecta, por ejemplo, las firmas digitales.

La unidireccional se debilita pero no se rompe. Todavía es difícil encontrar el mensaje dado un cierto hash. Eso significa que es técnicamente lo suficientemente bueno como para hacer hash de contraseña salada con md5. Pero, ¿por qué lo haría, si hay mejores alternativas disponibles?
Esta forma de hashing de contraseñas debe hacerse con una función más lenta de todos modos (por ejemplo, pbkdf2) para frenar los ataques de diccionario de fuerza bruta.

Si no necesita estas propiedades criptográficas, quizás para indexar, md5 está completamente bien. Pero también hay funciones hash más eficientes (no criptográficas) disponibles. Aunque, por supuesto, md5 está ampliamente implementado y disponible

Para MD5, para cualquier cadena de cualquier longitud, es posible construir una cadena diferente con el mismo hash. Esto significa que MD5 no es seguro para detectar la manipulación de archivos, para tokens de seguridad o para cualquier otra situación en la que la malicia (o incluso los accidentes) pueda dar lugar a un comportamiento no deseado.

Nunca lo usaría para detectar archivos duplicados, si hubiera una desduplicación automática. El riesgo de encontrar accidentalmente un alias es demasiado grande y, a menos que lo sepa (o guarde copias de seguridad periódicas), unos pocos milisegundos adicionales son perfectamente asequibles.

Como pertenezco a la escuela de pensamiento que dice Keep It Simple, si usa una función hash por seguridad, entonces el código adicional y los arcos adicionales son complejas donde los errores pueden ingresar el código. El escrutinio de las implementaciones de MD5 es limitado ahora, ya que es obsoleto, y la posibilidad de que haya errores de implementación no es algo que considero aceptable para ningún propósito.

Si desea un hash fuerte que sea rápido y no le importa si nadie lo está analizando, también podría usar Blue Midnight Wish. Incluso puede ser más rápido que MD5 y no tiene fallas conocidas.

Si desea almacenar tokens criptográficos, protegerse contra virus, implementar un código de archivo de licencia sólido, estar a prueba de un abogado cuando ejecuta una tienda en línea, etc., entonces Whirlpool y SHA3 son los únicos dos algoritmos con acreditación seria. No se deben emitir nuevos certificados SSL / TLS con hash SHA-1 o MD5 y SHA2 se considera demasiado vulnerable para cualquier cosa en la que no pueda permitirse interrupciones en la seguridad o la integridad de los datos.

Trate de no confundirse con si es MD5 o lo que sea o si espera el próximo conjunto de tecnologías, no hay una bala mágica en la seguridad. Tienes que usar algo de sentido común con hackers y mentalidad de estabilidad. Entonces, si va a cifrar su información, asegúrese de separar las claves de cifrado de los datos almacenados, agregue un poco de sal allí y la lista continuará. Lo que me ayuda a no abrumarme con la tecnología es pensar en términos simples, pensar en el salvaje oeste y en un nuevo banco establecido. ¿Qué harías? Primero planifique su plataforma antes de programar con eso en mente y pruebe en toda iteración.

MD5 es una excelente opción para muchas operaciones. Si necesita un identificador único de 128 bits para archivos o usuarios, es más que adecuado. Quiere hacer hash de datos para almacenamiento e indexación, sí, eso funciona (pero es más lento que otras opciones). Necesitar destilar un poco de entropía de una gran cantidad de datos, no es una opción horrible.

Por razones de seguridad, hay un pequeño conjunto de aplicaciones donde los MD5 ya no se consideran apropiados. La comunidad de seguridad se ha movido para pintar todos los usos de MD5 como malos. Si bien esto es inexacto, garantiza que los implementadores que no entiendan el problema no se vean afectados.

Sí, porque es fácil descifrarlo. Algunos sitios web pueden hacer eso en función de sus bases de datos. Están utilizando SHA1 + SALT o MD5 + SALT para hacerlo más seguro.

More Interesting

Cómo construir una aplicación web de prueba en Django

¿Meteor sería una gran opción para construir una red social como Instagram?

Creación de una aplicación web con todas las funciones utilizando un marco API y Javascript

¿Qué algoritmos / herramientas de programación se utilizan para aplicaciones web basadas en análisis de texto como 'I Write Like' o '750Words'?

¿Cómo puedo hacer una aplicación web que combine dos imágenes en una?

¿Qué es un servidor front-end?

¿Cuáles son algunas de las mejores API / servicios de impresión que pueden integrarse con una aplicación web?

¿Cómo se diseñaría una base de datos para una aplicación web que permita a los usuarios crear sus propias páginas web basadas en una plantilla compartida entre todos los usuarios?

¿Cómo elijo entre frameworks web asíncronos? Mi grupo de tecnología es bastante independiente del lenguaje y estamos tratando de estandarizar algunas tecnologías.

¿Cuánto tiempo me tomará aprender AngularJS?

¿Es WordPress una buena plataforma para construir un MVP para una aplicación web relativamente simple?

¿Cuál es la pila de tecnología detrás del cliente web de Spotify?

¿De qué sirve el diseño gráfico en los sitios web?

Somos una startup que desarrolla una aplicación web para la industria de la construcción. La aplicación que se aloja en la nube. ¿Crees que necesitamos un ingeniero de seguridad como función separada? ¿Por qué?

¿Las aplicaciones web siguen siendo una cosa en 2017?