¿Por qué generar solo una parte del estado hash no es una defensa simple contra los ataques de extensión de longitud?

Pregunta:

Según tengo entendido, los ataques de extensión de longitud dependen de la propiedad coincidente de la mayoría de las funciones hash criptográficas de que el valor hash es exactamente el estado de la función hash después de aplicar el hash al último bloque de datos. Esto permite a un atacante inicializar su propia función hash con el estado en el que se "dejó".

Siendo este el caso, ¿por qué las funciones hash simplemente no se definen como la salida del prefijo de n bytes de su estado (es decir, para un hash de 256 bits, mantener 512 bits de estado)? Supongo que hay una razón fundamental por la que esto no se hace, pero no he podido encontrar ninguna literatura que lo aborde específicamente.

Respuesta:

Contrariamente a su suposición, esto está hecho y es seguro: por ejemplo, las funciones hash SHA-224 y SHA-384 son básicamente los mismos algoritmos que SHA-256 y SHA-512. Las únicas diferencias están en los valores iniciales para la construcción Merkle-Damgård utilizada internamente y, por supuesto, en que solo se generan los primeros $ 224 $ o $ 384 $ bits del hash resultante. Estas funciones hash son resistentes contra ataques de extensión de longitud, ya que un atacante tendría que adivinar los bits restantes (demasiados) del estado interno. (Tenga en cuenta que la elección de diferentes valores iniciales es irrelevante para este problema, por lo que solo truncar SHA-256 o SHA-512 también produce valores hash resistentes a la extensión de longitud).

Como otro casi ejemplo: en cierto sentido, los primeros bits de salida $ r $ de Keccak / SHA3 son simplemente un prefijo del estado interno después del consumo del último bloque, mientras que el resto del estado se mantiene en secreto (y posiblemente se usa para calcular más bits de salida, que son nuevamente prefijos del estado interno, mediante la aplicación repetida de la llamada "función de esponja"). Con esta construcción se puede argumentar, y de hecho esto se anuncia como una característica de Keccak, que el hash con clave $ \ operatorname {Keccak} (\ mathit {key} \ mathbin \ Vert \ mathit {data}) $ produce una MAC segura , mientras que la misma construcción para los hashes Merkle-Damgård es vulnerable a los ataques de extensión de longitud.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım