1 de julio de 2020

(CC) Afsal / OpenIDEO

Por Javier Rodríguez (@bloguintosh) – No cabe duda de que el cifrado de datos es una de las capacidades más demandadas en la actualidad sobre todo tipo de dispositivos y comunicaciones. Después de todo, la cantidad de información que almacenamos y transmitimos es ciertamente sensible… ¡En todos los sentidos! Y entre los muchos algoritmos que podemos utilizar para ello nos encontramos con el RC4, diseñado por Ronald Rivest de la RSA Security en el año 1987, y que se ha utilizado tanto en el cifrado WEP o WAP de las comunicaciones inalámbricas como en el protocolo TLS/SSL (Transport Layer Security).

Sin embargo RC4 no destaca especialmente por tratarse del sistema criptográfico más robusto; emplea claves con un tamaño mínimo de 40 bits y un máximo de 2048 bits. Por un lado porque se trata de un algoritmo de clave simétrica: la misma clave que se utiliza para cifrar datos es la que se emplea para descifrar el bloque de datos a texto plano. Por otro porque en su concepción inicial se tuvo en consideración un factor clave sobre otros: la velocidad. De ahí, precisamente, que su uso se haya popularizado y continúe usándose en aplicaciones que demanden una cierta capacidad de codificación en tiempo real: microcontroladores, conexiones Bluetooth y un largo etcétera.

De hecho, y más allá de sus usos más conocidos, también se han desarrollado modos o variaciones para fortalecer precisamente sus puntos más débiles; empleando por ejemplo un poco de «sal» sobre la clave utilizada tanto en el cifrado como en la conversión a plano.

El origen del RC4 / ARC4 / ARCFOUR

El hecho de que el cifrado RC4 esté tan difundido también se debe a uno de esos capítulos peculiares de la comunidad, dado que fue en 1994 cuando Bob Anderson hizo pública la descripción del algoritmo en la lista de correo Cypherpunks y, como se suele decir, el resto fue historia. Bob demostró en su descripción la compatibilidad del algoritmo con el módulo objeto RC4 distribuido con los diversos toolkits proporcionados por la RSA. Sin embargo, aun después de hacerse público y mantener dicha compatibilidad había algo que no podía emplearse para no infringir la marca de RSA: su nombre. La solución fue tan sencilla como denominar a la versión apócrifa mediante el acrónimo ARC4 (Alleged RC4) o ARCFOUR.

Y si bien estamos de acuerdo con el hecho de que no destaca por su fortaleza de cifrado –hay quien mantiene que RSA tiene un as en la manga en este sentido, y de hecho aun hoy mantiene ARC4 como marca registrada– continúa tratándose de uno de los algoritmos de cifrado más utilizado hoy día, nuevamente, tanto por su velocidad como facilidad de implementación: el código necesario es sumamente fácil de memorizar, lo que significa que probablemente puedas implementarlo del tirón en cualquier lenguaje de programación que tengas a mano.

De hecho, en el artículo Cómo implementar el Algoritmo de Encriptación ARC4 en Xojo puedes encontrar una implementación rápida y eficiente como una clase de Xojo; lo que significa la capacidad de utilizarla en cualquiera de las aplicaciones nativas que quieras desarrollar tanto para plataformas de escritorio (macOS, Windows, Linux, Raspberry Pi), iOS o en aplicaciones Web, sin variar una coma. De hecho, en el proyecto de ejemplo que puedes descargar te permitirá utilizarlo y comprobar su funcionamiento por ti mismo.

¿Cómo funciona el algoritmo de cifrado ARC4?

(CC) Afsal / OpenIDEOA grandes rasgos, el algoritmo de cifrado ARC4 utiliza una caja de estado con una longitud de 256 bytes que se inicializa con una numeración consecutiva y posteriormente con una serie de operaciones matemáticas y permutaciones contando para ello con cada uno de los bytes correspondientes a la clave proporcionada. Este el agoritmo denominado Key Scheduling Algorithm o KSA.

Posteriormente, para la encriptación/desencriptado propiamente dicho de los datos se hace un XOR (OR exclusivo) sobre cada uno de los bytes del bloque de datos en combinación con un nuevo byte obtenido del keystream. ¿Y como se obtiene dicho valor? Aquí se emplea el algoritmo PRGA (Pseudo-Random Generation Algorithm), nuevamente basado en la permutación de los bytes en la caja de estado para hallar la posición cuyo valor se empleará finalmente, y para lo cual se utilizan dos contadores inicializados a cero que se irán incrementado en sucesivas iteraciones.

Referencias adicionales

Si estás interesado en criptografía más allá del algoritmo ARC4, hay dos libros muy recomendables que no deberían de faltar en tu biblioteca: Applied Cryptography y Cryptography Engineering, de Bruce Schneier; además en el propio módulo Crypto de Xojo encontrarás otra serie de algoritmos listos para usar como RSA, PBKDF2 o HMAC entre otros.

_____
Javier Rodríguez (@bloguintosh) es Ingeniero de Xojo, Inc. y propietario de AprendeXojo.com, el sitio web sobre programación con Xojo en Español.

{Ilustración (CC) Afsal cmk @ OpenIDEO}

Relacionado:

Compartir en Flipboard Publicar / Tuitear Publicar