Articulo de referencia

SHA-2

\nPseudo-collision attack against up to 46 rounds of SHA-256. "}},"i":0}}]}"> SHA-2 ( algoritmo de hash seguro 2 ) es un conjunto de funciones hash criptográficas diseñadas por ...

SHA-2 ( algoritmo de hash seguro 2 ) es un conjunto de funciones hash criptográficas diseñadas por la Agencia de Seguridad Nacional de los Estados Unidos (NSA) y publicadas por primera vez en 2001. [ 3 ] [ 4 ] Se construyen utilizando la construcción Merkle-Damgård , a partir de una función de compresión unidireccional construida a su vez utilizando la estructura Davies-Meyer de un cifrado de bloques especializado.

SHA-2 incluye cambios significativos respecto a su predecesor, SHA-1 . La familia SHA-2 consta de seis funciones hash con resúmenes (valores hash) de 224, 256, 384 o 512 bits: [ 5 ] SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256 . SHA-256 y SHA-512 son funciones hash cuyos resúmenes son ocho palabras de 32 bits y 64 bits, respectivamente. Utilizan diferentes cantidades de desplazamiento y constantes aditivas, pero sus estructuras son prácticamente idénticas, diferenciándose solo en el número de rondas. SHA-224 y SHA-384 son versiones truncadas de SHA-256 y SHA-512 respectivamente, calculadas con diferentes valores iniciales. SHA-512/224 y SHA-512/256 también son versiones truncadas de SHA-512, pero los valores iniciales se generan utilizando el método descrito en la norma federal de procesamiento de información (FIPS) PUB 180-4.

SHA-2 fue publicado por primera vez por el Instituto Nacional de Estándares y Tecnología (NIST) como un estándar federal de EE. UU. La familia de algoritmos SHA-2 está patentada en EE. UU. [ 6 ] Estados Unidos ha liberado la patente bajo una licencia libre de regalías . [ 5 ]

A partir de 2024, la función hash criptográfica SHA-2 sigue siendo segura frente a ataques conocidos, incluidos los de ordenadores cuánticos . [ 7 ]

Estándar hash

Una iteración en una función de compresión de la familia SHA-2. Los componentes azules realizan las siguientes operaciones:     Ch(mi,F,GRAMO)=(miF)(¬miGRAMO){\displaystyle \operatorname {Ch} (E,F,G)=(E\land F)\oplus (\neg E\land G)}    Mamá(A,B,do)=(AB)(Ado)(Bdo){\displaystyle \operatorname {Ma} (A,B,C)=(A\land B)\oplus (A\land C)\oplus (B\land C)}    Σ0(A)=(A2)(A13)(A22){\displaystyle \Sigma _{0}(A)=(A\!\ggg \!2)\oplus (A\!\ggg \!13)\oplus (A\!\ggg \!22)}    Σ1(mi)=(mi6)(mi11)(mi25){\displaystyle \Sigma _{1}(E)=(E\!\ggg \!6)\oplus (E\!\ggg \!11)\oplus (E\!\ggg \!25)} La rotación bit a bit utiliza constantes diferentes para SHA-512. Los números dados son para SHA-256. El rojo{\displaystyle \color {red}\boxplus }es la suma módulo 2 32 para SHA-256, o 2 64 para SHA-512.

Con la publicación de FIPS PUB 180-2, el NIST añadió tres funciones hash adicionales a la familia SHA. Estos algoritmos se conocen colectivamente como SHA-2, nombre que proviene de la longitud de su resumen (en bits): SHA-256, SHA-384 y SHA-512.

Los algoritmos se publicaron por primera vez en 2001 en el borrador FIPS PUB 180-2, momento en el que se aceptaron comentarios y revisiones públicas. En agosto de 2002, FIPS PUB 180-2 se convirtió en el nuevo Estándar de Hash Seguro , reemplazando a FIPS PUB 180-1, que se publicó en abril de 1995. El estándar actualizado incluía el algoritmo SHA-1 original, con una notación técnica actualizada coherente con la que describe el funcionamiento interno de la familia SHA-2. [ 4 ]

En febrero de 2004, se publicó un aviso de cambio para FIPS PUB 180-2, especificando una variante adicional, SHA-224, definida para coincidir con la longitud de clave de Triple DES de dos claves . [ 8 ] En octubre de 2008, el estándar se actualizó en FIPS PUB 180-3, incluyendo SHA-224 del aviso de cambio, pero sin realizar cambios fundamentales en el estándar. La principal motivación para actualizar el estándar fue reubicar la información de seguridad sobre los algoritmos hash y las recomendaciones para su uso en las Publicaciones Especiales 800-107 y 800-57. [ 9 ] [ 10 ] [ 11 ] Los datos de prueba detallados y los resúmenes de mensajes de ejemplo también se eliminaron del estándar y se proporcionaron como documentos separados. [ 12 ]

En enero de 2011, el NIST publicó SP800-131A, que especificaba un cambio del mínimo de seguridad vigente en ese momento de 80 bits (proporcionado por SHA-1) permitido para el uso del gobierno federal hasta finales de 2013, a una seguridad de 112 bits (proporcionada por SHA-2) como requisito mínimo (a partir de 2014) y nivel de seguridad recomendado (a partir de la fecha de publicación en 2011). [ 13 ]

