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.