SHA-2 es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) desarrolladas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS).

Una función hash es un algoritmo que transforma ("digiere") un conjunto arbitrario de elementos de datos, como puede ser un fichero de texto, en un único valor de longitud fija (el "hash"). El valor hash calculado puede ser utilizado para la verificación de la integridad de copias de un dato original sin la necesidad de proveer el dato original. Esta irreversibilidad significa que un valor hash puede ser libremente distribuido o almacenado, ya que sólo se utiliza para fines de comparación. SHA significa algoritmo de hash seguro. SHA-2 incluye un significante número de cambios respecto a su predecesor, SHA-1; y consiste en un conjunto de cuatro funciones hash de 224, 256, 384 o 512 bits.

La seguridad proporcionada por un algoritmo hash es sumamente dependiente de su capacidad de producir un único valor para un conjunto de datos dados. Cuando una función hash produce el mismo valor para dos conjuntos de datos distintos, entonces se dice que se ha producido una colisión. Una colisión aumenta la posibilidad de que un atacante pueda elaborar computacionalmente conjuntos de datos que proporcionen acceso a información segura o para alterar ficheros de datos informáticos de tal forma que no cambiara el valor hash resultante y así eludir la detección. Una función hash fuerte es aquella que es resistente a este tipo de ataques computacionales mientras que una función hash débil es aquella donde existe una creencia casi certera de que se pueden producir colisiones. Finalmente, una función hash quebrantada es aquella sobre la que se conoce métodos computacionales para producir colisiones.

En 2005, se identificaron fallas de seguridad en el SHA-1, permitiendo que existiera una debilidad matemática y evidenciando así la necesidad de elaborar una función hash más fuerte. Aunque el SHA-2 se comporta de forma parecida al algoritmo SHA-1, estos ataques no han sido extendidos satisfactoriamente a SHA-2.

La competición de funciones hash de la NIST seleccionó una nueva función hash, el SHA-3, en 2012.NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition A diferencia de SHA-2 con SHA-1, el algoritmo SHA-3 no es derivación del SHA-2.

Función hash alt=|miniaturadeimagen|400x400px|Una iteración en la función de compresión de la familia SHA-2. Las funciones Ch, Σ1, Maj y Σ0 representan las siguientes operaciones:

La rotación de bit usa diferentes constantes para el SHA-512. Los números proporcionados corresponden a la SHA-256. El rojo es suma módulo 232. Con la publicación del FIPS PUB 180-2, NIST añadió tres nuevas funciones hash en la familia de SHA. Los algoritmos eran comúnmente conocidos como SHA-2, especificados posteriormente por su longitud (en bits): SHA-256, SHA-384, y SHA-512.

Los algoritmos fueron previamente publicados en 2001 en el borrador FIPS PUB 180-2, momento en el cual se aceptaban revisiones públicas y comentarios. En agosto de 2002, FIPS PUB 180-2 se convirtió en el nuevo estándar de hash seguro, reemplazando el FIPS PUB 180-1, el cual fue publicado en abril de 1995. La actualización del estándar incluyó el algoritmo original SHA-1, con la notación técnica consistente con la que describía el funcionamiento interno de la familia SHA-2.Federal Register Notice 02-21599, Announcing Approval of FIPS Publication 180-2

En febrero de 2004, se publicó una noticia de modificación para FIPS PUB 180-2, especificando una variante adicional (SHA-224) para que coincidiera la longitud de la clave con la de Triple DES.FIPS 180-2 with Change Notice 1 En octubre de 2008, el estándar fue actualizado en el FIPS PUB 180-3, incluyendo el SHA-224 de la notificación de modificación pero sin modificar fundamentalmente el estándar. La primera motivación de la actualización del estándar fue redistribuir la información de seguridad de los algoritmos de hash y recomendaciones para su uso en la "Special Publications" 800-107 y 800-57.Federal Register Notice E8-24743, Announcing Approval of FIPS Publication 180-3FIPS SP 800-107 Recommendation for Applications Using Approved Hash AlgorithmsFIPS SP 800-57 Recommendation for Key Management: Part 1: General Datos de prueba detallados y ejemplos de mensajes "resumidos" fueron también eliminados del estándar y fueron proporcionados como documentos separados.NIST Algorithm Examples, Secure Hashing