En marzo de 2012, el estándar se actualizó en FIPS PUB 180-4, añadiendo las funciones hash SHA-512/224 y SHA-512/256, y describiendo un método para generar valores iniciales para versiones truncadas de SHA-512. Además, se eliminó una restricción sobre el relleno de los datos de entrada antes del cálculo del hash, lo que permite que los datos hash se calculen simultáneamente con la generación de contenido, como una transmisión de audio o vídeo en tiempo real. El relleno del bloque de datos final aún debe realizarse antes de la salida del hash. [ 14 ]

En julio de 2012, el NIST revisó la norma SP800-57, que proporciona directrices para la gestión de claves criptográficas. La publicación prohibió la creación de firmas digitales con una seguridad hash inferior a 112 bits después de 2013. La revisión anterior de 2007 establecía como fecha límite finales de 2010. [ 11 ] En agosto de 2012, el NIST revisó la norma SP800-107 de la misma manera. [ 10 ]

En marzo de 2023, el NIST anunció su decisión de revisar FIPS 180-4. [ 15 ] FIPS 180-5 eliminará la especificación SHA-1, agregará orientación de SP 800-107 e incluirá actualizaciones editoriales.

La competencia de funciones hash del NIST seleccionó una nueva función hash, SHA-3 , en 2012. [ 16 ] El algoritmo SHA-3 no se deriva de SHA-2.

Aplicaciones

La función hash SHA-2 se implementa en algunas aplicaciones y protocolos de seguridad ampliamente utilizados, como TLS y SSL , PGP , SSH , S/MIME e IPsec . La exigencia computacional inherente a los algoritmos SHA-2 ha impulsado la propuesta de soluciones más eficientes, como las basadas en aceleradores de hardware de circuitos integrados de aplicación específica (ASIC). [ 17 ]

SHA-256 se utiliza para autenticar paquetes de software Debian [ 18 ] y en el estándar de firma de mensajes DKIM ; SHA-512 forma parte de un sistema para autenticar vídeo de archivo del Tribunal Penal Internacional del genocidio de Ruanda . [ 19 ] SHA-256 y SHA-512 se utilizan en DNSSEC . [ 20 ] Las distribuciones de Linux suelen utilizar SHA-2 de 512 bits para el hash seguro de contraseñas. [ 21 ] [ 22 ]

Varias criptomonedas , incluido Bitcoin , utilizan SHA-256 para verificar transacciones y calcular la prueba de trabajo [ 23 ] o la prueba de participación . [ 24 ] El auge de los chips aceleradores ASIC SHA-2 ha llevado al uso de esquemas de prueba de trabajo basados ​​en scrypt .

En las redes móviles 4G y 5G, HMAC-SHA-256 se utiliza como función de derivación de claves (KDF) para generar claves criptográficas esenciales para la seguridad de las comunicaciones. Este proceso se define en las especificaciones técnicas TS 33.401 [ 25 ] y TS 33.501 [ 26 ] del 3rd Generation Partnership Project (3GPP) , que describen la arquitectura y los procedimientos de seguridad para estas redes.

SHA-1, SHA-2 y SHA-3 son los algoritmos de hash seguros requeridos por ley para su uso en ciertas aplicaciones del gobierno de EE. UU. , incluido su uso dentro de otros algoritmos y protocolos criptográficos, para la protección de información sensible no clasificada. FIPS PUB 180-1 también fomentó la adopción y el uso de SHA-1 por parte de organizaciones privadas y comerciales. SHA-1 se está retirando para la mayoría de los usos gubernamentales; el Instituto Nacional de Estándares y Tecnología de EE. UU. dice: "El NIST recomienda que las agencias federales abandonen SHA-1 para todas las aplicaciones lo antes posible. Las agencias federales deberían usar SHA-2 o SHA-3 como alternativa a SHA-1". [ 27 ] Se esperaba que la directiva del NIST de que las agencias del gobierno de EE. UU. deberían, pero no deben explícitamente, dejar de usar SHA-1 después de 2010 [ 28 ] acelerara la migración fuera de SHA-1.

Las funciones SHA-2 no se adoptaron rápidamente al principio, a pesar de ofrecer mayor seguridad que SHA-1. Entre las razones se incluyen la falta de compatibilidad con SHA-2 en sistemas con Windows XP SP2 o versiones anteriores [ 29 ] y la falta de urgencia percibida, ya que aún no se habían detectado colisiones de SHA-1. El equipo de Google Chrome anunció un plan para que su navegador dejara de aceptar gradualmente los certificados TLS dependientes de SHA-1 durante un período comprendido entre finales de 2014 y principios de 2015. [ 30 ] [ 31 ] [ 32 ] De manera similar, Microsoft anunció [ 33 ] que Internet Explorer y Edge [Legacy] dejarían de aceptar los certificados TLS públicos firmados con SHA-1 a partir de febrero de 2017. Mozilla deshabilitó SHA-1 en Firefox a principios de enero de 2016, pero tuvo que volver a habilitarlo temporalmente mediante una actualización, tras problemas con las interfaces de usuario web de algunos modelos de enrutadores y dispositivos de seguridad . [ 34 ]

