¿Es seguro usar MD5 para verificar la integridad de los archivos pequeños (menos de 15kb)?

53

Sé que la colisión para MD5 se ha documentado desde los años 90 y que se ha demostrado que los certificados digitales basados en MD5 están completamente comprometidos en 2010, pero ¿qué tan efectivo es MD5 para garantizar que no se alteren pequeñas cantidades de datos? ?

Tengo algunos archivos de texto pequeños que tienen unas pocas páginas de tamaño (digamos 15kb de tamaño). He estado usando SHA-256 en ellos pero sería mucho más conveniente poder usar MD5 en su lugar.

¿Qué tan seguro sería MD5 como resumen de hash para estos pequeños archivos de texto de 15kb? ¿Una parte malintencionada podría producir colisiones para una cantidad tan pequeña de datos o el pequeño tamaño hace que esto sea un esfuerzo difícil?

    
pregunta thebunnyrules 29.05.2018 - 05:21
fuente

5 respuestas

89

El tamaño de la entrada es irrelevante. De hecho, debido a la paradoja de cumpleaños , no necesitas más que el tamaño del hash para hacer colisiones garantizadas . La mejor manera de evitar colisiones es usar un hash más fuerte que no sea vulnerable a ellos, como SHA-2. Sin embargo, está describiendo un ataque más difícil que un ataque de colisión, denominado preimage attack , del cual MD5 está a salvo.

Hay tres tipos de ataques * que tienen dos archivos con el mismo resumen:

  • 1st preimage : busca una entrada que se resuelva en un hash específico.

  • 2nd preimage : modifica una entrada sin cambiar el hash resultante.

  • Colisión : busca dos entradas distintas que tengan el mismo hash.

Estos se llaman ataques cuando pueden llevarse a cabo de manera más eficiente que mediante la búsqueda de fuerza bruta. Las colisiones aún pueden ocurrir naturalmente, y de hecho están garantizadas con cualquier cantidad de información no trivial debido al principio de casillero , pero los hashes están diseñados para dificultar el rendimiento intencional . Para un hash con una salida del tamaño de MD5, la probabilidad de una colisión aleatoria y accidental es extremadamente baja. Incluso si tiene 6 mil millones de archivos aleatorios por segundo , pasarán 100 años antes de que tenga una probabilidad del 50% de que dos hashes choquen. MD5 es excelente para detectar daños accidentales.

Una fuerte n -bit hash function está diseñada para tener un nivel de seguridad de 2 n contra los ataques de primera y segunda preimagen, y un nivel de seguridad de 2 n / 2 contra los ataques de colisión. Para un hash de 128 bits como MD5, esto significa que fue diseñado para tener un nivel de seguridad de 2 128 contra preimágenes y 2 64 contra colisiones. A medida que los ataques mejoran, el nivel de seguridad real que puede proporcionar se elimina lentamente.

MD5 es vulnerable a un ataque de colisión que requiere el equivalente de solo 2 18 invocaciones de hash en lugar de los 2 64 para explotar. A menos que el atacante genere ambos archivos, no es un ataque de colisión. Un atacante que tenga un archivo y quiera modificarlo maliciosamente sin cambiar el hash necesitaría montar un segundo ataque de preimagen, que es completamente infasible contra MD5 con tecnología moderna (el mejor ataque tiene una complejidad de 2 123.4 , en comparación con el máximo teórico de MD5 de 2 128 ). Los ataques de colisión son relevantes en diferentes situaciones. Por ejemplo, si le dan un ejecutable hecho por un atacante sin una puerta trasera, puede hacer un hash y guardar el hash. Ese ejecutable podría luego ser reemplazado por una versión de puerta trasera, ¡sin embargo, el hash sería el mismo que el benigno! Este también es un problema para certificados donde alguien podría enviar un certificado para un dominio que sí posee, pero el certificado colisionaría intencionalmente con uno para un dominio que no poseen.

