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, que generalmente se representa como 40 dígitos hexadecimales. Fue diseñado por la Agencia de Seguridad Nacional de los Estados Unidos (NSA) y es un Estándares Federales de Procesamiento de Información de EE. UU. Aunque el algoritmo ha sido roto criptográficamente, sigue siendo ampliamente utilizado.

Desde 2005, SHA-1 no se considera seguro frente a adversarios con mayores recursos, y en 2010, muchas organizaciones recomendaron su sustitución. El Instituto Nacional de Estándares y Tecnología (NIST) desaconsejó formalmente el uso de SHA-1 en 2011 y prohibió su uso para firmas digitales en 2013, declarando que debería eliminarse completamente para 2030. A partir de 2020, los ataques de prefijo elegido contra SHA-1 son prácticos. Por lo tanto, se recomienda eliminar SHA-1 de los productos lo antes posible y, en su lugar, utilizar SHA-2 o SHA-3. La sustitución de SHA-1 es urgente donde se utilice para firmas digitales.

En 2017, los principales navegadores web dejaron de aceptar certificados SSL basados en SHA-1. En febrero de ese mismo año, el CWI de Ámsterdam y Google anunciaron que habían realizado un ataque de colisión contra SHA-1, publicando dos archivos PDF diferentes que generaban el mismo hash SHA-1. No obstante, SHA-1 sigue siendo seguro para HMAC.

Microsoft dejó de admitir la firma de código SHA-1 para Windows Update el 3 de agosto de 2020, lo que también finalizó efectivamente las actualizaciones para versiones de Windows que no se hayan actualizado a SHA-2, como Windows 2000 hasta Vista, así como versiones de Windows Server desde Windows 2000 Server hasta Server 2003.

Desarrollo miniaturadeimagen|312x312px|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 a la izquierda por n posiciones, donde n varía en cada operación;

- Wt es la palabra de mensaje expandida de la ronda t;

- Kt es la constante de la ronda t;

- 11x11pxdenota una suma módulo 232. SHA-1 produce un resumen de mensaje basado en principios similares a los usados 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 fue desarrollado como parte del proyecto Capstone del Gobierno de EE. UU. 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).Secure Hash Standard, Federal Information Processing Standards Publication FIPS PUB 180, National Institute of Standards and Technology, 11 de mayo de 1993. Esta versión ahora suele llamarse 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 denominada SHA-1. SHA-1 difiere de SHA-0 solo por una rotación de bits 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 proporcionaron más explicaciones. Las técnicas disponibles públicamente demostraron una vulnerabilidad de SHA-0 en 2004, antes de que se comprometiera SHA-1 en 2017.

Aplicaciones

Criptografía

SHA-1 forma parte de varias aplicaciones y protocolos de seguridad ampliamente utilizados, incluidos TLS y SSL, PGP, SSH, S/MIME e IPsec. Estas aplicaciones también pueden usar MD5; ambos, MD5 y SHA-1, descienden de MD4.

SHA-1 y SHA-2 son los algoritmos hash requeridos por ley para su uso en ciertas aplicaciones del gobierno de EE. UU., incluidos otros algoritmos y protocolos criptográficos, para la protección de información sensible no clasificada. FIPS PUB 180-1 también alentaba la adopción y uso de SHA-1 por organizaciones privadas y comerciales. SHA-1 está siendo retirado de la mayoría de los usos gubernamentales; el NIST declaró: "Las agencias federales deben dejar de usar SHA-1 para... aplicaciones que requieran resistencia a colisiones tan pronto como sea práctico, y deben usar la familia de funciones hash SHA-2 para estas aplicaciones después de 2010", aunque más tarde se relajó para permitir el uso de SHA-1 para verificar firmas digitales y sellos de tiempo antiguos.

Una de las principales motivaciones para la publicación del algoritmo de hash seguro fue el estándar de firma digital, en el que se incorpora.

Las funciones hash SHA se han utilizado como base para los cifrados por bloque SHACAL.

