¿Revertir un hash de bloque de SHA-1 con texto sin formato conocido?

1

¿Es posible invertir el hash de un bloque en un flujo de datos alimentado a un SHA1 si se conoce el texto sin formato para ese bloque? Si no es posible (lo que supongo) ¿facilita los ataques para recuperar el estado?

Un ejemplo de lo que estoy tratando de averiguar: Se conocen los siguientes datos:

  • sufijo1
  • El resultado de SHA1 (secreto + sufijo1)
  • La longitud del secreto, que es exactamente de 512 bits (es decir, un bloque SHA completo)

Ahora, lo que me gustaría averiguar es SHA1 (secreto + sufijo2) (un sufijo diferente conocido)

(+ significa concatenación de cadenas)

(se conoce el sufijo 1 pero no se puede manipular, no es posible un ataque de extensión de longitud (probablemente (?))

¿Es esto posible? ¿Hay alguna investigación para hacer esto o es simplemente imposible? Si es posible: ¿Esto también se aplica a la familia SHA-2?

¡Gracias!

    
pregunta Patrick Huy 30.10.2013 - 00:03
fuente

1 respuesta

4

Recomputar secreto de SHA-1 (secreto || sufijo1) (para cualquier valor conocido de sufijo ) constituiría un ataque de preimagen. Ningún ataque de preimagen más rápido que la suerte se conoce actualmente para SHA-1 ("suerte" funciona en un esfuerzo promedio 2160 para SHA-1, es decir, totalmente inviable). No obtendrá el valor secreto .

Sin embargo, si su objetivo es calcular SHA-1 (secreto || sufijo2) , entonces ese puede ser posible, dependiendo del valor de sufijo2 . Se llama el ataque de extensión de longitud . Es decir, sufijo2 debe comenzar con sufijo1 , seguido de algunos bits de relleno que dependen de la longitud de secreto || sufijo1 ; Después de estos bits (que no elige), puede poner los datos que desee. En ese sentido, sufijo2 está parcialmente controlado por el atacante.

Los

ataques de extensión de longitud son suficientes para mostrar que SHA-1 (secreto || datos) es un pobre MAC y HMAC deben usarse en su lugar (todo esto se aplica igualmente bien con el SHA-2 funciones, por cierto).

Ahora, si no quieres poner ninguna restricción en sufijo2 , esto va a ser difícil. El efecto de secreto se reduce a un estado desconocido de 160 bits al comienzo del segundo bloque. No tengo tiempo esta mañana para resolver esto matemáticamente, pero mi intuición es que encontrar ese valor de estado a partir de la salida de SHA-1 (secreto || sufijo1) sería equivalente a explorar un ciclo en la permutación encarnada por el SHACAL cifrado de bloque con sufijo1 como clave (asumiendo sufijo1 + relleno acomoda en un bloque). Dado que se supone que SHACAL es un "buen" cifrado de bloque, esta permutación debe comportarse como si se eligiera al azar entre el conjunto de posibles permutaciones de un espacio de tamaño 2160 , lo que significa que el ciclo debe tener, en promedio, una duración cercana a 280 . Esto nuevamente implica un costo demasiado alto para hacerlo en la práctica.

Tenga en cuenta que ser capaz de hacer lo que intenta lograr no contradeciría las propiedades de SHA-1 como una "función hash buena" (resistencia a las colisiones, preimágenes y segundas preimágenes). No significa que no nos importe, pero resalta por qué las funciones hash y los oráculos aleatorios no son exactamente lo mismo.

    
respondido por el Tom Leek 30.10.2013 - 12:40
fuente

Lea otras preguntas en las etiquetas