En criptografía , SHA-1 ( Algoritmo de 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 del mensaje , que normalmente se representa 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 EE . UU. [ 3 ] El algoritmo ha sido vulnerado criptográficamente [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] pero aún se utiliza ampliamente.
Desde 2005, SHA-1 no se ha considerado seguro frente a oponentes con amplios recursos; [ 11 ] a partir de 2010 muchas organizaciones han recomendado su reemplazo. [ 12 ] [ 10 ] [ 13 ] El NIST desaconsejó formalmente el uso de SHA-1 en 2011 y prohibió su uso para firmas digitales en 2013, y declaró que debería eliminarse gradualmente para 2030. [ 14 ] A partir de 2020Los ataques de prefijo elegido contra SHA-1 son prácticos. [ 6 ] [ 8 ] Por lo tanto, 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 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 suspendió la compatibilidad con la firma de código SHA-1 para Windows Update el 3 de agosto de 2020, [ 18 ] lo que también puso fin a los servidores de actualización para las versiones de Windows que no se habían actualizado a SHA-2, como Windows 2000 hasta Vista , así como las versiones de Windows Server desde Windows 2000 Server hasta Server 2003 .
Desarrollo

SHA-1 se basa en principios similares a los utilizados por Ronald L. Rivest del MIT en el diseño de los algoritmos de resumen de mensajes MD4 y MD5 , pero genera un resumen de mensaje más grande (160 bits frente a 128 bits).
SHA-1 se desarrolló como parte del proyecto Capstone del gobierno de EE . UU. [ 19 ] La especificación original del algoritmo se publicó 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). [ 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 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 redujo 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 que la de SHA-1 en 2017 ( véase §Ataques ).
Aplicaciones
Criptografía
SHA-1 forma parte de varias aplicaciones y protocolos de seguridad ampliamente utilizados, como TLS y SSL , PGP , SSH , S/MIME e IPsec . Estas aplicaciones también pueden usar MD5 ; tanto MD5 como SHA-1 derivan de MD4 .
SHA-1 y SHA-2 son los algoritmos hash exigidos por ley para su uso en ciertas aplicaciones del gobierno estadounidense , incluyendo su uso dentro de otros algoritmos y protocolos criptográficos, para la protección de información sensible no clasificada. La publicación 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. declaró: "Las agencias federales deberían dejar de usar SHA-1 para... aplicaciones que requieren resistencia a colisiones tan pronto como sea posible, y deben usar la familia de funciones hash SHA-2 para estas aplicaciones después de 2010", [ 24 ] aunque esto se flexibilizó posteriormente para permitir que SHA-1 se utilizara para verificar firmas digitales antiguas y marcas de tiempo. [ 24 ]
Una de las principales motivaciones para la publicación del Algoritmo de Hash Seguro fue el Estándar de Firma Digital , en el que está incorporado.
Las funciones hash SHA se han utilizado como base para los cifrados de bloques SHACAL .
Integridad de los datos
Los sistemas de control de versiones 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 de disco, corrupción de DRAM, o cualquier otro problema, Git lo detectará. No es cuestión de si ocurrirá , es una garantía. Puede haber personas que intenten actuar con mala intención, pero no lo conseguirán. [...] Nadie ha podido romper SHA-1, pero la cuestión es que, en lo que respecta a Git, SHA-1 ni siquiera es una función de seguridad. Es simplemente una comprobación de consistencia. La seguridad reside en otro lugar, por lo que mucha gente asume que, dado que Git usa SHA-1 y este se utiliza para la seguridad criptográfica, es una función de seguridad fundamental. No tiene nada que ver con la seguridad; es simplemente el mejor hash posible.
- Te garantizo que, si guardas tus datos en Git, puedes confiar en que cinco años después, tras haberlos convertido de tu disco duro a DVD o a cualquier otra tecnología nueva y haberlos copiado, podrás verificar que los datos que recuperes son exactamente los mismos que introdujiste. [...]
- Una de las razones por las que me importa es por el kernel; tuvimos una intrusión en uno de los sitios de BitKeeper donde la gente intentó corromper los repositorios del código fuente del kernel. [ 25 ]
Sin embargo, Git no requiere la resistencia a la segunda preimagen de SHA-1 como medida de seguridad, ya que siempre preferirá conservar la versión más antigua de un objeto en caso de colisión, impidiendo que un atacante sobrescriba archivos subrepticiamente. [ 26 ] Los ataques conocidos (hasta 2020) tampoco rompen la resistencia a la segunda preimagen. [ 27 ]
Criptoanálisis y validación
Para una función hash donde L es el número de bits en el resumen del mensaje, encontrar un mensaje que corresponda a un resumen dado siempre se puede hacer mediante una búsqueda por 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 producen el mismo resumen, 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 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, 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 . Véase Descifrado de contraseñas .
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 . [ 28 ]
Debido a la estructura iterativa y por bloques de los algoritmos y a 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( clave || mensaje ) , pero no SHA( mensaje || clave ) – 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 del bloque de la función hash).
SHA-0
En CRYPTO 98, dos investigadores franceses, Florent Chabaud y Antoine Joux , presentaron un ataque a SHA-0: se pueden encontrar colisiones con una complejidad de 2 61 , menor que los 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 generan un valor hash casi idéntico; 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. [ 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 logró mediante una generalización del ataque de Chabaud y Joux. Encontrar la colisión tuvo una complejidad de 2⁵¹ y requirió aproximadamente 80 000 horas de procesador en una supercomputadora con 256 procesadores Itanium 2 (equivalente a 13 días de uso continuo de la computadora).
El 17 de agosto de 2004, en la sesión informal 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 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 sugirieron que se reconsideraran los planes para el uso de SHA-1 en nuevos criptosistemas . Tras la publicación de 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 ]
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 . [ 38 ]
En febrero de 2005, se anunció un ataque perpetrado por Xiaoyun Wang , Yiqun Lisa Yin y Hongbo Yu. [ 5 ] Estos ataques pueden encontrar colisiones en la versión completa de SHA-1, requiriendo 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 a SHA-0, el ataque de colisión cercana a SHA-0, las técnicas de colisión de bloques múltiples, así como las técnicas de modificación de mensajes utilizadas en el ataque de búsqueda de colisión a MD5. Romper SHA-1 no sería posible sin estas potentes 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, "En términos generales, explotamos las siguientes dos debilidades: una es que el paso de preprocesamiento de archivos no es lo suficientemente complejo; la otra es que ciertas operaciones matemáticas en las primeras 20 rondas tienen problemas de seguridad inesperados". [ 40 ]
El 17 de agosto de 2005, Xiaoyun Wang , Andrew Yao y Frances Yao anunciaron una mejora en el ataque SHA-1 en la sesión informal de CRYPTO 2005, reduciendo la complejidad necesaria 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. [ 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 ] 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 utilizando métodos no optimizados con 2 35 evaluaciones de la función de compresión. Dado que este ataque requiere el equivalente a aproximadamente 2 35 evaluaciones, se considera una ruptura teórica significativa. [ 43 ] Su ataque fue extendido 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, una búsqueda de colisiones para SHA-1 utilizando 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 progreso. [ 45 ]
En la sesión informal 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 reportó colisiones de hash con una complejidad teórica estimada de 2⁵¹ a 2⁵⁷ operaciones. [ 48 ] Sin embargo, posteriormente se retractó de esa afirmación tras descubrir que las rutas de colisión locales no eran realmente independientes, y finalmente citó como el vector de colisión más eficiente un vector 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 una complejidad declarada de 2 52 en la sesión informal de Eurocrypt 2009. [ 50 ] Sin embargo, el artículo que lo acompañaba, "Differential Path for SHA-1 with complexity O (2 52 )", fue retirado debido a que los autores descubrieron que su estimación era incorrecta. [ 51 ]
Un ataque contra SHA-1 fue realizado por Marc Stevens [ 52 ] con un costo estimado de $2.77M (2012) para romper un solo valor hash 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ó tener 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 acontecimiento
El 8 de octubre de 2015, Marc Stevens, Pierre Karpman y Thomas Peyrin publicaron un ataque de colisión de inicio libre contra la función de compresión de SHA-1 que requiere solo 2⁵⁷ evaluaciones de SHA-1. Esto no se traduce directamente en una colisión contra 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 eran demasiado costosos para que sus autores los llevaran a cabo. Los autores denominaron a 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 bumeranes) de Joux y Peyrin, y en el uso de tarjetas GPU de alto rendimiento. 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 de EC2 para generar una colisión completa para SHA-1 en el momento de la publicación oscilaba entre US$75 000 y US$120 000, y señalaron que esto se encontraba dentro del presupuesto de las organizaciones criminales, por no hablar de las agencias de inteligencia nacionales . Por lo tanto, los autores recomendaron que SHA-1 se descontinuara lo antes posible. [ 10 ]
Destrozados: 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 2⁶³, ¹ evaluaciones SHA-1. Este ataque es unas 100 000 veces más rápido que forzar una colisión SHA-1 mediante un ataque de cumpleaños , que se estimó que requería 2⁸⁰ evaluaciones SHA-1. El ataque requirió "la potencia de procesamiento equivalente a 6500 años de cálculos en una sola CPU y 110 años de cálculos en una sola GPU". [ 2 ]
Ataque de colisión cercana al cumpleaños: 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 al ataque de prefijo elegido, que hasta entonces había sido el mejor, 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 550 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 falsificadas en certificados firmados) que las 2 77,1 evaluaciones del ataque anterior (pero sin prefijo elegido, 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 con recursos, requiriendo aproximadamente $100 000 en 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 al mejor método disponible anterior a nivel teórico (2 39 ), aunque potencialmente a 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.
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 una 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 para determinadas aplicaciones.
A diciembre de 2013Hay más de 2000 implementaciones validadas de SHA-1, de las cuales 14 son capaces de manejar mensajes con una longitud en bits que no es múltiplo de ocho (ver Lista de validación SHS archivada el 23/08/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 ASCII binario Base64 .
SHA1("The quick brown fox jumps over the lazy dog")
Incluso un pequeño cambio en el mensaje, con una probabilidad abrumadora, provocará que muchos bits cambien debido al efecto avalancha . Por ejemplo, cambiar doga cogproduce un hash con valores diferentes para 81 de los 160 bits:
SHA1("The quick brown fox jumps over the lazy cog")
El hash de la cadena de longitud cero es:
pseudocódigo SHA-1
A continuación se muestra el pseudocódigo del algoritmo SHA-1:
Nota 1: Todas las variables son cantidades sin signo de 32 bits y se dividen en módulos de 2³² 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 formato 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 = 0x67452301 h1 = 0xEFCDAB89 h2 = 0x98BADCFE h3 = 0x10325476 h4 = 0xC3D2E1F0 ml = 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 un múltiplo de 8 bits. agregar 0 ≤ k < 512 bits '0', de manera que la longitud del mensaje resultante en bits sea congruente con −64 ≡ 448 (mod 512)agregar 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. Procese el mensaje en bloques sucesivos de 512 bits: dividir el mensaje en fragmentos de 512 bits para 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 difiere al 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]) leftrotate 1 Inicialice el valor hash para este fragmento: a = h0 b = h1 c = h2 d = h3 e = h4 Bucle principal: [ 3 ] [ 56 ] para i desde 0 hasta 79 si 0 ≤ i ≤ 19 entonces f = (b y c) o (( no b) y d) k = 0x5A827999 si no, si 20 ≤ i ≤ 39 f = b xor c xor d k = 0x6ED9EBA1 si no, si 40 ≤ i ≤ 59 f = (b y c) o (b y d) o (c y d) k = 0x8F1BBCDC si no, si 60 ≤ i ≤ 79 f = b xor c xor d k = 0xCA62C1D6 temp = (a leftrotate 5) + f + e + k + w[i] e = d d = c c = b rotación izquierda 30 b = a a = temperatura Agrega el hash de este fragmento al resultado hasta el momento: h0 = h0 + a h1 = h1 + b h2 = h2 + c h3 = h3 + d h4 = h4 + e Genera 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 hhes 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 ocultos :
- Las cuatro constantes de ronda
kson 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 bits cero y uno. Además, elegir la raíz cuadrada de 10 (que no es un número primo) la convirtió en un factor común para las otras dos raíces cuadradas de los primos 2 y 5, con posibles propiedades aritméticas utilizables en rondas sucesivas, lo que reduce la robustez del algoritmo frente a la detección de colisiones en algunos bits. - Los primeros cuatro valores iniciales para
h0sonh3los mismos que con el algoritmo MD5, y el quinto (parah4) 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 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ó [ 57 ] 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]) leftrotate 1
puede ser reemplazado por:
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 a 64 bits y, al eliminar la dependencia de w[i], w[i-3]permite una implementación SIMD eficiente con una longitud de vector de 4 como las instrucciones SSE de x86 .
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.
Implementaciones
A continuación se muestra una lista de bibliotecas de criptografía que admiten SHA-1:
La aceleración por hardware la proporcionan las siguientes extensiones del procesador:
- Extensiones SHA de Intel : Disponibles en algunos procesadores Intel y AMD x86.
- Candado VÍA Candado
- Arquitectura IBM z : Disponible desde 2003 como parte de la extensión Message-Security-Assist [ 62 ]
Contramedida contra colisiones
Tras el caso SHAttered, Marc Stevens y Dan Shumow publicaron "sha1collisiondetection" (SHA-1CD), una variante de SHA-1 que detecta ataques de colisión y modifica la salida del hash cuando se detecta uno. La tasa de falsos positivos es de 2⁻⁹⁰ . [ 63 ] GitHub utiliza SHA-1CD desde marzo de 2017 y Git desde la versión 2.13.0 de mayo de 2017. [ 64 ]
Véase también
Notas
- 1 2 Stevens, Marc (19 de junio de 2012). Ataques a funciones hash y aplicaciones (PDF) (tesis doctoral). Universidad de Leiden . hdl : 1887/19093 . ISBN 9789461913173OCLC 795702954
- 1 2 3 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. Lecture Notes in Computer Science . Vol. 10401. Springer . pp. 570–596 . doi : 10.1007/978-3-319-63688-7_19 . ISBN 9783319636870Archivado del 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 .
- 1 2 "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 Estándares Federales de Procesamiento de Información. Archivado del original (PDF) el 7 de enero de 2020. Recuperado el 23 de septiembre de 2019 .
- 1 2 "El fin de SHA-1 en la web pública" . Blog de seguridad de Mozilla . 23 de febrero de 2017. Recuperado el 29 de mayo de 2019 .
- 1 2 3 "SHA-1 roto – Schneier sobre seguridad" . www.schneier.com . 15 de febrero de 2005.
- 1 2 "Se demuestra una falla crítica en un algoritmo común de seguridad digital" . Universidad Tecnológica de Nanyang, Singapur . 24 de enero de 2020.
- 1 2 "Nuevos resultados criptoanalíticos contra SHA-1 – Schneier sobre seguridad" . www.schneier.com . 17 de agosto de 2005.
- 1 2 3 Leurent, Gaëtan; Peyrin, Thomas (2020-01-05). "SHA-1 es un desastre: Colisión de prefijo elegido en SHA-1 y su aplicación a la red de confianza PGP" (PDF) . Cryptology ePrint Archive, Informe 2020/014 .
- 1 2 "Google dejará de usar el cifrado SHA-1 en Chrome antes del 1 de enero de 2017" . VentureBeat . 18 de diciembre de 2015. Archivado del original el 29 de mayo de 2019. Consultado el 29 de mayo de 2019 .
- 1 2 3 4 5 Stevens, Marc; Karpman, Pierre; Peyrin, Thomas. "The SHAppening: colisiones de arranque libre para SHA-1" . Recuperado el 9 de octubre de 2015 .
- ↑ Schneier, Bruce (18 de febrero de 2005). "Schneier sobre seguridad: criptoanálisis de SHA-1" .
- ↑ "NIST.gov – División de Seguridad Informática – Centro de Recursos de Seguridad Informática" . Archivado del original el 25/06/2011 . Consultado el 05/01/2019 .
- ↑ Schneier, Bruce (8 de octubre de 2015). "Colisión de inicio libre SHA-1" . Schneier sobre seguridad .
- ↑ "El NIST retira el algoritmo criptográfico SHA-1" (Comunicado de prensa). NIST. 15 de diciembre de 2022.
- ↑ Goodin, Dan (4 de mayo de 2016). "Microsoft dejará de dar soporte a los certificados SHA1 en los próximos 4 meses" . Ars Technica . Consultado el 29 de mayo de 2019 .
- ↑ "CWI y Google anuncian la primera colisión para el estándar de seguridad industrial SHA-1" . Consultado el 23 de febrero de 2017 .
- ↑ 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 .
- ↑ "El contenido de Windows SHA-1 se retirará el 3 de agosto de 2020" . techcommunity.microsoft.com . Consultado el 28 de febrero de 2024 .
- ↑ "Preguntas frecuentes de RSA sobre Capstone" .
- ↑ Selvarani, R.; Aswatha, Kumar; TV Suresh, Kumar (2012). Actas de la Conferencia Internacional sobre Avances en Computación . Springer Science & Business Media. pág. 551. ISBN 978-81-322-0740-5.
- ↑ Estándar de hash seguro, 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
- ↑ 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 .
- ↑ fgrieu. "¿Dónde puedo encontrar una descripción del algoritmo hash SHA-0?" . Cryptography Stack Exchange .
- 1 2 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, NIST . Recuperado el 27/08/2023 .
- ↑ "Charla técnica: Linus Torvalds sobre git" . YouTube . 14 de mayo de 2007. Consultado el 13 de noviembre de 2013 .
- ↑ Torvalds, Linus. "Re: ¿Empezando a pensar en sha-256?" . marc.info . Consultado el 30 de mayo de 2016 .
- ↑ Walfield, Neal H. (2020). "openpgp: Pasar los requisitos de seguridad del algoritmo hash a Policy::signature" . gitlab.com/sequoia-pgp .– véase la sección "Antecedentes" en la documentación generada.
- ^ Sotirov, Alejandro; Stevens, Marc; Apelbaum, Jacob; Lenstra, Arjen; Molnar, David; Osvik, Dag Arne; de Weger, Benne (30 de diciembre de 2008). "MD5 se considera dañino hoy en día: creación de un certificado de CA fraudulento" . Consultado el 29 de marzo de 2009 .
- ↑ "Fortalezas de Keccak: diseño y seguridad" . La familia de funciones esponja de Keccak . Equipo de Keccak . Consultado el 20 de septiembre de 2015.
A diferencia de SHA-1 y SHA-2, Keccak no presenta la vulnerabilidad de extensión de longitud, por lo que no requiere la construcción anidada de HMAC. En cambio, el cálculo de MAC se puede realizar simplemente anteponiendo la clave al mensaje.
- ↑ "Schneier sobre seguridad: ingeniería criptográfica" . www.schneier.com . Consultado el 27 de agosto de 2023 .
- ^ 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 conferencias sobre informática. vol. 1462. Saltador. págs. 56– 71. doi : 10.1007/BFb0055720 . ISBN 978-3-540-64892-5– vía Springer Link.
- ↑ Biham, Eli; Chen, Rafi. "Casi colisiones de SHA-0" (PDF) .
- ↑ "Informe de Crypto 2004" . Archivado del original el 21 de agosto de 2004. Consultado el 23 de agosto de 2004 .
- ↑ Grieu, Francois (18 de agosto de 2004). "Re: ¿Alguna noticia anticipada de la sesión de cripto rump?". Grupo de noticias : sci.crypt . El evento ocurre a las 05:06:02 +0200. Usenet: fgrieu-05A994.05060218082004@individual.net .
- ↑ Ataques eficientes de búsqueda de colisiones en SHA-0 Archivado el 10/09/2005 en Wayback Machine , Universidad de Shandong
- ↑ Manuel, Stéphane; Peyrin, Thomas (11 de febrero de 2008). Colisiones en SHA-0 en una hora (PDF) . Cifrado rápido de software 2008. Notas de clase en informática. Vol. 5086. págs. 16–35 . doi : 10.1007/978-3-540-71039-4_2 . ISBN 978-3-540-71038-7.
- ↑ "Comentarios breves del NIST sobre los recientes ataques criptoanalíticos a las funciones hash seguras y la seguridad continua que proporciona SHA-1" . 23 de agosto de 2017. Consultado el 16 de marzo de 2022 .
- ↑ Rijmen, Vincent; Oswald, Elisabeth (2005). "Actualización sobre SHA-1" . Cryptology ePrint Archive .
- ↑ Ataques de búsqueda de colisiones en SHA1 Archivado el 19/02/2005 en Wayback Machine , Instituto Tecnológico de Massachusetts
- ↑ Lemos, Robert. "Corrigiendo una brecha en la seguridad" . ZDNet .
- ↑ Cochran, Martin (2007). "Notas sobre la ruta diferencial SHA-1 de Wang et al. 2 63 " . Cryptology ePrint Archive .
- ↑ De Cannière, Christophe; Rechberger, Christian (15 de noviembre de 2006). «Detección de las características de SHA-1: resultados generales y aplicaciones». Avances en criptología – ASIACRYPT 2006. Notas de clase en informática. Vol. 4284. págs. 1–20 . doi : 10.1007/11935230_1 . ISBN 978-3-540-49475-1.
- ↑ "Grupo IAIK Krypto – Descripción del proyecto de búsqueda de colisiones SHA-1" . Archivado del original el 15 de enero de 2013. Consultado el 30 de junio de 2009 .
- ↑ "Colisiones para SHA-1 de 72 y 73 pasos: mejoras en el método de características" . Consultado el 24 de julio de 2010 .
- ↑ "Búsqueda de colisiones SHA-1 Graz" . Archivado del original el 25 de febrero de 2009. Consultado el 30 de junio de 2009 .
- ↑ "heise online – IT-News, Nachrichten und Hintergründe" . Heise en línea . 27 de agosto de 2023.
- ↑ "Calendario de eventos alternativos de Crypto 2006" . www.iacr.org .
- ↑ Manuel, Stéphane. "Clasificación y generación de vectores de perturbación para ataques de colisión contra SHA-1" (PDF) . Cryptology ePrint Archive . Consultado el 19 de mayo de 2011 .
- ↑ 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.
- ↑ "Colisiones SHA-1 ahora 2^52" (PDF) .
- ↑ McDonald, Cameron; Hawkes, Philip; Pieprzyk, Josef (2009). "Ruta diferencial para SHA-1 con complejidad O( 252 )" . Cryptology ePrint Archive .(retirado)
- ↑ "Criptoanálisis de MD5 y SHA-1" (PDF) .
- ↑ "¿Cuándo veremos colisiones para SHA-1? – Schneier sobre seguridad" . www.schneier.com . 5 de octubre de 2012.
- ↑ "Archivo de Google Code: almacenamiento a largo plazo para el alojamiento de proyectos de Google Code" . code.google.com .
- ↑ 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 Aplicaciones de las Técnicas Criptográficas, Darmstadt, Alemania, 19-23 de mayo de 2019. Lecture Notes in Computer Science. Vol. 11478. Springer. pp. 527-555 . doi : 10.1007/978-3-030-17659-4_18 . ISBN 978-3-030-17658-7. S2CID 153311244 .
- ↑ "RFC 3174 - Algoritmo de hash seguro estadounidense 1 (SHA1) (RFC3174)" . www.faqs.org .
- ↑ Locktyukhin, Max (31 de marzo de 2010), "Mejora del rendimiento del algoritmo de hash seguro (SHA-1)" , Base de conocimientos de software de Intel , consultado el 2 de abril de 2010.
- ↑ "Tabla de medidas" . bench.cr.yp.to .
- ↑ Tao, Xie; Liu, Fanbao; Feng, Dengguo (2013). Ataque de colisión rápida en MD5 (PDF) . Cryptology ePrint Archive (Informe técnico). IACR .
- ↑ 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 .
- ↑ "La familia de funciones de la esponja de Keccak" . Consultado el 27 de enero de 2016 .
- ↑ 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.
- ↑ Stevens, Marc (2017). "cr-marcstevens/sha1collisiondetection: Biblioteca y herramienta de línea de comandos para detectar colisiones SHA-1 en un archivo" . GitHub .
- ↑ King, Jeff (10 de mayo de 2017). "Git 2.13 ha sido lanzado" . El blog de GitHub .
Referencias
- Eli Biham , Rafi Chen, Colisiones cercanas de SHA-0, Cryptology ePrint Archive, Informe 2004/146, 2004 (publicado en CRYPTO 2004), IACR.org
- Xiaoyun Wang , Hongbo Yu y Yiqun Lisa Yin, Ataques de búsqueda de colisión eficientes en SHA-0 , Crypto 2005
- Xiaoyun Wang , Yiqun Lisa Yin y Hongbo Yu, encontrando colisiones en el SHA-1 completo , Crypto 2005
- Henri Gilbert , Helena Handschuh : Análisis de seguridad de SHA-256 y Sisters . Áreas selectas en criptografía 2003: págs. 175-193
- Una guía ilustrada sobre funciones hash criptográficas
- "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. Consultado el 26 de abril de 2007 .
- A. Cilardo, L. Esposito, A. Veniero, A. Mazzeo, V. Beltran, E. Ayugadé, Una aplicación HPC basada en CellBE para el análisis de vulnerabilidades en funciones hash criptográficas , Conferencia internacional de computación y comunicación de alto rendimiento, agosto de 2010
- ESTÁNDAR DE HASH SEGURO. (1995). https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/fipspub180-1.pdf
Enlaces externos
- Kit de herramientas criptográficas CSRC : sitio oficial del NIST para el Estándar de Hash Seguro.
- FIPS 180-4: Estándar de Hash Seguro (SHS)
- RFC 3174 (con ejemplo de implementación en C)
- Entrevista con Yiqun Lisa Yin sobre el ataque a SHA-1
- Explicación de los ataques exitosos contra SHA-1 (3 páginas, 2006)
- Investigación en criptografía: Preguntas y respuestas sobre colisiones de hash .
- Conferencia sobre SHA-1 (1h 18m) en YouTube por Christof Paar . Archivada el 24/04/2017 en Wayback Machine.
- funciones hash criptográficas
- Funciones hash defectuosas
- Algoritmos de suma de verificación
- Criptografía de la Agencia de Seguridad Nacional
- Software de dominio público con código fuente