¿El hashing MD5 de un archivo todavía se considera un método lo suficientemente bueno como para identificarlo de manera única debido a la ruptura del algoritmo MD5 y problemas de seguridad, etc.? La seguridad no es mi principal preocupación aquí, pero sí la identificación única de cada archivo.
¿Alguna idea?
Respuestas:
Si. MD5 se ha roto por completo desde una perspectiva de seguridad, pero la probabilidad de una colisión accidental sigue siendo muy pequeña. Solo asegúrese de que los archivos no sean creados por alguien en quien no confíe y que pueda tener intenciones maliciosas.
fuente
Para fines prácticos, el hash creado puede ser adecuadamente aleatorio, pero en teoría siempre hay una probabilidad de colisión, debido al principio de Pigeonhole . 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 solo el primer paso de una verificación, especialmente si se sabe que el algoritmo hash crea fácilmente colisiones. Para averiguar de manera confiable si dos archivos con el mismo hash son diferentes, tendría que comparar esos archivos byte por byte.
fuente
MD5 será lo suficientemente bueno si no tienes adversario. Sin embargo, alguien puede (a propósito) crear dos archivos distintos que se combinan con el mismo valor (que se llama 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 un asunto 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, el uso de MD5 es una mala relación pública (si usa MD5, prepárese para tener que justificarse, mientras que nadie cuestionará su uso de SHA-256).
fuente
return 0;
en areturn 1;
). Esto es muy poco probable, pero el riesgo de una colisión con SHA-256 es aún menor que eso. Matemáticamente, no puede estar seguro de que dos archivos que tengan el mismo valor hash sean idénticos, pero tampoco puede estar seguro de eso al comparar los archivos, siempre y cuando utilice una computadora para la comparación. Lo que quiero decir es que no tiene sentido ir más allá de 99.999 ... 9% de certeza, y SHA-256 ya ofrece más que eso.Un md5 puede producir colisiones. Teóricamente, aunque altamente improbable, un millón de archivos seguidos pueden producir el mismo hash. No pruebe su suerte y verifique las colisiones md5 antes de almacenar el valor.
Personalmente, me gusta crear md5 de cadenas aleatorias, lo que reduce la sobrecarga de hashing archivos grandes. Cuando se encuentran colisiones, itero y vuelvo a hacer hash con el contador de bucle adjunto.
Puede leer sobre el principio del casillero .
fuente
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 sentir curiosidad: se pueden descargar fácilmente desde http: / /www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html , yo mismo al escribir esta respuesta descargué 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 manera ú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 todavía no se conozcan colisiones.
fuente
Personalmente, creo que las personas usan sumas de verificación sin procesar (elija su método) de otros objetos para actuar como identificadores únicos, demasiado cuando realmente quieren hacerlo es tener identificadores únicos. La toma de huellas dactilares de un objeto para este uso no era la intención y es probable que requiera más pensamiento que usar un mecanismo de integridad uuid o similar.
fuente
MD5 se ha roto, podría usar SHA1 en su lugar (implementado en la mayoría de los idiomas)
fuente
Cuando se combinan cadenas (o archivos) cortos (<unas pocas K?), Se pueden crear dos claves hash md5, una para la cadena real y otra para el reverso de la cadena concatenada con una cadena asimétrica corta. Ejemplo: md5 (reverse (string || '1010')). Agregar la cadena adicional asegura que incluso los archivos que consisten en una serie de bits idénticos generan dos claves diferentes. Por favor, comprenda que incluso bajo este esquema hay una posibilidad teórica de que las dos claves hash sean idénticas para cadenas no idénticas, pero la probabilidad parece extremadamente pequeña, algo en el orden del cuadrado de la probabilidad de colisión md5 individual, y el ahorro de tiempo puede ser considerable cuando el número de archivos está creciendo. También se podrían considerar esquemas más elaborados para crear la segunda cadena,
Para verificar las colisiones, se puede ejecutar esta prueba para determinar la unicidad de las claves hash md5 para todos los bit_vectors en una base de datos:
seleccione md5 (bit_vector), count (*), bit_and (bit_vector) de db con el
grupo bit_vector por md5 (bit_vector), bit_vector que tiene bit_and (bit_vector) <> bit_vector
fuente
Me gusta pensar en MD5 como un indicador de probabilidad al almacenar una gran cantidad de datos de archivo.
Si los valores hash son iguales, sé que tengo que comparar los archivos byte por byte, pero eso podría suceder solo 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 .
fuente