Es seguro usar MD5 para verificar los archivos siempre que el hash almacenado no esté sujeto a manipulación y se pueda confiar en que sea correcto, y siempre que un atacante no haya creado (o influenciado) los archivos verificados. . Sin embargo, puede ser una buena idea usar un hash más fuerte, simplemente para evitar que un posible ataque de preimagen práctico contra MD5 en el futuro ponga en riesgo sus datos. Si desea un hash moderno que sea muy rápido pero criptográficamente seguro, puede consultar BLAKE2 .

* Si bien hay otros ataques contra MD5 como los ataques de extensión de longitud que afectan a todos los hashes de Merkle-Damgård mencionados por @LieRyan, estos no son relevantes para verificar la integridad de un archivo contra un hash correcto conocido.

    
respondido por el forest 29.05.2018 - 06:58
fuente
10

Depende de lo que quieras defenderte

La seguridad nunca es un juego único para todos. Si lo fuera, entonces no habría 12941 algoritmos hash diferentes. En su lugar, debe comprender que cada medida de seguridad lo defiende contra un tipo específico de ataque. Pones una contraseña en tu computadora para defenderse contra el acceso de personas al azar, no porque sea tan divertido escribir whereD1DweG0sowron6 cada vez que inicies sesión.

En cuanto a los algoritmos hash, puede clasificarlos groseramente como "hashes criptográficos" y "hashes no criptográficos". Los algoritmos de hash criptográficos están diseñados para soportar una serie de ataques, mientras que los hash no criptográficos están diseñados para ser lo más rápido posible. 1 MD5, por ejemplo, se considera un hash criptográfico, pero está tan roto que solo se puede utilizar como un hash no criptográfico.

Cuándo usar un hash no criptográfico

Si su objetivo es detectar bit-flips al copiar un archivo de una ubicación a otra (por ejemplo, una unidad de memoria USB a una computadora portátil), MD5 es absolutamente la opción correcta. Incluso me atrevería a decir que cualquier hash no criptográfico rápido es bueno. Cuando copia archivos, en realidad no necesita temer la interferencia del atacante. Si estás paranoico de que los hackers puedan modificar tu kernel, agregar hashes no resolverá tus problemas.

Verificación de la integridad del archivo con interferencia del atacante

Si pretende firmar y publicar esos archivos, entonces un atacante podría tener la capacidad de crear un archivo posiblemente legítimo con el mismo hash, lo que significa que su firma es igual de válida en el archivo malicioso.

Un ejemplo

Supongamos que su mensaje original m1 se ve así:

  

¡Por la presente declaro que las reglas del conejito!

Usted usa su función de hash h(m1) y obtiene el resumen d1 . Luego, usted firma el resumen d1 y obtiene una firma s1 .

Luego publicas tu mensaje m1 , tu firma s1 y tu función hash h() .

Podría ser el atacante en el escenario y crear un mensaje m2 que tenga exactamente el mismo hash en la función hash elegida:

  

Se sabe públicamente que los perros son mejores que los conejos en todos los aspectos ...

Desde h(m1) = h(m2) = d1 , la firma s1 es válida tanto para su original m1 como para mi malicioso m2 .

Para defenderse de tales ataques, es vital elegir un algoritmo hash fuerte con alta resistencia a las colisiones. Esto significa que me resulta muy difícil encontrar un m2 donde h(m2) = h(m1) .

Las buenas opciones incluirían SHA256 y SHA512, así como muchas otras. Parece que todos tienen algunas funciones hash favoritas no convencionales, pero SHA256 y SHA512 tienen un soporte muy extendido y será difícil para usted encontrar un sistema que no admita estos hashes. Y como sus archivos son muy pequeños, el cálculo del hash debería ser casi instantáneo.

Por ejemplo, en mi máquina de 800MHz, el cálculo del hash SHA512 de un archivo aleatorio de 16k tomó 3 ms, por lo que incluso en una tostadora debería ser relativamente rápido.

