En una próxima entrada les copio el capítulo de análisis de seguridad del protocolo. Y la historia comienza más o menos así…
1 - El sistema de cifrado WEP
El protocolo WEP nace en 1999 como parte del estándar IEEE 802.11. Su objetivo es cifrar los datos que viajan a través de los nodos de una red inalámbrica para garantizar la privacidad de los mismos. Tomando en cuenta que una red Wi-Fi utiliza el aire como medio de transmisión de datos, es importante que la información que viaje por la misma sea correctamente encriptada debido a que las ondas de radio pueden rebasar los límites de los edificios donde la red es utilizada.
El protocolo WEP fue concebido con la idea de proporcionar un nivel de seguridad equivalente al de una red cableada; y de ahí tiene origen su nombre: Wired Equivalent Privacy o Privacidad Equivalente a una Red Cableada. Pero la realidad es que 4 años antes de su salida ya habían sido descubiertas ciertas vulnerabilidades en el algoritmo RC4, uno de los utilizados en el proceso de encriptación WEP. Más tarde, para el año 2000, aparecía la primera publicación sobre las debilidades descubiertas en WEP y, finalmente en el 2004, se ponía a disposición de los usuarios herramientas gratuitas para vulnerar una red encriptada por WEP. Actualmente WEP es un protocolo que debe considerarse obsoleto y debería evitarse su uso bajo cualquier circunstancia. Es probable que el poco éxito y eficacia proporcionada por WEP se deba a que este no ha sido un protocolo diseñado por expertos en seguridad o criptografía y a que unos de sus pilares, el algoritmo RC4, poseía ya potenciales vulnerabilidades descubiertas años atrás.
1.1 - Funcionamiento
El protocolo WEP se basa en dos componentes o algoritmos para cifrar los paquetes que van a circular por la red inalámbrica. El primero de ellos es el CRC o Código de Redundancia Cíclica el cual genera una cantidad fija de bits adicionales para añadir al paquete original con el objetivo de ayudar al receptor a comprobar que los datos que recibe sean los mismos que los enviados. Esta secuencia de bits generados por el algoritmo recibe el nombre de cifra CRC. El otro algoritmo es el RC4, y estará encargado de generar una secuencia pseudo aleatoria de bits que se utilizará para combinar con el contenido de un paquete mediante alguna operación lógica, de manera que no sea posible descifrar el contenido de ese paquete sin la posesión la secuencia generada. Ambos algoritmos serán abordados en las secciones correspondientes de este texto.
El principio del funcionamiento de WEP está en la operación lógica XOR u o exclusivo. La operación XOR es un tipo de disyunción lógica entre dos operandos que resulta en un valor verdadero o uno si y solo si uno de esos dos operando vale uno. Esta operación presenta la propiedad que si aplicamos dos veces XOR a un valor, se vuelve a obtener el valor original. Por ejemplo, teniendo un valor A y calculando A XOR B = C, tendremos entonces que A XOR B XOR B será igual a A.
Teniendo en cuenta lo antedicho, es posible que, si dos nodos de una red inalámbrica conocen un valor B secreto y se quiere transmitir una secuencia de bits A, aplicar la operación A XOR B obteniendo un flujo de datos C encriptado, el cual solo puede ser decodificado por aquellos que conocen el valor de B. En este sentido es posible ver a B como una contraseña secreta que deben conocer y compartir todos los nodos que quieran intercambiar mensajes de manera segura entre sí.
El problema de esta metodología es que al utilizar siempre la misma contraseña B es posible para alguien, que eventualmente pueda interceptar los mensajes, utilizar métodos matemáticos y estadísticos para ir descubriendo los bits que conforman esta secuencia. Una posible solución a esto sería que todos los nodos generen de manera aleatoria una secuencia B para cada paquete a transmitir y que, por supuesto, todos los nodos de la red generen esa misma secuencia en el mismo momento. Existen algoritmos que, al recibir siempre el mismo flujo de bits como entrada, producen un mismo flujo de salida en nodos diferentes de la red, como por ejemplo el algoritmo RC4 anteriormente mencionado.
WEP se basa en todos estos conceptos utilizando el algoritmo RC4 como generador de la clave B. Para generar la misma secuencia B en el nodo emisor y receptor del mensaje, el mecanismo WEP propone el uso de una clave estática conocida por todos los componentes de la red con una longitud de 104 bits (o 40 bits para claves más cortas) definida por el usuario administrador de la red. Esta clave estática se concatenará con una clave dinámica (IV) elegida pseudo aleatoriamente por el nodo emisor, con una longitud de 24 bits en todos los casos, y enviada en el paquete WEP sin encriptación alguna. La secuencia de bits obtenida por la concatenación de la clave estática definida por el usuario en adición a la clave dinámica establecida por el nodo emisor, le servirán al algoritmo RC4 como parámetro de entrada para el cálculo de un flujo de salida utilizado posteriormente en la operación XOR, dando como resultado el cifrado completo del mensaje a transmitir. Este parámetro de entrada utilizado por el RC4 es comúnmente llamado semilla o seed en inglés. El emisor por su parte podrá generar la misma salida RC4 o keystream debido a que posee la misma clave estática que el emisor y además puede obtener la clave dinámica del paquete WEP enviado por el emisor pudiendo así generar la misma semilla utilizada para cifrar el mensaje. Al obtener el mismo keystream utilizado para encriptar, será posible finalmente para el receptor, recuperar el mensaje original aplicando la operación XOR entre el keystream y el mensaje recibido, como se explicó anteriormente. La secuencia de pasos utilizados por el mecanismo de encriptación WEP para transformar un flujo de datos en texto cifrado añadiendo cifras CRC se realiza como se describe en el siguiente gráfico:

