La criptografía transforma un mensaje legible en un texto que exige una clave para interpretarlo. Los tres primeros métodos pueden explorarse con lápiz y papel o en una hoja de cálculo; el cuarto introduce dos claves distintas. Prueba cada paso en el laboratorio interactivo. La portada representa el paso de transformar letras a utilizar claves pública y privada: es una ilustración conceptual, no un esquema técnico.
1. Sustitución: desplazar las letras
Elegimos la clave k=2 y las letras A–Z. Sustituimos cada letra por la situada dos posiciones más adelante, volviendo a A después de Z: S→U, A→C, L→N. Así SALVATORE se convierte en UCNXCVQTG. Para descifrar desplazamos cada letra dos posiciones hacia atrás: U→S, C→A, hasta recuperar SALVATORE. Es el principio del cifrado César, pero la frecuencia de las letras sigue siendo reconocible: no protege datos reales.
2. Transposición: cambiar el orden, no las letras
Con clave MOSAI y texto SALVATORE, escribimos las letras de izquierda a derecha bajo cinco columnas:
M O S A I
S A L V A
T O R ELas columnas originales son ST | AO | LR | VE | A. Si las leemos según el orden alfabético de las letras de la clave, A,I,M,O,S, obtenemos VE | A | ST | AO | LR, es decir VEASTAOLR. Bob conoce la misma clave: calcula la longitud de cada columna, las rellena en orden alfabético y vuelve a leer las filas para obtener SALVATORE. Aquí se eliminan espacios, acentos y puntuación antes de cifrar; no pueden recuperarse automáticamente.
3. XOR: la misma clave numérica cifra y descifra
Tomamos el byte ASCII de la primera letra, S=83, y una clave de un byte 113. La operación bit a bit produce 83 XOR 113 = 34, que en hexadecimal es 22. Al aplicar de nuevo la misma clave, 34 XOR 113 = 83: reaparece S. Para SALVATORE, toda la secuencia hexadecimal es 22303D2730253E2334. El laboratorio aplica XOR a bytes UTF-8 y también admite mensajes no ASCII. Repetir un solo byte de clave es inseguro: esto únicamente demuestra (m XOR k) XOR k = m.
4. Clave asimétrica: Alice escribe a Bob
En nuestro ejemplo RSA, Bob elige dos primos, p=61 y q=53. Calcula n=pq=3233 y φ(n)=(p−1)(q−1)=3120. Elige e=17, coprimo con 3120, y encuentra d=2753, porque 17×2753=46801=15×3120+1. Publica (n,e)=(3233,17) y guarda en secreto d=2753.
Alice quiere enviar CIAO. Sus bytes UTF-8 son 67,73,65,79. Para cada byte m utiliza la clave pública de Bob y calcula c=m^17 mod 3233:
C: 67^17 mod 3233 = 641
I: 73^17 mod 3233 = 1486
A: 65^17 mod 3233 = 2790
O: 79^17 mod 3233 = 1307Envía 641 1486 2790 1307. Bob aplica su clave privada a cada bloque: m=c^2753 mod 3233. Recupera en orden 67,73,65,79; la decodificación UTF-8 devuelve CIAO. La razón matemática es e×d≡1 (mod φ(n)). Alice nunca necesitó la clave privada de Bob.
Dentro del cálculo de una letra
En lugar de construir la enorme potencia 65^17, Alice eleva al cuadrado y reduce módulo 3233 en cada paso: 65²≡992, 65⁴≡1232, 65⁸≡1547 y 65¹⁶≡789. Como 17=16+1, 65¹⁷≡789×65≡2790 (mod 3233). Bob usa el mismo método con 2753=2048+512+128+64+1 y recupera 65. Este es el cifrado y descifrado concreto de la letra A.
Qué demuestra este ejemplo y qué no
Ilustra la diferencia entre una clave compartida y un par pública/privada, pero no sirve para proteger datos. Los primos se pueden factorizar a mano, cada byte se cifra por separado y no hay relleno. Para aplicaciones reales, RFC 8017 describe RSAES-OAEP: no copies este RSA elemental en un sistema de seguridad. Además, conocer una clave pública no demuestra por sí solo que pertenezca a Bob: hay que verificar su identidad. Abre el laboratorio y prueba otro mensaje →