En marzo de 2012, el estándar fue actualizado a FIPS PUB 180-4, añadiendo las funciones hash SHA-512/224 y SHA-512/256, y describiendo un método para la generación inicial de valores mediante versiones truncadas del SHA-512. Adicionalmente, una restricción previa del relleno de los datos de entrada para el cálculo del hash fue eliminada, permitiendo que los datos hash fueran calculados simultáneamente con la generación del contenido, tal como una retransmisión en tiempo real de un vídeo o audio. El relleno final del bloque de datos debe seguir ocurriendo antes de la salida del hash.Federal Register Notice 2012-5400, Announcing Approval of FIPS Publication 180-4

La SHA-256 y SHA-512 son nuevas funciones hash con 8 palabras de tamaño 32 y 64 bits, respectivamente. Usan diferentes desplazamientos y constantes, pero su estructura son por otra parte virtualmente idéntica, diferenciándose únicamente por el número de iteraciones. SHA-224 y SHA-384 son simples versiones de truncado de las dos anteriores funciones y estas son calculadas con diferentes valores iniciales. SHA-512/224 y SHA-512/256 son también versiones truncadas de SHA-512, pero los valores iniciales son generados usando un método descrito en el FIPS PUB 180-4. La familia de algoritmos SHA-2 están patentados en los Estados Unidos de América (patente con identificación 6829355) y fueron liberados bajo una licencia libre de derechos de autor.

A finales de 2013, los mejores ataques públicos consiguieron romper las 46 de las 64 iteraciones del SHA-256Mario Lamberger and Florian Mendel, Higher-Order Differential Attack on Reduced SHA-256, consultado el 24 de agosto de 2012. y 46 de las 80 iteraciones del SHA-512. Información más detallada en la sección "Criptoanálisis y validación" siguiente.Yu Sasaki, Lei Wang, and Kazumaro Aoki, Preimage Attacks on 41-Step SHA-256 and 46-Step SHA-512, consultado el 3 de enero de 2010.

Comparación de funciones SHA En la tabla de abajo, estado interno significa "suma hash interna" después de cada compresión de un bloque de datos.

Algoritmo y variante Tamaño de salida (bits). Tamaño del estado interno (bits). Tamaño del bloque (bits). Tamaño máximo del mensaje (bits). Longitud de la palabra (bits). Iteraciones Operaciones Colisiones encontradas Ejemplo de rendimiento (MiB/s)MD5 (como referencia) 128 128 512 264 - 1 32 64 +, and, or, xor, rot 335SHA-0 160 160 512 264 - 1 32 80 +, and, or, xor, rot -SHA-1 160 160 512 264 - 1 32 80 +, and, or, xor, rot 192SHA-2 SHA-224 SHA-256 224256 256 512 264 - 1 32 64 +, and, or, xor, shr, rot Ninguna 139 SHA-384 SHA-512 SHA-512/224 SHA-512/256 384 512 224 256 512 1024 2128 - 1 64 80 +, and, or, xor, shr, rot Ninguna 154SHA-3 224/256/384/512 1600(5×5 array de palabras de 64-bit) 1152/1088/832/576 Ilimitado 64 24 and, xor, not, rot Ninguna

Los datos de rendimientos descritos anteriormente fueron realizados con una implementación de un único hilo (hebra) de un AMD Opteron 8354 a 2.2 GHz bajo un Linux x64, y sólo sirven para una ruda comparación general. Para un mayor detalle de las mediciones de rendimiento en arquitecturas de procesadores modernos se facilita la siguiente tabla.

Arquitectura CPU Frecuencia Algoritmo Tamaño palabra (bits). Ciclo/Byte x86 MiB/s x86 Ciclo/Byte x86-64 MiB/s x86-64Intel Ivy Bridge3.5 GHz SHA-256 32-bit 16.80 199 13.05 256 SHA-512 64-bit 43.66 76 8.48 394AMD Piledriver3.8 GHz SHA-256 32-bit 22.87 158 18.47 196 SHA-512 64-bit 88.36 41 12.43 292

