2011-02-07 12 views
6

Tengo un cliente que está distribuyendo archivos binarios grandes internamente. También están aprobando sumas de comprobación md5 de los archivos y aparentemente verificando los archivos con la suma de comprobación antes de usarlos como parte de su flujo de trabajo.¿Cuán probable es md5 sumas positivas falsas?

Sin embargo, afirman que "a menudo" se encuentran con daños en los archivos donde el md5 todavía dice que el archivo es bueno.

Todo lo que he leído sugiere que esto debería ser muy poco probable.

¿Suena probable? ¿Algún otro algoritmo hash proporcionaría mejores resultados? ¿Debería realmente estar viendo problemas de proceso, como afirmar que comprueban la suma de comprobación, pero que realmente no lo hacen?

NB, todavía no sé qué significa "a menudo" en este contexto. Están procesando cientos de archivos por día. No sé si esto es una ocurrencia diaria, mensual o anual.

+5

Haga que proporcionen un ejemplo de un archivo "corrupto" y el original "bueno". –

+1

¿Es posible que la suma de md5 se haya calculado en un archivo dañado o que la corrupción se haya producido después de calcular la suma? Para estar seguro, tome la sugerencia de Anon y obtenga un ejemplo de dos archivos con la misma suma de comprobación. – BMitch

+0

Entonces, ¿desde entonces, has mirado la idea de sincronización de bittorrent? getsync.com] – dlamblin

Respuesta

9

MD5 es una función hash criptográfica de 128 bits, por lo que los diferentes mensajes se deben distribuir bastante bien en el espacio de 128 bits. Eso significaría que dos archivos (excluyendo archivos creados específicamente para derrotar a MD5) deberían tener una probabilidad de colisión de 1 en 2^128. En otras palabras, si se compara un par de archivos cada nanosegundo, todavía no habría sucedido.

+1

Bueno, ya sabes que ya pasó, ¿verdad? Por supuesto, esas colisiones fueron provocadas (una intentaba hacer dos archivos diferentes que tengan la misma suma de comprobación MD5), sin embargo, esto no cambia el hecho de que hay varios archivos conocidos por la humanidad (y estos también están en la naturaleza) que producen exactamente la misma suma de comprobación MD5, a pesar de que contienen datos totalmente diferentes. – Mecki

+2

@Mecki: ¿Has leído la parte donde dije "(excluyendo archivos creados específicamente para derrotar a MD5)"? – recursive

+0

Pero nunca tiene solo dos archivos, tiene un conjunto de archivos y no quiere dos hash con el mismo valor. La probabilidad se supone que es sqrt (2^128) que es 2^64. Puede almacenar aproximadamente 4.3 billones de archivos si usó un hash de 64 bits o 280 billones de archivos con el speace de MD5. Cuando hayas llegado a 2^128 archivos, tienes garantizado que tu próximo archivo colisionará, si has logrado evitar colisiones hasta ese punto; que no puedes tener, prácticamente. – dlamblin

5

Si un archivo está dañado, la probabilidad de que el archivo dañado tenga la misma suma de comprobación md5 que el archivo no dañado es 1: 2^128. En otras palabras, sucederá casi tan "a menudo" como nunca. Es astronómicamente más probable que su cliente esté informando incorrectamente lo que realmente sucedió (como si estuvieran calculando el hash incorrecto)

4

Suena como un error en el uso de MD5 (tal vez están falsificando archivos MD5), o un error en la biblioteca que están usando. Por ejemplo, un programa anterior de MD5 que utilicé una vez no manejó archivos de más de 2GB.

This question sugiere que, en promedio, usted obtiene una colisión en promedio cada 100 años si generaba 6 mil millones de archivos por segundo, por lo que es bastante improbable.

3

¿Esto suena probable?

No, la probabilidad de una corrupción aleatoria haciendo que la misma suma de control es 1 en 2 o 3,40 × 10. Este número pone 1 en un mil millones (10) posibilidad a la vergüenza.

¿Algún otro algoritmo hash proporcionar mejores resultados?

Probablemente no. Mientras que MD5 se ha roto por resistencia a la colisión contra ataque, está bien contra la corrupción aleatoria y un estándar popular para usar.

¿Debería realmente estar viendo problemas de proceso como que dicen verificar la suma de comprobación, pero no realmente hacerlo?

Probablemente, pero tener en cuenta todos los posibles puntos de problemas:

  1. archivo dañado antes de la generación MD5
  2. archivo dañado después de la verificación MD5.
  3. programa MD5 o estructura de soporte tiene un error
  4. mal uso del operador (no intencional, por ejemplo, ejecutando el programa de MD5 en el archivo equivocado)
  5. abuso del operador (intencional, por ejemplo, saltarse el paso de verificación)

si es el último y último pensamiento es distribuir los archivos en un formato de envoltura que obligue al operador a desenvolver el archivo, pero el desenvolvimiento realiza la verificación durante la extracción. Estoy pensando en algo como Gzip o 7-Zip que admite archivos de gran tamaño y, posiblemente, desactivar la compresión (no sé si lo hacen).

0

Existen muchos motivos por los cuales los binarios no se distribuirán o, si lo hacen, hay corrupción (firewall, limitación de tamaño, inserción de virus, etc.). Siempre debe cifrar archivos (incluso un cifrado de bajo nivel es mejor que ninguno) al enviar archivos binarios para ayudar a proteger la integridad de los datos.

Cuestiones relacionadas