¿SHA1 es mejor que MD5 solo porque genera un hash de 160 bits?

68

Es bien sabido que se recomienda SHA1 más que MD5 para el hashing, ya que MD5 está prácticamente roto, ya que se han encontrado muchas colisiones. Con el ataque de cumpleaños, es posible obtener una colisión en MD5 con 2 64 complejidad y con 2 80 en SHA1

Se sabe que hay algoritmos que pueden romper ambos en mucho menos tiempo del que se necesita para un ataque de cumpleaños.

Mi pregunta es: ¿MD5 se considera inseguro solo por esta razón que es fácil producir colisiones? Porque mirando a ambos, producir colisiones en SHA1 tampoco es tan difícil. Entonces, ¿qué hace que SHA1 sea mejor?

Actualización 02/2017 - enlace

    
pregunta sudhacker 04.09.2012 - 00:07
fuente

4 respuestas

87

Producir colisiones SHA-1 no es tan fácil. Parece razonable que el ataque con ha sido descrito en SHA-1 realmente funciona con un costo promedio de 2 61 , mucho más rápido que el ataque de cumpleaños genérico (que está en 2 80 ), pero sigue siendo bastante difícil ( factible , pero costoso).

Dicho esto, realmente no sabemos qué es lo que hace que las funciones hash sean resistentes (consulte, por ejemplo, esta respuesta para una discusión detallada). Con un montón de saludos con la mano, podría afirmar que SHA-1 es más robusto que MD5 porque tiene más rondas y porque la derivación de las 80 palabras de mensaje en SHA-1 es mucho más "mezclada" que la de MD5 (en en particular, la rotación de 1 bit, que, por cierto, es la única diferencia entre SHA-0 y SHA-1, y se han producido colisiones SHA-0).

Para más de lo mismo, mire SHA-256, que es mucho más "masivo" (muchas más operaciones que SHA-1, pero con una estructura similar), y actualmente no está roto. Es como si hubiera una cantidad mínima de operaciones para que una función hash sea segura, para una estructura dada (pero ahí estoy moviendo mis manos a una velocidad estupenda, así que no crea que dije algo realmente científico o profundo).

    
respondido por el Tom Leek 04.09.2012 - 02:08
fuente
34

No. No es solo la longitud de la salida. Existen diferencias significativas en su nivel de seguridad frente a los ataques criptoanalíticos.

Hay ataques de colisión devastadores en MD5. (El artículo de Wikipedia en MD5 tiene algunos detalles). Estos ataques significan que MD5 no ofrece esencialmente seguridad contra colisiones: es fácil para encontrar colisiones en MD5.

En contraste, SHA1 parece ser mucho más seguro. Si bien hay algunos ataques conocidos en SHA1, son mucho menos graves que los ataques en MD5. (El artículo de Wikipedia sobre SHA1 tiene una descripción general.) Por esta razón, SHA1 es una opción mucho mejor que MD5 en muchas configuraciones .

En estos días, en lugar de usar MD5 o SHA1, es probable que estés aún mejor para usar una de las funciones hash más modernas, como SHA256. Aquellos no tienen ataques conocidos de ninguna relevancia práctica.

Pero ciertamente no utilice MD5 en ningún entorno donde se necesite resistencia a la colisión, ya que ese aspecto de MD5 está completamente roto.

    
respondido por el D.W. 04.09.2012 - 01:35
fuente
1

El nivel de seguridad proporcionado por una función hash se basa en la dificultad de generar un texto sin formato que produzca una firma de hash determinada (la salida del hash). Un hash es un método rápido de simplificar un conjunto de datos para indicar que un usuario posee los datos originales sin revelar realmente los datos. Esto puede ser útil tanto para validar que alguien es quien dice ser (comparando un hash de algo que sabe que sabe con el valor almacenado) como para validar que un mensaje no se ha cambiado. Debido a que un hash es de muchos a uno (muchos valores producirán el mismo valor de hash), es teóricamente difícil trabajar desde un hash al valor original. Debido a la gran cantidad de valores de hash posibles, DEBE ser difícil obtener un hash para producir una salida determinada.

Esto es, sin embargo, desafortunadamente no siempre es cierto. La expectativa de que ciertos valores se corresponden con entradas legibles por humanos permite ataques de diccionario llamados tablas arco iris contra un hash para intentar descubrir el valor original. La salazón (la adición de una entrada no legible por humanos al principio o al final de una entrada) es un intento de evitar que las tablas del arco iris funcionen como deberían hacerse para cada sal diferente.

El otro problema, y el relevante para su pregunta es el de las colisiones de hash. Una colisión de hash ocurre cada vez que dos entradas dadas producen la misma salida de hash. Para validar que los datos no se han alterado, no debe ser fácilmente posible generar un hash para un conjunto alterado de datos que coincida con el hash del original. Desafortunadamente, el MD5 está completamente comprometido en este aspecto, ya que existen múltiples formas de encontrar modificaciones relativamente fáciles que se pueden poner al final o al comienzo de una carga útil para que parezca que es válido. SHA-1 también tiene algunos compromisos menores en este sentido que se descubrieron recientemente, sin embargo, son menos graves que los problemas de MD5. Usar algo como SHA256 es aún más seguro ya que actualmente no tiene ningún ataque conocido contra la colisión de hash.

    
respondido por el AJ Henderson 04.09.2012 - 19:36
fuente
-6

Aquí está la comparación entre MD5 y SHA1. Puedes tener una idea clara de cuál es mejor.

    
respondido por el Biswajit Karmakar 15.05.2016 - 08:07
fuente

Lea otras preguntas en las etiquetas