Español

Herramientas de desarrollo · Calculadora de hash SHA

Ataques de extensión de longitud: por qué SHA-256(secreto + mensaje) no es una MAC

· Por qué es importante

sha-256 criptografía seguridad

Un bloque de estado SHA-256 se extiende con bytes adicionales para falsificar un hash válido
Ilustración de vector original de ToolAcre

Anteponer un secreto a un mensaje y aplicar hash parece autenticación, pero la estructura de SHA-256 permite a un atacante extender el mensaje sin conocer el secreto. Esta publicación explica el ataque y la solución.

La firma de solicitud casera: hash (secreto + cuerpo) y por qué se siente segura

Un desarrollador necesita autenticación de mensajes pero carece de conocimientos de HMAC, por lo que concatena un secreto con el mensaje y aplica un hash al resultado. Este enfoque parece seguro al principio: el resultado es una huella digital de tamaño fijo que debería cambiar si alguien modifica el mensaje. Sin embargo, SHA-256 tiene un defecto arquitectónico llamado extensión de longitud que permite a un atacante agregar datos al mensaje y calcular un resumen válido sin conocer el secreto. La calculadora de hash SHA de ToolAcre calcula únicamente resúmenes simples, no autenticación con clave, porque esta distinción es importante para la seguridad real.

Anteponer un secreto antes del hash es intuitivamente atractivo porque solo el poseedor del secreto puede volver a calcular el hash. Si el mensaje cambia, el hash también cambia, por lo que parece una prueba de autenticidad. Una API puede firmar solicitudes concatenando un secreto compartido y el cuerpo de la solicitud, luego aplicando hash al resultado e incluyendo ese hash en la solicitud. El servidor recibe el cuerpo, vuelve a calcular el hash con su copia del secreto y comprueba si coincide. Si un atacante cambia el cuerpo, el hash no coincidirá, o eso creen los desarrolladores.

Merkle–Damgård filtra su estado: el resumen final es el estado interno, por lo que un atacante puede continuar con el hash desde donde lo detuvo.

SHA-256 pertenece a una familia llamada funciones hash Merkle-Damgård. Estas funciones procesan la entrada en bloques de tamaño fijo, encadenando una función de compresión que toma el estado anterior y el bloque actual y genera un nuevo estado. La función de compresión es la única primitiva criptográfica interna; la estrategia de encadenamiento y el esquema de relleno hacen que toda la construcción funcione. El resumen final es simplemente el estado final impreso en hexadecimal. Esto no es incidental: la salida es el estado interno. Cualquiera que vea el resumen tiene el estado exacto necesario para continuar con el hash desde ese punto.

Para extender un mensaje, un atacante comienza con el resumen observado de secret + original_message y lo trata como la variable de estado para una nueva llamada a la función de compresión. Añaden los datos que quieren agregar, los rellenan correctamente para cubrir la longitud completa del nuevo mensaje y calculan el resumen. Cuando el servidor valida este resumen falsificado anteponiendo su propio secreto y hash, el cálculo procede de manera idéntica al cálculo del atacante después de que se absorbió el secreto inicial. El servidor calcula el mismo resumen y el mensaje falsificado se acepta sin que el atacante conozca el secreto en absoluto.

Cómo funciona la extensión: agregando relleno y datos adicionales para falsificar un hash válido para un mensaje más largo

Los diferentes algoritmos se ven afectados de manera diferente por la extensión de longitud. SHA-1 es vulnerable: un atacante puede observar un resumen SHA-1 y extender el mensaje. SHA-256 es vulnerable exactamente de la misma manera. SHA-512 también es vulnerable a ataques de extensión. SHA-384 resiste la extensión de longitud porque está construido como SHA-512 truncado a 384 bits. La salida de la función de compresión es más larga que el resumen publicado, por lo que el atacante no tiene suficiente información para continuar con el hash. La construcción de esponja utilizada en SHA-3 también resiste porque no filtra el estado interno.

Comprender qué algoritmos son vulnerables requiere saber algo sobre el tamaño de la función de compresión versus el tamaño del resumen publicado. SHA-256 publica 256 bits y el estado de la función de compresión también es 256 bits, por lo que el resumen es el estado completo. Un atacante tiene todo lo necesario para continuar. SHA-384 publica 384 bits, pero el estado de la función de compresión subyacente es 512 bits porque SHA-384 está construido sobre SHA-512. El resumen solo revela 384 de esos 512 bits, dejando 128 bits desconocidos para un atacante. Esta es una propiedad de diseño intencional de SHA-384 que proporciona esta resistencia.

Las construcciones SHA-1, SHA-256 y SHA-512 admitidas exponen el estado completo; SHA-384 el truncamiento cambia el límite de extensión

La solución para autenticar mensajes con un secreto compartido es HMAC, el código de autenticación de mensajes con clave hash. HMAC no antepone el secreto ni el hash; en su lugar, aplica el secreto en dos operaciones hash anidadas utilizando esquemas de relleno específicos llamados pads internos y externos. La construcción es HMAC(secreto, mensaje) = SHA256(secret_XOR_outer_pad, SHA256(secret_XOR_inner_pad, mensaje)). Este enfoque anidado cierra la brecha de extensión de longitud porque incluso si un atacante tiene el resumen del hash interno, no puede continuar con el hash sin el secreto.