En el cuál el paquete a transmitir desde un nodo emisor hasta un nodo receptor se compondrá, en una vista más detallada, de:

En donde:
- Cabecera 802.11: contendrá información relativa al tipo de paquete, las direcciones MAC del emisor y receptor del mensaje y determinada información de sincronismo.
- Vector de inicialización (IV): es la clave dinámica generada por el emisor y utilizada para concatenar con la clave estática dando origen a la semilla RC4. Como se puede observar esta secuencia de bits crítica para preservar correctamente la privacidad de los datos viaja por la red sin ningún tipo de cifrado.
- Datos encriptados: el mensaje que se desea transmitir de manera segura desde un nodo emisor a un nodo receptor.
- CRC encriptado: código de redundancia cíclica correspondiente al mensaje que se va a transmitir.
- CRC del paquete: código de redundancia cíclica correspondiente al paquete completo.
1.2 - El Código de Redundancia Cíclica o CRC
Un CRC es un tipo de función que acepta parámetros de cualquier longitud y devuelve siempre una salida de longitud fija. Como se ha mencionado, se utiliza para que el receptor de un paquete pueda detectar una posible alteración accidental del contenido del mismo durante la transmisión. CRC resulta actualmente como el método más eficiente de comunicación digital en materia de detección de errores, aunque el algoritmo no permita la corrección de un eventual error aparecido durante la transmisión.
Suponiendo que se desea transmitir un paquete M de datos con una longitud de K bits; el objetivo del algoritmo CRC será crear una secuencia de bits F con longitud N para añadir a M para su posterior transmisión. A la unión de las secuencias M y F la llamaremos T y tendrá una longitud de K+N a fines de simplificar este ejemplo. La secuencia de bits F o bits de redundancia se generarán de forma que T sea exactamente divisible por un patrón fijo de bits P llamado polinomio CRC o polinomio generador. Tanto el emisor como el receptor tendrán fijado el valor de P, por lo que el receptor de un mensaje deberá verificar que la secuencia T recibida sea divisible por la secuencia P; en caso que no lo sea significa que existió un error en la transmisión.
Tanto el proceso del cálculo de la secuencia F, como la revisión por el receptor, requieren pocos pasos y son muy sencillos de implementar tanto en hardware como en software por lo que prácticamente no le quitan eficiencia al protocolo WEP.
Para calcular F el emisor deberá:
- Obtener la secuencia de bits a transmitir M.
- Añadir a la secuencia M la cantidad de G bits 0 a la derecha, siendo G la cantidad de bits que contiene el polinomio CRC menos 1.
- Dividir lo obtenido en el paso anterior por P.
- El resto de la división binaria será F.
- Añadir F a M y transmitir el paquete.
Por otro lado el receptor al recibir el paquete podrá comprobar su validez realizando las siguientes operaciones:
- Recibir el paquete.
- Dividir la secuencia recibida por el patrón o polinomio P.
- Si el resto de la división anterior es cero, el paquete ha sido correctamente transmitido.
Particularmente, la secuencia de bits P utilizada por el protocolo WEP, es empleada y aprobada por el comité de estándares IEEE 802 y utilizada por el Departamento de Defensa de los Estados Unidos debido a la protección extra que ofrece frente a otro tipo de secuencias. La secuencia dispone de 32 bits siendo estos 11101101101110001000001100100000 en representación binaria o EDB88320 en representación hexadecimal.
1.3 - El algoritmo RC4
Dentro del ámbito de la criptografía (ciencia encargada de cifrar y descifrar información mediante técnicas matemáticas de modo que los mensajes que se transmiten solo puedan ser leídos por aquellos a quienes van dirigidos), el algoritmo RC4 es el más utilizado pese a estar actualmente excluido de los estándares de seguridad por los criptógrafos. Diseñado en el año 1987 por Ron Rivest, RC4 fue un secreto registrado hasta 1994, año en el cual una descripción del funcionamiento del algoritmo fue publicada clandestinamente en una lista de correo. Un año más tarde, en 1995, la primera vulnerabilidad potencial era descubierta y a partir de entonces no se recomienda el uso del algoritmo en nuevos sistemas.
La forma de trabajo del algoritmo es muy sencilla y se divide en dos partes bien diferenciadas: en una primera parte, llamada KSA, el algoritmo desordena una secuencia de números consecutivos inicialmente ordenados. En esta fase es donde se utiliza la clave WEP compuesta por el vector de inicialización junto a la clave estática definida por el usuario. Existen en total una gran cantidad de posibilidades de ordenamiento de 256 números diferentes; más precisamente se podrán obtener 256 factorial (256!) combinaciones correspondientes a las permutaciones de los 256 elementos. La clave WEP completa influirá directamente en cómo estos números son ordenados debido a que la posición en la que quedará un número determinado será dependiente de los distintos caracteres de la clave, a los cuales se les aplicarán operaciones MOD (resto de la división) y sumas para determinar dicha posición.
En la segunda parte, denominada fase PRGA, es donde se genera una secuencia de números pseudo aleatorios a los cuales el protocolo WEP le aplicará la operación XOR con el mensaje que se desea encriptar, como se detallo en secciones anteriores. En esta última fase se utilizará la secuencia de números desordenados en la etapa KSA a los cuales se les aplicarán nuevamente operaciones MOD y sumas para ir calculando los diferentes bytes que compondrán el keystream utilizado para encriptar el mensaje.
Sobre el artículo y aclaraciones
La licencia de este artículo la puedes ver aquí.