Criptoanálisis y validación

Para una función hash en la que L es el número de bits del resumen del mensaje , encontrar un mensaje que corresponda a un resumen dado siempre se puede hacer mediante una búsqueda por fuerza bruta en 2L evaluaciones. Esto se denomina ataque de preimagen y puede o no ser práctico dependiendo de L y del entorno informático particular. El segundo criterio, encontrar dos mensajes diferentes que produzcan el mismo resumen, conocido como colisión , requiere en promedio solo 2L / 2 evaluaciones mediante un ataque de cumpleaños .

Algunas aplicaciones que utilizan funciones hash criptográficas, como el almacenamiento de contraseñas, se ven mínimamente afectadas por un ataque de colisión . Construir una contraseña que funcione para una cuenta determinada requiere un ataque de preimagen, así como acceso al hash de la contraseña original (normalmente en un shadowarchivo), lo cual puede ser o no trivial. Los ataques impiden revertir el cifrado de contraseñas (por ejemplo, para obtener una contraseña y probarla en la cuenta de un usuario en otro lugar). (Sin embargo, incluso un hash de contraseña seguro no puede evitar los ataques de fuerza bruta contra contraseñas débiles ).

En el caso de la firma de documentos, un atacante no podría simplemente falsificar una firma a partir de un documento existente; tendría que producir un par de documentos, uno inofensivo y otro dañino, y lograr que el titular de la clave privada firmara el documento inofensivo. Existen circunstancias prácticas en las que esto es posible; hasta finales de 2008, era posible crear certificados SSL falsificados mediante una colisión MD5 que eran aceptados por los navegadores web más utilizados. [ 35 ]

El creciente interés en el análisis de funciones hash criptográficas durante la competición SHA-3 dio lugar a varios ataques nuevos contra la familia SHA-2, cuyos mejores resultados se muestran en la tabla siguiente. Solo los ataques de colisión presentan una complejidad práctica; ninguno de ellos afecta a la función hash de ronda completa.

En FSE 2012, investigadores de Sony presentaron una ponencia que sugería que los ataques de pseudocolisión podrían extenderse a 52 rondas en SHA-256 y 57 rondas en SHA-512, basándose en el ataque de pseudopreimagen biclique . [ 36 ]

Validación oficial

Las implementaciones de todas las funciones de seguridad aprobadas por FIPS pueden validarse oficialmente mediante el programa CMVP , gestionado conjuntamente por el Instituto Nacional de Estándares y Tecnología (NIST) y el Centro de Seguridad de las Comunicaciones (CSE). Para la verificación informal, se ofrece un paquete para generar un gran número de vectores de prueba, disponible para su descarga en el sitio web del NIST; sin embargo, la verificación resultante no sustituye la validación formal del CMVP, que es obligatoria por ley [ 45 ] para ciertas aplicaciones.

A diciembre de 2013 ,Hay más de 1300 implementaciones validadas de SHA-256 y más de 900 de SHA-512, de las cuales solo 5 son capaces de manejar mensajes con una longitud en bits que no es múltiplo de ocho, a la vez que admiten ambas variantes. [ 46 ]

Vectores de prueba

Valores hash de una cadena vacía (es decir, un texto de entrada de longitud cero).

SHA224("") 0x  d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f SHA256("") 0x e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 SHA384("") 0x 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b SHA512("") 0x cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce 47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e SHA512/224("") 0x 6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4 SHA512/256("") 0x c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a     

Incluso un pequeño cambio en el mensaje dará como resultado (con una probabilidad abrumadora) un hash diferente, debido al efecto avalancha . Por ejemplo, agregar un punto al final de la siguiente oración cambia aproximadamente la mitad (111 de 224) de los bits en el hash, lo que equivale a elegir un nuevo hash al azar:

SHA224(" El rápido zorro marrón salta sobre el perro perezoso ") 0x  730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525 SHA224(" El rápido zorro marrón salta sobre el perro perezoso.") 0x  619cba8e8e05826e9b8c519c0a5c68f4fb653e8a3d8aa04bb2c8cd4c

Pseudocódigo

A continuación se muestra el pseudocódigo del algoritmo SHA-256. Nótese el gran aumento en la mezcla de bits entre las palabras en comparación con SHA-1.w[16..63]

