Criptografía – Criptografía de Clave Secreta 3. RC4 El algoritmo RC4 (Rivest Cipher 4) es un algoritmo de cifrado en flujo, utilizado en protocolos de cifrado en comunicaciones como SSL y WEP. Fue desarrollado por Ronald Rivest en 1987, y mantenido en secreto hasta 1994. Es un algoritmo destacado por su simplicidad y rapidez en software, pero presenta debilidades que le impiden ser una opción para implementar en un sistema: en la clave existen patrones invariantes que se propagan también al estado interno del algoritmo, dando como resultado que los primeros bytes generados por RC4 son predecibles. Una segunda vulnerabilidad permite la recuperación de la clave secreta, cuando ésta se deriva de una concatenación con un vector inicial público (utilizado en WEP); al recopilar un gran número de mensajes y vectores iniciales la clave queda expuesta. Descripción RC4 genera un flujo pseudoaleatorio de bits a partir de la clave original, el cual se combina con el texto plano por medio de la operación lógica XOR (cifrado de Vernam). El descifrado es exactamente igual, debido a la simetría que presenta la operación binaria XOR. La obtención de la clave presenta dos módulos importantes, que son el corazón del algoritmo: un arreglo de 0016 a 𝐹𝐹16 permutado (llamado 𝑆), y dos índices de 8 bits (llamados 𝑖 y 𝑗). 2016 Se repiten los pasos 2.1 a 2.3 sucesivamente hasta 𝑧 = 255. Cifrado y descifrado Para obtener el texto cifrado de un texto plano se debe generar la clave a partir del arreglo 𝑆 permutado, que es un generador de claves pseudoaleatorio manejado por los índices 𝑖 y 𝑗. Dichos parámetros se ajustan en 𝑖 = 0 y 𝑗 = 0 con las operaciones de los siguientes pasos: 1. 𝑖 ← (𝑖 + 1) mod 256. 2. 𝑗 ← (𝑆[𝑖] + 𝑗) mod 256. 3. 𝑆[𝑖] ↔ 𝑆[𝑗]. El índice del elemento de la clave que cifrará es 𝑘𝑛 ← (𝑆[𝑖] + 𝑆[𝑗]) mod 256. Finalmente, se obtiene el texto cifrado aplicando la operación XOR: 𝑐[𝑛] = 𝑚[𝑛] ⊕ 𝑆[𝑘𝑛 ] k[n] i, j S S[kn] m[n] Generación de 𝑺 Para generar correctamente una clave RC4 es necesario obtener el arreglo de 256 bytes correctamente permutado. El algoritmo para las operaciones se describe a continuación: 1. Se construye el arreglo 𝑆 de 0016 a 𝐹𝐹16 . 2. Se parte con los parámetros 𝑥 = 0, 𝑦 = 0 y el contador 𝑧 = 0. Se sigue cada una de las operaciones a continuación descritas, tomando en consideración que el uso de cada variable atiende a la modificación dentro del mismo paso: 2.1. 𝑥 ← (𝑘[𝑦] + 𝑆[𝑧] + 𝑥) mod 256. 2.2. 𝑆[𝑧] ↔ 𝑆[𝑥]. 2.3. 𝑦 ← (𝑦 + 1) mod|𝑘|. donde 𝑘[𝑦] es un byte de la clave original, 𝑆[𝑧] es un byte del arreglo y |𝑘| es la longitud en bytes de la clave utilizada. 1 Ing. Aldo Jiménez Arteaga 00, 01, 02, … FF c[n] El algoritmo sigue el mismo proceso para descifrar un mensaje, pero la operación XOR se realiza entre la clave generada por el algoritmo y el texto cifrado: 𝑚[𝑛] = 𝑐[𝑛] ⊕ 𝑆[𝑘𝑛 ]