Confidencialidad de los hashes de archivos

0

Contexto: tengo un directorio lleno de archivos confidenciales de la compañía. Quiero comparar estos archivos con un colega en una ubicación remota, sin la necesidad de una conexión segura.

¿Es seguro para mí publicar públicamente una lista de los hashes SHA-1 de estos archivos?

Entiendo que es imposible revertir el algoritmo de hash, pero dado que los hashes están calculados a partir del archivo original, hay alguna posibilidad de que un atacante pueda realizar algún tipo de ataque de fuerza bruta para reconstruir el archivo original? (Tenga en cuenta que las colisiones en este caso no importan). Es claramente imposible con un documento de 20 páginas, pero ¿podrían los archivos pequeños ser vulnerables?

¿Qué pasa si uso un algoritmo de hashing más seguro, como SHA512?

(No estoy muy familiarizado con la salada, pero creo que no ayudaría en esta situación porque no me importa si un atacante identifica dos archivos iguales, solo si identifican los contenidos originales). / p>     

pregunta ecapstone 13.08.2014 - 21:42
fuente

4 respuestas

1

SHA-1 produce un hash de 160 bits. El hash de cualquier archivo de más de 160 bits (20 octetos), por lo tanto, necesariamente perderá información y hará imposible la reconstrucción. En teoría, eso es.

Por otra parte, es muy probable (prácticamente garantizado) que los archivos hashing de menos de 20 octetos produzcan un mapeo 1: 1. Una asignación 1: 1 significa que sin sal, es trivial revertir el hash a los contenidos originales con una tabla de arco iris que ya existe. Incluso con una sal no secreta típica, es muy posible ejecutar un ataque de fuerza bruta en archivos muy cortos, por lo que si le preocupa eso, debe agregar una sal que sea lo suficientemente larga (por ejemplo, 128 bits) y mantener El secreto de la sal (no es así como normalmente usaría una sal, pero también tiene una situación diferente). Además, podría agregar el nombre de cada archivo a la sal (a menos que lo que esté tratando de hacer sea la deduplicación), por lo que diferentes archivos con contenido idéntico tienen diferentes hashes.

En la práctica, aunque el hash no se puede invertir para archivos de más de 20 octetos, los archivos pequeños (pero de más de 20 octetos) pueden seguir revertirse si el atacante es lo suficientemente persistente. Por ejemplo, existen 65536 archivos con 22 octetos [1] que tienen el mismo SHA-1, y no puede probar cuál es el correcto. O puedes?
Desafortunadamente la respuesta es "sí". Si bien cada uno de esos 65 mil archivos diferentes es una solución igualmente válida desde el punto de vista del hash, solo uno de ellos (o quizás dos) será algo que no sea basura binaria aleatoria sin sentido. Lo que es trivial de identificar mediante el uso de un programa de compresión de propósito general (los archivos de texto simple son comprimibles, la basura aleatoria no lo es). Además, si se conoce el nombre de un archivo, generalmente es relativamente fácil verificar su contenido contra algunos bytes mágicos o una estructura particular. El atacante solo necesita considerar los archivos que tienen bytes mágicos que corresponden a su tipo.
Por suerte, este ataque rápidamente se vuelve impráctico. ¡Ya hay 10 28 archivos de longitud 32 que se asignan al mismo hash, y la gran mayoría de los archivos en cada computadora es más largo que eso!

Y ahora hay una sorpresa: el "más seguro" SHA-512 es, en realidad, menos seguro a este respecto. Dado que ofrece 512 bits, realizará una asignación 1: 1 para archivos de hasta 64 bytes .

