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 , generalmente 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 . [3] El algoritmo ha sido criptográficamente roto [4] [5] [6] [7] [8] [9] [10] pero todavía se usa ampliamente.
Desde 2005, SHA-1 no se considera seguro contra oponentes bien financiados; [11] a partir de 2010 muchas organizaciones han recomendado su reemplazo. [12] [10] [13] 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. [14] A partir de 2020 [actualizar], prefijo elegido Los ataques contra SHA-1 son prácticos. [6] [8] Como tal, se recomienda eliminar SHA-1 de los productos lo antes posible y en su lugar utilizar SHA-2 o SHA-3 . Reemplazar SHA-1 es urgente cuando se utiliza para firmas digitales .
Todos los principales proveedores de navegadores web dejaron de aceptar certificados SSL SHA-1 en 2017. [15] [9] [4] 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 produjo el mismo hash SHA-1. [16] [2] Sin embargo, SHA-1 sigue siendo seguro para HMAC . [17]
Microsoft suspendió la compatibilidad con la firma de código SHA-1 para Windows Update el 7 de agosto de 2020.
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).
SHA-1 se desarrolló como parte del proyecto Capstone del gobierno de EE. UU . [18] La especificación original del algoritmo fue publicada en 1993 con 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). [19] [20] Esta versión ahora suele denominarse SHA-0 . Fue retirado por la NSA poco después de su publicación y 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 única rotación bit a bit en la programación 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. [21] [22] Las técnicas disponibles públicamente demostraron un compromiso de SHA-0, en 2004, antes de SHA-1 en 2017 ( ver §Ataques ).
SHA-1 forma parte de varias aplicaciones y protocolos 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 determinadas 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 fomentó 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 deben usar la familia SHA-2 de funciones hash para estas aplicaciones después de 2010". , [23] aunque luego se relajó para permitir el uso de SHA-1 para verificar firmas digitales y marcas de tiempo antiguas. [24]
Una motivación principal para la publicación del algoritmo Secure Hash 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 .
Los sistemas de control de revisiones como Git , Mercurial y Monotone utilizan SHA-1, no por seguridad, sino para identificar revisiones y garantizar que los datos no hayan cambiado debido a una corrupción accidental. Linus Torvalds dijo sobre Git en 2013:
Sin embargo, Git no requiere la segunda resistencia a la preimagen de SHA-1 como característica 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 subrepticiamente. [26] Los ataques conocidos (a partir de 2020) tampoco rompen la segunda resistencia previa a la imagen. [27]
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 mediante una búsqueda de fuerza bruta en aproximadamente 2 L evaluaciones. Esto se denomina ataque de preimagen y puede resultar práctico o no dependiendo de L y del entorno informático particular. Sin embargo, una colisión , que consiste en encontrar dos mensajes diferentes que produzcan el mismo resumen de mensajes, requiere en promedio sólo alrededor de 1,2 × 2 L /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. Originalmente se pensó que SHA-1, que tiene un resumen de mensajes de 160 bits, tenía una potencia de 80 bits.
Algunas de las aplicaciones que utilizan hashes criptográficos, 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, que puede ser trivial o no. Los ataques no permiten revertir el cifrado de contraseñas (por ejemplo, para obtener una contraseña para probarla con la cuenta de un usuario en otro lugar). (Sin embargo, ni siquiera un hash de contraseña seguro puede evitar 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 de un documento existente: el atacante tendría que presentar un par de documentos, uno inocuo y otro dañino, y conseguir que el poseedor de la clave privada firme el documento inocuo. Hay circunstancias prácticas en las que esto es posible; Hasta finales de 2008, era posible crear certificados SSL falsificados utilizando una colisión MD5 . [28]
Debido al bloque y la estructura iterativa de los algoritmos y la ausencia de pasos finales adicionales, todas las funciones SHA (excepto SHA-3) [29] son vulnerables a ataques de extensión de longitud y colisión de mensajes parciales. [30] Estos ataques permiten a un atacante falsificar un mensaje firmado únicamente por un hash con clave – SHA( mensaje || clave ) o SHA( clave || mensaje ) – extendiendo el mensaje y recalculando el hash sin conocer la clave. Una mejora simple para prevenir estos ataques es realizar hash dos veces: SHA d ( mensaje ) = SHA(SHA(0 b || mensaje )) (la longitud de 0 b , bloque cero, es igual al tamaño del bloque de la función hash) .
En CRYPTO 98, dos investigadores franceses, Florent Chabaud y Antoine Joux , presentaron un ataque a SHA1: se pueden encontrar colisiones con una complejidad de 2,61 , inferior a las 2,80 para una función hash ideal del mismo tamaño. [31]
En 2004, Biham y Chen encontraron casi colisiones para SHA-0: dos mensajes que tienen casi el mismo valor; en este caso, 142 de los 160 bits son iguales. También encontraron que las colisiones totales de SHA-0 se redujeron a 62 de sus 80 rondas. [32]
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 utilizando una generalización del ataque de Chabaud y Joux. Descubrir la colisión tenía una complejidad de 2,51 y requirió 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 sesión final de CRYPTO 2004, Wang , Feng, Lai y Yu anunciaron los resultados preliminares sobre un ataque a MD5 , SHA-0 y otras funciones hash. La complejidad de su ataque a SHA-0 es 2,40 , significativamente mejor que el ataque de Joux et al. [33] [34]
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 2.39 operaciones. [5] [35]
Otro ataque en 2008 que aplicó el ataque boomerang redujo la complejidad de encontrar colisiones a 2 33,6 , lo que se estimó que tomaría 1 hora en una PC promedio del año 2008. [36]
A la luz de los resultados de SHA-0, algunos expertos [ ¿ quién? ] sugirió 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, el NIST anunció que planeaba eliminar gradualmente el uso de SHA-1 para 2010 en favor de las variantes SHA-2. [37]
A principios de 2005, Vincent Rijmen y Elisabeth Oswald publicaron un ataque a una versión reducida del SHA-1 (53 de 80 disparos), que detecta colisiones con un esfuerzo computacional inferior a 2.80 operaciones . [38]
En febrero de 2005, se anunció un ataque por parte de Xiaoyun Wang , Yiqun Lisa Yin y Hongbo Yu. [5] Los ataques pueden encontrar colisiones en la versión completa de SHA-1, lo que requiere menos de 2 69 operaciones. (Una búsqueda por fuerza bruta requeriría 2.80 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. Romper SHA-1 no sería posible sin estas poderosas técnicas analíticas". [39] Los autores han presentado una colisión para SHA-1 de 58 rondas, encontrada con 2 33 operaciones hash. El artículo 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, aprovechamos las siguientes dos debilidades: una es que el paso de preprocesamiento del archivo no es lo suficientemente complicado; otra es que ciertas operaciones matemáticas en las primeras 20 rondas tienen problemas de seguridad inesperados". [40]
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 CRYPTO 2005 Rump Session, reduciendo la complejidad requerida para encontrar una colisión en SHA-1 a 263 . [7] El 18 de diciembre de 2007, Martin Cochran explicó y verificó los detalles de este resultado. [41]
Christophe De Cannière y Christian Rechberger mejoraron aún más el ataque a SHA-1 en "Finding SHA-1 Characteristics: General Results and Applications", [42] y recibieron el premio al mejor artículo en ASIACRYPT 2006. Una colisión de dos bloques para SHA de 64 rondas Se presentó -1, encontrado utilizando métodos no optimizados con 2 35 evaluaciones de la función de compresión. Dado que este ataque requiere el equivalente a unas 2,35 evaluaciones , se considera una ruptura teórica importante. [43] Su ataque se amplió aún más a 73 rondas (de 80) en 2010 por Grechnikov. [44] Sin embargo, para encontrar una colisión real en las 80 rondas completas de la función hash, se requieren enormes cantidades de tiempo de computadora. Con ese fin, el 8 de agosto de 2007 comenzó una búsqueda de colisiones 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. [45]
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. [46] [47]
En 2008, una metodología de ataque de Stéphane Manuel informó colisiones de hash con una complejidad teórica estimada de 2,51 a 2,57 operaciones . [48] Sin embargo, más tarde se retractó de esa afirmación después de descubrir que las trayectorias de colisión locales no eran en realidad independientes, y finalmente citó como más eficiente un vector de colisión que ya se conocía antes de este trabajo. [49]
Cameron McDonald, Philip Hawkes y Josef Pieprzyk presentaron un ataque de colisión de hash con complejidad supuesta 2 52 en la sesión final de Eurocrypt 2009. [50] Sin embargo, el documento adjunto, "Differential Path for SHA-1 with complex O (2 52 )" ha sido retirado debido a que los autores descubrieron que su estimación era incorrecta. [51]
Un ataque contra SHA-1 fue Marc Stevens [52] con un costo estimado de 2,77 millones de dólares (2012) para romper un valor hash único alquilando potencia de CPU de servidores en la nube. [53] Stevens desarrolló este ataque en un proyecto llamado HashClash, [54] implementando un ataque de ruta diferencial. El 8 de noviembre de 2010, afirmó que tenía un ataque de casi colisión en pleno funcionamiento contra SHA-1 completo con una complejidad estimada equivalente a 2 57,5 compresiones SHA-1. Estimó que este ataque podría extenderse a una colisión total con una complejidad de alrededor de 2 61 .
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, era la primera vez que se demostraba un ataque a SHA-1 completo ; Todos los ataques anteriores fueron demasiado costosos para que sus autores los llevaran a cabo. Los autores denominaron este importante avance en el criptoanálisis de SHA-1 The SHAppening . [10]
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 de alto rendimiento y rentables 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 2.000 dólares de tiempo de GPU en EC2 . [10]
Los autores estimaron que el costo de alquilar suficiente tiempo de CPU/GPU 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 dólares, y señalaron que estaba dentro del presupuesto de las organizaciones criminales. por no hablar de las agencias de inteligencia nacionales . Como tal, los autores recomendaron que SHA-1 quede obsoleto lo más rápido posible. [10]
El 23 de febrero de 2017, el 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 2.63,1 evaluaciones SHA-1. Este ataque es aproximadamente 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 requirió 280 evaluaciones SHA-1. El ataque requirió "la potencia de procesamiento equivalente a 6.500 años de cálculos con una sola CPU y 110 años de cálculos con una sola GPU". [2]
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 mejor elegido anteriormente en funciones de resumen tipo Merkle-Damgård basadas en cifrados de bloques Davies-Meyer . Con estas mejoras, este método es capaz de encontrar colisiones de prefijo elegido en aproximadamente 2.68 evaluaciones SHA-1. Esto es aproximadamente mil millones de veces más rápido (y ahora se puede utilizar para muchos ataques dirigidos, gracias a la posibilidad de elegir un prefijo, por ejemplo, código malicioso o identidades falsas en certificados firmados) que las 2 evaluaciones 77.1 del ataque anterior (pero sin el prefijo elegido, que no era práctico para la mayoría de los ataques dirigidos porque las colisiones encontradas eran casi aleatorias) [1] y es lo suficientemente rápido como para ser práctico para atacantes ingeniosos, ya que requiere aproximadamente $100 000 de procesamiento en la nube. Este método también es capaz de encontrar colisiones de prefijo elegido en la función MD5 , pero con una complejidad de 2 46,3 no supera el mejor método disponible anterior a nivel teórico (2 39 ), aunque potencialmente a un nivel práctico (≤2 49 ). [55] 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 llamado "shambles". [8] En este artículo, demuestran un ataque de colisión de prefijo elegido con una complejidad de 2 63,4 , que en el momento de la publicación costaría 45.000 dólares estadounidenses por colisión generada.
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 Comunicaciones (CSE). Para una verificación informal, un paquete para generar una gran cantidad de vectores de prueba está disponible para descargar en el sitio del NIST; Sin embargo, la verificación resultante no reemplaza la validación CMVP formal, que es requerida por ley para ciertas aplicaciones.
En diciembre de 2013 [actualizar], hay más de 2000 implementaciones validadas de SHA-1, 14 de ellas capaces de manejar mensajes con una longitud en bits no múltiplo de ocho (consulte la Lista de validación SHS archivada el 23 de agosto de 2011 en Wayback Machine ) . .
Estos son ejemplos de resúmenes de mensajes SHA-1 en codificación de texto hexadecimal y binario Base64 a ASCII .
SHA1("The quick brown fox jumps over the lazy dog")
2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
L9ThxnotKPzthJ7hu3bnORuT6xI=
Incluso un pequeño cambio en el mensaje provocará, con una probabilidad abrumadora, que muchos bits cambien debido al efecto 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")
de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3
3p8sf9JeGzr60+haC9F9mxANtLM=
El hash de la cadena de longitud cero es:
SHA1("")
da39a3ee5e6b4b0d3255bfef95601890afd80709
2jmj7l5rSw0yVb/vlWAYkK/YBwk=
A continuación se muestra el pseudocódigo para el algoritmo SHA-1:
Nota 1: Todas las variables son cantidades de 32 bits sin signo y se ajustan al módulo 2 32 al calcular, excepto ml, la longitud del mensaje, que es una cantidad de 64 bits, y hh, el resumen del mensaje, que es una cantidad de 160 bits. Nota 2: Todas las constantes de este pseudocódigo están en big endian . Dentro de cada palabra, el byte más significativo se almacena en la posición del byte más a la izquierda.Inicializar variables:h0 = 0x67452301h1 = 0xEFCDAB89h2 = 0x98BADCFEh3 = 0x10325476h4 = 0xC3D2E1F0ml = longitud del mensaje en bits (siempre un múltiplo del número de bits de un carácter).Preprocesamiento:agregue el bit '1' al mensaje, por ejemplo, agregando 0x80 si la longitud del mensaje es múltiplo de 8 bits.agregue 0 ≤ k < 512 bits '0', de modo que la longitud del mensaje resultante en bits sea congruente con −64 ≡ 448 (mod 512)agregue ml, la longitud del mensaje original en bits, como un entero big-endian de 64 bits . Por tanto, la longitud total es múltiplo de 512 bits.Procese el mensaje en fragmentos sucesivos de 512 bits:dividir el mensaje en fragmentos de 512 bitspara cada trozo dividir el fragmento en dieciséis palabras big-endian de 32 bits w[i], 0 ≤ i ≤ 15 Programación de mensajes: extienda las dieciséis palabras de 32 bits a ochenta palabras de 32 bits: para i de 16 a 79 Nota 3: SHA-0 se diferencia por no tener esta rotación a la izquierda. w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) rotación izquierda 1 Inicialice el valor hash para este fragmento: a = h0 b = h1 c = h2 re = h3 mi = h4 Bucle principal: [3] [56] para i de 0 a 79 si 0 ≤ i ≤ 19 entonces f = (b y c) o (( no b) y d) k = 0x5A827999 de lo contrario si 20 ≤ i ≤ 39 f = b xor c xor d k = 0x6ED9EBA1 de lo contrario si 40 ≤ i ≤ 59 f = (b y c) o (b y d) o (c y d) k = 0x8F1BBCDC de lo contrario si 60 ≤ i ≤ 79 f = b xor c xor d k = 0xCA62C1D6 temp = (una rotación a la izquierda 5) + f + e + k + w[i] mi = re re = c c = b girar a la izquierda 30 segundo = un a = temperatura Agregue el hash de este fragmento al resultado hasta ahora: h0 = h0 + a h1 = h1 + b h2 = h2 + c h3 = h3 + d h4 = h4 + miProduzca el valor hash final (big-endian) como un número de 160 bits: hh = (h0 desplazamiento a la izquierda 128) o (h1 desplazamiento a la izquierda 96) o (h2 desplazamiento a la izquierda 64) o (h3 desplazamiento a la izquierda 32) o h4
El número hh
es el resumen del mensaje, que se puede escribir en hexadecimal (base 16).
Se supuso que los valores constantes elegidos utilizados en el algoritmo no eran números bajo la manga :
k
son 2 30 veces las raíces cuadradas de 2, 3, 5 y 10. Sin embargo, se redondearon incorrectamente al entero más cercano en lugar de al entero impar más cercano, con proporciones equilibradas de cero y uno bits. Además, elegir la raíz cuadrada de 10 (que no es un primo) la convirtió en un factor común para las otras dos raíces cuadradas elegidas de los primos 2 y 5, con propiedades aritméticas posiblemente utilizables en rondas sucesivas, lo que redujo la solidez del algoritmo contra encontrar colisiones en algunos bits.h0
Through h3
son los mismos que los del algoritmo MD5, y el quinto (para h4
) es similar. Sin embargo, no se verificó adecuadamente su resistencia a la inversión de las 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:
Elección bit a bit entre c y d , controlada por b . (0 ≤ i ≤ 19): f = d xor (b y (c xor d)) (alternativa 1) (0 ≤ i ≤ 19): f = (b y c) o (( no b) y d) ( alternativa 2) (0 ≤ i ≤ 19): f = (b y c) xor (( no b) y d) (alternativa 3) (0 ≤ i ≤ 19): f = vec_sel(d, c, b) ( alternativa 4) [premo08]Función mayoritaria bit a bit. (40 ≤ i ≤ 59): f = (b y c) o (d y (b o c)) (alternativa 1) (40 ≤ i ≤ 59): f = (b y c) o (d y (b xor c)) (alternativa 2) (40 ≤ i ≤ 59): f = (b y c) xor (d y (b xor c)) (alternativa 3) (40 ≤ i ≤ 59): f = (b y c) xor (b y d) xor (c y d) (alternativa 4) (40 ≤ i ≤ 59): f = vec_sel(c, b, c xor d) (alternativa 5)
También se demostró [57] que para las rondas 32 a 79 el cálculo de:
w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) rotación izquierda 1
se puede reemplazar con:
w[i] = (w[i-6] xor w[i-16] xor w[i-28] xor w[i-32]) rotación izquierda 2
Esta transformación mantiene todos los operandos alineados en 64 bits y, al eliminar la dependencia de w[i]
on w[i-3]
, permite una implementación SIMD eficiente con una longitud de vector de 4, como las instrucciones x86 SSE .
En la siguiente tabla, estado interno significa la "suma hash interna" después de cada compresión de un bloque de datos.
A continuación se muestra una lista de bibliotecas de criptografía que admiten SHA-1:
La aceleración de hardware la proporcionan las siguientes extensiones de procesador:
A raíz de SHAttered, Mark Stevens y Dan Shumow publicaron "sha1collisiondetection" (SHA-1CD), una variante de SHA-1 que detecta ataques de colisión y cambia la salida de hash cuando se detecta uno. La tasa de falsos positivos es 2-90 . [64] GitHub utiliza SHA-1CD desde marzo de 2017 y git desde la versión 2.13.0 de mayo de 2017. [65]
{{cite web}}
: Mantenimiento CS1: nombres numéricos: lista de autores ( enlace )A diferencia de SHA-1 y SHA-2, Keccak no tiene la debilidad de la extensión de longitud, por lo que no necesita la construcción anidada HMAC.
En cambio, el cálculo MAC se puede realizar simplemente anteponiendo al mensaje la clave.