Wednesday, 20 May 2009

Cifrado RC4

El RC4 es un algoritmo de cifrado en flujo creado en secreto por Ron Rivest en 1987 para su compañía RSA (Rivest-Shamir-Adleman). Es usado en varios productos comerciales como Lotus Notes, Secure Sockets Layer (SSL), RSA SecurPC, WatchGuard, etc.
En Septiembre de 1994 se posteó anónimamente en los Newsgroups una rutina que decía ser el RC4. Se probó contra una copia del RC4 y las pruebas indicaron que ambas rutinas actuaban de la misma forma, por lo que el RC4 ya no es un secreto. El RC4 tiene una clave de 2048 bits, lo que hace que el algoritmo sea rápido y seguro. Crea bytes aleatorios a partir de la clave y hace la operación XOR byte a byte con el archivo a cifrar.
Podemos encontrar la implementación del código en varios lenguajes de programación: Delphi, Java, .net y todos ellos libres. Aquí os dejo varios enlaces para descargaros el código fuente:
Delphi Cryptography o también Rivest Cipher 4 y Java RC4.

El diagrama del algoritmo, lo podemos encontrar en Wikipedia:

Encontrareis una buena explicación de éste en la Wikipedia, explicando la permutación de registros y como monta el cifrado.

Gracias a estos algoritmos de cifrado, podemos crear aplicaciones que lo implementen y crear mensajes bastante seguros combinando varias implementaciones de cifrados. En mi caso, por ejemplo, aquí os presento a Thundax Cript Text, una pequeña herramienta que crea mensajes cifrados mediante el cifrado RC4 y aplicando un hash SHA1 sobre la clave. De esta manera genero mensajes cifrados y muy seguros.

De esta manera, la frase "esto es una prueba" se cifra como "vRU4HmipBUiMU6qrIa6tu5ID" con una clave de 7 caracteres. El hecho de la clave genere un hash, provoca que el querer hacer un brute-force sobre este sea casi imposible.

Podéis descargar la aplicación en el siguiente enlace : Thundax Cript Text

Y aquí teneis un pequeño reto:

Encontrar la semilla del siguiente texto:

dbFsdljNAZxRzN1WHXZ4XbZ/yk82QDJ+F2GfO6xx1OASdP1DhjFObLX1xPfIBOoOF/V+qQ==
IJMOB8y2KlOrJYZJ1kngKzBw4k0ky6atojw=

Notas, la semilla como he comentado antes, pasa por un hash SHA1, y luego se encripta el texto con un cifrado RC4, la semilla no tiene más de 10 carácteres y el charset es "A-Za-z".


  • Enlaces de interés:
http://java.ittoolbox.com/code/d.asp?d=2828&a=s
http://edipermadi.wordpress.com/2009/01/02/fast-rc4-stream-cipher-implementation-on-avr/

0 comments:

Post a Comment