Ataque de preimagen
En criptografía, a ataque previo en funciones de hash criptográficas intenta encontrar un mensaje que tenga un valor de hash específico. Una función de hash criptográfica debe resistir ataques a su preimage (conjunto de posibles entradas).
En el contexto del ataque, existen dos tipos de resistencia previa a la imagen:
- Preimage resistance: para esencialmente todas las salidas pre-especificadas, es computacionalmente infeasible encontrar cualquier entrada que se apresura a esa salida; es decir, dada Sí., es difícil encontrar un x tales que h()x) Sí..
- segunda resistencia de preimage: para una entrada especificada, es computacionalmente infeasible encontrar otra entrada que produce la misma salida; es decir, dada x, es difícil encontrar una segunda entrada x′′ x tales que h()x) h()x′).
Estos pueden compararse con una resistencia a la colisión, en la que es computacionalmente infeasible encontrar dos entradas distintas x, x. que tiene la misma salida; es decir, tal que h()x) h()x′).
La resistencia a la colisión implica resistencia a la segunda etapa. La resistencia a la segunda preimage implica resistencia a la preimage sólo si el tamaño de las entradas de la función hash puede ser sustancialmente (por ejemplo, factor 2) mayor que el tamaño de las salidas de la función hash. Por el contrario, un ataque de segunda preimage implica un ataque de colisión (trivialmente, ya que, además de x., x ya se conoce desde el principio).
Ataques de preimage aplicados
Por definición, una función de hash ideal es tal que la manera más rápida de calcular un primer o segundo preimage es a través de un ataque de fuerza bruta. Para un nEste ataque tiene una complejidad temporal. 2n, que se considera demasiado alto para un tamaño de salida típico n = 128 bits. Si tal complejidad es la mejor que puede lograr un adversario, entonces la función hash se considera preimage-resistant. Sin embargo, hay un resultado general de que las computadoras cuánticas realizan un ataque de preimage estructurado en , que también implica segunda preimage y por lo tanto un ataque de colisión.
Los ataques de preimage más rápidos se pueden encontrar criptanalysing ciertas funciones de hash, y son específicos a esa función. Ya se han descubierto algunos ataques importantes de preimage, pero todavía no son prácticos. Si se descubre un ataque de preimage práctico, afectaría drásticamente a muchos protocolos de Internet. En este caso, "práctico" significa que podría ser ejecutado por un atacante con una cantidad razonable de recursos. Por ejemplo, un ataque preimaginable que cuesta billones de dólares y toma décadas para preimage un valor hash deseado o un mensaje no es práctico; uno que cuesta unos pocos miles de dólares y toma algunas semanas puede ser muy práctico.
Todos los ataques prácticos o casi prácticos conocidos actualmente contra MD5 y SHA-1 son ataques de colisión. En general, un ataque de colisión es más fácil de montar que un ataque preimage, ya que no está restringido por ningún valor establecido (cualquier dos valores se pueden utilizar para colisionar). La complejidad del tiempo de un ataque de colisión de la fuerza bruta, a diferencia del ataque preimage, es sólo .
Ataques de espacio previo a la imagen restringido
La inviabilidad computacional de un primer ataque de preimagen a una función hash ideal supone que el conjunto de posibles entradas hash es demasiado grande para una búsqueda de fuerza bruta. Sin embargo, si se sabe que un valor hash determinado se produjo a partir de un conjunto de entradas que es relativamente pequeño o está ordenado por probabilidad de alguna manera, entonces una búsqueda de fuerza bruta puede ser efectiva. La practicidad depende del tamaño del conjunto de entrada y de la velocidad o costo de calcular la función hash.
Un ejemplo común es el uso de hashes para almacenar datos de validación de contraseñas para la autenticación. En lugar de almacenar el texto sin formato de las contraseñas de los usuarios, un sistema de control de acceso almacena un hash de la contraseña. Cuando un usuario solicita acceso, la contraseña que envía se codifica y se compara con el valor almacenado. Si se roban los datos de validación almacenados, el ladrón solo tendrá los valores hash, no las contraseñas. Sin embargo, la mayoría de los usuarios eligen contraseñas de manera predecible y muchas contraseñas son lo suficientemente cortas como para que se puedan probar todas las combinaciones posibles si se utilizan hashes rápidos, incluso si el hash está clasificado como seguro contra ataques previos a la imagen. Se han creado hashes especiales llamados funciones de derivación de claves para ralentizar las búsquedas. Ver Descifrar contraseñas. Para conocer un método para evitar la prueba de contraseñas cortas, consulte salt (criptografía).