RC4 (del inglés Rivest cipher 4 o código de Ron ), también conocido como ARC4 o ARCFOUR ( supuesto RC4 ) es un cifrado de flujo ampliamente utilizado en varios sistemas de seguridad de la información en redes informáticas (por ejemplo, en protocolos SSL y TLS , algoritmos de seguridad inalámbrica ) WPAy.Redes WEP ).
El cifrado es desarrollado por RSA Security y requiere una licencia para usarlo .
El algoritmo RC4, como cualquier cifrado de flujo , se basa en un generador de bits pseudoaleatorios . La clave se escribe en la entrada del generador y los bits pseudoaleatorios se leen en la salida. La longitud de la clave puede ser de 40 a 2048 bits [1] . Los bits generados tienen una distribución uniforme .
Las principales ventajas del cifrado:
RC4 es bastante vulnerable si:
Estos factores, así como la forma en que se utiliza, pueden hacer que un criptosistema sea inseguro (como WEP ).
El cifrado de flujo RC4 fue creado en 1987 por Ronald Rivest de RSA Security . La abreviatura "RC4" significa oficialmente "Rivest cipher 4" o " Rivest cipher " ("4" es el número de versión; consulte RC2 , RC5 , RC6 ; RC1 nunca se publicó; RC3 se desarrolló, pero se encontró una vulnerabilidad en él ), pero a menudo se considera la abreviatura de " código de Ron " (" código de Ron ") [2] .
Durante siete años, el cifrado fue un secreto comercial , y solo se proporcionó una descripción exacta del algoritmo después de firmar un acuerdo de confidencialidad , pero en septiembre de 1994, su descripción se envió de forma anónima a la lista de correo de Cypherpunks [ 3] . Pronto se publicó una descripción de RC4 en el grupo de noticias de Usenet " sci.crypt ". A partir de ahí, el código fuente llegó a muchos sitios en Internet . El algoritmo publicado produjo textos cifrados en la salida que coincidían con los textos cifrados producidos por el RC4 original. Los propietarios de las copias legales del código fuente de RC4 confirmaron la identidad de los algoritmos con diferencias en la notación y la estructura del programa.
Dado que este algoritmo es conocido, ya no es un secreto comercial . Sin embargo, el nombre "RC4" es una marca registrada de RSA Security . Para evitar posibles reclamos por parte del propietario de la marca , a veces se hace referencia al cifrado como "ARCFOUR" o "ARC4", en referencia al inglés. un RC4 supuesto es un RC4 "supuesto" (porque RSA Security no ha publicado oficialmente el algoritmo).
El algoritmo de cifrado RC4 se utiliza en algunos estándares y protocolos de cifrado ampliamente utilizados (por ejemplo, WEP , WPA , SSL y TLS ).
RC4 se hizo popular gracias a:
En EE . UU ., la longitud de clave recomendada para uso doméstico es de 128 bits. Un acuerdo entre SPA ( asociación de editores de software ) y el gobierno de EE . UU. permitió la exportación de cifrados RC4 con una longitud de clave de hasta 40 bits. Las sucursales extranjeras de empresas estadounidenses pueden utilizar claves de 56 bits [4] .
El núcleo del algoritmo de cifrado de flujo consta de una función: un generador de bits pseudoaleatorios ( gamma ), que produce un flujo de bits clave (flujo de clave, gamma, secuencia de bits pseudoaleatorios).
algoritmo de cifrado.
.
algoritmo de descifrado.
RC4 es en realidad una clase de algoritmos definidos por el tamaño del bloque (en adelante S-box ). El parámetro n es la longitud de la palabra para el algoritmo y especifica la longitud del S-box . Por lo general, n = 8, pero para fines de análisis, puede reducirlo. Sin embargo, para mejorar la seguridad, debe aumentar este valor. No hay contradicción en el algoritmo para aumentar el tamaño del S-box . Con un aumento en n , digamos hasta 16 bits, los elementos en el S-box se convierten en 65.536 y, en consecuencia, se incrementará el tiempo de iteración inicial. Sin embargo, la velocidad de cifrado aumentará [5] .
El estado interno de RC4 se representa como una matriz de tamaño 2 n y dos contadores. La matriz se conoce como S-box y se denominará S. Siempre contiene una permutación de los 2n posibles significados de la palabra. Los dos contadores se denotan por iy j.
La inicialización de RC4 consta de dos partes:
El algoritmo también se conoce como "algoritmo de programación de claves" o "KSA". Este algoritmo utiliza una clave proporcionada por el usuario, almacenada en Keyy con una longitud de Lbytes. La inicialización comienza con el llenado de la matriz S, luego esta matriz se baraja mediante permutaciones determinadas por la clave. Dado que solo se realiza una acción en S, la afirmación debe sostener que Ssiempre contiene el mismo conjunto de valores que se dio en la inicialización inicial ( S[i] := i ).
para i de 0 a 255 S[i] := yo final para j := 0 para i de 0 a 255 j := ( j + S[i] + Tecla[ i mod L ] ) mod 256 // n = 8 ; 28 = 256 intercambiar S[i] y S[j] final paraEsta parte del algoritmo se denomina generador de secuencias pseudoaleatorias ( p seudor andom generation algorithm , PRGA ) . El generador de flujo de claves RC4 permuta los valores almacenados en . En un ciclo RC4, se determina una palabra de n bits del flujo de claves. En el futuro, se agregará la palabra clave módulo dos con el texto sin formato que el usuario desea cifrar y se obtiene el texto cifrado. SK
yo := 0 j := 0 bucle de generación while : yo := ( yo + 1 ) mod 256 j := ( j + S[i] ) mod 256 intercambiar S[i] y S[j] t := ( S[i] + S[j] ) mod 256 K := S[t] palabra K pseudoaleatoria generada (para n = 8 se generará un byte) endwhileA diferencia de los cifrados modernos (como eSTREAM ), RC4 no usa un nonce (del inglés nonce - "número que solo se puede usar una vez" - un número que solo se puede usar una vez) junto con la clave. Esto significa que si se va a usar una clave a lo largo del tiempo para cifrar múltiples flujos, el sistema criptográfico que usa RC4 debe combinar la clave de ocasión y la clave a largo plazo para producir una clave de flujo para RC4. Una posible solución es generar una nueva clave para RC4 utilizando una función hash de la clave a largo plazo y un nonce . Sin embargo, muchas aplicaciones que usan RC4 simplemente concatenan la clave y el nonce . Debido a esto y a la débil programación de claves utilizada en RC4, la aplicación puede volverse vulnerable [6] [7] [8] . Por lo tanto, ha quedado obsoleto por muchas empresas de software como Microsoft . Por ejemplo, .NET Framework de Microsoft carece de una implementación de RC4.
Aquí se considerarán algunos ataques al cifrado y los métodos de protección contra ellos.
En 1995, Andrew Roos observó experimentalmente que el primer byte del flujo de claves está correlacionado con los primeros tres bytes de la clave, y los primeros bytes de la permutación después del algoritmo de programación de claves ( ing . KSA ) están correlacionados con alguna combinación lineal . de bytes clave [9] . Estos sesgos no se probaron hasta 2007, cuando Paul, Rafi y Maitrae demostraron que la clave y el flujo de claves están correlacionados. Además, Paul y Maitre demostraron la correlación de la permutación y la clave. Este último trabajo también utiliza la correlación de permutación de clave para generar el primer algoritmo de recuperación de clave completo a partir de la última permutación después de KSA, sin hacer suposiciones sobre la clave y el vector de inicialización ( IV , vector inicial ) . Este algoritmo tiene una probabilidad de éxito constante a lo largo del tiempo, que es la raíz cuadrada de la complejidad de la fuerza bruta. Se ha trabajado mucho últimamente en recuperar la clave del estado interno de RC4.
En 2001, Fluhrer, Mantin y Shamir publicaron un artículo sobre la vulnerabilidad del programa clave RC4. Demostraron que los primeros bytes de un flujo de claves entre todas las claves posibles no son aleatorios. A partir de estos bytes, es posible con una alta probabilidad obtener información sobre la clave de cifrado utilizada. Y si una clave a largo plazo y un nonce simplemente se unen para crear una clave de cifrado RC4, esta clave a largo plazo se puede obtener analizando una cantidad suficientemente grande de mensajes cifrados con esta clave [10] . Esta vulnerabilidad y algunos efectos relacionados se aprovecharon para romper el cifrado WEP en redes inalámbricas IEEE 802.11 . Esto mostró la necesidad de reemplazar WEP lo antes posible , lo que condujo al desarrollo de un nuevo estándar de seguridad inalámbrica, WPA .
El criptosistema puede volverse inmune a este ataque descartando el comienzo del flujo de claves. Por lo tanto, el algoritmo modificado se llama "RC4-drop[n]", donde n es el número de bytes desde el comienzo del flujo de claves que se descartará. Se recomienda utilizar n = 768, una estimación conservadora es n = 3072[11] [12] .
El ataque se basa en la debilidad del vector de inicialización . Conociendo la primera palabra pseudoaleatoria Ky mlos bytes de la clave de entrada Key, utilizando una debilidad en el algoritmo de generación de palabras pseudoaleatorias K, se puede obtener m + 1el byte de la clave de entrada. Repitiendo los pasos se obtiene la clave completa. Al atacar WEP , n = 8 IVtiene la forma (B; 255; N), donde B - de 3 a 8, y Ncualquier número. Para determinar unas 60 variantes de N, se necesitarían unos 4 millones de paquetes para ser interceptados. [diez]
En 2005, Andreas Klein presentó un análisis del cifrado RC4 en el que señaló la fuerte correlación entre la clave y el flujo de claves RC4. Klein analizó los ataques en la primera ronda (similar al ataque PMS), en la segunda ronda y sus posibles mejoras. También sugirió algunos cambios en el algoritmo para mejorar la fuerza del cifrado. En particular, argumenta que si invierte la dirección del ciclo en el algoritmo de programación clave, puede hacer que el cifrado sea más resistente a ataques como FMS [1] .
En 2001, Adi Shamir e Itzhak Mantin fueron los primeros en plantear un problema combinatorio relacionado con el número de posibles entradas y salidas del cifrado RC4. Si de todos los 256 elementos posibles del estado interno del cifrado, se conocen xelementos del estado ( x ≤ 256), entonces, si asumimos que los elementos restantes son cero, el número máximo de elementos que puede obtener el algoritmo determinista en las próximas 256 rondas también es igual a x. En 2004 esta suposición fue probada por Souradyuti Paul y Bart Preneel [ 13 ] .
En el verano de 2015, Mathy Vanhoef y Frank Piessens de la Universidad de Lovaina en Bélgica demostraron un ataque real al protocolo TLS , que utiliza RC4 para cifrar los datos transmitidos [14] . La idea de hackear se basa en el principio MITM . Al incrustarse en un canal de transmisión de datos, el atacante genera una gran cantidad de solicitudes al servidor, obligándolo a devolver cookies en respuesta , encriptadas con la misma clave. Con aproximadamente 9x2 2 27 ~ 2 30 {texto simple, texto cifrado} a mano, el atacante pudo recuperar la clave y, por lo tanto, las cookies cifradas según los métodos estadísticos de Fluhrer-McGrew y ABSAB con una probabilidad del 94 %. El tiempo práctico empleado fue de unas 52 horas, mientras que la estimación superior del tiempo requerido en el momento de la demostración fue de unas 72 horas [15] .
Anteriormente, se consideraban ataques basados en la correlación de los primeros bytes del texto cifrado y la clave. Estas debilidades del algoritmo se pueden resolver descartando la parte inicial del texto cifrado [16] . Es seguro descartar los primeros 256, 512, 768 y 1024 bytes. Se llevaron a cabo estudios del comienzo del texto cifrado para mostrar la falta de fiabilidad de un cierto número de primeros bytes, lo que puede llevar a que un atacante obtenga una clave de cifrado. Se han propuesto varias modificaciones de RC4 que realizan la tarea de mejorar la seguridad al usar el algoritmo: RC4A, VMPC , RC4+.
En 2004 vio la luz el trabajo de Souradyuti Paul y Bart Preneel, que proponían una modificación del RC4A [17] .
Para RC4A, se utilizan dos cajas S en lugar de una, como en RC4, indicadas por S₁y S₂. Para ellos, se utilizan dos contadores, j₁respectivamente j₂. El contador i, como para RC4, se usa en singular para todo el algoritmo. El principio de ejecución del algoritmo sigue siendo el mismo, pero hay una serie de diferencias:
Algoritmo:
yo := 0 j₁ := 0 j₂ := 0 bucle de generación while : yo := yo + 1 j₁ := ( j₁ + S₁[i] ) mod 256 intercambiar S₁[i] y S₁[j₁] I₂ := ( S₁[i] + S₁[j₁] ) módulo 256 salida := S₂[I₂] j₂ = ( j₂ + S₂[i] ) módulo 256 intercambiar S₂[i] y S₂[j₂] I₁ = ( S₂[i] + S₂[j₂] ) módulo 256 salida := S₁[I₁] endwhileLa velocidad de cifrado de este algoritmo se puede aumentar mediante la paralelización .
En 2008, se desarrolló y propuso la modificación RC4+. Los autores Subhamoy Maitra y Goutam Paul modificaron la inicialización del S-box (KSA+) utilizando codificación de 3 niveles. Además, se modificó el algoritmo de generación de palabras pseudoaleatorias (PRGA+) [18] .
Algoritmo:
Todas las operaciones aritméticas se realizan mod 256. Los símbolos "<<" y ">>" denotan cambios de bit a la izquierda y la derecha, respectivamente. El símbolo "⊕" denota la operación " O exclusivo " mientras Ciclo de generación: yo := yo + 1 a := S[yo] j := j + un b := S[j] S[i] := b (intercambiado S[i] y S[j]) S[j] := un c := S[ i<<5 ⊕ j>>3 ] + S[ j<<5 ⊕ i>>3 ] salida ( S[a+b] + S[c⊕0xAA] ) ⊕ S[ j+b ] endwhileMuchos cifrados de flujo se basan en registros de desplazamiento de retroalimentación lineal ( LFSR ) . Esto hace posible lograr implementaciones de alta eficiencia del cifrado en forma de un circuito integrado (implementación de hardware), pero complica la implementación de software de dichos cifrados. Dado que el cifrado RC4 no usa LFSR y se basa en operaciones de bytes, es conveniente implementarlo en el software. Una implementación típica ejecuta de 8 a 16 instrucciones de máquina por byte de texto, por lo que una implementación de software del cifrado debería ser rápida [19] .
La palabra "(variable)" significa que RC4 es uno de varios algoritmos de cifrado que puede utilizar el sistema.
Criptosistemas simétricos | |
---|---|
Cifrados de flujo | |
Red Feistel | |
red SP | |
Otro |