stringtranslate.com

SHA-1

En criptografía , SHA-1 ( Secure Hash Algorithm 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 EE. UU . [3] El algoritmo ha sido descifrado criptográficamente [4] [5] [6] [7] [8] [9] [10] pero aún se usa ampliamente.

Desde 2005, SHA-1 no se ha considerado 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 desautorizó su uso para firmas digitales en 2013, y declaró que debería eliminarse gradualmente para 2030. [14] A partir de 2020 , los ataques de prefijo elegido 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 produjeron el mismo hash SHA-1. [16] [2] Sin embargo, SHA-1 sigue siendo seguro para HMAC . [17]

Microsoft ha descontinuado el soporte de firma de código SHA-1 para Windows Update el 3 de agosto de 2020, [18] lo que también puso fin de manera efectiva a los servidores de actualización para versiones de Windows que no se han actualizado a SHA-2, como Windows 2000 hasta Vista , así como versiones de Windows Server desde Windows 2000 Server hasta Server 2003 .

Desarrollo

Una iteración dentro de la función de compresión SHA-1:
  • A, B, C, D y E son palabras de 32 bits del estado;
  • F es una función no lineal que varía;
  • ⁠ ⁠ denota una rotación de bits hacia la izquierda de n lugares;
  • n varía para cada operación;
  • W t es la palabra del mensaje expandido de la ronda t ;
  • K t es la constante redonda de t redondo ;
  • denota adición módulo 2 32 .

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 más grande (160 bits frente a 128 bits).

SHA-1 fue desarrollado como parte del proyecto Capstone del gobierno de los EE. UU . [19] 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 estadounidense NIST (Instituto Nacional de Estándares y Tecnología). [20] [21] Esta versión ahora se denomina a menudo SHA-0 . Fue retirada por la NSA poco después de su publicación y fue reemplazada por la versión revisada, publicada en 1995 en FIPS PUB 180-1 y comúnmente designada SHA-1 . SHA-1 difiere de SHA-0 solo por una única 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 proporcionaron ninguna explicación adicional. [22] [23] Las técnicas disponibles públicamente demostraron efectivamente una vulneración de SHA-0, en 2004, antes de SHA-1 en 2017 ( ver §Ataques ).

Aplicaciones

Criptografía

SHA-1 forma parte de varias aplicaciones y protocolos de seguridad ampliamente utilizados, entre ellos TLS y SSL , PGP , SSH , S/MIME e IPsec . Esas aplicaciones también pueden utilizar MD5 ; tanto MD5 como SHA-1 descienden de MD4 .

SHA-1 y SHA-2 son los algoritmos hash que la ley exige para su uso en ciertas aplicaciones del gobierno de los EE. UU., incluido el uso dentro de otros algoritmos y protocolos criptográficos, para la protección de información confidencial no clasificada. La FIPS PUB 180-1 también fomenta 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 los EE. UU. dijo: "Las agencias federales deben dejar de usar SHA-1 para... aplicaciones que requieren resistencia a colisiones tan pronto como sea posible, y deben usar la familia SHA-2 de funciones hash para estas aplicaciones después de 2010", [24] aunque esto se relajó más tarde para permitir que SHA-1 se use para verificar firmas digitales antiguas y sellos de tiempo. [25]

Una motivación 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 los datos

Los sistemas de control de revisión 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 2007:

Si tienes corrupción en el disco, si tienes corrupción en la DRAM, si tienes cualquier tipo de problema, Git lo notará. No es una cuestión de si , es una garantía. Puedes tener gente que intente ser maliciosa. No tendrán éxito. [...] Nadie ha sido capaz de romper SHA-1, pero el punto es que SHA-1, en lo que respecta a Git, ni siquiera es una característica de seguridad. Es puramente una comprobación de consistencia. Las partes de seguridad están en otra parte, por lo que mucha gente asume que, dado que Git usa SHA-1 y SHA-1 se usa para cosas criptográficamente seguras, piensan que, vale, es una gran característica de seguridad. No tiene nada que ver con la seguridad, es solo el mejor hash que puedes obtener. ...
Te garantizo que, si pones tus datos en Git, puedes confiar en el hecho de que cinco años después, después de haberlos convertido de tu disco duro a un DVD o a cualquier nueva tecnología y haberlos copiado, cinco años después podrás verificar que los datos que recuperas son exactamente los mismos que pusiste. [...]
Una de las razones por las que me preocupo es por el kernel; tuvimos un ataque a uno de los sitios de BitKeeper donde la gente intentó corromper los repositorios de código fuente del kernel. [26]

Sin embargo, Git no requiere la segunda resistencia de preimagen de SHA-1 como una 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. [27] Los ataques conocidos (a partir de 2020) tampoco rompen la segunda resistencia de preimagen. [28]

Criptoanálisis y validación

Para una función hash para la cual L es el número de bits en el resumen del mensaje, encontrar un mensaje que corresponda a un resumen de mensaje dado siempre se puede hacer usando una búsqueda de fuerza bruta en aproximadamente 2 L evaluaciones. Esto se llama ataque de preimagen y puede o no ser práctico 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 mensaje, requiere en promedio solo alrededor de 1.2 × 2 L /2 evaluaciones usando 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 mensaje de 160 bits, originalmente se pensó que tenía una fuerza de 80 bits.

Algunas de las aplicaciones que utilizan hashes criptográficos, como el almacenamiento de contraseñas, solo 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 el acceso al hash de la contraseña original, que puede ser trivial o no. La reversión del cifrado de contraseñas (por ejemplo, para obtener una contraseña para probarla en la cuenta de un usuario en otro lugar) no es posible gracias a los ataques. Sin embargo, incluso un hash de contraseña seguro no puede evitar los ataques de fuerza bruta a contraseñas débiles . Consulte Descifrado de contraseñas .

En el caso de la firma de documentos, un atacante no podría simplemente falsificar una firma de un documento existente: tendría que producir un par de documentos, uno inocuo y otro dañino, y lograr que el poseedor de la clave privada firmara el documento inocuo. Existen circunstancias prácticas en las que esto es posible; hasta fines de 2008, era posible crear certificados SSL falsificados utilizando una colisión MD5 . [29]

Debido a la estructura iterativa y en bloques de los algoritmos y a la ausencia de pasos finales adicionales, todas las funciones SHA (excepto SHA-3) [30] son ​​vulnerables a ataques de extensión de longitud y de colisión de mensajes parciales. [31] 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 sencilla para prevenir estos ataques es realizar el hash dos veces: SHA d ( mensaje ) = SHA(SHA(0 b || mensaje )) (la longitud de 0 b , 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 al SHA-0: se pueden encontrar colisiones con una complejidad de 2,61 , menor que las 2,80 para una función hash ideal del mismo tamaño. [32]

En 2004, Biham y Chen encontraron colisiones casi totales en 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 totales de SHA-0 reducidas a 62 de sus 80 rondas. [33]

Posteriormente, el 12 de agosto de 2004, Joux, Carribault, Lemuet y Jalby anunciaron una colisión del algoritmo SHA-0 completo. Esto se hizo utilizando una generalización del ataque de Chabaud y Joux. Encontrar la colisión tuvo una complejidad de 2,51 y tomó alrededor de 80.000 horas de procesador en una supercomputadora con 256 procesadores Itanium 2 (equivalente a 13 días de uso completo de la computadora).

El 17 de agosto de 2004, en la sesión de cierre 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. [34] [35]

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 . [5] [36]

Otro ataque en 2008, en el que se aplicó el ataque boomerang, redujo la complejidad de encontrar colisiones a 2 33,6 , lo que se estimaba que tomaba 1 hora en una PC promedio del año 2008. [37]

A la luz de los resultados de SHA-0, algunos expertos [¿ quiénes? ] 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, el NIST anunció que planeaba eliminar gradualmente el uso de SHA-1 para 2010 en favor de las variantes de SHA-2. [38]

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 detecta colisiones con un esfuerzo computacional de menos de 280 operaciones . [39]

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, requiriendo menos de 2,69 operaciones . (Una búsqueda de fuerza bruta requeriría 2,80 operaciones ).

Los autores escriben: "En particular, nuestro análisis se basa en el ataque diferencial original sobre SHA-0, el ataque de colisión cercana sobre 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 sobre MD5. Romper SHA-1 no sería posible sin estas poderosas técnicas analíticas". [40] Los autores han presentado una colisión para SHA-1 de 58 rondas, encontrada con 2 operaciones hash de 33. 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, 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". [41]

El 17 de agosto de 2005, se anunció una mejora en el ataque SHA-1 por parte 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 2 63 . [7] El 18 de diciembre de 2007, Martin Cochran explicó y verificó los detalles de este resultado. [42]

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", [43] recibiendo el Premio al Mejor Artículo en ASIACRYPT 2006. Se presentó una colisión de dos bloques para SHA-1 de 64 rondas, encontrada usando métodos no optimizados con 2 35 evaluaciones de función de compresión. Dado que este ataque requiere el equivalente a aproximadamente 2 35 evaluaciones, se considera que es una ruptura teórica significativa. [44] Su ataque se extendió aún más a 73 rondas (de 80) en 2010 por Grechnikov. [45] 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, una búsqueda de colisiones para SHA-1 usando la plataforma de computación voluntaria BOINC comenzó el 8 de agosto de 2007, organizada por la Universidad Tecnológica de Graz . El esfuerzo fue abandonado el 12 de mayo de 2009 debido a la falta de avances. [46]

En la sesión final 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. [47] [48]

En 2008, una metodología de ataque de Stéphane Manuel informó colisiones hash con una complejidad teórica estimada de 2,51 a 2,57 operaciones . [49] Sin embargo, más tarde se retractó de esa afirmación después de descubrir que las rutas de colisión locales en realidad no eran independientes, y finalmente citó como el vector de colisión más eficiente un que ya se conocía antes de este trabajo. [50]

Cameron McDonald, Philip Hawkes y Josef Pieprzyk presentaron un ataque de colisión de hash con una complejidad declarada de 2,52 en la Sesión Rump de Eurocrypt 2009. [51] Sin embargo, el artículo que lo acompañaba, "Differential Path for SHA-1 with complex O ( 2,52 )" ha sido retirado debido al descubrimiento por parte de los autores de que su estimación era incorrecta. [52]

Un ataque contra SHA-1 fue el que realizó Marc Stevens [53] con un costo estimado de $2,77 millones (2012) para romper un único valor hash alquilando potencia de CPU de servidores en la nube. [54] Stevens desarrolló este ataque en un proyecto llamado HashClash, [55] implementando un ataque de ruta diferencial. El 8 de noviembre de 2010, afirmó que tenía un ataque de casi colisión completamente funcional contra SHA-1 completo que funcionaba con una complejidad estimada equivalente a 2 57,5 ​​compresiones SHA-1. Estimó que este ataque podría extenderse a una colisión completa con una complejidad de alrededor de 2 61 .

El cambio de forma

El 8 de octubre de 2015, Marc Stevens, Pierre Karpman y Thomas Peyrin publicaron un ataque de colisión de inicio libre sobre la función de compresión de SHA-1 que requiere solo 257 evaluaciones SHA-1. Esto no se traduce directamente en una colisión sobre 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 sobre SHA-1 completo ; todos los ataques anteriores fueron demasiado costosos para que sus autores los llevaran a cabo. Los autores llamaron a este avance significativo 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 bumeranes) de Joux y Peyrin, y en el uso de tarjetas GPU de alto rendimiento y costo eficiente 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 . [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 estadounidenses, y señalaron que estaba dentro del presupuesto de las organizaciones criminales, sin mencionar las agencias de inteligencia nacionales . Por lo tanto, los autores recomendaron que SHA-1 se descontinuara lo antes posible. [10]

SHAttered – primera colisión pública

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 263,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 requería 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]

Ataque de casi colisión en el cumpleaños: el primer ataque práctico con 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 mejor anteriormente 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 prefijo elegido en aproximadamente 2 68 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 las 2 77,1 evaluaciones del ataque anterior (pero sin prefijo elegido, lo que era poco 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, lo 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 nivel práctico (≤2 49 ). [56] Este ataque tiene un requisito de memoria 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.

Validación oficial

Las implementaciones de todas las funciones de seguridad aprobadas por FIPS pueden validarse oficialmente a través del programa CMVP , dirigido conjuntamente por el Instituto Nacional de Estándares y Tecnología (NIST) y el Establecimiento de Seguridad de las Comunicaciones (CSE). Para la verificación informal, se encuentra disponible para su descarga en el sitio del NIST un paquete para generar una gran cantidad de vectores de prueba; sin embargo, la verificación resultante no reemplaza la validación formal del CMVP, que es requerida por ley para ciertas aplicaciones.

A diciembre de 2013 , hay más de 2000 implementaciones validadas de SHA-1, y 14 de ellas son capaces de manejar mensajes con una longitud en bits no múltiplo de ocho (consulte la Lista de validación de SHS archivada el 23 de agosto de 2011 en Wayback Machine ).

Ejemplos y pseudocódigo

Ejemplos de hashes

Estos son ejemplos de resúmenes de mensajes SHA-1 en formato hexadecimal y en codificación de texto binario Base64 a ASCII .

Incluso un pequeño cambio en el mensaje provocará, con una probabilidad abrumadora, que muchos bits cambien debido al efecto avalancha . Por ejemplo, cambiar doga cogproduce un hash con valores diferentes para 81 de los 160 bits:

El hash de la cadena de longitud cero es:

Pseudocódigo SHA-1

El pseudocódigo para el algoritmo SHA-1 es el siguiente:

Nota 1: Todas las variables son cantidades de 32 bits sin signo y se ajustan en 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 en este pseudocódigo están en big endian .  Dentro de cada palabra, el byte más significativo se almacena en la posición de 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:añade el bit '1' al mensaje, por ejemplo agregando 0x80 si la longitud del mensaje es un múltiplo de 8 bits.añadir 0 ≤ k < 512 bits '0', de modo que la longitud del mensaje resultante en bits sea congruente con −64 ≡ 448 (mod 512)añadir ml, la longitud del mensaje original en bits, como un entero big-endian
de 64 bits . Por lo tanto, la longitud total es un múltiplo de 512 bits.Procesar 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: extender 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 en que no tiene 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 a la izquierda 1 Inicializar el valor hash para este fragmento: a = h0 b = h1 c = h2 d = h3 e = h4 Bucle principal: [3] [57]  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 x o c x o 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 x o c x o d k = 0xCA62C1D6 temp = (a rotación izquierda 5) + f + e + k + w[i] y = d d = c c = b girar a la izquierda 30 b = un a = temperatura Agregue el hash de este fragmento al resultado hasta el momento: h0 = h0 + a h1 = h1 + b h2 = h2 + c h3 = h3 + d h4 = h4 + eProducir el valor hash final (big-endian) como un número de 160 bits:
hh = (h0 leftshift 128) o (h1 leftshift 96) o (h2 leftshift 64) o (h3 leftshift 32) o h4

El número hhes el resumen del mensaje, que puede escribirse en hexadecimal (base 16).

Se asumió que los valores constantes elegidos utilizados en el algoritmo no eran números que yo pudiera imaginar :

En lugar de la formulación del FIPS PUB 180-1 original que se muestra, se pueden utilizar las siguientes expresiones equivalentes para realizar el cálculo fen 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 de mayoría 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ó [58] 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]) rotar a la izquierda 1

