¿Los hashes contienen alguno de los datos del archivo original?

7

No soy un científico informático, pero me gustaría comprender hashes como SHA-256 más. ¿Tengo razón al creer que un hash es simplemente una declaración de que un archivo produjo una salida específica (el hash), y que no contiene los datos del archivo original de ninguna manera? Por lo tanto, si alguien tuviera el hash de un archivo, la única manera de poder recrear el archivo original, incluso con toda la potencia informática del mundo, sería recrear los archivos de forma aleatoria hasta que tuvieran uno con el mismo hash.

O más simplemente:

Un hash es un número de serie único para un archivo de computadora único. El número de serie no contiene nada sobre el archivo. La única forma de saber algo sobre el archivo es recrearlo de forma independiente a través de prueba y error, donde el hash no ofrece más que la confirmación de que el archivo creado coincide con el original.

    
pregunta Noviceinfo 22.07.2018 - 19:52
fuente

5 respuestas

3

Un hash es un mapeo de una entrada de longitud arbitraria a una salida de longitud fija. Un error común es que las funciones hash no deben tener colisiones (las instancias en las que dos entradas obtienen el mismo hash). Esto está mal. Debe haber un número infinito de colisiones según el principio del casillero, ya que la asignación va desde una entrada infinitamente grande a una salida de longitud fija. Sin embargo, una buena función hash debería hacer que sea muy difícil encontrar colisiones.

Un hash incorrecto se puede construir teniendo un mapa de valor único para 0 y cualquier otro mapa de valor para 1 . A partir de esto, sería trivial determinar que un hash de 0 significa que los datos originales del archivo fueron a . Aquí hay una implementación:

def bad_hash(x):
    if x == 'a':
        return 0
    return 1

Los hashes correctos están diseñados para garantizar que sea computacionalmente difícil realizar cualquier mapeo inverso (para pasar de un hash a una entrada que generaría el hash), y para garantizar que un hash se pueda invertir en una cantidad infinita de entrada datos (por lo tanto, incluso si encuentra un valor que hace hash con el objetivo, otros valores de entrada también lo harían con ese mismo objetivo).

Por lo tanto, para una buena función de hash (y sha-256 ciertamente se considera buena), revelar el hash no revela cuáles eran los datos originales.

Para sha-256 , no hay una forma conocida de encontrar los datos de entrada que no sea una búsqueda exhaustiva, e incluso cuando lo ha encontrado, no puede estar seguro de que esos fueron los datos de entrada específicos.

    
respondido por el Greg Schmit 22.07.2018 - 21:03
fuente
3

Puede contener, o no puede. Por ejemplo, es posible tomar la primera letra de un mensaje como hash. Puede ser un buen algoritmo hash para un propósito particular, pero definitivamente no es un buen hash criptográfico .

Supondré que tu pregunta es sobre el hash criptográfico .

Ideal criptográfico el algoritmo hash tiene (junto a otras) estas propiedades:

  • No es factible generar un mensaje a partir de su valor hash, excepto por intentando todos los mensajes posibles .
  • Un pequeño cambio en un mensaje debería cambiar el valor de hash tan ampliamente para que el nuevo valor de hash aparezca sin correlación con el valor de hash antiguo .
  • Es imposible encontrar dos mensajes diferentes con el mismo valor de hash .

(En el mundo real, reemplaza la palabra "no factible" por "altamente improbable".)

Entonces, solo la primera de estas propiedades muestra que eres casi correcto en tu declaración

  

La única forma de saber algo sobre el archivo es recrearlo de forma independiente a través de prueba y error, donde el hash no ofrece nada más que la confirmación de que el archivo creado coincide con el original.

ya que hay algunos problemas con él:

  • El conjunto de todos los mensajes es infinito , por lo que no hay posibilidad de realizar una búsqueda exhaustiva .

  • En el contexto de la búsqueda ciega , el hash no ofrece confirmación de que el archivo creado coincide con el original, ya que hay inherentemente muchos y muchas colisiones (los mismos hashes para diferentes mensajes).

  • Es altamente improbable que encuentre incluso 1 archivo (mensaje) con el hash dado, por lo que el método de "prueba y error" no le dará más que errores.

respondido por el MarianD 23.07.2018 - 15:03
fuente
2

Aquí hay una breve respuesta para los que no son expertos en tecnología.

Preguntando si un bueno hash

MD5("StackExchange") = f25cb1c6953bb0c62c639f3d7a242ec4

contiene cualquiera de los datos originales es un poco como preguntar, si el resultado de la operación de módulo contiene cualquier indicio del cociente y el divisor originales.

1337 % 2 = 1

En teoría, si se le da solo 1 , un adversario podría adivinar después de un tiempo muy largo en el que utilizó 1337 y 2 como el cociente y el divisor originales para llegar a 1 . Si piensa en esto en el contexto de archivos y grandes cantidades de datos, las conjeturas se vuelven insuperables. Es como disparar al aire con una escopeta y tratar de golpear una molécula de aire específica . Posible, pero muy difícil.

En este caso, sería muy fácil encontrar otro cociente y divisor que dé el mismo resultado. Pero ese no es el caso de una función hash normal.

Cuando encuentras una entrada que crea el mismo hash que el segundo, se llama colisión. Por ejemplo, 1337 % 2 = 1 y 1339 % 2 = 1 serían solo eso. Cuando se utiliza una función hash buena , es casi imposible encontrar colisiones. Si no lo es, se considera criptográficamente inseguro. Este es un tema bastante complejo que se discute ampliamente en este sitio y en Cryptography StackExchange . Un usuario final típico no necesita preocuparse por esto. [citación necesaria]

    
respondido por el Tom K. 23.07.2018 - 15:23
fuente
1

No puede derivar los datos originales de un hash.

Es como intentar recrear un objeto dadas algunas pilas de varios átomos sin otra información.

Además, se puede obtener el mismo hash a partir de diferentes datos (incluso si la ocurrencia es extremadamente rara y difícil de obtener intencionalmente - paper here ) que se denomina colisión SHA (en el caso de SHA) que hace que una prueba relacionada con un hash no sea 100% válida.

    
respondido por el Overmind 23.07.2018 - 14:13
fuente
0
  

y que no contiene los datos del archivo original de ninguna manera?

Un hash es esencialmente una función de f(I) -> O , por lo que siempre hay una relación entre I -> O . Si le dan O , puede calcular un conjunto de valores que producen O cuando se le da al hash. Para una función hash criptográficamente fuerte ... esto es igual a la fuerza bruta pero considera este escenario. Digamos que le dice a su jefe que él / ella es un b0d7afc8ffd4ec4150ce9bba29f20969, entonces no tardarían mucho en descubrir lo que intentaba decir.

  

El número de serie no contiene nada sobre el archivo. La única forma de saber algo sobre el archivo es recrearlo de forma independiente a través de prueba y error, donde el hash no ofrece más que la confirmación de que el archivo creado coincide con el original.

Un hash criptográficamente fuerte no contiene nada sobre los datos de los que se derivó ... excepto por el hecho de que se derivó de alguna entrada y la única forma de saber qué había en el archivo es crear todos los archivos posibles y ver si sus hashes coinciden.

    
respondido por el mroman 23.07.2018 - 15:53
fuente

Lea otras preguntas en las etiquetas