1 Puedes ver lo mismo con los generadores de números aleatorios. Los PRNG criptográficos tienen como objetivo proporcionar números aleatorios que son realmente difíciles de adivinar, mientras que los PRNG no criptográficos tienen como objetivo dar números que parezcan aleatorios a primera vista y hacer eso rápido.

    
respondido por el David Stockinger 29.05.2018 - 11:26
fuente
1

Respuesta corta: No, no es seguro usar MD5 para verificar la integridad de los archivos, cortos o largos.

La respuesta completa depende de la confianza que tenga en la distribución de errores .

¿Existe una posibilidad aleatoria independiente de que los bits se inviertan en cada posición en el archivo debido a la transmisión en un canal con poca pérdida, como un puerto serie? Si es así, podría usar MD5, pero es mucho más barato usar un CRC, que garantiza la detección de un solo giro de bits, y puede garantizarse mediante elecciones estándar del polinomio CRC para detectar todos los números impares de cambios de bits.

Pero usted preguntó acerca de secure , lo que sugiere que está considerando adversarios ligeramente más inteligentes que un puerto serie con pérdida. Si no está seguro de que los errores son tiradas de bits aleatorias independientes, entonces no use MD5 o un CRC. Es muy fácil para los adversarios inteligentes encontrar parejas de archivos distintos que comparten un hash MD5 común, o suma de comprobación CRC, y en muchos casos esto puede permitir que un adversario falsifique documentos que su sistema MD5 no detectará. El tamaño del archivo no es relevante: es fácil encontrar colisiones de MD5 en archivos de tan solo 64 bytes, sin límite de cuánto tiempo pueden durar.

Hay un lugar para discutir las diferencias técnicas entre ataques de colisión, ataques de preimagen y ataques de segunda preimagen. Una respuesta a una pregunta general sobre si es segura verificar la integridad de los archivos no es un lugar así. Cuando tienes un protocolo específico en mente, puedes articular los poderes precisos del adversario y cómo se comportarán los usuarios legítimos en el protocolo, y tienes restricciones de implementación que limite su elección de funciones hash para que deba considerar MD5, luego podemos discutir (quizás en crypto.SE) si es seguro usar MD5 en ese protocolo para lograr la seguridad que espera alcanzar contra un adversario como este.

Pero sería mucho más simple y seguro si usas SHA-2, o SHA-3, o BLAKE2.

    
respondido por el Squeamish Ossifrage 30.05.2018 - 15:40
fuente
0

El tamaño por sí mismo no es muy importante, los datos de colisión en realidad pueden ser tan pequeños como un solo bloque.

Sin embargo, está mucho más seguro con una colección de archivos de texto que con una colección de archivos PDF o similares.

¿Por qué? porque los resultados de un ataque de colisión generalmente resultan en que ambos archivos del par contengan algo de "basura de aspecto aleatorio". En un formato enriquecido, esta basura de apariencia aleatoria se puede ocultar a la vista para que el atacante pueda engañar al administrador de la colección para que acepte uno de sus pares de archivos en colisión.

Sin embargo, en un archivo de texto, el contenido es sencillo para que todos lo vean.

    
respondido por el Peter Green 29.05.2018 - 19:36
fuente
0

El tamaño del archivo no hace una diferencia. MD5 se basa en construcción Merkle – Damgård , que es vulnerable a la ataque de extensión de longitud . 15kb es suficiente para hacer el ataque de extensión de longitud. Existen numerosas colisiones y métodos conocidos para generar colisiones MD5 que solo tienen unos cientos de bytes de longitud, y una vez que se encuentra una colisión de base, ser vulnerable a la extensión de la extensión significa que se pueden usar para generar un número arbitrario de colisiones adicionales.

    
respondido por el Lie Ryan 29.05.2018 - 06:11
fuente

Lea otras preguntas en las etiquetas