¿Qué tan únicas son las sumas de verificación?


10

Tengo muchos archivos que necesito ordenar; y lamentablemente hay muchos archivos con el mismo nombre pero diferente contenido, y hay el mismo contenido con diferentes nombres de archivo.

Estoy pensando en usar md5sumpara generar sumas de verificación para los archivos, pero necesito saber: ¿es posible que dos archivos diferentes (es decir, contenido diferente) generen la misma suma de verificación?

Si es así, ¿qué tan probable es que suceda?

¿Sería posible usar dos programas de suma de verificación diferentes no relacionados (es decir, no en la misma "familia") para generar dos sumas de verificación, bajo el supuesto de que si bien dos archivos diferentes pueden generar la misma suma de verificación para cualquiera de los programas de suma de verificación, nunca le pasaría a ambos a la vez?


2
Recuerde que md5 / sha2 / etc es un HASH de datos, por lo tanto, asigna muchos bits de información a un espacio de bits más pequeño, por lo que es posible que haya colisiones. Un HASH no es una clave única y si ese es su objetivo ... Recomiendo encarecidamente hacer otra cosa.
mdpc

Para ordenar archivos, MD5 está bien. Desde crypto.stackexchange.com/a/18337/49945 , la probabilidad de colisión de la suma de verificación de dos contenidos diferentes es 1 en 2 ^ 128, que es aproximadamente 1 en 10 ^ 43. Eso es muy, muy raro. Si haces una comparación por microsegundo, en promedio obtendrías una colisión una vez cada 10 ^ 20 años. Solo han pasado ~ 10 ^ 9 años desde Big Bang, por lo que las probabilidades de que ocurra una colisión INCLUSO EN UNA SOLA VEZ, en una comparación por microsegundo de Big Bang hasta ahora, solo son 1 en 10 ^ 11. Dado cien mil millones de computadoras simultáneas, solo ~ una habría visto una colisión todavía.
ToolmakerSteve

... aunque no está claro por qué usaría cualquier algoritmo hash al ordenar los archivos. Si hay archivos con el mismo nombre, deben ser identificables por algún otro criterio; Por ejemplo, debe haber alguna ruta única al archivo, o tal vez un desplazamiento de bytes dentro de algún dispositivo de almacenamiento. Cualquiera de los dos sería una forma más útil de referirse únicamente al archivo.
ToolmakerSteve

Respuestas:


10

Dos archivos con el mismo contenido pero nombres de archivo diferentes: ( archivo1 y archivo2 ):

cat file1
this is a simple file

cat file2
this is a simple file

md5sum file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file2
7de45bf879db49de7e2eacea23e6c165  file2

Dos archivos con diferentes contenidos pero los mismos nombres de archivo: ( archivo1 y archivo1 )

cat file1
this is a simple file
cat file1
this is a simple file with extra contents
md5sum file1 #first file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file1 #second file1
c7c8f3fd9ddd7a926c31416a69063e4e  file1

De la entrada de wiki ,

Sin embargo, es muy poco probable que dos archivos no idénticos en el mundo real tengan el mismo hash MD5, a menos que se hayan creado específicamente para tener el mismo hash.

Pero, el algoritmo MD5 tiene sus propios defectos.

Sin embargo, ahora que es fácil generar colisiones MD5, es posible que la persona que creó el archivo cree un segundo archivo con la misma suma de verificación, por lo que esta técnica no puede proteger contra algunas formas de manipulación maliciosa. Además, en algunos casos, no se puede confiar en la suma de comprobación (por ejemplo, si se obtuvo a través del mismo canal que el archivo descargado), en cuyo caso MD5 solo puede proporcionar la funcionalidad de comprobación de errores: reconocerá una descarga corrupta o incompleta, que se vuelve más probable al descargar archivos más grandes.

Recomendaría usar sha1 para calcular la suma de verificación ya que producir colisiones no es tan fácil cuando se usan algoritmos sha1 . Producir la suma de comprobación sha1 es bastante fácil como puedes ver aquí .


NOTA: la pregunta es sobre la ordenación de archivos; la recomendación de usar sha1no es relevante para esa tarea; solo importa cuando le preocupa la seguridad .
ToolmakerSteve
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.