A pesar de que WEP fue reemplazado hace años, todavía existen redes que lo usan o que mantienen configuraciones mixtas para dispositivos antiguos. Este artículo explica en profundidad cómo funciona el algoritmo RC4 dentro de WEP y por qué sus características específicas hacen posible recuperar la clave de la red sin necesidad de fuerza bruta.
1. RC4 en WEP: visión general
RC4 es un cifrador en flujo: no cifra bloques de datos fijos sino que genera un flujo continuo de bytes pseudoaleatorios (el keystream) que se combina con los datos originales mediante XOR para obtener el texto cifrado.
En WEP, la clave de entrada para RC4 se forma así:
Clave RC4 = IV (24 bits) + Clave WEP (40 o 104 bits)
El IV es diferente en cada paquete (en teoría) y viaja en claro en la cabecera. La seguridad de RC4 depende de que la clave sea única por paquete. En WEP esto no se garantiza, lo que abre la puerta a los ataques estadísticos.
2. Las dos fases de RC4: KSA y PRGA
RC4 funciona en dos etapas claramente diferenciadas:
- KSA (Key Scheduling Algorithm): inicializa y mezcla el estado interno S usando la clave.
- PRGA (Pseudo Random Generation Algorithm): genera el keystream byte a byte a partir del estado S.
El estado interno S es una tabla de permutación de 256 bytes (valores de 0 a 255) que se mezcla durante la KSA y luego se actualiza en cada paso de la PRGA.
3. Ejemplo paso a paso de la KSA (simplificado)
Para hacerlo comprensible, usaremos un espacio reducido de 8 posiciones (módulo 8) con valores ficticios. En el algoritmo real se trabaja con 256 posiciones. Este ejemplo sigue fielmente la lógica real del algoritmo.
Datos iniciales
IV = (1, 9, 3)
Clave WEP = (4, 6)
Clave RC4 = (1, 9, 3, 4, 6) ← concatenación de IV + Clave WEP
Estado S = [0, 1, 2, 3, 4, 5, 6, 7]
j inicial = 0
Módulo = 8 (simplificado; en real es módulo 256)
Fórmula de actualización en cada paso
j = (j + S[i] + key[i mod longitud_clave]) mod 8
intercambiar S[i] ↔ S[j]
Progresión de la KSA
| i | j (antes) | key[i mod 5] | S[i] | j (calculado) | Swap | S resultante |
|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 1 | S[0]↔S[1] | [1,0,2,3,4,5,6,7] |
| 1 | 1 | 9 | 0 | 2 | S[1]↔S[2] | [1,2,0,3,4,5,6,7] |
| 2 | 2 | 3 | 0 | 5 | S[2]↔S[5] | [1,2,5,3,4,0,6,7] |
| 3 | 5 | 4 | 3 | 4 | S[3]↔S[4] | [1,2,5,4,3,0,6,7] |
| 4 | 4 | 6 | 3 | 5 | S[4]↔S[5] | [1,2,5,4,0,3,6,7] |
| 5 | 5 | 1 | 3 | 1 | S[5]↔S[1] | [1,3,5,4,0,2,6,7] |
| 6 | 1 | 9 | 6 | 0 | S[6]↔S[0] | [6,3,5,4,0,2,1,7] |
| 7 | 0 | 3 | 7 | 2 | S[7]↔S[2] | [6,3,7,4,0,2,1,5] |
El resultado final de la KSA es S = [6, 3, 7, 4, 0, 2, 1, 5].
Este estado permutado es la base sobre la que la PRGA generará el keystream byte a byte.
4. Ejemplo de cifrado con XOR
Supongamos que la PRGA genera el siguiente keystream:
Keystream : 63740215
Plaintext : 12378455
─────────────────────────
Ciphertext : 71434640 ← resultado del XOR bit a bit
El receptor, que conoce la clave WEP y recibe el IV en la cabecera del paquete, reconstruye exactamente el mismo keystream y aplica XOR al ciphertext para recuperar el plaintext original.
5. Por qué RC4 en WEP es vulnerable
5.1. IVs de 24 bits: repeticiones inevitables
Con solo 2²⁴ = 16,7 millones de IVs posibles y redes con tráfico alto, los IVs se repiten en pocas horas. Cuando dos paquetes usan el mismo IV, el keystream es idéntico y se puede obtener:
C1 XOR C2 = P1 XOR P2
Esta igualdad filtra información sobre el contenido de ambos paquetes.
5.2. IVs débiles: filtración directa de la clave
Algunos IVs concretos provocan sesgos estadísticos en RC4 que permiten deducir bytes de la clave WEP directamente. Los ataques FMS y KoreK explotan exactamente este comportamiento.
5.3. Clave estática sin renovación
La clave WEP nunca cambia automáticamente. Cada paquete capturado aporta información adicional sobre la misma clave, por lo que con suficientes paquetes el análisis estadístico se vuelve determinante.
6. Los tres ataques principales: FMS, KoreK y PTW
⚔️ Ataque FMS
Explota los IVs débiles que filtran información directa de la clave. Requiere un número grande de paquetes capturados. Recupera la clave byte a byte mediante análisis estadístico.
⚔️ Ataques KoreK
Reducen drásticamente los paquetes necesarios. Aprovechan múltiples sesgos simultáneos del algoritmo RC4, combinando métodos estadísticos para aumentar la precisión.
⚔️ Ataque PTW
El más eficiente: necesita menos paquetes que FMS o KoreK, no requiere reinyección masiva de tráfico y aprovecha la estructura predecible de paquetes ARP.
aircrack-ng archivo.cap
que ejecuta el ataque PTW automáticamente sobre un archivo de captura con el número mínimo
de paquetes requerido. En redes con tráfico normal, la clave WEP puede recuperarse
en cuestión de minutos.
7. Modos mixtos y ataques de downgrade
Aunque muchos routers modernos ya no ofrecen WEP, algunos mantienen modos mixtos (WEP + WPA, WPA-TKIP + WPA2-CCMP) para compatibilidad con dispositivos antiguos. El problema es que el AP acepta siempre el protocolo más débil que soporte el cliente:
- Si un dispositivo antiguo solo soporta WEP, el AP habilita WEP para ese cliente.
- El tráfico de ese cliente se cifra con WEP, independientemente de que otros usen WPA2.
- Un atacante captura ese tráfico WEP y rompe la clave, obteniendo acceso a la red.
Este riesgo afecta a toda la red, no solo al dispositivo antiguo. La solución es segmentar la red o eliminar completamente el soporte de protocolos heredados.
Conclusión
RC4 es inseguro por diseño, y su uso en WEP agrava todas sus debilidades: IVs pequeños y repetibles, clave estática, sesgos estadísticos en los primeros bytes del keystream y ningún mecanismo real de integridad. La combinación de estos factores permite recuperar la clave de cualquier red WEP en minutos mediante análisis estadístico puro, sin diccionarios ni fuerza bruta.
WPA solucionó estas debilidades eliminando el uso directo de RC4 con claves estáticas e introduciendo derivación de claves por paquete (TKIP) y posteriormente AES-CCMP (WPA2), que resuelve el problema de raíz usando un cifrador de bloque completamente distinto.