SHA-1
En criptografía, SHA-1 (Algoritmo hash seguro 1) es una función hash que toma una entrada y produce un valor hash de 160 bits (20 bytes). conocido como resumen de mensaje, normalmente representado como 40 dígitos hexadecimales. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos y es un estándar federal de procesamiento de información de los Estados Unidos. El algoritmo se ha roto criptográficamente pero aún se usa ampliamente.
Desde 2005, SHA-1 no se ha considerado seguro contra oponentes bien financiados; a partir de 2010 muchas organizaciones han recomendado su reemplazo. NIST desaprobó formalmente el uso de SHA-1 en 2011 y no permitió su uso para firmas digitales en 2013, y declaró que debería eliminarse gradualmente para 2030. A partir de 2020, los ataques de prefijo elegido contra SHA-1 son prácticos. Como tal, se recomienda eliminar SHA-1 de los productos lo antes posible y, en su lugar, usar SHA-2 o SHA-3. Reemplazar SHA-1 es urgente donde se usa para firmas digitales.
Todos los principales proveedores de navegadores web dejaron de aceptar certificados SHA-1 SSL en 2017. En febrero de 2017, CWI Amsterdam y Google anunciaron que habían realizado un ataque de colisión contra SHA-1, publicando dos archivos PDF diferentes que produjeron el mismo SHA- 1 hash Sin embargo, SHA-1 sigue siendo seguro para HMAC.
Microsoft suspendió la compatibilidad con la firma de código SHA-1 para Windows Update el 7 de agosto de 2020.
Desarrollo
SHA-1 produce un resumen de mensajes basado en principios similares a los utilizados por Ronald L. Rivest del MIT en el diseño de los algoritmos de resumen de mensajes MD2, MD4 y MD5, pero genera un valor hash mayor (160 bits frente a 128 bits). bits).
SHA-1 se desarrolló como parte del proyecto Capstone del gobierno de EE. UU. La especificación original del algoritmo fue publicada en 1993 bajo el título Secure Hash Standard, FIPS PUB 180, por la agencia de estándares del gobierno de EE. UU. NIST (Instituto Nacional de Estándares y Tecnología). Esta versión ahora se llama a menudo SHA-0. Fue retirado por la NSA poco después de su publicación y fue reemplazado por la versión revisada, publicada en 1995 en FIPS PUB 180-1 y comúnmente denominada SHA-1. SHA-1 se diferencia de SHA-0 solo por una sola rotación bit a bit en el programa de mensajes de su función de compresión. Según la NSA, esto se hizo para corregir una falla en el algoritmo original que reducía su seguridad criptográfica, pero no dieron más explicaciones. De hecho, las técnicas disponibles públicamente demostraron un compromiso de SHA-0, en 2004, antes de SHA-1 en 2017 (ver §Ataques).
Aplicaciones
Criptografía
SHA-1 forma parte de varios protocolos y aplicaciones de seguridad ampliamente utilizados, incluidos TLS y SSL, PGP, SSH, S/MIME e IPsec. Esas aplicaciones también pueden usar MD5; tanto MD5 como SHA-1 descienden de MD4.
SHA-1 y SHA-2 son los algoritmos hash requeridos por ley para su uso en ciertas aplicaciones del gobierno de EE. UU., incluido el uso dentro de otros algoritmos y protocolos criptográficos, para la protección de información confidencial no clasificada. FIPS PUB 180-1 también alentó la adopción y el uso de SHA-1 por parte de organizaciones privadas y comerciales. SHA-1 se está retirando de la mayoría de los usos gubernamentales; El Instituto Nacional de Estándares y Tecnología de EE. UU. dijo: "Las agencias federales deberían dejar de usar SHA-1 para... aplicaciones que requieren resistencia a colisiones tan pronto como sea práctico, y debe usar la familia de funciones hash SHA-2 para estas aplicaciones después de 2010" (énfasis en el original), aunque luego se relajó para permitir que SHA-1 se use para verificar firmas digitales antiguas y marcas de tiempo.
Un motivo principal para la publicación del Algoritmo hash seguro fue el Estándar de firma digital, en el que está incorporado.
Las funciones hash SHA se han utilizado como base de los cifrados de bloque SHACAL.
Integridad de datos
Los sistemas de control de revisiones como Git, Mercurial y Monotone usan SHA-1, no por seguridad, sino para identificar revisiones y garantizar que los datos no hayan cambiado debido a daños accidentales. Linus Torvalds dijo sobre Git:
- Si usted tiene corrupción de disco, si usted tiene corrupción DRAM, si usted tiene algún tipo de problemas en absoluto, Git los notará. No es cuestión de siEs una garantía. Puedes tener gente que trate de ser maliciosa. No tendrán éxito. [...] Nadie ha sido capaz de romper SHA-1, pero el punto es el SHA-1, en lo que respecta a Git, ni siquiera es una característica de seguridad. Es puramente un cheque de consistencia. Las partes de seguridad están en otro lugar, así que mucha gente asume que ya que Git utiliza SHA-1 y SHA-1 se utiliza para cosas criptográficamente seguras, piensan que, Vale, es una gran característica de seguridad. No tiene nada que ver con la seguridad, es sólo el mejor hash que puedes conseguir...
- Le garantizo que, si pone sus datos en Git, puede confiar en el hecho de que cinco años después, después de que se convirtió de su disco duro a DVD a cualquier nueva tecnología y lo copió a lo largo, cinco años más tarde usted puede verificar que los datos que obtiene de vuelta es exactamente los mismos datos que puso en. [...]
- Una de las razones por las que me preocupo es por el núcleo, tuvimos un descanso en uno de los sitios BitKeeper donde la gente trató de corromper los repositorios de código fuente del núcleo.
Sin embargo, Git no requiere la segunda resistencia de preimagen de SHA-1 como función de seguridad, ya que siempre preferirá mantener la versión más antigua de un objeto en caso de colisión, evitando que un atacante sobrescriba archivos de forma subrepticia.
Criptomálisis y validación
Para una función hash para la cual L es el número de bits en el resumen del mensaje, siempre se puede encontrar un mensaje que corresponda a un resumen de mensaje determinado usando una búsqueda de fuerza bruta en aproximadamente 2L. Esto se denomina ataque de preimagen y puede o no ser práctico según L y el entorno informático particular. Sin embargo, una colisión, que consiste en encontrar dos mensajes diferentes que producen el mismo resumen de mensaje, requiere en promedio solo alrededor de 1.2 × 2L/2 evaluaciones utilizando un ataque de cumpleaños. Por lo tanto, la fuerza de una función hash generalmente se compara con un cifrado simétrico de la mitad de la longitud del resumen del mensaje. SHA-1, que tiene un resumen de mensajes de 160 bits, originalmente se pensó que tenía una fuerza de 80 bits.
Algunas de las aplicaciones que usan hash criptográfico, como el almacenamiento de contraseñas, solo se ven mínimamente afectadas por un ataque de colisión. La construcción de una contraseña que funcione para una cuenta determinada requiere un ataque de preimagen, así como el acceso al hash de la contraseña original, que puede o no ser trivial. Los ataques no permiten revertir el cifrado de contraseñas (p. ej., para obtener una contraseña para probar contra la cuenta de un usuario en otro lugar). (Sin embargo, incluso un hash de contraseña seguro no puede evitar ataques de fuerza bruta en contraseñas débiles).
En el caso de la firma de documentos, un atacante no podría simplemente falsificar una firma de un documento existente: el atacante tendría que producir un par de documentos, uno inocuo y otro dañino, y hacer que el titular de la clave privada firme el documento inocuo. documento. Hay circunstancias prácticas en las que esto es posible; hasta finales de 2008, era posible crear certificados SSL falsificados mediante una colisión MD5.
Debido al bloque y la estructura iterativa de los algoritmos y la ausencia de pasos finales adicionales, todas las funciones SHA (excepto SHA-3) son vulnerables a ataques de colisión de mensaje parcial y de extensión de longitud. Estos ataques permiten a un atacante falsificar un mensaje firmado solo por un hash con clave: SHA(message || key) o SHA(clave || mensaje): extendiendo el mensaje y recalculando el hash sin conocer la clave. Una mejora simple para prevenir estos ataques es hacer hash dos veces: SHAd(mensaje) = SHA(SHA(0b || mensaje)) (la longitud de 0b, bloque cero, es igual al tamaño de bloque de la función hash).
SHA-0
En CRYPTO 98, dos investigadores franceses, Florent Chabaud y Antoine Joux, presentaron un ataque a SHA1: las colisiones se pueden encontrar con una complejidad de 261, menor que 280 para una función hash ideal del mismo tamaño.
En 2004, Biham y Chen encontraron cuasi colisiones para SHA-0: dos mensajes cuyo valor hash es casi el mismo; en este caso, 142 de los 160 bits son iguales. También encontraron colisiones completas de SHA-0 reducidas a 62 de sus 80 rondas.
Posteriormente, el 12 de agosto de 2004, Joux, Carribault, Lemuet y Jalby anunciaron una colisión para el algoritmo SHA-0 completo. Esto se hizo usando una generalización del ataque de Chabaud y Joux. Encontrar la colisión tuvo una complejidad de 251 y tomó alrededor de 80 000 horas de procesador en una supercomputadora con 256 procesadores Itanium 2 (equivalente a 13 días de uso de tiempo completo de la computadora).
El 17 de agosto de 2004, en la Rump Session de CRYPTO 2004, Wang, Feng, Lai y Yu anunciaron resultados preliminares sobre un ataque a MD5, SHA-0 y otras funciones hash. La complejidad de su ataque a SHA-0 es 240, significativamente mejor que el ataque de Joux et al.
En febrero de 2005, se anunció un ataque de Xiaoyun Wang, Yiqun Lisa Yin y Hongbo Yu que podría encontrar colisiones en SHA-0 en 239 operaciones.
Otro ataque en 2008 aplicando el ataque boomerang redujo la complejidad de encontrar colisiones a 233,6, lo que se estimó en 1 hora en una PC promedio desde el año 2008.
A la luz de los resultados de SHA-0, algunos expertos sugirieron que se deberían reconsiderar los planes para el uso de SHA-1 en nuevos criptosistemas. Después de que se publicaron los resultados de CRYPTO 2004, NIST anunció que planeaba eliminar el uso de SHA-1 para 2010 a favor de las variantes SHA-2.
Ataques
A principios de 2005, Vincent Rijmen y Elisabeth Oswald publicaron un ataque a una versión reducida de SHA-1 (53 de 80 rondas) que encuentra colisiones con un esfuerzo computacional de menos de 280 operaciones.
En febrero de 2005, se anunció un ataque de Xiaoyun Wang, Yiqun Lisa Yin y Hongbo Yu. Los ataques pueden encontrar colisiones en la versión completa de SHA-1, lo que requiere menos de 269 operaciones. (Una búsqueda de fuerza bruta requeriría 280 operaciones).
Los autores escriben: "En particular, nuestro análisis se basa en el ataque diferencial original en SHA-0, el ataque de casi colisión en SHA-0, las técnicas de colisión multibloque, así como las técnicas de modificación de mensajes utilizadas en el ataque de búsqueda de colisión en MD5. Descifrar SHA-1 no sería posible sin estas poderosas técnicas analíticas." Los autores han presentado una colisión para SHA-1 de 58 rondas, encontrada con 233 operaciones hash. El documento con la descripción completa del ataque se publicó en agosto de 2005 en la conferencia CRYPTO.
En una entrevista, Yin afirma que, "A grandes rasgos, explotamos las siguientes dos debilidades: una es que el paso de preprocesamiento de archivos no es lo suficientemente complicado; otra es que ciertas operaciones matemáticas en las primeras 20 rondas tienen problemas de seguridad inesperados."
El 17 de agosto de 2005, se anunció una mejora en el ataque SHA-1 en nombre de Xiaoyun Wang, Andrew Yao y Frances Yao en la Rump Session de CRYPTO 2005, reduciendo la complejidad requerida para encontrar una colisión en SHA-1 a 2 63. El 18 de diciembre de 2007 los detalles de este resultado fueron explicados y verificados por Martin Cochran.
Christophe De Cannière y Christian Rechberger mejoraron aún más el ataque a SHA-1 en "Encontrar características de SHA-1: resultados generales y aplicaciones" recibiendo el premio al mejor artículo en ASIACRYPT 2006. Se presentó una colisión de dos bloques para SHA-1 de 64 rondas, que se encontró usando métodos no optimizados con 235 evaluaciones de funciones de compresión. Dado que este ataque requiere el equivalente a unas 235 evaluaciones, se considera una ruptura teórica significativa. Su ataque se extendió aún más a 73 rondas (de 80) en 2010 por Grechnikov. Sin embargo, para encontrar una colisión real en las 80 rondas completas de la función hash, se requiere una gran cantidad de tiempo de computadora. Con ese fin, el 8 de agosto de 2007 comenzó una búsqueda de colisión de SHA-1 utilizando la plataforma informática voluntaria BOINC, organizada por la Universidad Tecnológica de Graz. El esfuerzo fue abandonado el 12 de mayo de 2009 debido a la falta de progreso.
En la Rump Session de CRYPTO 2006, Christian Rechberger y Christophe De Cannière afirmaron haber descubierto un ataque de colisión en SHA-1 que permitiría a un atacante seleccionar al menos partes del mensaje.
En 2008, una metodología de ataque de Stéphane Manuel informó colisiones de hash con una complejidad teórica estimada de 251 a 257 operaciones. Sin embargo, más tarde se retractó de esa afirmación después de descubrir que las rutas de colisión locales no eran en realidad independientes y, finalmente, citó como el vector de colisión más eficiente que ya se conocía antes de este trabajo.
Cameron McDonald, Philip Hawkes y Josef Pieprzyk presentaron un ataque de colisión de hash con una complejidad reclamada de 252 en la Rump Session de Eurocrypt 2009. Sin embargo, el documento adjunto, "Differential Path for SHA -1 con complejidad O(252)" ha sido retirado debido a que los autores' descubrimiento de que su estimación era incorrecta.
Un ataque contra SHA-1 fue el de Marc Stevens con un costo estimado de 2,77 millones de dólares (2012) para descifrar un solo valor de hash mediante el alquiler de potencia de CPU de servidores en la nube. Stevens desarrolló este ataque en un proyecto llamado HashClash, implementando un ataque de ruta diferencial. El 8 de noviembre de 2010, afirmó que tenía un ataque de casi colisión totalmente funcional contra SHA-1 completo con una complejidad estimada equivalente a 257,5 compresiones SHA-1. Calculó que este ataque podría extenderse a una colisión completa con una complejidad de alrededor de 261.
La SHAppening
(feminine)El 8 de octubre de 2015, Marc Stevens, Pierre Karpman y Thomas Peyrin publicaron un ataque de colisión de inicio libre en la función de compresión de SHA-1 que requiere solo 257 evaluaciones de SHA-1. Esto no se traduce directamente en una colisión en la función hash SHA-1 completa (donde un atacante no puede elegir libremente el estado interno inicial), pero socava las afirmaciones de seguridad de SHA-1. En particular, fue la primera vez que se demostró un ataque contra SHA-1 completo; todos los ataques anteriores fueron demasiado costosos para que sus autores los llevaran a cabo. Los autores llamaron a este importante avance en el criptoanálisis de SHA-1 The SHAppening.
El método se basó en su trabajo anterior, así como en la técnica de aceleración de rutas auxiliares (o boomerangs) de Joux y Peyrin, y en el uso de tarjetas GPU rentables y de alto rendimiento de NVIDIA. La colisión se encontró en un clúster de 16 nodos con un total de 64 tarjetas gráficas. Los autores estimaron que se podría encontrar una colisión similar comprando US$2000 de tiempo de GPU en EC2.
Los autores estimaron que el costo de alquilar suficiente tiempo de CPU/GPU de EC2 para generar una colisión completa para SHA-1 en el momento de la publicación era de entre 75 000 y 120 000 USD, y señalaron que estaba dentro del presupuesto de criminal organizaciones, sin mencionar las agencias nacionales de inteligencia. Como tal, los autores recomendaron que SHA-1 quedara obsoleto lo más rápido posible.
SHAttered – primera colisión pública
El 23 de febrero de 2017, CWI (Centrum Wiskunde & Informatica) y Google anunciaron el ataque SHAttered, en el que generaron dos archivos PDF diferentes con el mismo hash SHA-1 en aproximadamente 263.1 Evaluaciones SHA-1. Este ataque es unas 100.000 veces más rápido que la fuerza bruta de una colisión SHA-1 con un ataque de cumpleaños, que se estimó que requiere 280 evaluaciones SHA-1. El ataque requirió 'la potencia de procesamiento equivalente a 6500 años de cómputos de una sola CPU y 110 años de cómputos de una sola GPU'.
Ataque de cumpleaños cercano a la colisión: primer ataque práctico de prefijo elegido
El 24 de abril de 2019, un artículo de Gaëtan Leurent y Thomas Peyrin presentado en Eurocrypt 2019 describió una mejora del ataque de prefijo elegido previamente mejor en funciones de resumen similares a Merkle-Damgård basadas en cifrados de bloque Davies-Meyer. Con estas mejoras, este método es capaz de encontrar colisiones de prefijos elegidos en aproximadamente 268 evaluaciones SHA-1. Esto es aproximadamente mil millones de veces más rápido (y ahora utilizable para muchos ataques dirigidos, gracias a la posibilidad de elegir un prefijo, por ejemplo, código malicioso o identidades falsas en certificados firmados) que el ataque anterior 277.1 evaluaciones (pero sin el prefijo elegido, lo que no era práctico para la mayoría de los ataques dirigidos porque las colisiones encontradas eran casi aleatorias) y es lo suficientemente rápido como para ser práctico para los atacantes ingeniosos, lo que requiere aproximadamente $ 100,000 de procesamiento en la nube. Este método también es capaz de encontrar colisiones de prefijos elegidos en la función MD5, pero con una complejidad de 246.3 no supera el mejor método disponible anterior a nivel teórico (239), aunque potencialmente a un nivel práctico (≤249). Este ataque tiene un requisito de memoria de más de 500 GB.
El 5 de enero de 2020, los autores publicaron un ataque mejorado. En este artículo, demuestran un ataque de colisión de prefijo elegido con una complejidad de 263,4, que en el momento de la publicación costaría 45 000 USD por colisión generada.
Validación oficial
Las implementaciones de todas las funciones de seguridad aprobadas por FIPS se pueden validar oficialmente a través del programa CMVP, administrado conjuntamente por el Instituto Nacional de Estándares y Tecnología (NIST) y el Establecimiento de Seguridad de las Comunicaciones (CSE). Para una verificación informal, un paquete para generar una gran cantidad de vectores de prueba está disponible para su descarga en el sitio del NIST; la verificación resultante, sin embargo, no reemplaza la validación formal de CMVP, que es requerida por ley para ciertas aplicaciones.
Hasta diciembre de 2013, hay más de 2000 implementaciones validadas de SHA-1, con 14 de ellas capaces de manejar mensajes con una longitud en bits no un múltiplo de ocho (consulte la Lista de validación de SHS archivada el 23 de agosto de 2011 en la Máquina Wayback).
Ejemplos y pseudocódigo
Ejemplos de hash
Estos son ejemplos de resúmenes de mensajes SHA-1 en hexadecimal y en codificación de texto binario Base64 a ASCII.
SHA1("The quick brown fox jumps over the lazy dog")
- Hexadecimal presentado:
2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
- Base64 decodificación de texto ASCII:
L9ThxnotKPzthJ7hu3bnORuT6xI=
- Hexadecimal presentado:
Incluso un pequeño cambio en el mensaje resultará, con una probabilidad abrumadora, en muchos bits cambiando debido al efecto de avalancha. Por ejemplo, cambiar dog
a cog
produce un hash con diferentes valores para 81 de los 160 bits:
SHA1("The quick brown fox jumps over the lazy cog")
- Hexadecimal presentado:
de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3
- Base64 decodificación de texto ASCII:
3p8sf9JeGzr60+haC9F9mxANtLM=
- Hexadecimal presentado:
El hash de la cadena de longitud cero es:
SHA1("")
- Hexadecimal presentado:
da39a3ee5e6b4b0d3255bfef95601890afd80709
- Base64 decodificación de texto ASCII:
2jmj7l5rSw0yVb/vlWAYkK/YBwk=
- Hexadecimal presentado:
Pseudocódigo SHA-1
El pseudocódigo para el algoritmo SHA-1 es el siguiente:
Nota 1: Todas las variables son cantidades no firmadas de 32 bits y modulo de envolver 232 cuando se calcula, excepto para ml, la longitud del mensaje, que es una cantidad de 64 bits, y hh, el mensaje digestivo, que es una cantidad de 160 bits.Nota 2: Todas las constantes en este pseudo código están en el gran endian. Dentro de cada palabra, el byte más significativo se almacena en la posición de byte más izquierdaInicializar variables:h0 = 0x67452301 h1 = 0xEFCDAB89 h2 = 0x98BADCFE h3 = 0x10325476 h4 = 0xC3D2E1F0 ml = longitud de mensaje en bits (siempre un múltiplo del número de bits en un personaje). Pre-procesamiento:anexar el bit '1' al mensaje, por ejemplo, añadiendo 0x80 si la longitud del mensaje es múltiples de 8 bits. Apéndice 0 ≤ k ANTE 512 bits '0', tal que la longitud del mensaje resultante en bits(mod 512) append ml, la longitud del mensaje original en bits, como un entero de 64 bits. Así, la longitud total es un múltiplo de 512 bits. Procesar el mensaje en sucesivos pedazos de 512 bits:romper el mensaje en pedazos de 512 bits para cada pedazo romperse en dieciséis palabras grandes de 32 bits w[i], 0 ≤ 15 Horario del mensaje: extender las dieciséis palabras de 32 bits en ochenta palabras de 32 bits: para i desde 16 a 79 Nota 3: SHA-0 difiere por no tener este zurtate.w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) izquierda 1 Iniciar el valor de hash para este trozo:a = h0 b = h1 c = h2 d = h3 e = h4 Loop principal: para i desde 0 a 79 si 0 ≤ ≤ 19 entoncesf = b y c) xor ()no b) y d) k = 0x5A827999 si 20 ≤ ≤ 39 f = b xor c xor d k = 0x6ED9EBA1 si 40 ≤ ≤ 59 f = b y c) xor b y d) xor (c y d) k = 0x8F1BBCDC si 60 ≤ ≤ 79 f = b xor c xor d k = 0xCA62C1D6 temp = (a izquierda 5) + f + e + k + w[i] e = d d = c c = b izquierda 30 b = a a = temp Agregue el hash de este pedazo para resultar hasta ahora:h0 = h0 + a h1 = h1 + b h2 = h2 + c h3 = h3 + d h4 = h4 + e Producir el valor final del hash (big-endian) como un número de 160 bits:hh = izquierda 128) o (h1 izquierda 96) o (h2 izquierda 64) o (h3 izquierda 32) o h4
El número hh
es el resumen del mensaje, que se puede escribir en hexadecimal (base 16).
Se asumió que los valores constantes elegidos utilizados en el algoritmo no eran números bajo mi manga:
- Las cuatro constantes redondas
k
230 las raíces cuadradas de 2, 3, 5 y 10. Sin embargo, fueron redondeados incorrectamente al entero más cercano en lugar de ser redondeados al entero extraño más cercano, con proporciones equilibradas de cero y un bits. Además, elegir la raíz cuadrada de 10 (que no es una primera) lo hizo un factor común para las otras dos raíces cuadradas escogidas de los primos 2 y 5, con propiedades aritméticas posiblemente utilizables en rondas sucesivas, reduciendo la fuerza del algoritmo contra encontrar colisiones en algunos bits. - Los primeros cuatro valores de inicio para
h0
a través deh3
son los mismos con el algoritmo MD5, y el quinto (parah4
) es similar. Sin embargo no fueron debidamente verificados por ser resistentes a la inversión de las pocas primeras rondas para inferir posibles colisiones en algunos bits, utilizables por ataques diferenciales multibloque.
En lugar de la formulación del FIPS PUB 180-1 original que se muestra, se pueden usar las siguientes expresiones equivalentes para calcular f
en el bucle principal anterior:
Selección poco probable entre c y d, controlado por b.(0 ≤ i ≤ 19): f = d xor b y (c xor d)) (alternativo 1)(0 ≤ i ≤ 19): f = (b y c) o ()no b) y d) (Suplente 2)(0 ≤ i ≤ 19): f = (b y c) xor ()no b) y d) (alternativo 3)(0 ≤ i ≤ 19): f = vec_sel(d, c, b) (alternativo 4)[premo08] Función de mayoría.(40 ≤ i ≤ 59): f = (b y c) o d y b o c)) (alternativo 1)(40 ≤ i ≤ 59): f = (b y c) o d y b xor c)) (Suplente 2)(40 ≤ i ≤ 59): f = (b y c) xor d y b xor c)) (alternativo 3)(40 ≤ i ≤ 59): f = (b y c) xor b y d) xor (c y d) (alternativo 4)(40 ≤ i ≤ 59): f = vec_sel(c, b, c xor d) (alternativo 5)
También se demostró que para las rondas 32–79 el cálculo de:
w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) izquierda 1
puede ser reemplazado por:
w[i] = (w[i-6] xor w[i-16] xor w[i-28] xor w[i-32]) izquierda 2
Esta transformación mantiene todos los operandos de 64 bits alineados y, al eliminar la dependencia de w[i]
en w[i-3]
, permite una implementación eficiente de SIMD con una longitud de vector de 4 como instrucciones x86 SSE.
Comparación de funciones SHA
En la siguiente tabla, estado interno significa la "suma hash interna" después de cada compresión de un bloque de datos.
Algoritmo y variante | Tamaño del producto (bits) | Internos tamaño del estado (bits) | Tamaño del bloque (bits) | Rondas | Operaciones | Seguridad contra ataques de colisión (bits) | Seguridad contra ataques de extensión (bits) | Performance on Skylake (median cpb) | Primera publicación | ||
---|---|---|---|---|---|---|---|---|---|---|---|
Mensajes largos | 8 bytes | ||||||||||
MD5 (como referencia) | 128 | 128 (4 × 32) | 512 | 64 | Y, Xor, O, Rot, Add (mod 232) | ≤ 18 (coliciones encontradas) | 0 | 4.99 | 55.00 | 1992 | |
SHA-0 | 160 | 160 (5 × 32) | 512 | 80 | Y, Xor, O, Rot, Add (mod 232) | c) 34 (coliciones encontradas) | 0 | ■ SHA-1 | ■ SHA-1 | 1993 | |
SHA-1 | ▪ 63 (coliciones encontradas) | 3.47 | 52.00 | 1995 | |||||||
SHA-2 | SHA-224 SHA-256 | 224 256 | 256 (8 × 32) | 512 | 64 | Y, Xor, O... Rot, Shr, Add (mod 232) | 112 128 | 32 0 | 7.62 7.63 | 84.50 85.25 | 2004 2001 |
SHA-384 | 384 | 512 (8 × 64) | 1024 | 80 | Y, Xor, O... Rot, Shr, Add (mod 264) | 192 | 128 (≤ 384) | 5.12 | 135.75 | 2001 | |
SHA-512 | 512 | 256 | 0 | 5.06 | 135.50 | 2001 | |||||
SHA-512/224 SHA-512/256 | 224 256 | 112 128 | 288 256 | ■ SHA-384 | ■ SHA-384 | 2012 | |||||
SHA-3 | SHA3-224 SHA3-256 SHA3-384 SHA3-512 | 224 256 384 512 | 1600 (5 × 5 × 64) | 1152 1088 832 576 | 24 | Y, Xor, Rot, No | 112 128 192 256 | 448 512 768 1024 | 8.12 8.59 11.06 15.88 | 154.25 155.50 164.00 164.00 | 2015 |
SHAKE128 SHAKE256 | d (arbitrario) d (arbitrario) | 1344 1088 | min(d/2, 128) min(d/2, 256) | 256 512 | 7.08 8.59 | 155.25 155.50 |
Implementaciones
A continuación se muestra una lista de bibliotecas de criptografía compatibles con SHA-1:
- Botan
- Bouncy Castle
- cryptlib
- Crypto+
- Libgcrypt
- Mbed TLS
- Nettle
- LibreSSL
- OpenSSL
- GnuTLS
La aceleración de hardware la proporcionan las siguientes extensiones de procesador:
- Extensiones Intel SHA: Disponible en algunos procesadores Intel y AMD x86.
- VIA PadLock
- IBM z/Arquitectura: Disponible desde 2003 como parte de la extensión del mensaje-seguridad-asista
Contenido relacionado
Programación lógica inductiva
Pez globo (cifrado)
Tecnología militar