Diferencia entre revisiones de «RC4»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Diegusjaimes (discusión · contribs.)
m Revertidos los cambios de 201.246.24.123 a la última edición de 190.161.140.39
Línea 48: Línea 48:
f := 0;
f := 0;
function genera_t()
function genera_t()
i := (i + 1) mod 256;jajaj
i := (i + 1) mod 256;
f := (f + s[i]) mod 256;
f := (f + s[i]) mod 256;
''swap''(S[i],S[f]);
''swap''(S[i],S[f]);

Revisión del 21:45 4 jul 2009

Diagrama del algoritmo RC4

Dentro de la criptografía RC4 o ARC4 es el sistema de cifrado de flujo Stream cipher más utilizado y se usa en algunos de los protocolos más populares como Transport Layer Security (TLS/SSL) (para proteger el tráfico de Internet) y Wired Equivalent Privacy (WEP) (para añadir seguridad en las redes inalámbricas). RC4 fue excluido enseguida de los estándares de alta seguridad por los criptógrafos y algunos modos de usar el algoritmo de criptografía RC4 lo han llevado a ser un sistema de criptografía 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 común.

Historia

El algoritmo de criptografía RC4 fue diseñado por Ron Rivest de la RSA Security en el año 1987; su nombre completo es Rivest Cipher 4, teniendo el acrónimo 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 descripción del algoritmo fue posteada anónimanente en una lista de correo de Cypherpunks. En seguida pasó al grupo de correo sci.crypt y de ahí fue publicado en númerosos sitos de Internet. Debido al conocimiento del algoritmo, éste dejó de ser un secreto registrado. Sin embargo RC4 aún es una marca registrada. Actualmente la implementación no oficial de RC4 es legal, pero no puede ser utilizada con el nombre de RC4. Por este motivo, y con el fin de evitar problemas legales a raíz 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 más 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 increíble velocidad y simplicidad. La implementación 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.

Descripción

RC4 genera un flujo pseudoaleatorio de bits (un keystream) que, para cifrar, se combina con el texto plano usando la función XOR como en cualquier Cifrado Vernam. La fase de descifrar el mensaje se realiza del mismo modo.

Para generar el keystream, el algoritmo de cifrado tiene un estado interno secreto que consiste en,

  1. Una permutación de todos los 256 posibles símbolos de un byte de longitud (lo llamaremos "S")
  2. Dos índices-apuntadores de 8 bits (los llamaremos "i" y "j")

La permutación se inicializa con una clave de longitud variable, habitualmente entre 40 y 256 bits usando un algoritmo de programación de claves (Key scheduling algorithm o KSA). Una vez completado, el flujo de bits cifrados se genera usando un algoritmo de generación pseudoaleatoria (pseudo-random generation algorithm o PRGA).

Algoritmo de programación de claves (KSA)

El key-scheduling algorithm se usa para inicializar la permutación del array "S". "l" se define como el número de bytes de la clave y puede estar en el rango 1 ≤ l ≤ 256, típicamente entre 5 y 16, valores correspondientes a un tamaño de clave de entre 40 y 128 bits. Primero, el array "S" se inicia a la permutación identidad. "S" es entonces procesado por 256 iteraciones similares para el algoritmo principal PRGA, pero mezclándola con bytes de la clave al mismo tiempo.


Implementación

- Inicialización del algoritmo RC4:

 for i = 0 to 255
     S[i] := i
 j := 0
 for i = 0 to 255
     j := (j + S[i] + key[i mod tamañodelaclave]) mod 256
     swap(S[i],S[j])


- Ahora, siendo M la cadena original y C la cadena cifrada (ambas en código ASCII) procedemos de la siguiente forma:

  for j = 0 to tamaño_de_M
        a := M[j];
        t := genera_t();
        b := S[t];
        C[j] := (a XOR b) mod 256;


- Donde genera_t() es una función que tiene la siguiente forma:

   i := 0;
   f := 0;
   function  genera_t()
         i := (i + 1) mod 256;
         f := (f + s[i]) mod 256;
         swap(S[i],S[f]);
         return (s[i] + s[f]) mod 256;


-Y donde swap(a,b) es una función que intercambia los valores de las variables a y b.



Codigo en ASM