Los resultados de rendimiento etiquetados como 'x86' fueron obtenidos usando un código de 32 bits en procesadores de 64 bits, mientras que los etiquetados como 'x86-64' son códigos de 64 bits. Mientras que SHA-256 está diseñado para operaciones de 32 bits, se beneficia computacionalmente del código optimizado para procesadores de 64 bits. Las implementaciones de 32 bits para SHA-512 son significativamente más lentas que sus equivalente en 64 bits. Las variaciones de ambos algoritmos con diferente tamaños de salida tienen un rendimiento similar, ya que las funciones de expansión y compresión del mensaje son idénticas, y únicamente varia los valores iniciales y los tamaños de salida. Las mejores implementaciones del MD5 y SHA-1 consiguen un rendimiento entre 4,5 y 6 ciclos por byte en procesadores modernos.

Los ensayos fueron llevado a cabo por la Universidad de Illinois en Chicago en su sistema hydra8 ejecutado en un Intel Xeon E3-1275 V2 a una frecuencia de reloj de 3,5 GHz, y en su sistema hydra9 ejecutada en un AMD A10-5800K con una frecuencia de 3,8 GHz.SUPERCOP Benchmarks Measurements of hash functions, indexed by machine Las velocidades referenciadas como ciclos por bytes son la mediana del rendimiento de un algoritmo tratando con un mensaje de 4096 bytes usando el software de "benchmarking" criptográfico SUPERCOP. El rendimiento MiB/s se extrapolan de la velocidad del reloj de una CPU de un solo núcleo, rendimiento que varía en el mundo real debido a numerosos factores.

Aplicaciones Las funciones hash SHA-2 están implementadas en una gran variedad de aplicaciones y protocolos de seguridad, como por ejemplo: TLS y SSL, PGP, SSH, S/MIME, Bitcoin, PPCoin y IPsec.

La moneda criptográfica Bitcoin depende en gran medida en un doble uso del SHA-256. El SHA-256 es usado para identificar los paquetes software de Debian GNU/Linux y en el estándar de mensaje firmado DKIM; SHA-512 es parte del sistema para identificar los vídeos guardados en el Tribunal Penal Internacional para Ruanda.John Markoff, A Tool to Verify Digital Records, Even as Technology Shifts, New York Times, January 26, 2009 SHA-256 y SHA-512 fueron propuestos para ser usados en DNSSEC.RFC 5702,RFC-Editor.org Los proveedores de Unix y Linux están adoptando SHA-2 de 256 y 512 bits para aplicarlo en las contraseñas de seguridad.Ulrich Drepper, Unix crypt with SHA-256/512

SHA-1 y SHA-2 son algoritmos hash de seguridad requeridos por ley en ciertas aplicaciones del gobierno de Estados Unidos, junto con el uso de otros algoritmos y protocolos criptográficos, para la protección de información clasificada y sensible. FIPS PUB 180-1 también alentó la adopción y uso del SHA-1 por parte de organizaciones privadas y comerciales. El gobierno está dejando de utilizar SHA-1, tal como expone el U.S. National Institute of Standards and Technology, "Las agencias federales deberían dejar de usar el SHA-1 para... aplicaciones que necesiten resistencia de colisión tan pronto como sea posible, y deberán usar familias de funciones hash SHA-2 para estas aplicaciones después de 2010" (énfasis en el original).National Institute on Standards and Technology Computer Security Resource Center, NIST's Policy on Hash Functions , consultado el 29 de marzo de 2009. La directiva de NIST de que las agencias del gobierno estadounidense deban dejar de usar el SHA-1 después de 2010 y la finalización del SHA-3 deberían acelerar la migración del SHA-1.

Las funciones SHA-2 no son tan ampliamente usadas como SHA-1, a pesar de su mejora en seguridad. Las razones pueden incluir una falta de soporte del SHA-2 en sistemas que ejecutan Windows XP SP2 o anteriores,Microsoft Corporation,Overview of Windows XP Service Pack 3 o por una falta de urgencia percibida mientras no se haya descubierto aún colisiones en el SHA-1.

Criptoanálisis y validación