Nota 1: Todas las variables son enteros sin signo de 32 bits y la suma se calcula módulo 2 32 Nota 2: Para cada ronda, hay una constante de ronda k [ i ] y una entrada en la matriz de programación de mensajes w [ i ] , 0 ≤ i ≤ 63 Nota 3: La función de compresión utiliza 8 variables de trabajo, de la a a la h Nota 4: Se utiliza la convención big-endian al expresar las constantes en este pseudocódigo y al analizar los datos del bloque de mensajes de bytes a palabras, por ejemplo, la primera palabra del mensaje de entrada "abc" después del relleno es 0x61626380Inicializar valores hash: (los primeros 32 bits de las partes fraccionarias de las raíces cuadradas de los primeros 8 números primos 2..19): h0 := 0x6a09e667 h1 := 0xbb67ae85 h2 := 0x3c6ef372 h3 := 0xa54ff53a h4 := 0x510e527f h5 := 0x9b05688c h6 := 0x1f83d9ab h7 := 0x5be0cd19 Inicializar matriz de constantes de redondeo: (primeros 32 bits de las partes fraccionarias de las raíces cúbicas de los primeros 64 primos 2..311): k [ 0..63 ] := 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 Preprocesamiento (Relleno): comenzar con el mensaje original de longitud L bits agregar un solo bit '1' agregar K bits '0', donde K es el número mínimo >= 0 tal que (L + 1 + K + 64) es un múltiplo de 512. agregar L como un entero big-endian de 64 bits, lo que hace que la longitud total posprocesada sea un múltiplo de 512 bits. de tal manera que los bits del mensaje sean:  mensaje original de longitud L  1  K ceros  L como entero de 64 bits  , (el número de bits será un múltiplo de 512) Procese el mensaje en bloques sucesivos de 512 bits: dividir el mensaje en fragmentos de 512 bits para cada trozo crea una matriz de programación de mensajes de 64 entradas w [ 0..63 ] de palabras de 32 bits (los valores iniciales en w [ 0..63 ] no importan, por lo que muchas implementaciones los ponen a cero aquí). Copiar el fragmento en las primeras 16 palabras w[0..15] del array de programación de mensajes. Extiende las primeras 16 palabras a las 48 palabras restantes w [ 16..63 ] del arreglo de programación de mensajes: para i desde 16 hasta 63 s0 := (w [ i-15 ] rightrotate 7) xor (w [ i-15 ] rightrotate 18) xor (w [ i-15 ] rightshift 3) s1 := (w [ i-2 ] rightrotate 17) xor (w [ i-2 ] rightrotate 19) xor (w [ i-2 ] rightshift 10) w [ i ] := w [ i-16 ] + s0 + w [ i-7 ] + s1 Inicialice las variables de trabajo con el valor hash actual: a := h0 b := h1 c := h2 d := h3 e := h4 f := h5 g := h6 h := h7 Bucle principal de la función de compresión: para i desde 0 hasta 63 S1 := (e rotación a la derecha 6) xor (e rotación a la derecha 11) xor (e rotación a la derecha 25) ch := (e y f) xor (( no e) y g) temp1 := h + S1 + ch + k [ i ] + w [ i ] S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22) mayor := (a y b) xor (a y c) xor (b y c) temp2 := S0 + maj h := g g := f f := e e := d + temp1 d := c c := b b := a a := temp1 + temp2 Agregue el fragmento comprimido al valor hash actual: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d h4 := h4 + e h5 := h5 + f h6 := h6 + g h7 := h7 + h Generar el valor hash final (big-endian): digest := hash := h0 agregar h1 agregar h2 agregar h3 agregar h4 agregar h5 agregar h6 agregar h7

El cálculo de los valores chy majse puede optimizar de la misma manera que se describió para SHA-1 .

SHA-224 es idéntico a SHA-256, excepto que:

  • h0Los valores hash iniciales h7son diferentes y
  • La salida se construye omitiendo h7.
Valores hash iniciales SHA-224 (en big endian): (Los segundos 32 bits de las partes fraccionarias de las raíces cuadradas de los primos 9º a 16º 23..53) h [ 0..7 ] := 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4

SHA-512 es idéntico en estructura a SHA-256, pero:

  • El mensaje se divide en fragmentos de 1024 bits,
  • Los valores hash iniciales y las constantes de ronda se extienden a 64 bits,
  • Hay 80 rondas en lugar de 64,
  • La matriz de programación de mensajes w tiene 80 palabras de 64 bits en lugar de 64 palabras de 32 bits,
  • Para extender la matriz de programación de mensajes w, el bucle va de 16 a 79 en lugar de de 16 a 63,
  • Las constantes de redondeo se basan en los primeros 80 primos 2..409,
  • El tamaño de palabra utilizado para los cálculos es de 64 bits de longitud.
  • La longitud añadida al mensaje (antes del preprocesamiento), en bits , es un entero big-endian de 128 bits, y
  • Los valores de desplazamiento y rotación utilizados son diferentes.
Valores hash iniciales SHA-512 (en formato big-endian): h [ 0..7 ] := 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f, ​​0x1f83d9abfb41bd6b, 0x5be0cd19137e2179 Constantes de redondeo SHA-512: k [ 0..79 ] := 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817 Suma y Sigma SHA-512: S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39) S1 := (e rotación a la derecha 14) xor (e rotación a la derecha 18) xor (e rotación a la derecha 41)  s0 := (w [ i-15 ] rightrotate 1) xor (w [ i-15 ] rightrotate 8) xor (w [ i-15 ] rightshift 7) s1 := (w [ i-2 ] rightrotate 19) xor (w [ i-2 ] rightrotate 61) xor (w [ i-2 ] rightshift 6)

