robot de la enciclopedia para niños

RC4 para niños

Enciclopedia para niños
Archivo:RC4
Diagrama del algoritmo RC4.

En el mundo de la criptografía, que es el arte de escribir mensajes secretos, RC4 o ARC4 es un sistema de cifrado de flujo muy conocido. Se usó en protocolos importantes como Transport Layer Security (TLS/SSL), que ayuda a proteger la información que viaja por Internet, y Wired Equivalent Privacy (WEP), que añadía seguridad a las redes inalámbricas. Aunque RC4 fue muy usado, los expertos en seguridad descubrieron que algunas formas de usarlo, especialmente con WEP, no eran tan seguras. Por eso, hoy en día no se recomienda usar RC4 para proyectos nuevos, aunque algunas de sus aplicaciones aún son seguras para el uso diario.

Historia de RC4: ¿Cómo surgió este sistema de cifrado?

El sistema de cifrado RC4 fue creado por Ronald Rivest, de la empresa RSA Security, en el año 1987. Su nombre completo es Rivest Cipher 4. Las letras "RC" también se usaron para otros sistemas de cifrado de Rivest, como RC2, RC5 y RC6.

¿Cómo se hizo público el secreto de RC4?

Al principio, el algoritmo de RC4 era un secreto de la empresa. Pero en septiembre de 1994, una descripción de cómo funcionaba se compartió de forma anónima en una lista de correos. Rápidamente, se difundió por Internet y dejó de ser un secreto. Aunque ya no era secreto, RC4 sigue siendo una marca registrada. Por eso, las versiones no oficiales de RC4 a menudo se llaman ARCFOUR o ARC4, para evitar problemas legales. RSA Security nunca ha hecho público el algoritmo de forma oficial.

¿Por qué RC4 fue tan popular?

RC4 se convirtió en parte de muchos protocolos de seguridad, como WEP, TLS y WPA, que se usan en las tarjetas de red inalámbricas. Las razones principales de su éxito fueron su gran velocidad y su sencillez. Era muy fácil de implementar tanto en programas de computadora (software) como en dispositivos electrónicos (hardware).

¿Cómo funciona RC4? Una explicación sencilla

RC4 es un sistema bastante simple que usa dos partes principales:

  • El Algoritmo de Programación de Claves (KSA, por sus siglas en inglés).
  • El Algoritmo de Generación Pseudoaleatoria (PRGA, por sus siglas en inglés).

Ambos usan un "estado interno secreto", que es como una caja especial llamada S-box. Esta S-box es una lista de 256 números (bytes) que están mezclados, y también usa dos contadores de 8 bits, llamados "i" y "j". El KSA se encarga de mezclar los números en la S-box usando una clave secreta que puede tener diferentes longitudes.

Pasos del Algoritmo de Programación de Claves (KSA)

Primero, la S-box se llena con los números del 0 al 255 en orden. Luego, se procesa 256 veces para mezclarlos, usando partes de la clave secreta. Imagina que es como barajar una baraja de cartas, pero de una manera muy específica.

Aquí te mostramos cómo se vería en un lenguaje de programación sencillo:

Para cada número desde 0 hasta 255:
    Pon ese número en la posición actual de la S-box.

Pon el contador 'j' en 0.
Para cada número desde 0 hasta 255:
    Calcula 'j' usando el valor actual de 'j', el número en la S-box y un pedazo de la clave secreta.
    Intercambia los números en la S-box en las posiciones 'i' y 'j'.

Una vez que esto se hace, la S-box queda mezclada según la clave secreta.

Pasos del Algoritmo de Generación Pseudoaleatoria (PRGA)

Cuando se necesita generar la secuencia de números aleatorios para cifrar o descifrar, se usa el PRGA. Este algoritmo también tiene dos contadores, 'i' y 'j', que empiezan en 0. Luego, para cada número que se necesita, se siguen estos pasos:

Aumenta 'i' en 1.
Calcula 'j' usando el valor actual de 'j' y el número en la S-box en la posición 'i'.
Intercambia los números en la S-box en las posiciones 'i' y 'j'.
Calcula 't' sumando los números en la S-box en las posiciones 'i' y 'j'.
El número en la S-box en la posición 't' es el siguiente número de la secuencia aleatoria.

Este proceso se repite para obtener más números de la secuencia.

RC4 es lo suficientemente simple como para ser usado rápidamente. Sin embargo, su seguridad depende mucho de cómo se implemente y se use. Por ejemplo, se descubrieron problemas importantes en cómo se usaba RC4 en el sistema WEP para redes inalámbricas.

Ejemplos de prueba de RC4

Estos ejemplos no son oficiales, pero sirven para probar si un programa que implementa RC4 funciona correctamente. Las claves y los mensajes originales están en texto normal (ASCII), y el resultado cifrado (texto cifrado) está en números hexadecimales. La "Keystream" es la secuencia de números aleatorios que genera RC4.

Clave Keystream Mensaje Texto cifrado
Key
eb9f7781b734ca72a7
Plaintext
BBF316E8D940AF0AD3
Wiki
6044db6d41
pedia
1021BF0420
Secret
04d46b053ca87b594172302aec9b
Attack at dawn
45A01F645FC35B383552544B9BF5
Cervantes
287fdbeef86ccd89b1e1d7acd118e2664927f97d6f9aafc2
En un lugar de la mancha
6D11FB9B964CA1FCD680A58CB57DC20A2807941C01F9C7A3
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;
}

Véase también

Kids robot.svg En inglés: RC4 Facts for Kids

kids search engine
RC4 para Niños. Enciclopedia Kiddle.