Está utilizando 2 diferentes funciones hash una buena forma de comprobar la integridad de los archivos?

StackOverflow https://stackoverflow.com/questions/537989

  •  22-08-2019
  •  | 
  •  

Pregunta

Tengo un sitio web donde los usuarios pueden subir sus archivos; éstos se almacenan en el servidor y sus metadatos registrados en una base de datos. Estoy poniendo en práctica algunas comprobaciones de integridad simples, es decir, "es el contenido de este archivo ahora byte por byte idénticos como cuando fue subido?"

Un ejemplo: para el contenido de userfile.jpg, MD5 hash es 39f9031a154dc7ba105eb4f76f1a0fd4 y SHA-1 hash es 878d8d667721e356bf6646bd2ec21fff50cdd4a9. Si cambia el contenido de este archivo, pero tiene el mismo hash MD5 antes y después, es probable que el hash SHA-1 también se mantendrá igual (Con hash, a veces se puede obtener una colisión de hash? - podría suceder esto con dos algoritmos hash diferentes a la vez?)

O es el calcular dos valores hash diferentes para un archivo sin sentido (y que debería probar algún otro mecanismo para la verificación de la integridad)?


Edit: No estoy realmente preocupado por la corrupción accidental, pero se supone que debo evitar que los usuarios cambien el archivo desapercibido ( cumpleaños ataque y amigos).

Probablemente voy a ir con uno de hash SHA-512 - de los controles no suceden a menudo para ser un cuello de botella y de todos modos, "Como dice Bruce Schneier, no hay suficientes sistemas rápidos, inseguras ya -. @ MichaelGG en los comentarios".

¿Fue útil?

Solución

MD5 es probablemente seguro de lo que estás haciendo, pero no hay razón para seguir usando un hash con defectos conocidos. De hecho, no hay razón para que no se debe usign SHA256 o SHA512, a menos que tenga algún conocido importante cuello de botella.

Edit: Para aclarar, no hay razón para usar dos algoritmos; sólo tiene que utilizar uno que se ajuste a lo que necesita. Si usted está preocupado por la gente que hace las colisiones MD5 sobre usted (como en, ¿es una amenaza a la seguridad?), A continuación, utilizar un algoritmo que no es tan débil, como SHA256.

Edición 2: Para hacer frente a un malentendido al parecer todavía común: Encontrar una colisión al azar en un hash no es una probabilidad de 1/2 ^ n. Está más cerca de 1/2 ^ (n / 2). Por lo que un hash de 128 bits puede ser probablemente chocó con 2 ^ 64 intentos. Ver ataque de cumpleaños para los detalles.

Otros consejos

Comprobación del hash MD5 por sí sola es suficiente para la mayoría de los propósitos. Aunque si es necesario, no hay daño en el control de la SHA1, además. Tenga en cuenta la posibilidad de captura de algo que se pierda con sólo la verificación MD5 es extremadamente remota.

Tenga en cuenta que en términos de escalabilidad, la comprobación adicional añade una carga innecesaria en su servidor.

Para la integridad del archivo (por ejemplo la corrupción accidental / random), uno de hash debe ser suficiente. 128 bits = 2 -128 probabilidad de un error no detectado, que es para todos los propósitos prácticos lo suficientemente pequeñas.

Para la integridad criptográfica de archivos (por ejemplo, la seguridad de que alguien no ha sustituido maliciosamente un archivo alternativo), creo que estamos hablando de un enfoque de correa y tirantes.

MD5 se considera "débil" en el sentido de que es posible construir dos documentos con el mismo hash con una cantidad mucho menor de tiempo de CPU necesario que le tomaría a una búsqueda de fuerza bruta ( "resistencia a la colisión" de MD5 ha sido roto).

Pero no es (por lo que yo sé) "débil" desde la perspectiva de, si usted tiene un documento arbitrario X, otra persona puede crear un documento en Y con el mismo hash con un tiempo mucho más fácil que una fuerza bruta Búsqueda (MD5 todavía tiene "resistencia imagen inversa"). (La distinción es como la diferencia entre ir a una fiesta y encontrar dos personas con la misma fecha de nacimiento, frente a la búsqueda de otra persona con la misma fecha de nacimiento que los suyos.)