SHA-384 es idéntico a SHA-512, excepto que:

  • Los valores hash iniciales h0son h7diferentes (tomados de los números primos del 9º al 16º), y
  • La salida se construye omitiendo h6y h7.
Valores hash iniciales SHA-384 (en formato big-endian): h [ 0..7 ] := 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939, 0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4

SHA-512/t es idéntico a SHA-512 excepto que:

  • Los valores hash iniciales se obtienen h0mediante h7la función de generación de IV SHA-512/t .
  • La salida se construye truncando la concatenación de h0a través h7de en t bits,
  • No se permite t igual a 384; en su lugar, se debe usar SHA-384 como se especifica, y
  • Se mencionan especialmente como aprobados los valores t 224 y 256.
Valores hash iniciales SHA-512/224 (en formato big-endian): h [ 0..7 ] := 0x8c3d37c819544da2, 0x73e1996689dcd4d6, 0x1dfab7ae32ff9c82, 0x679dd514582f9fcf, 0x0f6d2b697bd44da8, 0x77e36f7304C48942, 0x3f9d85a86a1d36C8, 0x1112e6ad91d692a1 Valores hash iniciales SHA-512/256 (en formato big-endian): h [ 0..7 ] := 0x22312194fc2bf72c, 0x9f555fa3c84c64c2, 0x2393b86b6f53b151, 0x963877195940eabd, 0x96283ee2a88effe3, 0xbe5e1e2553863992, 0x2b0199fc2c85b8aa, 0x0eb72ddC81c52ca2

La función de generación de IV SHA-512/t evalúa un SHA-512 modificado en la cadena ASCII "SHA-512/ t ", sustituida por la representación decimal de t . El SHA-512 modificado es el mismo que SHA-512 excepto que sus valores iniciales h0a través de h7se han sometido a una operación XOR con la constante hexadecimal 0xa5a5a5a5a5a5a5a5.

En el RFC 6234 se puede encontrar un ejemplo de implementación en C para la familia de funciones hash SHA-2 . 

Comparación de funciones SHA

En la tabla siguiente, el estado interno se refiere a la "suma hash interna" después de cada compresión de un bloque de datos.

En la columna de operaciones bit a bit, "Rot" significa rotación sin acarreo y "Shr" significa desplazamiento lógico a la derecha . Todos estos algoritmos emplean la suma modular de alguna manera, excepto SHA-3.

En la tabla siguiente se ofrecen mediciones de rendimiento más detalladas en arquitecturas de procesadores modernas.

Los datos de rendimiento etiquetados como ' x86 ' se obtuvieron utilizando código de 32 bits en procesadores de 64 bits , mientras que los datos ' x86-64 ' corresponden a código nativo de 64 bits. Si bien SHA-256 está diseñado para cálculos de 32 bits, se beneficia del código optimizado para procesadores de 64 bits en la arquitectura x86. Las implementaciones de 32 bits de SHA-512 son significativamente más lentas que sus contrapartes de 64 bits. Las variantes de ambos algoritmos con diferentes tamaños de salida tendrán un rendimiento similar, ya que las funciones de expansión y compresión de mensajes son idénticas, y solo difieren los valores hash iniciales y los tamaños de salida. Las mejores implementaciones de MD5 y SHA-1 alcanzan entre 4,5 y 6 ciclos por byte en procesadores modernos.

Las pruebas fueron realizadas por la Universidad de Illinois en Chicago en su sistema hydra8 con un procesador Intel Xeon E3-1275 V2 a una velocidad de reloj de 3,5 GHz , y en su sistema hydra9 con una APU AMD A10-5800K a una velocidad de reloj de 3,8 GHz. [ 51 ] Las velocidades de ciclos por byte mencionadas anteriormente son el rendimiento medio de un algoritmo que procesa un mensaje de 4096 bytes utilizando el software de evaluación comparativa criptográfica SUPERCOP. [ 52 ] El rendimiento en MiB/s se extrapola a partir de la velocidad de reloj de la CPU en un solo núcleo; el rendimiento en el mundo real variará debido a diversos factores.  

SHA-256 y SHA-512 son vulnerables a un ataque de extensión de longitud , pero SHA-384 y SHA-256/512 no son vulnerables porque su salida es una versión truncada de su estado interno. [ 53 ]

Implementaciones

Bibliotecas de criptografía que admiten SHA-2:

La aceleración por hardware la proporcionan las siguientes extensiones del procesador:

Véase también

