Hash para descargas seguras de archivos? [cerrado]

1

¿Existe alguna estructura hash que pueda usarse para descargar de forma segura un archivo y validar su contenido?

Parece que todos los hashes como MD5 están hechos para verificar la consistencia y son vulnerables a los ataques de extensión hash, por lo que es posible crear otro archivo con el mismo MD5 simplemente agregándolo al final.

Estoy escribiendo un servicio automatizado que descarga datos a través de canales inseguros y quiero asegurarme de que MITM no pueda alterar el archivo.

ACTUALIZACIÓN : el hash se transfiere al usuario a través de un canal seguro. Ahora mismo estoy usando la combinación de hash + filesize, para evitar ataques de extensión de hash. ¿Es posible usar solo la función hash simple?

ACTUALIZACIÓN 2 : entendí mal lo que es un ataque de extensión de longitud . Citando @CodeInChaos:

  

No te da una colisión, simplemente te permite calcular el hash de un archivo más largo dado el hash de un archivo más corto cuyo contenido no sabes

Por lo tanto, no es posible simplemente agregar un archivo al hash existente para obtener el mismo hash. Hacer esto significará buscar colisiones en un archivo más largo, por lo que la pregunta se reduce a lo clásico "qué tan fuerte es la función hash". Por otro lado, sigue siendo interesante por qué SHA3 no es vulnerable a la extensión de hash, pero ese es otro tema.

    
pregunta anatoly techtonik 17.11.2015 - 10:44
fuente

3 respuestas

6

Los hashes modernos como SHA-256 proporcionan una fuerte protección contra los ataques de colisión de hash, es decir, es prácticamente imposible crear un programa diferente que tenga el mismo hash que el programa original, sin importar si el tamaño es el mismo o difiere.

Esto todavía deja la posibilidad de que el atacante no solo modifique el archivo, sino también el hash que lo acompaña, lo que significa que debe encontrar una forma de transferir el hash de forma segura al usuario.

    
respondido por el Steffen Ullrich 17.11.2015 - 11:14
fuente
2

Estás pensando demasiado en esto, y es muy poco probable que tu escenario de ataque suceda.

Primero, si está usando un canal seguro para enviar el hash (me imagino que está usando SSL / TLS), debe usar el mismo canal para enviar el archivo. TLS es muy seguro si se implementa correctamente, es una solución de disparar y olvidar , y la sobrecarga administrativa es bastante insignificante después de la implementación. Es un poco más caro que el HTTP simple, pero los beneficios son más que compensados.

Segundo, si un atacante es capaz de interceptar la transmisión, manchar el archivo descargado y redirigir el archivo modificado a su cliente, nada le impedirá hacer lo mismo con el hash. Podemos decir que es muy probable que el archivo sea más grande que el hash. Interceptar un hash sería trivial.

Tercero, si el atacante tiene suficientes recursos para interceptar la transmisión, descargar el archivo original, crear una colisión en un hash SHA-256 y enviar el archivo modificado, tendrá los recursos suficientes para pedirle que envíe el archivo modificado a El receptor con un hash correcto y no le diga al receptor. Y eso sería más fácil para el atacante, y usted no tiene ninguna protección en contra.

No te preocupes por las descargas de archivos interceptados y modificados. Preocuparse por el error en la transmisión. Incluso un CRC32 es suficiente para verificar una descarga. Si esta transmisión se produce a través de HTTP (s), puede usar un encabezado personalizado:

HTTP/1.0 200 OK
Server: SuperHTTPServer/20.1
Date: Sat, 01 Jan 2000 01:23:45 GMT
Content-type: text/html; charset=UTF-8
Content-Length: 12345
X-MD5-Hash: cc0c8d81fc54e0bd077a5678eaadf2ff

El cliente personalizado tendrá que leer el lector, obtener el hash y calcular el resultado. Puede enviar tanto el archivo como el hash utilizando solo una transacción.

Por cierto, el Hash Length Extension Attack no es lo que piensas. Como dijo CodesIsChaos, el ataque consiste en obtener un hash y una cadena parcial, agregarle algo y recalcular el hash incluso sin conocer la cadena original. Y si bien es posible crear una colisión con MD5, no es trivial, y ciertamente no es práctico crear sobre la marcha durante la transmisión de un archivo.

    
respondido por el ThoriumBR 17.11.2015 - 13:32
fuente
1

MD5 y SHA256 son funciones de hash que se usan comúnmente para calcular la suma de comprobación de un archivo para fines de verificación. Una suma de control MD5 tiene una longitud de 128 bits, mientras que una suma de control SHA256 tiene una longitud de 256 bits, por lo que es menos probable que un atacante encuentre una colisión si usa SHA256.

Otra cosa que puede hacer para que los usuarios puedan verificar la autenticidad de su archivo es firmarlo digitalmente. Por supuesto, esto requiere que distribuyas tu clave pública de firma de tal manera que tus usuarios puedan verificar su autenticidad.

    
respondido por el mti2935 17.11.2015 - 11:22
fuente

Lea otras preguntas en las etiquetas