En criptografía , el ataque Fluhrer, Mantin y Shamir es un ataque de cifrado de flujo en el cifrado de flujo RC4 ampliamente utilizado . El ataque permite a un atacante recuperar la clave en un flujo cifrado RC4 de una gran cantidad de mensajes en ese flujo.
El ataque Fluhrer, Mantin y Shamir se aplica a métodos específicos de derivación de claves, pero no se aplica en general a SSL basado en RC4 (TLS) , ya que SSL genera las claves de cifrado que utiliza para RC4 mediante hash, lo que significa que diferentes sesiones SSL tienen claves no relacionadas. . [1] Sin embargo, el ataque de bar mitzvah estrechamente relacionado , basado en la misma investigación y revelado en 2015, explota aquellos casos en los que el proceso de codificación SSL genera claves débiles .
Fondo
El ataque Fluhrer , Mantin y Shamir (FMS), publicado en su artículo de 2001 "Debilidades en el algoritmo de programación de claves de RC4", [2] aprovecha una debilidad en el algoritmo de programación de claves RC4 para reconstruir la clave a partir de mensajes cifrados. El ataque FMS ganó popularidad en las herramientas de ataque de red, incluidas AirSnort , weplab y aircrack , que lo utilizan para recuperar la clave utilizada por las redes inalámbricas protegidas por WEP .
Esta discusión utilizará el siguiente algoritmo de programación de claves RC4 (KSA).
begin ksa (con int keylength, con byte key [keylength]) para i de 0 a 255 S [i]: = i fin de j: = 0 para i de 0 a 255 j: = (j + S [i] + tecla [i mod keylength]) mod 256 intercambio (S [i], S [j]) fin definal
También se utilizará el siguiente algoritmo de generación pseudoaleatoria (PRGA).
comenzar prga (con el byte S [256]) yo: = 0 j: = 0 mientras se genera la salida: yo: = (yo + 1) mod 256 j: = (j + S [i]) mod 256 intercambio (S [i], S [j]) salida S [(S [i] + S [j]) mod 256] terminar mientrasfinal
El ataque
La base del ataque FMS radica en el uso de vectores de inicialización (IV) débiles utilizados con RC4. RC4 cifra un byte a la vez con una salida de flujo de claves de prga () ; RC4 usa la clave para inicializar una máquina de estado a través de ksa () , y luego modifica continuamente el estado y genera un nuevo byte del flujo de claves a partir del nuevo estado. En teoría, el flujo de teclas funciona como un teclado aleatorio de una sola vez , ya que un generador de números pseudoaleatorios controla la salida en cada paso.
Con ciertos IV, un atacante que conoce el primer byte del flujo de claves y los primeros m bytes de la clave puede derivar el ( m + 1) ésimo byte de la clave debido a una debilidad en el PRNG utilizado para generar el flujo de claves. Debido a que el primer byte del texto sin formato proviene del encabezado WEP SNAP , un atacante puede asumir que puede derivar el primer byte del flujo de claves de B ⊕ 0x AA (el encabezado SNAP es casi siempre 0xAA). A partir de ahí, solo necesita un IV en la forma ( a + 3, n - 1, x ) para el índice de clave a igual a 0, el espacio de valor del elemento n igual a 256 (ya que 8 bits forman un byte) y cualquier x . Para empezar, el atacante necesita IV de (3, 255, x ). WEP utiliza IV de 24 bits, lo que hace que cada valor tenga una longitud de un byte.
Para empezar, el atacante utiliza el IV como los primeros 3 elementos en K []. Se llena la caja S S [] con valores secuenciales de 0 a n como RC4 hace cuando la inicialización de la caja S de una K conocido []. Luego realiza las primeras 3 iteraciones de ksa () para comenzar a inicializar el S-box.
Después del tercer paso, el atacante puede posiblemente, pero no definitivamente, derivar el cuarto byte de la clave usando la salida de flujo de claves O calculando (O - j - S [ i ]) mod n = K [ i ], con el valor i = 3 en este paso.
En este punto, el atacante aún no tiene el cuarto byte de la clave. Este algoritmo no regenera el siguiente byte de la clave; genera un posible valor de la clave. Al recopilar varios mensajes (por ejemplo, paquetes WEP) y repetir estos pasos, el atacante generará varios valores posibles diferentes. El valor correcto aparece con mucha más frecuencia que cualquier otro; el atacante puede determinar el valor de la clave reconociendo este valor y seleccionándolo como el siguiente byte. En este punto, puede comenzar el ataque de nuevo en el quinto byte de la clave.
Aunque el atacante no puede atacar palabras de la clave fuera de orden, puede almacenar mensajes para un ataque secuencial posterior a palabras posteriores una vez que conoce las palabras anteriores. Nuevamente, solo necesita mensajes con IV débiles y puede descartar otros. A través de este proceso, puede recopilar una gran cantidad de mensajes para atacar toda la clave; de hecho, sólo puede almacenar una pequeña parte del comienzo de esos mensajes, lo suficiente para llevar a cabo el ataque hasta donde la palabra de la clave que el IV le permita atacar.
Referencias
- ^ "Respuesta de seguridad RSA a debilidades en el algoritmo de programación clave de RC4" . Laboratorios RSA. 9 de septiembre de 2001.
- ^ Fluhrer, S., Mantin, I. y A. Shamir, " Debilidades en el algoritmo de programación clave de RC4 ", áreas seleccionadas de criptografía: SAC 2001, notas de la conferencia en informática vol. 2259, págs. 1-24, 2001.