Referencias

  1. 1 2 Khovratovich, Dmitry; Rechberger, Christian y Savelieva, Alexandra (2011). "Bicliques para preimágenes: ataques a Skein-512 y la familia SHA-2" (PDF) . Archivo de preimpresiones de criptología de la IACR . 2011 (286). Archivado (PDF) del original el 15 de febrero de 2022. Recuperado el 15 de febrero de 2022 .
  2. 1 2 Lamberger, Mario y Mendel, Florian (2011). "Ataque diferencial de orden superior en SHA-256 reducido" (PDF) . Archivo de preimpresiones de criptología de la IACR . 2011 (37). Archivado (PDF) del original el 22-12-2022 . Recuperado el 15-02-2022 .
  3. Penard, Wouter; van Werkhoven, Tim. "Sobre la familia de algoritmos de hash seguro" (PDF) . staff.science.uu.nl . Archivado del original (PDF) el 30 de marzo de 2016.
  4. 1 2 Aviso del Registro Federal 02-21599, que anuncia la aprobación de la publicación FIPS 180-2. Archivado el 14 de marzo de 2022 en Wayback Machine.
  5. 1 2 "Detalles de IPR: Estados Unidos de América representado por la declaración de licencia general de la Agencia de Seguridad Nacional" . IETF Datatracker . 858. Archivado del original el 16 de junio de 2016. Recuperado el 17 de febrero de 2008 .
  6. US 6829355 , Lilly, Glenn M., "Dispositivo y método para hash criptográfico unidireccional", publicado el 7 de diciembre de 2004, asignado a la Agencia de Seguridad Nacional. 
  7. Algazy et al. 2024 .
  8. "FIPS 180-2 con Aviso de Cambio 1" (PDF) . csrc.nist.gov . Archivado (PDF) del original el 9 de agosto de 2017. Consultado el 15 de febrero de 2022 .
  9. Aviso del Registro Federal E8-24743, que anuncia la aprobación de la publicación FIPS 180-3
  10. 1 2 Dang, Quynh (24 de agosto de 2012). Recomendación para aplicaciones que utilizan algoritmos hash aprobados (Informe). Instituto Nacional de Estándares y Tecnología. Archivado del original el 28 de agosto de 2023. Recuperado el 28 de agosto de 2023 .
  11. 1 2 Barker, Elaine; Barker, William; Burr, William; Polk, W.; Smid, Miles (10 de julio de 2012). Recomendación para la gestión de claves, parte 1: general (revisión 3) (informe). Instituto Nacional de Estándares y Tecnología. Archivado del original el 28 de agosto de 2023. Recuperado el 28 de agosto de 2023 .
  12. "NIST.gov – División de Seguridad Informática – Centro de Recursos de Seguridad Informática" . 29 de diciembre de 2016. Archivado del original el 9 de septiembre de 2017. Consultado el 15 de febrero de 2022 .
  13. Barker, Elaine; Roginsky, Allen (13 de enero de 2011). Transiciones: Recomendación para la transición del uso de algoritmos criptográficos y longitudes de clave (Informe). Instituto Nacional de Estándares y Tecnología. Archivado del original el 28 de agosto de 2023. Recuperado el 28 de agosto de 2023 .
  14. Aviso del Registro Federal 2012-5400, que anuncia la aprobación de la publicación FIPS 180-4 .
  15. NIST, Decisión de revisar FIPS 180-4, Estándar de Hash Seguro (SHS)
  16. "El NIST selecciona al ganador del concurso de algoritmos de hash seguro (SHA-3)" . NIST . 2 de octubre de 2012. Archivado del original el 2 de abril de 2015. Consultado el 24 de febrero de 2015 .
  17. ^ Franck, Lucas Daudt; Ginja, Gabriel Augusto; Carmo, João Paulo; Alfonso, José A.; Luppe, Maximiliam (2024). "Diseño ASIC personalizado para SHA-256 utilizando herramientas de código abierto" . Computadoras . 13 (1): 9. doi : 10.3390/computers13010009 . hdl : 1822/89307 .
  18. "Verificación de la autenticidad de las imágenes de Debian" . Archivado del original el 19 de febrero de 2024. Consultado el 19 de febrero de 2024 .
  19. Markoff, John (27 de enero de 2009). "Una herramienta para verificar registros digitales, incluso con los cambios tecnológicos" . The New York Times . ISSN 0362-4331 . Archivado del original el 19 de septiembre de 2023. Consultado el 27 de agosto de 2023 . 
  20. Hardaker, Wes (12 de agosto de 2022). Eliminar SHA-1 del uso activo dentro de DNSSEC (Informe). Grupo de Trabajo de Ingeniería de Internet.
  21. "Seguridad/Características - Wiki de Debian" . wiki.debian.org . Consultado el 13 de enero de 2025 .
  22. "Hashes SHA – Arch Wiki" . wiki.archlinux.org . Consultado el 13 de enero de 2025 .
  23. "Bitcoin no desperdicia energía" . Bitcoin excedente . Archivado del original el 28 de mayo de 2022. Consultado el 20 de abril de 2020 .
  24. "¿Qué es SHA-256 y cómo se relaciona con Bitcoin? - Mycryptopedia" . Mycryptopedia . 21/09/2017. Archivado del original el 17/09/2018 . Consultado el 17/09/2018 .
  25. 3GPP TS 33.401, Arquitectura y procedimientos de seguridad para E-UTRAN
  26. 3GPP TS 33.501, Arquitectura y procedimientos de seguridad para sistemas 5G
  27. División de Seguridad Informática, Laboratorio de Tecnología de la Información (04/01/2017). "Política del NIST sobre funciones hash – Funciones hash | CSRC | CSRC" . CSRC | NIST . Archivado del original el 28/08/2023 . Consultado el 27/08/2023 .
  28. "Hashing seguro" . NIST . Archivado del original el 25/06/2011 . Consultado el 25/11/2010 .
  29. "Descripción general de Windows XP Service Pack 3" (PDF) . Microsoft Corporation. Archivado del original (PDF) el 30 de mayo de 2008.
  30. "Eliminación gradual de SHA-1" . Blog de Chromium . Archivado del original el 7 de agosto de 2023. Consultado el 27 de agosto de 2023 .
  31. Mill, Eric. "SHAAAAAAAAAAAAA" . SHAAAAAAAAAAAAA.com . Archivado del original el 1 de marzo de 2017. Consultado el 26 de agosto de 2015 .
  32. "Preguntas frecuentes no oficiales sobre la descontinuación de SHA1 en Chrome" . Filippo Valsorda . 8 de abril de 2015. Archivado del original el 28 de agosto de 2023. Consultado el 27 de agosto de 2023 .
  33. "Actualización de nuestra hoja de ruta para la eliminación gradual de SHA-1: Blog de desarrolladores de Microsoft Edge" . blogs.windows.com . 29 de abril de 2016. Archivado del original el 28 de noviembre de 2016. Consultado el 28 de noviembre de 2016 .
  34. "Firefox: Mozilla schaltet SHA-1 ab... und direkt wieder an" . heise.de (en alemán). 2016-01-08. Archivado desde el original el 28 de agosto de 2023 . Consultado el 18 de enero de 2025 .
  35. Alexander Sotirov, Marc Stevens, Jacob Appelbaum, Arjen Lenstra, David Molnar, Dag Arne Osvik, Benne de Weger, MD5 considerado dañino hoy: Creación de un certificado CA malicioso . Archivado el 23 de marzo de 2022 en Wayback Machine , consultado el 29 de marzo de 2009.
  36. Ji Li, Takanori Isobe y Kyoji Shibutani, Laboratorio de Investigación de Sony China y Sony Corporation, Conversión de un ataque de preimagen de encuentro en el medio en un ataque de pseudo colisión: aplicación a SHA-2 . Archivado el 24 de febrero de 2022 en Wayback Machine .
  37. Sanadhya, Somitra Kumar; Sarkar, Palash (2008), Nuevos ataques de colisión contra SHA-2 de hasta 24 pasos , Lecture Notes in Computer Science, vol. 5365, Springer-Verlag, pp. 91–103 , doi : 10.1007/978-3-540-89754-5_8 , ISBN   978-3-540-89753-8Archivado del original el 21/01/2022 , consultado el 12/02/2024..
  38. Sanadhya, Somitra Kumar; Sarkar, Palash (2009). "Análisis combinatorio de ataques recientes a la familia SHA-2 con paso reducido" . Criptografía y Comunicaciones . 1 (2): 135– 173. doi : 10.1007/s12095-009-0011-5 . Archivado del original el 2 de agosto de 2023. Consultado el 12 de febrero de 2024 .
  39. Aoki, Kazumaro; Guo, Jian; Matusiewicz, Krystian; Sasaki, Yu y Wang, Lei (2009). "Preimágenes para SHA-2 con reducción de pasos". Avances en criptología – ASIACRYPT 2009. Notas de clase en ciencias de la computación. Vol. 5912. Springer Berlin Heidelberg. págs. 578–597 . doi : 10.1007/978-3-642-10366-7_34 . ISBN   978-3-642-10366-7ISSN 0302-9743 
  40. Guo, Jian; Ling, San; Rechberger, Christian y Wang, Huaxiong (2010). "Ataques avanzados de preimagen de encuentro en el medio: primeros resultados en Full Tiger y resultados mejorados en MD4 y SHA-2". Avances en criptología – ASIACRYPT 2010 (PDF) . Notas de clase en ciencias de la computación. Vol. 6477. Springer Berlin Heidelberg. págs. 56–75 . doi : 10.1007/978-3-642-17373-8_4 . ISBN   978-3-642-17373-8ISSN 0302-9743 . Archivado (PDF) del original el 3 de marzo de 2022. Consultado el 15 de febrero de 2022 . 
  41. Mendel, Florian; Nad, Tomislav; Schläffer, Martin (2013). «Mejora de las colisiones locales: nuevos ataques a SHA-256 reducido». Avances en criptología – EUROCRYPT 2013. Notas de clase en informática. Vol. 7881. Springer Berlin Heidelberg. págs. 262–278 . doi : 10.1007/978-3-642-38348-9_16 . ISBN   978-3-642-38348-9ISSN 0302-9743 . Archivado del original el 6 de noviembre de 2018. Consultado el 13 de diciembre de 2014 . 
  42. Eichlseder, Maria; Mendel, Florian; y Schläffer, Martin (2014). "Heurísticas de ramificación en la búsqueda diferencial de colisiones con aplicaciones a SHA-512" (PDF) . Archivo de preimpresiones de criptología de la IACR . 2014 (302). Archivado (PDF) del original el 20 de enero de 2022. Recuperado el 15 de febrero de 2022 .
  43. Dobraunig, Christoph; Eichlseder, Maria y Mendel, Florian (2016). "Análisis de SHA-512/224 y SHA-512/256" (PDF) . Asociación Internacional para la Investigación Criptológica . Archivado (PDF) del original el 15 de julio de 2017. Recuperado el 15 de abril de 2016 .
  44. Li, Yingxin; Liu, Fukang; Wang, Gaoli (2024). "Nuevos récords en ataques de colisión en SHA-2" . Cryptology ePrint Archive . Archivado del original el 2 de marzo de 2024. Recuperado el 2 de marzo de 2024 .
  45. "Hashing seguro: programa de validación de algoritmos criptográficos" . NIST CSRC . 5 de octubre de 2016. Consultado el 8 de noviembre de 2025 .
  46. "Lista de validación SHS" . NIST . 16 de junio de 2017. Archivado del original el 17 de junio de 2017.
  47. "Tabla de medidas" . bench.cr.yp.to .
  48. Tao, Xie; Liu, Fanbao; Feng, Dengguo (2013). Ataque de colisión rápida en MD5 (PDF) . Cryptology ePrint Archive (Informe técnico). IACR .
  49. Stevens, Marc ; Bursztein, Elie ; Karpman, Pierre; Albertini, Ange; Markov, Yarik. La primera colisión para SHA-1 completo (PDF) (Informe técnico). Google Research . Archivado del original (PDF) el 7 de febrero de 2026.
    • Marc Stevens; Elie Bursztein; Pierre Karpman; Ange Albertini; Yarik Markov; Alex Petit Bianco; Clement Baisse (23 de febrero de 2017). "Anuncio de la primera colisión SHA1" . Blog de seguridad de Google .
  50. "La familia de funciones de la esponja de Keccak" . Consultado el 27 de enero de 2016 .
  51. SUPERCOP Benchmarks Mediciones de funciones hash, indexadas por máquina .
  52. "SUPERCOP" . Archivado del original el 15 de febrero de 2015. Consultado el 24 de febrero de 2015 .
  53. Bostrom, Michael (29-10-2015). "size_t Sí Importa: Explicación de los Ataques de Extensión de Longitud de Hash" (PDF) . Recuperado el 26-06-2026 .
  54. " Conjuntos de cifrado SSL/TLS compatibles " . Archivado del original el 12/05/2019 . Consultado el 19/10/2019 .
  55. " Registro de cambios de Mbed TLS , 7 de julio de 2007" . GitHub . Archivado del original el 4 de febrero de 2019. Consultado el 19 de octubre de 2019 .
  56. "Manual de referencia técnica del procesador ARM Cortex-A53 MPCore: Extensión de criptografía" . Archivado del original el 1 de junio de 2020. Consultado el 15 de febrero de 2022 .
  57. Principios de funcionamiento de la arquitectura IBM z/, publicación número SA22-7832. Consulte las instrucciones KIMD y KLMD en el capítulo 7.

