You are on page 1of 4

RC4

Diagrama del algoritmo RC4.

Dentro de la criptografa RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher ms utilizado y se usa en algunos de los protocolos ms populares como Transport Layer Security (TLS/SSL) (para proteger el trfico de Internet) y Wired Equivalent Privacy (WEP) (para aadir seguridad en las redes inalmbricas). RC4 fue excluido enseguida de los estndares de alta seguridad por los criptgrafos y algunos modos de usar el algoritmo de criptografa RC4 lo han llevado a ser un sistema de criptografa muy inseguro, incluyendo su uso WEP. No est recomendado su uso en los nuevos sistemas, sin embargo, algunos sistemas basados en RC4 son lo suficientemente seguros para un uso comn.
ndice
[ocultar]

1 Historia

1.1 Descripcin

2 Test vectors 3 Referencias

Historia[editar]
El algoritmo de criptografa RC4 fue diseado por Ron Rivest de la RSA Security en el ao 1987; su nombre completo es Rivest Cipher 4, teniendo el acrnimo RC un significado alternativo al de Ron's Code utilizado para los algoritmos de cifrado RC2, RC5 y RC6. Inicialmente el algoritmo era un secreto registrado, pero en septiembre de 1994 una descripcin del algoritmo fue posteada annimanente en una lista de correo de Cypherpunks.[cita requerida] Enseguida pas al grupo de correo sci.crypt y de ah fue publicado en numerosos sitios de Internet. Debido al conocimiento del algoritmo, ste dej de ser un secreto registrado. Sin embargo RC4 an es una marca registrada.[cita requerida] Actualmente la implementacin no oficial de RC4 es legal, no puede ser utilizada con el nombre de RC4. Por este motivo, y con el fin de evitar problemas legales a raz de la marca registrada, a menudo podemos verlo nombrado como ARCFOUR, ARC4 o Alleged-RC4. RSA Security nunca ha liberado el algoritmo de su RC4. RC4 es parte de los protocolos de cifrado ms comunes como WEP, WPA para tarjetas wireless y TLS. Entre los factores principales que han ayudado a que RC4 est en un rango tan amplio de

aplicaciones son su increble velocidad y simplicidad. La implementacin tanto en software como en hardware es muy sencilla de desarrollar y son muy pocos los recursos necesarios para obtener un rendimiento eficiente de ARC4.

Descripcin[editar]
RC4 es un un algoritmo sorprendentemente simple. Este consiste en 2 algoritmos: 1-Key Scheduling Algorithm (KSA) y 2- Pseudo-Random Generation Algorithm (PRGA). Ambos de estos algoritmos usan 8-by-8 S-box, el cual es solo un array de 256 nmeros en el cual ambos son nicos en cuanto a rango y su valor va desde 0 hasta 255. Todos los nmeros de 0 a 255 existen dentro del array, pero estn solo mezclados de diferentes maneras, el KSA se encarga de realizar la primera mezcla en el S-Box, basado en el valor de la semilla dada dentro de l, y esta "semilla" puede ser de 256 bits de largo. Primero, el S-box array es llenado con valores secuenciales desde 0-255. Este array ser llamado simplemente S. Entonces, el otro array de 256-bits es llenado con el valor de la "semilla", repitiendo como sea necesario hasta que todo el array es llenado. Este array ser llamado K, entonces el array S es mezclado usando el siguiente pseudocdigo.

j=0; for i = 0 to 255 { j = (j+S[i] + K[i]) mod 256; intercambia S[i] and S[j]; }

Una vez que eso es hecho, la S-box es intercambiada basndose en el valor de la "semilla". Esa es la "Key" programada para el algoritmo, algo sencillo. Ahora cuando se necesita el keystream data, se usa el Pseudo-Random Generation Algorithm (PRGA). Este algoritmo tiene 2 contadores, el i y la j, en el cual ambos son inicializados en 0 para comenzar. Despus de eso, cada bit de keystream data es usado en el siguiente Pseudo-Code:

i = (i + 1) mod 256; j = (j + S[i]) mod 256; intercambia S[i] and S[j]; t = (S[i] + S[j]) mod 256; Exponer valor de S[t];

El valor expuesto del byte de S[t] es el primer byte del keystream, repitindose el algoritmo descrito para conseguir bytes adicionales de keystream.

RC4 es lo suficientemente sencillo como para ser almacenado e implementado al vuelo, aunque la robustez de dicho algoritmo depende, en gran medida, de la implementacin y utilizacin realizada, existiendo graves problemas conocidos en la implementacin del sistema de cifrado WEP, diseado para ofrecer confidencialidad en redes Wireless. Una posible implementacin en C: unsigned char S[256]; unsigned int i, j; void swap(unsigned char *s, unsigned int i, unsigned int j) { unsigned char temp = s[i]; s[i] = s[j]; s[j] = temp; } /* KSA */ void rc4_init(unsigned char *key, unsigned int key_length) { for (i = 0; i < 256; i++) S[i] = i; for (i = j = 0; i < 256; i++) { j = (j + key[i % key_length] + S[i]) & 255; swap(S, i, j); } i = j = 0; } /* PRGA */ unsigned char rc4_output() { i = (i + 1) & 255; j = (j + S[i]) & 255; swap(S, i, j); return S[(S[i] + S[j]) & 255]; } #include <stdio.h> #include <string.h> #include <stdlib.h> #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) int main() { unsigned char *test_vectors[][2] = {

{"Key", "Plaintext"}, {"Wiki", "pedia"}, {"Secret", "Attack at dawn"} }; int x; for (x = 0; x < ARRAY_SIZE(test_vectors); x++) { int y; rc4_init(test_vectors[x][0], strlen((char*)test_vectors[x][0])); for (y = 0; y < strlen((char*)test_vectors[x][1]); y++) printf("%02X", test_vectors[x][1][y] ^ rc4_output()); printf("\n"); } getch(); return 0; }

Test vectors[editar]
Esta prueba no es oficial, pero resulta adecuada para alguien probando su propio programa RC4. Las llaves y el texto en claro estn enASCII, el texto cifrado est en hexadecimal

Clave

Keystream

Mensaje

Texto cifrado

Key

eb9f7781b734ca72a719... Plaintext

BBF316E8D940AF0AD3

Wiki

6044db6d41b7...

pedia

1021BF0420

Secret 04d46b053ca87b59...

Attack at dawn

45A01F645FC35B383552544B9BF5

You might also like