La razón para mantener separadas las operaciones de resumen y HMAC es evitar el error común de tratar las dos de manera intercambiable. Un desarrollador que aprende sobre hash a través de una herramienta que hace ambas cosas podría olvidar cuál está usando cuando escribe código. Mantener el cálculo del resumen por separado hace que la elección sea explícita y refuerza el aprendizaje de que la autenticación necesita HMAC o firmas. La calculadora de hash ToolAcre SHA etiqueta los resúmenes simples con claridad y la documentación explica que HMAC es una operación completamente diferente.

HMAC como solución: la construcción anidada que cierra la brecha y por qué es la respuesta estándar

Un ejemplo conceptual de extensión de longitud funciona en el conocido vector de prueba abc. Calcular SHA-256 en el texto ASCII abc produce el resumen ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Supongamos que este resumen es el resultado de secret + abc hash con un secreto de 5 bytes, lo que da un total de 8 bytes de entrada. SHA-256 procesa la entrada en bloques de 64 bytes, por lo que el primer y único bloque se rellenó con la longitud del mensaje y otros bytes de relleno. Un atacante ve el resumen y quiere falsificar un mensaje que comience con abc seguido de datos adicionales.

No pueden agregar directamente a abc porque no conocen el relleno exacto que se agregó dentro del hash. Sin embargo, pueden calcular cuál debe haber sido el mensaje completo rellenado: abc más el relleno requerido para una entrada de 8 bytes a un bloque de 64 bytes. Luego agregan sus datos adicionales, calculan el relleno para la nueva longitud total y procesan la combinación tratando el resumen observado como el estado inicial. El resultado es un resumen SHA-256 válido que el servidor aceptará porque antepone el secreto y calcula el mismo hash.

Ejemplo resuelto: un recorrido conceptual sobre cómo extender un mensaje firmado, sin un destino en vivo

Para evitar este ataque en un sistema real, el desarrollador no debe intentar crear autenticación a partir de un hash simple. HMAC es la respuesta estándar, y la calculadora de hash ToolAcre SHA es una herramienta para calcular resúmenes simples para verificaciones de integridad, hash de contenido y propósitos similares no relacionados con la autenticación. Ejemplos de usos seguros de resúmenes SHA-256 simples incluyen sumas de verificación de archivos, donde un atacante no puede controlar tanto el archivo como el resumen; almacenamiento direccionable por contenido, donde el hash es la clave de búsqueda; y firmas digitales combinadas con firmas, donde la firma proporciona autenticación.

El alcance completo de este problema incluye los otros algoritmos que proporciona el navegador. SHA-1 es vulnerable a la extensión de longitud y ya estaba criptográficamente roto antes de que eso se volviera relevante. La calculadora ToolAcre etiqueta SHA-1 como solo heredado y explica los ataques de colisión que lo han hecho inadecuado para nuevas aplicaciones. Para aplicaciones nuevas, SHA-256 es la opción sensata para resúmenes simples y, si se necesita autenticación, HMAC con SHA-256 es la respuesta. SHA-384 y SHA-512 son vulnerables, pero SHA-384 está protegido por truncamiento.

Lo que esto no cubre: la calculadora ToolAcre calcula resúmenes simples, no HMAC; la publicación explica por qué esa distinción es importante

Al construir el modelo mental de funciones hash, la construcción de Merkle-Damgård y la extensión de longitud se convierten en los conceptos clave. Una función hash debe manejar longitudes de entrada arbitrarias y producir una salida fija. La forma en que lo hace es encadenando una función de compresión bloque por bloque, y la forma en que se convierte el estado final en salida es tremendamente importante. Si el estado final se genera por completo, entonces esa salida contiene toda la información necesaria para continuar con el hash. Si el estado final se trunca, la parte queda oculta.

Para un desarrollador que lee sobre ataques de extensión de longitud por primera vez, la pregunta es cómo saber si afecta su caso de uso. Si la entrada al hash es una constante pública y el hash se utiliza como clave de búsqueda o huella digital, la extensión de longitud es irrelevante. Si el hash se utiliza para autenticar un mensaje cuando ambas partes comparten un secreto, la extensión de longitud es una vulnerabilidad crítica y HMAC es la solución. La calculadora de hash ToolAcre SHA muestra resúmenes y recuentos de bytes, dejando claro que se trata de resultados computacionales, no de mecanismos de autenticación.

Conclusión: use una MAC para la autenticación; la calculadora de hash SHA de ToolAcre es para resúmenes de integridad; la autenticación necesita HMAC o una firma

Al aplicar esto a los sistemas de producción, el principio es sencillo: nunca use un hash simple para la autenticación cuando se trata de un secreto. HMAC es la construcción estándar que cierra por completo el vector de ataque de extensión de longitud. SHA-256 y SHA-384 son seguros para los fines previstos cuando se usan correctamente. Comprender los tres puntos clave (que Merkle–Damgård revela su estado en el resumen, que SHA-384 trunca para ocultar parte del estado y que HMAC utiliza una construcción anidada para evitar la extensión) le brinda al desarrollador las herramientas para tomar la decisión correcta.

La calculadora de hash SHA ToolAcre incorpora esta enseñanza: proporciona resúmenes simples para el aprendizaje y para usos legítimos sin autenticación, etiqueta SHA-1 como heredado y no implementa HMAC porque esa operación pertenece a un contexto diferente. Cuando los desarrolladores utilizan una calculadora de hash simple para autenticar una solicitud, el posicionamiento y la documentación de la herramienta los guían hacia HMAC y las firmas como las herramientas adecuadas. El kit de herramientas ToolAcre se centra en lo que Web Crypto del navegador proporciona directamente y explica los límites donde cada primitiva es apropiada.