se puede reemplazar con:

w[i] = (w[i-6] xor w[i-16] xor w[i-28] xor w[i-32]) rotar a la 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 eficiente de SIMD con una longitud de vector de 4 como las instrucciones SSE x86 .

Comparación de funciones SHA

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

Implementaciones

A continuación se muestra una lista de bibliotecas de criptografía que admiten SHA-1:

La aceleración de hardware es proporcionada por las siguientes extensiones de procesador:

Contramedida en caso de colisión

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 de 2 -90 . [65] SHA-1CD es utilizado por GitHub desde marzo de 2017 y por Git desde la versión 2.13.0 de mayo de 2017. [66]

Véase también

Notas

  1. ^ ab Stevens, Marc (19 de junio de 2012). Ataques a funciones hash y aplicaciones (PDF) (tesis doctoral). Leiden University . hdl :1887/19093. ISBN 9789461913173.OCLC 795702954  .
  2. ^ abc Stevens, Marc ; Bursztein, Elie ; Karpman, Pierre; Albertini, Ange; Markov, Yarik (2017). Katz, Jonathan ; Shacham, Hovav (eds.). La primera colisión para SHA-1 completo (PDF) . Avances en criptología – CRYPTO 2017. Apuntes de clase en informática . Vol. 10401. Springer . págs. 570–596. doi :10.1007/978-3-319-63688-7_19. ISBN 9783319636870. Archivado desde el original (PDF) el 15 de mayo de 2018 . Consultado el 23 de febrero de 2017 .
    • 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 .
  3. ^ ab "Estándar de hash seguro (SHS)" (PDF) . Instituto Nacional de Estándares y Tecnología. 2015. doi :10.6028/NIST.FIPS.180-4. Publicación 180-4 de los Estándares Federales de Procesamiento de Información. Archivado desde el original (PDF) el 2020-01-07 . Consultado el 2019-09-23 .
  4. ^ ab "El fin de SHA-1 en la Web pública". Blog de seguridad de Mozilla . 23 de febrero de 2017. Consultado el 29 de mayo de 2019 .
  5. ^ abc "SHA-1 roto – Schneier sobre seguridad". www.schneier.com .
  6. ^ ab "Se ha demostrado una falla crítica en un algoritmo común de seguridad digital". Universidad Tecnológica de Nanyang, Singapur . 24 de enero de 2020.
  7. ^ ab "Nuevos resultados criptoanalíticos contra SHA-1 – Schneier sobre seguridad". www.schneier.com .
  8. ^ abc Leurent, Gaëtan; Peyrin, Thomas (5 de enero de 2020). "SHA-1 es un caos. Primera colisión de prefijos elegidos en SHA-1 y aplicación a la red de confianza de PGP" (PDF) . Archivo de ePrints de criptología, Informe 2020/014 .
  9. ^ ab "Google eliminará el cifrado SHA-1 de Chrome el 1 de enero de 2017". VentureBeat . 2015-12-18 . Consultado el 2019-05-29 .
  10. ^ abcde Stevens, Marc; Karpman, Pierre; Peyrin, Thomas. "The SHAppening: colisiones de arranque libre para SHA-1" . Consultado el 9 de octubre de 2015 .
  11. ^ Schneier, Bruce (18 de febrero de 2005). "Schneier sobre seguridad: criptoanálisis de SHA-1".
  12. ^ "NIST.gov – División de Seguridad Informática – Centro de Recursos de Seguridad Informática". Archivado desde el original el 25 de junio de 2011. Consultado el 5 de enero de 2019 .
  13. ^ Schneier, Bruce (8 de octubre de 2015). "Colisión de arranque libre SHA-1". Schneier sobre seguridad .
  14. ^ "El NIST retira el algoritmo criptográfico SHA-1" (Comunicado de prensa). NIST. 15 de diciembre de 2022.
  15. ^ Goodin, Dan (4 de mayo de 2016). "Microsoft dejará de ofrecer soporte para certificados SHA1 en los próximos 4 meses". Ars Technica . Consultado el 29 de mayo de 2019 .
  16. ^ "CWI y Google anuncian la primera colisión del estándar de seguridad industrial SHA-1" . Consultado el 23 de febrero de 2017 .
  17. ^ Barker, Elaine (mayo de 2020). Recomendación para la gestión de claves: Parte 1 – General, Tabla 3 (Informe técnico). NIST. pág. 56. doi : 10.6028/NIST.SP.800-57pt1r5 .
  18. ^ "El contenido de SHA-1 para Windows se retirará el 3 de agosto de 2020". techcommunity.microsoft.com . Consultado el 28 de febrero de 2024 .
  19. ^ "Preguntas frecuentes de RSA sobre Capstone".
  20. ^ Selvarani, R.; Aswatha, Kumar; TV Suresh, Kumar (2012). Actas de la Conferencia internacional sobre avances en informática. Springer Science & Business Media. pág. 551. ISBN 978-81-322-0740-5.
  21. ^ Secure Hash Standard, publicación de estándares federales de procesamiento de información FIPS PUB 180 , Instituto Nacional de Estándares y Tecnología, 11 de mayo de 1993
  22. ^ Kramer, Samuel (11 de julio de 1994). "Propuesta de revisión del Estándar Federal de Procesamiento de Información (FIPS) 180, Estándar de Hash Seguro". Registro Federal .
  23. ^ fgrieu. "¿Dónde puedo encontrar una descripción del algoritmo hash SHA-0?". Cryptography Stack Exchange .
  24. ^ División de Seguridad Informática, Laboratorio de Tecnología de la Información (4 de enero de 2017). "Política del NIST sobre funciones hash: funciones hash". CSRC, NIST . Consultado el 27 de agosto de 2023 .
  25. ^ División de Seguridad Informática, Laboratorio de Tecnología de la Información (4 de enero de 2017). "Política del NIST sobre funciones hash: funciones hash". CSRC, NIST . Consultado el 27 de agosto de 2023 .
  26. ^ "Charla técnica: Linus Torvalds sobre Git". YouTube . Consultado el 13 de noviembre de 2013 .
  27. ^ Torvalds, Linus. "Re: ¿Empezando a pensar en SHA-256?". marc.info . Consultado el 30 de mayo de 2016 .
  28. ^ Walfield, Neal H. (2020). "openpgp: Pasar los requisitos de seguridad del algoritmo hash a Policy::signature". gitlab.com/sequoia-pgp .– ver la sección "Antecedentes" en la documentación presentada
  29. ^ Sotirov, Alexander; Stevens, Marc; Appelbaum, Jacob; Lenstra, Arjen; Molnar, David; Osvik, Dag Arne; de ​​Weger, Benne (30 de diciembre de 2008). "MD5 considerado dañino hoy: Creación de un certificado CA falso" . Consultado el 29 de marzo de 2009 .
  30. ^ "Fortalezas de Keccak: diseño y seguridad". La familia de funciones de esponja de Keccak . Equipo de Keccak . Consultado el 20 de septiembre de 2015. 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 la clave al mensaje.
  31. ^ "Schneier sobre seguridad: ingeniería criptográfica". www.schneier.com . Consultado el 27 de agosto de 2023 .
  32. ^ Chabaud, Florent; Joux, Antoine (3 de octubre de 1998). "Colisiones diferenciales en SHA-0". En Krawczyk, Hugo (ed.). Avances en criptología – CRYPTO '98 . Apuntes de clase en informática. Vol. 1462. Springer. págs. 56–71. doi :10.1007/BFb0055720. ISBN. 978-3-540-64892-5– vía Springer Link.
  33. ^ Biham, Eli; Chen, Rafi. "Colisiones cercanas de SHA-0" (PDF) .
  34. ^ "Informe de Crypto 2004". Archivado desde el original el 21 de agosto de 2004. Consultado el 23 de agosto de 2004 .
  35. ^ Grieu, Francois (18 de agosto de 2004). "Re: ¿Alguna novedad anticipada de la sesión de criptografía?". Grupo de noticias : sci.crypt. El evento ocurre a las 05:06:02 +0200. Usenet:  [email protected].
  36. ^ Ataques de búsqueda de colisiones eficientes en SHA-0 Archivado el 10 de septiembre de 2005 en Wayback Machine , Universidad de Shandong
  37. ^ Manuel, Stéphane; Peyrin, Thomas (11 de febrero de 2008). Colisiones en SHA-0 en una hora (PDF) . Fast Software Encryption 2008. Lecture Notes in Computer Science. Vol. 5086. págs. 16–35. doi : 10.1007/978-3-540-71039-4_2 . ISBN . 978-3-540-71038-7.
  38. ^ "Breves comentarios del NIST sobre los recientes ataques criptoanalíticos a las funciones de hash seguras y la seguridad continua que proporciona SHA-1". 23 de agosto de 2017. Consultado el 16 de marzo de 2022 .
  39. ^ Rijmen, Vincent; Oswald, Elisabeth (2005). "Actualización sobre SHA-1". Archivo de ePrints de criptología .
  40. ^ Ataques de búsqueda de colisiones en SHA1 Archivado el 19 de febrero de 2005 en Wayback Machine , Instituto Tecnológico de Massachusetts
  41. ^ Lemos, Robert. "Reparando un agujero en la seguridad". ZDNet .
  42. ^ Cochran, Martin (2007). "Notas sobre la ruta diferencial SHA-1 de Wang et al. 263". Archivo de ePrints de criptología .
  43. ^ De Cannière, Christophe; Rechberger, Christian (15 de noviembre de 2006). "Encontrar características de SHA-1: resultados generales y aplicaciones". Avances en criptología – ASIACRYPT 2006. Apuntes de clase en informática. Vol. 4284. págs. 1–20. doi :10.1007/11935230_1. ISBN 978-3-540-49475-1.
  44. ^ "IAIK Krypto Group — Descripción del proyecto de búsqueda de colisiones SHA-1". Archivado desde el original el 15 de enero de 2013. Consultado el 30 de junio de 2009 .
  45. ^ "Colisiones para SHA-1 de 72 y 73 pasos: mejoras en el método de características" . Consultado el 24 de julio de 2010 .
  46. ^ "Búsqueda de colisiones SHA-1 en Graz". Archivado desde el original el 25 de febrero de 2009. Consultado el 30 de junio de 2009 .
  47. ^ "heise online - IT-News, Nachrichten und Hintergründe". Heise en línea . 27 de agosto de 2023.
  48. ^ "Calendario de Crypto 2006" www.iacr.org .
  49. ^ Manuel, Stéphane. "Clasificación y generación de vectores de perturbación para ataques de colisión contra SHA-1" (PDF) . Archivo de ePrints de criptología . Consultado el 19 de mayo de 2011 .
  50. ^ Manuel, Stéphane (2011). "Clasificación y generación de vectores de perturbación para ataques de colisión contra SHA-1". Diseños, códigos y criptografía . 59 (1–3): 247–263. doi :10.1007/s10623-010-9458-9. S2CID  47179704. El vector de perturbación más eficiente es Codeword2, reportado por primera vez por Jutla y Patthak.
  51. ^ "Las colisiones SHA-1 ahora son 2^52" (PDF) .
  52. ^ McDonald, Cameron; Hawkes, Philip; Pieprzyk, Josef (2009). "Ruta diferencial para SHA-1 con complejidad O(252)". Archivo de ePrints de criptología .(retirado)
  53. ^ "Criptoanálisis de MD5 y SHA-1" (PDF) .
  54. ^ "¿Cuándo veremos colisiones en SHA-1? – Schneier sobre seguridad". www.schneier.com .
  55. ^ "Archivo de código de Google: almacenamiento a largo plazo para alojamiento de proyectos de código de Google". code.google.com .
  56. ^ Leurent, Gaëtan; Peyrin, Thomas (2019). "De las colisiones a las colisiones de prefijo elegido: aplicación a SHA-1 completo" (PDF) . En Yuval Ishai; Vincent Rijmen (eds.). Avances en criptología: EUROCRYPT 2019 (PDF) . 38.ª Conferencia internacional anual sobre la teoría y las aplicaciones de las técnicas criptográficas, Darmstadt, Alemania, del 19 al 23 de mayo de 2019. Lecture Notes in Computer Science. Vol. 11478. Springer. págs. 527–555. doi :10.1007/978-3-030-17659-4_18. ISBN . 978-3-030-17658-7.S2CID 153311244  .
  57. ^ "RFC 3174 - Algoritmo hash seguro estadounidense 1 (SHA1) (RFC3174)". www.faqs.org .
  58. ^ Locktyukhin, Max (31 de marzo de 2010), "Mejora del rendimiento del algoritmo hash seguro (SHA-1)", Intel Software Knowledge Base , consultado el 2 de abril de 2010
  59. ^ "Tabla de medidas". bench.cr.yp.to .
  60. ^ Tao, Xie; Liu, Fanbao; Feng, Dengguo (2013). Ataque de colisión rápida en MD5 (PDF) . Archivo de ePrints de criptología (informe técnico). IACR .
  61. ^ Stevens, Marc ; Bursztein, Elie ; Karpman, Pierre; Albertini, Ange; Markov, Yarik. La primera colisión para SHA-1 completo (PDF) (Informe técnico). Investigación de Google .
    • 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 .
  62. ^ Sin truncamiento, se conoce el estado interno completo de la función hash, independientemente de la resistencia a la colisión. Si se trunca la salida, se debe buscar y encontrar la parte eliminada del estado antes de que se pueda reanudar la función hash, lo que permite que continúe el ataque.
  63. ^ "La familia de funciones de la esponja de Keccak" . Consultado el 27 de enero de 2016 .
  64. ^ Principios de funcionamiento de IBM z/Architecture, número de publicación SA22-7832. Consulte las instrucciones KIMD y KLMD en el Capítulo 7.
  65. ^ Stevens, Marc (2017). "cr-marcstevens/sha1collisiondetection: Biblioteca y herramienta de línea de comandos para detectar colisiones SHA-1 en un archivo".
  66. ^ King, Jeff (10 de mayo de 2017). "Se ha publicado Git 2.13". El blog de GitHub .

Referencias

Enlaces externos