Aunque MD5 se rompe en ese sentido, es improbable que alguien pueda llegar a un algoritmo para crear documentos para que coincida con un hash MD5 arbitraria y un hash SHA1 arbritrary.

Esto suena algo así como la tensión entre las dos máximas "no poner todos los huevos en una sola canasta" frente a "poner todos los huevos en una canasta, y ver la cesta". O como gastar dinero en dos cerraduras de seguridad frente a una cerradura de seguridad, que es el doble de bueno y cuesta el doble. Lo ideal sería mejor para pasar el tiempo de CPU calcular un Secure Hash de 256 bits en lugar de dos menos seguros hash de 128 bits utilizando diferentes algoritmos. (Sí, lo sé SHA1 es 160bit, esto es sólo un ejemplo) Usted tiene mayor probabilidad de obtener un mejor rendimiento de esta manera para un nivel deseado de seguridad - es decir, si el ISN hash de 256 bits 't roto. Si está roto, puede ser mejor con el enfoque de dos algoritmo sólo para cubrir sus apuestas.

Pero de nuevo si esto es sólo la integridad de protección contra errores, un hash MD5 está muy bien.

edit: por citar algunas fuentes útiles: 1 2 3 , "MD5 considerado hoy perjudicial" , RFC4270 , última actualización del NIST en el SHA-3 la competencia, y "el SHA-3 Zoo ".

En general, si los valores hash MD5 no coinciden, el SHA1 (o cualquier otro de hash similares) no corresponde a ninguno. No voy a decir que no hay posibles casos en que no podría suceder (porque todos sabemos que hay colisiones en ambos algoritmos), pero yo diría que probablemente nunca sucederá en su situación.

Mis pensamientos son que proporciona un hash es probablemente suficiente; más de un picadillo se convierte en ardua para verificar (tener que verificar uno es lo suficientemente malo, dependiendo de los servicios disponibles para la plataforma) , y seriamente dudo que va a ver tan increíble corrupción de un archivo como para dar lugar a una colisión perfecta.

Nota: No haga caso de la materia sobre la verificación de ser un dolor; al volver a leer la pregunta, revisé esto - Tomé el significado original para ser verificación de hash para los usuarios la descarga del archivo. Si, por supuesto, que es lo que se entiende, entonces lo que he dicho se sigue aplicando, creo.

Debido a que los dos valores hash se calculan de manera diferente, dos archivos con el mismo hash MD5 no son más propensos a tener el mismo hash SHA-1 de dos archivos aleatorios. Si la probabilidad de colisión al azar, ya sea con hash es (estadio) 2 ^ 128, la probabilidad de colisión al azar en tanto será 2 ^ 256.

En efecto, se pasa de muy baja a muy, muy bajo.

Es la equivilent de pasar de 128 bits para el cifrado de 256 bits con el fin de evitar que alguien adivinar al azar su clave de 128 bits.

Como una estimación aproximada, posibilidad de un falso positivo MD5 es 1 / (2 ^ 128), la oportunidad de una falsa positiva SHA-1 es 1 / (2 ^ 160), por lo que la probabilidad de un falso positivo para ambos algoritmos es de entre 1 / (2 ^ 128) y 1 / (2 ^ 288), pero usted puede estar bastante seguro de que es cerca de 1 / (2 ^ 288) ya que ambos algoritmos se han probado completamente estadísticamente.

Al menos, cuando se utilizan dos hashes diferentes, que están protegidos muy bien contra los ataques intencionales en uno de los algoritmos.

EDIT: Después de algunas investigaciones, me encontré con este Wikipedia Nota que ataque de cumpleaños MD5 se puede hacer en menos de 1 minuto, así que parece mejor usar un algoritmo diferente como MD5 junto con SHA-1 aquí. ataque de cumpleaños para SHA-1 toma 2 ^ 69 operaciones en el momento .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top