El uso de hashes de archivos SHA1 y MD5 ayudaría a reducir el riesgo de eliminar no duplicados

2

Estoy creando un programa para comparar todos los archivos en una unidad de 3Tb mediante hash y eliminar duplicados. Inicialmente iba a usar MD5, pero me preocupaba que con 3 TB de archivos, hubiera una pequeña posibilidad de colisión que causara la eliminación de un duplicado.

Para remediar esto, pensé que cambiaría a SHA1, pero luego tuve la idea de que si comparaba ambos, habría incluso menos posibilidades de colisión.

¿Alguien aquí conoce ambos algoritmos lo suficientemente bien como para confirmar o negar esto?

Estoy considerando la posibilidad de que una colisión de hash SHA1 necesariamente signifique que el hash MD5 también colisionaría, en cuyo caso, comparar ambos sería solo una pérdida de tiempo.

    
pregunta Dave Goldsmith 16.02.2018 - 02:28
fuente

2 respuestas

1

Primero que nada, sí, tanto MD5 como SHA1 se han retirado del uso criptográfico porque es posible construir pares de mensajes que produzcan el mismo valor de hash (también conocido como "colisiones"). Dicho esto, la posibilidad de golpear una colisión al azar es absurdamente baja.

MD5 tiene una salida de 128 bits, SHA1 es de 160 bits. Asumamos que un archivo con hash se procesará en una de las 2 posibles salidas 128 / 2 160 con igual probabilidad, luego, en promedio, espera encontrar una colisión después del hashing 2 127 / 2 159 archivos diferentes.

Supongamos que ha llenado un disco duro con archivos de 512 bits (64 bytes). Necesitaría 2 133 bits = 1.3 x 10 27 TB para MD5, o 2 165 bits = 5.8 x 10 36 TB para almacenar estos archivos. Para comparación, se estima que para 2020 la especie humana producirá 44 zetabytes (4.4 × 10 10 TB) de datos por año.

Por lo tanto, incluso si has eliminado todos los archivos del planeta con MD5, solo tienes 1 en 10 26 posibilidad de colisión por casualidad.

Para responder a su pregunta original:

  

Para remediar esto, pensé que cambiaría a SHA1, pero luego tuve la idea de que si comparaba ambos, habría incluso menos posibilidades de colisión.   ¿Alguien aquí conoce ambos algoritmos lo suficientemente bien como para confirmar o negar esto?

Sí, es cierto que, dado que son funciones hash diferentes, las posibilidades de que existan dos mensajes que sean colisiones para ambas son minúsculas. No sé si es menos minúsculo que la posibilidad de colisión en SHA-2/256 o SHA-2/512. En este punto, estamos debatiendo las probabilidades astronómicas (es decir, la posibilidad de obtener una colisión es más pequeña que la cantidad de átomos en la cosa del tipo del universo), ¿así que / encogerse de hombros?

Ahora, si está hablando de ataques maliciosos (es decir, archivos diseñados específicamente para engañar a MD5 o SHA1), entonces tal vez tenga un punto. ... En ese caso, use SHA2 (que es de 256 bits) y estará bien :)

    
respondido por el Mike Ounsworth 16.02.2018 - 03:07
fuente
0

La respuesta de Mike, extendida con el comentario de la paradoja del cumpleaños, es buena. Esto no es en realidad una respuesta a tu pregunta, sino un enfoque alternativo a tu problema que te tranquilizará si no estás convencido por la matemática que todos los demás te lanzaron.

Como todos ya lo han dicho, las colisiones de hash son muy, muy poco probables.

Pero si desea estar 100% seguro antes de eliminar un duplicado que podría no ser uno, simplemente compare los bytes en byte a byte antes de eliminar la copia.

La determinación del hash de un archivo requiere que lea todo el archivo de todos modos. Estarás ocupado por un tiempo (piensa en varias horas hasta varios días, dependiendo de la velocidad de tu disco) simplemente generando hashes para todos tus archivos. Por lo tanto, suponiendo que encuentre un 1% de duplicados posibles después de haber copiado cada archivo, tener que leer este 1% de ellos nuevamente para la comparación de bytes por bytes no agregará mucha sobrecarga.

Otra prueba (muy fácil y prácticamente gratuita) que puedes agregar antes de comparar bytes de los archivos es comparar el tamaño del archivo. Si no coincide, los archivos obviamente no son idénticos, incluso si sus hashes chocan. Pero la prueba es bastante inútil, ya que es casi seguro que no te salvará de comparar bytes, incluso un solo par de archivos que tienen hashes duplicados.

    
respondido por el Pascal 17.02.2018 - 02:10
fuente

Lea otras preguntas en las etiquetas