Mi recomendación sería:

  1. Si realmente no quieres (o no puedes) usar TLS / SSH (sabes que rsync hará todo el conjunto de hashes comparativos incluyendo la conexión SSH para ti, no lo hagas t you?), use un contenedor de encriptación como p. ej. Truecrypt. Eso evitará que otra persona acceda a los hashes, incluso si coloca el contenedor en Internet públicamente en un servidor que no es de confianza, o si lo envía por correo electrónico. Esto hace que cualquier otra consideración sea obsoleta. ¡No hay que preocuparse por si los hashes pueden revertirse si el atacante no los conoce!
  2. No utilice un hash que sea más grande de lo necesario. La posibilidad de una colisión aleatoria de hash en 10 archivos 16 (¡es 10 mil millones de veces el número de archivos actualmente en mi computadora de escritorio!) Con un hash de 160 bits es aproximadamente 10 -15 . Para diez mil archivos, son 10 -22 . En otras palabras, no sucederá en tu vida. Conjuntos de control de revisión como por ejemplo Git confía en el hecho de que las colisiones simplemente no ocurren. Los hashes más grandes no mejoran nada en tu situación, pero posiblemente empeoren las cosas (para archivos pequeños).
  3. Salte el contenido de los archivos con nombres de archivos y con una sal aleatoria lo suficientemente larga como para mantenerlo en secreto.
  4. Considere también el uso de hash de nombres de archivos, ya que los nombres de los archivos pueden transmitir información importante.
  5. No transmitir longitudes de archivo. No le da una ventaja, pero puede darle una a un atacante.

[1] En realidad, si no le dice al atacante la longitud del archivo, hay algunos más: también hay 256 archivos con 21 octetos y uno con 20 o menos.     
respondido por el Damon 14.08.2014 - 14:39
fuente
2

La seguridad en la que estás pensando con respecto a la fuerza del hash y la seguridad con la que estás hablando con los hashes en internet son dos cosas diferentes. Hashes como SHA * están diseñados para funcionar rápidamente, de modo que los archivos que envíes y el archivo que recibas puedan verificarse de la misma manera; sin embargo, esto facilita la fuerza bruta, debido a esta velocidad.

Todo se reduce a bits de entropía: cuantos más bits de entropía tenga el archivo, más tiempo tardará en adivinarlo. Yo diría que si su archivo es más que un (límite arbitrario) 1kb, debería estar razonablemente a salvo de la fuerza bruta.

Sin embargo, eso sin una conexión segura, no puede garantizar que los mensajes no se hayan modificado en tránsito.

Si está razonablemente seguro de que sus hash no se modificarán en tránsito, esta debería ser una manera razonable de comparar las dos copias del archivo.

    
respondido por el Tyzoid 13.08.2014 - 22:12
fuente
0

Pregunta: ¿Desea publicar los nombres de archivos confidenciales en Internet?

Su enfoque anterior parece implicar que publicará los nombres de sus archivos en Internet.

Es posible que no desee que los nombres de sus archivos se publiquen en Internet.

brain@brain-laptop:~/Secret Files$ sha256sum *
c988f4a50da6021fc70f618faeb5e27891b5de7162fb395b1dfd5b42f76a8070  Blueprints for Secret Lair Island in the Philippines.docx
78530f114e56ed419950e465f79c33f14bcc91eb63acefcf976ab96cd190915a  Secret Plan to Take Over the World.docx
    
respondido por el Andrew Russell 14.08.2014 - 12:10
fuente
0

Bajo ciertas condiciones, sus hashes pueden filtrar información confidencial.

Esto depende de si un atacante puede o no adivinar el contenido de archivos específicos.

Como ejemplo trivializado, digamos que sus archivos son notas de su jefe que dicen a qué empleado van a despedir. Siempre son archivos de texto ASCII simples en forma de The next employee we fire is [Name] . Cuando supiera esto y tuviera una lista de empleados, podría calcular las sumas hash de todos los archivos posibles:

The next employee we fire is Alice   9a76503a707ae3b58c3a12324622d45dfbbbd0d6a35e9e539104e285e25b2965
The next employee we fire is Bob     0d42e6bbc62c1a308c85dded89b9f300afe2537539fc068eeb99e00f3154aac5
The next employee we fire is Charlie e3a0ab856e1440eba0d520e0c86f6db22a47675371db80dbccb55a207db9a0dc

Cuando uno coincide, sé el contenido del archivo.

Este ataque asume que es posible adivinar el contenido del archivo. Tenga en cuenta que el hardware especializado es capaz de hacer millones de suposiciones por segundo. Aún así, cuando los archivos son razonablemente complejos, como con un texto en prosa que contiene más de unas pocas frases, esto se vuelve imposible en un tiempo razonable. Pero tenga cuidado cuando distribuya archivos no únicos de esa manera, especialmente los archivos a los que un atacante tiene acceso pero que no debe tener. Como archivos multimedia pirateados, por ejemplo.

    
respondido por el Philipp 14.08.2014 - 16:59
fuente

Lea otras preguntas en las etiquetas