Integridad de los datos Los sistemas de control de revisiones como Git, Mercurial y Monotone utilizan SHA-1, no por motivos de seguridad, sino para identificar revisiones y asegurar que los datos no han 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 algún tipo de problema, Git lo notará. No es una cuestión de posibilidades, es una garantía. Puedes tener personas que intentan ser maliciosas, pero tendrán éxito. [...] Nadie ha podido 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 un chequeo de consistencia. Las partes de seguridad están en otros lugares, por lo que muchas personas asumen que, dado que Git utiliza SHA-1 y SHA-1 se usa para cosas criptográficamente seguras, piensan que, está bien, 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 haber sido convertidos de tu disco duro a DVD a cualquier nueva tecnología y lo copiaste, cinco años después puedes verificar que los datos que obtienes son exactamente los mismos datos que pusiste. [...] Una de las razones por las que me importa es que, para el kernel, tuvimos una brecha en uno de los sitios de BitKeeper donde las personas intentaron corromper los repositorios del código fuente del kernel.Sin embargo, Git no requiere la resistencia al segundo 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 de manera furtiva. Los ataques conocidos (hasta 2020) tampoco rompen la resistencia al segundo preimagen.

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 utilizando una búsqueda de fuerza bruta en aproximadamente 2L evaluaciones. Esto se llama un ataque de preimagen y puede ser práctico o no, dependiendo de L y el entorno computacional particular. Sin embargo, una colisión, que consiste en encontrar dos mensajes diferentes que producen el mismo resumen de mensaje, requiere en promedio solo alrededor de evaluaciones utilizando un ataque de cumpleaños. Así, la fortaleza de una función hash se compara generalmente con un cifrador simétrico de la mitad de la longitud del resumen del mensaje. SHA-1, que tiene un resumen de mensaje de 160 bits, se pensaba originalmente que tenía una fuerza de 80 bits.

Algunas de las aplicaciones que utilizan hashes criptográficos, como el almacenamiento de contraseñas, están solo mínimamente afectadas por un ataque de colisión. Construir una contraseña que funcione para una cuenta dada requiere un ataque de preimagen, así como acceso al hash de la contraseña original, que puede o no ser trivial. Invertir la encriptación de contraseñas (por ejemplo, para obtener una contraseña para probar contra la cuenta de un usuario en otro lugar) no es posible por medio de los ataques. Sin embargo, incluso un hash de contraseña seguro no puede prevenir ataques de fuerza bruta en contraseñas débiles.

En el caso de la firma de documentos, un atacante no podría simplemente falsificar una firma de un documento existente: el atacante tendría que producir un par de documentos, uno inocuo y uno dañino, y conseguir que el titular 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 de MD5.

Debido a la estructura de bloques e iterativa de los algoritmos y la ausencia de pasos finales adicionales, todas las funciones SHA (excepto SHA-3) son vulnerables a ataques de extensión de longitud y colisión de mensajes parciales. Estos ataques permiten a un atacante falsificar un mensaje firmado solo 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 hacer hash dos veces: (la longitud de 0b, 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 261, menos que los 2^80 para una función hash ideal del mismo tamaño.

En 2004, Biham y Chen encontraron casi colisiones para SHA-0 – dos mensajes que hash a valores casi iguales; en este caso, 142 de los 160 bits son iguales. También encontraron colisiones completas de SHA-0 reducidas a 62 de sus 80 rondas.

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

El 17 de agosto de 2004, en la Rump Session de CRYPTO 2004, se anunciaron resultados preliminares por Wang, Feng, Lai y Yu, sobre un ataque a MD5, SHA-0 y otras funciones hash. La complejidad de su ataque a SHA-0 es de 240, significativamente mejor que el ataque de Joux et al.

En febrero de 2005, se anunció un ataque de Xiaoyun Wang, Yiqun Lisa Yin y Hongbo Yu que podría encontrar colisiones en SHA-0 en 239 operaciones.

Otro ataque en 2008 aplicando el ataque de boomerang redujo la complejidad de encontrar colisiones a 233.6, lo que se estimó que tomaría 1 hora en una PC promedio del año 2008.

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 sistemas criptográficos. Después de la publicación de los resultados de CRYPTO 2004, el NIST anunció que planeaba eliminar el uso de SHA-1 para 2010 en favor de las variantes SHA-2.

Ataques A principios de 2005, Vincent Rijmen y Elisabeth Oswald publicaron un ataque a una versión reducida de SHA-1 – 53 de 80 rondas – que encuentra colisiones con un esfuerzo computacional de menos de 280 operaciones.

En febrero de 2005, se anunció un ataque de Xiaoyun Wang, Yiqun Lisa Yin y Hongbo Yu. Los ataques pueden encontrar colisiones en la versión completa de SHA-1, requiriendo menos de 269 operaciones. (Una búsqueda de fuerza bruta requeriría 280 operaciones).