¿MD5 sigue siendo lo suficientemente bueno como para identificar archivos de forma única?


Es MD5 hash un archivo todavía se considera un método lo suficientemente bueno para identificarlo de forma única dada toda la ruptura del algoritmo MD5 y los problemas de seguridad, etc? La seguridad no es mi principal preocupación aquí, pero la identificación única de cada archivo es.

¿Algún pensamiento?

 125
Author: ROMANIA_engineer, 2010-10-27

9 answers

Sí. MD5 ha sido completamente roto desde una perspectiva de seguridad, pero la probabilidad de una colisión accidental es todavía muy pequeña. Solo asegúrese de que los archivos no estén siendo creados por alguien en quien no confíe y que pueda tener una intención maliciosa.

 83
Author: Marcelo Cantos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-27 10:40:06

Para propósitos prácticos, el hash creado podría ser adecuadamente aleatorio, pero teóricamente siempre hay una probabilidad de una colisión, debido al principio de Casillero. Tener diferentes hashes ciertamente significa que los archivos son diferentes, pero obtener el mismo hash no significa necesariamente que los archivos sean idénticos.

El uso de una función hash para ese propósito, sin importar si la seguridad es una preocupación o no, por lo tanto, siempre debe ser el primer paso de un comprobar, especialmente si se sabe que el algoritmo hash crea colisiones fácilmente. Para averiguar de forma fiable si dos archivos con el mismo hash son diferentes, tendría que comparar esos archivos byte-by-byte.

 30
Author: stapeluberlauf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-28 09:29:11

MD5 será suficiente si no tienes adversario. Sin embargo, alguien puede (a propósito) crear dos archivos distintos que hash al mismo valor (que se llama una colisión), y esto puede o no ser un problema, dependiendo de su situación exacta.

Dado que saber si las debilidades conocidas de MD5 se aplican a un contexto dado es una cuestión sutil, se recomienda no usar MD5. El uso de una función hash resistente a colisiones (SHA-256 o SHA-512) es la respuesta segura. Además, usar MD5 es malo público relaciones (si usas MD5, prepárate para tener que justificarte; mientras que nadie cuestionará tu uso de SHA-256).

 18
Author: Thomas Pornin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-27 13:47:08

Un md5 puede producir colisiones. Teóricamente, aunque muy improbable, un millón de archivos seguidos pueden producir el mismo hash. No ponga a prueba su suerte y compruebe si hay colisiones md5 antes de almacenar el valor.

Personalmente me gusta crear md5 de cadenas aleatorias, lo que reduce la sobrecarga de hash de archivos grandes. Cuando se encuentran colisiones, itero y re-hash con el contador de bucle adjunto.

Puedes leer sobre el principio del casillero.

 9
Author: afilina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 19:17:45

No lo recomendaría. Si la aplicación funcionara en un sistema multiusuario, podría haber un usuario, que tendría dos archivos con el mismo hash md5 (podría ser ingeniero y jugar con dichos archivos, o simplemente ser curioso - son fácilmente descargables desde http://www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html , yo mismo durante la escritura de esta respuesta descargado dos muestras). Otra cosa es, que algunas aplicaciones pueden almacenar tales duplicados por cualquier razón (no estoy seguro, si existen tales aplicaciones, pero existe la posibilidad).

Si está identificando de forma única los archivos generados por su programa, diría que está bien usar MD5. De lo contrario, recomendaría cualquier otra función hash donde aún no se conozcan colisiones.

 6
Author: tach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-10 01:19:01

Personalmente creo que la gente utiliza sumas de comprobación sin procesar (elige tu método) de otros objetos para actuar como identificadores únicos demasiado cuando realmente quieren hacer es tener identificadores únicos. La huella digital de un objeto para este uso no fue la intención y es probable que requiera más pensamiento que el uso de un uuid o un mecanismo de integridad similar.

 2
Author: hpavc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-27 11:19:23

MD5 se ha roto, podría usar SHA1 en su lugar (implementado en la mayoría de los idiomas)

 0
Author: Guillaume Lebourgeois,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-27 10:34:36

Al hash corto (

Para comprobar si hay colisiones se puede ejecutar esta prueba para la unicidad de las claves hash md5 para todos los db:

Seleccione md5 (bit_vector), count (*), bit_and ( bit_vector) desde db con bit_vector
grupo por md5 (bit_vector), bit_vector teniendo bit_and (bit_vector) bit_vector

 0
Author: marcopolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-27 17:08:57

Me gusta pensar en MD5 como un indicador de probabilidad cuando se almacena una gran cantidad de datos de archivo.

Si los hashes son iguales, entonces sé que tengo que comparar los archivos byte por byte, pero eso solo puede suceder algunas veces por una razón falsa, de lo contrario (los hashes no son iguales) Puedo estar seguro de que estamos hablando de dos archivos diferentes.

 0
Author: Shimmy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-26 07:41:37