SHA-1 | |
---|---|
Desarrolladores | NSA con NIST |
Creado | 1995 |
publicado | 1995 |
Predecesor | SHA-0 |
Sucesor | SHA-2 |
tamaño de hash | 160 bits |
Número de rondas | 80 |
Tipo de | función hash |
Secure Hash Algorithm 1 es un algoritmo hash criptográfico . Descrito en RFC 3174 . Para un mensaje de entrada de longitud arbitraria ( bits máximo, que es aproximadamente igual a 2 exabytes ), el algoritmo genera un valor hash de 160 bits (20 bytes), también llamado resumen del mensaje , que generalmente se muestra como un hexadecimal de 40 dígitos. número. Se utiliza en muchas aplicaciones y protocolos criptográficos. También recomendado como primario para agencias gubernamentales en los EE.UU. Los principios detrás de SHA-1 son similares a los utilizados por Ronald Rivest al diseñar MD4 .
En 1993, la NSA trabajó con el NIST para desarrollar el algoritmo hash seguro (ahora conocido como SHA-0) (publicado en FIPS PUB 180) para un estándar hash seguro. Sin embargo, la NSA pronto retiró esta versión, citando un error que descubrieron que nunca se reveló. Y lo reemplazó con una versión revisada publicada en 1995 en FIPS PUB 180-1. Esta versión se considera lo que se denomina SHA-1. Más tarde, en la conferencia CRYPTO de 1998 , dos investigadores franceses presentaron un ataque al algoritmo SHA-0 que no funcionó con el algoritmo SHA-1. Esto puede haber sido un error descubierto por la NSA .
SHA-1 implementa una función hash , basada en la idea de una función de compresión. Las entradas a la función de compresión son un bloque de mensajes de 512 bits y la salida del bloque de mensajes anterior. La salida es el valor de todos los bloques hash hasta ese punto. En otras palabras, el bloque hash es . El valor hash de todo el mensaje es la salida del último bloque.
El mensaje original se divide en bloques de 512 bits cada uno. El último bloque se rellena con una longitud múltiplo de 512 bits. Primero, se agregan 1 (bits) y luego se agregan ceros para que la longitud del bloque sea 512 - 64 = 448 bits. Los 64 bits restantes contienen la longitud del mensaje original en bits (en formato big-endian ). Si el último bloque tiene una longitud de más de 447 pero menos de 512 bits, entonces el relleno se realiza de la siguiente manera: primero, se agrega 1 (bit), luego se agregan ceros hasta el final del bloque de 512 bits; después de eso, se crea otro bloque de 512 bits, que se llena hasta 448 bits con ceros, después de lo cual la longitud del mensaje original en bits (en formato big-endian) se escribe en los 64 bits restantes. El último bloque siempre se rellena, incluso si el mensaje ya tiene la longitud deseada.
Se inicializan cinco variables de 32 bits.
A=0x67452301 B=0xEFCDAB89 C=0x98BADCFE D=0x10325476 E=0xC3D2E1F0Se definen cuatro operaciones no lineales y cuatro constantes.
= 0x5A827999 | 0≤t≤19 | |
= 0x6ED9EBA1 | 20≤t≤39 | |
= 0x8F1BBCDC | 40≤t≤59 | |
= 0xCA62C1D6 | 60≤t≤79 |
El ciclo principal procesa iterativamente cada bloque de 512 bits. Al inicio de cada ciclo se introducen las variables a, b, c, d, e, las cuales se inicializan con los valores A, B, C, D, E, respectivamente. El bloque de mensajes se convierte de 16 palabras de 32 bits a 80 palabras de 32 bits de acuerdo con la siguiente regla:
para 0≤t≤15 = ( -3 -8 -14 -16 ) << 1 para 16≤t≤79, donde "<<" es un desplazamiento circular a la izquierda.
para 0 a 79 temp = (a<<5) + ( b,c,d) + e + e = d d = c c = b<<30 b = a, donde "+" es la suma de enteros de 32 bits sin signo con el exceso (bit 33) descartado.
Después de eso, los valores a, b, c, d, e se suman a A, B, C, D, E, respectivamente. Comienza la siguiente iteración.
El valor final será la concatenación de cinco palabras de 32 bits (A, B, C, D, E) en un valor hash de 160 bits.
El pseudocódigo para el algoritmo SHA-1 es el siguiente:
En lugar de la redacción original de FIPS PUB 180-1, se dan las siguientes expresiones equivalentes y se pueden usar en una computadora fen el bucle principal:
(0 ≤ i ≤ 19): f = d xor (b y (c xor d)) (alternativa 1) (0 ≤ i ≤ 19): f = (b y c) xor (( no b) y d) ( alternativa 2) (0 ≤ i ≤ 19): f = (b y c) + (( no b) y d) (alternativa 3) (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) + (d y (b xor c)) (alternativa 3) (40 ≤ i ≤ 59): f = (b y c) xor (b y d) xor (c y d) (alternativa 4)Los siguientes son ejemplos de hash SHA-1. Se supone que todos los mensajes utilizan la codificación UTF-8 .
Pangrama hash en ruso:
SHA-1("¿Habría cítricos en los matorrales del sur? ¡Sí, pero uno falso!") = 9e32295f 8225803b b6d5fdfc c0674616 a4413c1bPangrama hash en inglés:
SHA-1 (" El rápido zorro marrón salta sobre el perro perezoso ") = 2fd4e1c6 7a2d28fc ed849ee1 bb76e739 1b93eb12 SHA-1("sha") = d8f45903 20e1343a 915b6394 170650a8 f35d6926Un pequeño cambio en el texto de origen (una letra en mayúscula) genera un gran cambio en el propio hash. Esto se debe al efecto de avalancha .
SHA-1("sha") = ba79baeb 9f10896a 46ae7471 5271b7f5 86e74640Incluso para una cadena vacía, se calcula un valor hash no trivial.
SHA-1("") = da39a3ee 5e6b4b0d 3255bfef 95601890 afd80709El criptoanálisis de funciones hash tiene como objetivo estudiar la vulnerabilidad a varios tipos de ataques. Los principales son:
Al resolver por el método de "fuerza bruta" :
La seguridad de la firma digital electrónica que utiliza este algoritmo hash depende de la estabilidad de la función hash para encontrar colisiones . La resistencia a la preimagen depende de la seguridad del almacenamiento de hash de contraseñas con fines de autenticación .
En enero de 2005, Vincent Rayman y Elisabeth Oswald publicaron un ataque a una versión truncada de SHA-1 (53 rondas en lugar de 80 ), que permite encontrar colisiones en menos de 280 operaciones.
En febrero de 2005, Xiaoyun Wang , Yiqun Lisa Yin y Hongbo Yu presentaron un ataque a SHA-1 completo que requiere menos de 269 operaciones.
Sobre el método, los autores escriben:
Presentamos un conjunto de estrategias y técnicas relacionadas que se pueden utilizar para superar algunos obstáculos importantes en la búsqueda de colisiones en SHA-1. Primero buscamos caminos diferenciales cercanos a la colisión que tengan un pequeño "peso de Hamming" en el "vector de ruido" donde cada bit representa una colisión local de 6 pasos. Luego ajustamos la ruta diferencial desde la primera etapa a otra ruta diferencial aceptable en consecuencia para evitar colisiones en serie y truncadas inaceptables. Finalmente, convertimos dos caminos diferenciales de casi colisión de un bloque en un camino de colisión de dos bloques con el doble de complejidad computacional. [una]
Texto original (inglés)[ mostrarocultar]Presentamos un conjunto de estrategias y técnicas correspondientes que se pueden usar para eliminar algunos obstáculos importantes en la búsqueda de colisiones para SHA-1. En primer lugar, buscamos una ruta diferencial cercana a la colisión que tenga un peso de Hamming bajo en el "vector de perturbación", donde cada bit representa una colisión local de 6 pasos. En segundo lugar, ajustamos adecuadamente la trayectoria diferencial en la primera ronda a otra trayectoria diferencial posible para evitar colisiones locales consecutivas imposibles y colisiones locales truncadas. En tercer lugar, transformamos dos caminos diferenciales de casi colisión de un bloque en un camino diferencial de colisión de dos bloques con el doble de complejidad de búsqueda.
También afirman:
En particular, nuestro análisis se basa en el ataque diferencial original en SHA-0, el ataque de "casi colisión" en SHA-0, la técnica de bloques múltiples y la técnica de modificación de mensaje original utilizada en los ataques de búsqueda de colisión en HAVAL : 128, MD4 , RIPEMD y MD5 .
Texto original (inglés)[ mostrarocultar]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 de bloques múltiples, así como las técnicas de modificación de mensajes utilizadas en los ataques de búsqueda de colisión en HAVAL-128. , MD4, RIPEMD y MD5.
Un artículo que describe el algoritmo fue publicado en agosto de 2005 en la conferencia CRYPTO .
En el mismo artículo, los autores publicaron un ataque a SHA-1 truncado (58 rondas), que permite encontrar colisiones en 233 operaciones.
En agosto de 2005, en CRYPTO 2005, los mismos expertos presentaron una versión mejorada del ataque al SHA-1 completo, con una complejidad computacional de 263 operaciones. En diciembre de 2007, Martin Cochran revisó los detalles de esta mejora.
Christophe de Kanier y Christian Rechberg presentaron más tarde un ataque mejorado contra SHA-1, por el que recibieron el premio al mejor artículo en la conferencia ASIACRYPT de 2006 . Presentaron una colisión de dos bloques en un algoritmo de 64 rondas con una complejidad computacional de alrededor de 2 35 operaciones. [2]
Existe un proyecto de investigación a gran escala que se inició en la Universidad Tecnológica de la ciudad austriaca de Graz , que: “... utiliza computadoras conectadas a través de Internet para realizar investigaciones en el campo del criptoanálisis. Puedes participar en el proyecto descargando y ejecutando el programa gratuito en tu computadora". [3]
Burt Kalinske , jefe de investigación del " laboratorio RSA ", predice que el primer ataque de preimagen tendrá éxito en los próximos 5 a 10 años.
Dado que los ataques teóricos a SHA-1 han tenido éxito, el NIST planea eliminar por completo el uso de SHA-1 en las firmas digitales. [cuatro]
Debido a la estructura iterativa y de bloques de los algoritmos, así como a la falta de un procesamiento especial al final del hash, todas las funciones hash de la familia SHA son vulnerables a ataques de alargamiento de mensajes y colisiones cuando se codifica parcialmente un mensaje. [5] Estos ataques permiten falsificar mensajes firmados solo con hash, o bien , alargando el mensaje y recalculando el hash sin conocer el valor de la clave. La solución más simple para protegerse contra estos ataques es duplicar hash - ( es un bloque de ceros de la misma longitud que el bloque de función hash).
El 2 de noviembre de 2007, NIST anunció un concurso para desarrollar un nuevo algoritmo SHA-3 que estuvo vigente hasta 2012 . [6]
AceleraciónEl 8 de octubre de 2015, Marc Stevens, Pierre Karpman y Thomas Peyrin publicaron un ataque a la función de compresión del algoritmo SHA-1 que requiere solo 257 cálculos .
Hack real: SHAttered (detección de colisión)El 23 de febrero de 2017, especialistas de Google y CWI anunciaron un truco práctico del algoritmo al publicar 2 archivos PDF con la misma suma de verificación SHA-1 . Esto requirió una búsqueda de opciones, lo que llevaría 110 años para 1 GPU [7] .
Tanto MD5 como SHA-1 son esencialmente extensiones mejoradas de MD4 .
similitudes:
Diferencias:
Bruce Schneier concluye: “SHA-1 es MD4 con la adición de un elenco más amplio, un paso adicional y una avalancha mejorada. MD5 es MD4 con hash de bits mejorado, un paso adicional y avalancha mejorada".
Una serie de características distintivas de GOST R 34.11-94 :
En la tabla, "tamaño de hash intermedio" significa "tamaño de suma de hash interno" después de cada iteración.
Variaciones de algoritmos | Tamaño de hash de salida (bits) | Tamaño de hash intermedio (bits) | Tamaño de bloque (bits) | Longitud máxima del mensaje de entrada (bits) | Tamaño de palabra (bits) | Número de rondas | Operaciones utilizadas | Colisiones encontradas | |
---|---|---|---|---|---|---|---|---|---|
SHA-0 | 160 | 160 | 512 | 2 64 - 1 | 32 | 80 | +, y, o, xor, rotl | Hay | |
SHA-1 | 160 | 160 | 512 | 2 64 - 1 | 32 | 80 | +, y, o, xor, rotl | 2 52 operaciones | |
SHA-2 | SHA-256/224 | 256/224 | 256 | 512 | 2 64 - 1 | 32 | 64 | +, y, o, xor, shr, rotr | No |
SHA-512/384 | 512/384 | 512 | 1024 | 2 128 - 1 | 64 | 80 | +, y, o, xor, shr, rotr | No |
Las funciones hash se utilizan en sistemas de control de versiones, sistemas de firma electrónica y para crear códigos de autenticación .
SHA-1 es el más común de toda la SHA y se utiliza en una variedad de aplicaciones y algoritmos criptográficos ampliamente utilizados.
SHA-1 se utiliza en las siguientes aplicaciones:
SHA-1 es la base del cifrado de bloque SHACAL .
Google ha expresado durante mucho tiempo su desconfianza en SHA-1, especialmente por usar esta función para firmar certificados TLS . En 2014, poco después de la publicación del trabajo de Mark Stevens, el equipo de desarrollo de Chrome anunció que eliminarían SHA-1.
Desde el 25 de abril de 2016 Yandex . Mail ha dejado de admitir programas de correo más antiguos que usan SHA-1 [8] .
Funciones hash | |
---|---|
propósito general | |
Criptográfico | |
Funciones de generación de claves | |
Número de cheque ( comparación ) | |
Hachís |
|