¿La verificación de una fracción adicional de un archivo reduce las posibilidades de colisión?

7

Si tengo un archivo de longitud indeterminada y genero el SHA256 de ese archivo, luego genero el SHA256 de la primera mitad y la última mitad, luego verifico los tres, ¿eso disminuye las probabilidades de un ataque de colisión?

Ejemplo básico:

The cat is in the house.

SHA256: aa4a1ee8c29e759ca71a0945b11ef34fb123e7d38e611082f2ea37898ba5e8cc

The cat is i

SHA256: 2d04e4d86b53cbe134f0bd3c79eb60a57ef7c3d34fb2c69b772f2ef9230c093b

n the house.

SHA256: c19216e36d4df8ece789dc86fc0624fd16771843fff7fd00fb1b393ac9ad9244

¿Qué pasa con un hash más débil que es más rápido? ¿Qué pasa con una porción más pequeña del archivo?

    
pregunta ndm13 16.03.2016 - 04:05
fuente

3 respuestas

1

Puede que te interese leer sobre ssdeep , un "hash por tramos activado por el contexto" (CTPH) utilizado como contenido agnóstico Forma de hash borroso. Ssdeep crea hashes de partes de un archivo para que se pueda determinar la similitud; por ejemplo, un carácter cambia entre dos archivos idénticos. La suma de comprobación de las partes del archivo modificadas será diferente, pero las sumas de comprobación de todas las demás partes no, por lo que los archivos se consideran muy similares.

Básicamente, estás intentando hacer esto, pero sin tener la intención de usarlo para medir la similitud de archivos.

Tengo la impresión de que mientras mantengas hashes completos (no los trunques) y que los segmentos que hash sean lo suficientemente grandes como para que las colisiones sean raras (¿tal vez 512 bytes?), tendrás un nivel suficiente de integridad de datos . En teoría, es posible que tenga más integridad, ya que tiene una longitud de hash más larga, pero hay muchas áreas sobre las que debe tener especial cuidado en su implementación que no recomendaría en absoluto. esto.

Dicho esto, especificaste tres hash sha256, incluido uno para todo el archivo. Mientras se cumplan los tres, esto debería ser, en su punto más débil, tan bueno como sha256 solo. Es probable que sea aún más fuerte, pero (probablemente) serás tan susceptible como un solo sha256 en lo que respecta a las vulnerabilidades teóricas de SHA-2, por lo que también deberías buscar otro algoritmo como SHA-3 o incluso (ya que todavía tiene el archivo completo sha256) algo más rápido como MD5. También puede considerar almacenar el tamaño de bytes.

256 bit SHA-2 debería ser suficiente para cualquier cosa a menos que esté preocupado por el futuro lejano. Si ese es el caso, no puede dar nada por sentado, pero me gustaría ir con SHA2-512 y SHA3-512 y el tamaño exacto del archivo.

Si solo desea más velocidad y no le preocupa que lo ataquen (es decir, solo le preocupa la integridad de los datos del hardware defectuoso y / o las redes de mierda), puede comenzar solo con el tamaño del archivo, luego calcular el MD5 y SHA1 al mismo tiempo (dos procesos separados, una lectura del archivo). Todavía no me molestaría en cortar un archivo a menos que quisieras usar ssdeep (que parece usar MD5 para sus piezas de forma predeterminada).

Tal vez un atractivo equilibrio de velocidad e integridad podría ser verificar el tamaño del archivo, luego el MD5 de los primeros 5MB (o todo el archivo si es inferior a 5MB), luego la verificación de integridad real, por ejemplo. sha256 o sha3-512. * Debería ser más difícil crear una colisión y más rápido detectar fallas (detenerse en la primera falla), mientras que solo es despreciablemente más lento que la última comprobación (me tomó 0.003s calcular el hash MD5 de un archivo de prueba aleatorio de 5MB). (* No soy experto en criptoanálisis ni en sumas de comprobación criptográficas: esto no tiene autoridad).

Me siento tentado a decir que si no se sospecha un ataque, estaría bien tanto con el tamaño del archivo como con el MD5 (probablemente solo estaría bien con el MD5, aunque el tamaño del archivo le permitiría fallar más rápido < em> y proporcionan una integridad de datos ligeramente mejor).

    
respondido por el Adam Katz 24.03.2016 - 03:32
fuente
0

Tal vez, pero no lo suficiente como para molestarse. SHA256 es muy seguro. Actualmente no hay colisiones conocidas para esto (o para SHA1 para esa materia). Debes considerar el SHA256 como efectivamente perfecto. Si tienes la suerte de ser atacado debido a una colisión, publícalo y conviértete en famoso (al menos entre los que se preocupan por estas cosas).

    
respondido por el Neil Smithline 16.03.2016 - 05:42
fuente
0

Su lógica se basa en el supuesto de que si se produce una colisión, no debería volver a suceder en función de la naturaleza misma de las funciones hash. Pero me parece que esa lógica es defectuosa. Debes considerar cómo ocurrió la colisión. Si uno puede generar una colisión para todo el archivo, probablemente debería poder hacerlo tanto para una parte como para todo el archivo. La única forma en que su idea funcionará es si el atacante no sabe cómo está dividiendo su archivo. Pero dado que no es así como funcionan las cosas (ya que los 3 valores hash deben ser conocidos), esto no debería poder mejorar su seguridad. Y luego, como saben, sha256 aún es lo suficientemente seguro y lo será por un período de tiempo suficientemente bueno, por lo que si lo tiene, la colisión es la menor de sus preocupaciones.

    
respondido por el Ayadi Ghait 16.03.2016 - 07:37
fuente

Lea otras preguntas en las etiquetas