Lecturas adicionales

  • Algazy, K.; Sakan, K.; Nyssanbayeva, S.; Lizunov, O. (2024). "Syrga2: Esquema de firma basado en hash post-cuántico" . Computation . 12 (6): 125. doi : 10.3390/computation12060125 .
  • Henri Gilbert, Helena Handschuh: Análisis de seguridad de SHA-256 y algoritmos similares. Áreas selectas de criptografía 2003: págs. 175-193.
  • «Propuesta de revisión del estándar federal de procesamiento de información (FIPS) 180, estándar de hash seguro» . Registro Federal . 59 (131): 35317–35318 . 11 de julio de 1994. Archivado del original el 28 de julio de 2020. Consultado el 26 de abril de 2007 .
  • Descripciones de SHA-256, SHA-384 y SHA-512 del NIST.
  • Comprobador SHA-2 : SHAChecker permite comprobar la compatibilidad SSL de uno con SHA-2.
  • Calculadora SHA-256 – Calculadora SHA-256
  • Especificaciones para un estándar de hash seguro (SHS) – Borrador para el SHS propuesto (SHA-0)
  • Estándar de Hash Seguro (SHS) – SHS propuesto (SHA-0)
  • Kit de herramientas criptográficas CSRC : sitio oficial del NIST para el Estándar de Hash Seguro.
  • FIPS PUB 180-4: Estándar de Hash Seguro (SHS) ( PDF , 834 KB) – Versión actual del Estándar de Hash Seguro (SHA-1, SHA-224, SHA-256, SHA-384 y SHA-512), agosto de 2015
  • Vectores de prueba para SHA-256/384/512 del proyecto NESSIE
  • Vectores de prueba para SHA-1 y SHA-2 del sitio web del NIST.
  • Proyecto de Hash Criptográfico del NIST : competición SHA-3
  • RFC 3874 : "Una función hash unidireccional de 224 bits: SHA-224" 
  • RFC 6234 : "Algoritmos de hash seguros de EE. UU. (SHA y HMAC y HKDF basados ​​en SHA)"; contiene una implementación de ejemplo en C. 
  • Demostración del algoritmo SHA-256
Obtenido de " https://en.wikipedia.org/w/index.php?title=SHA-2&oldid=1361621484 "