Claves de juguete: no las uses para proteger nada real. Todo se calcula en tu navegador.
1 Genera tus claves
- n = p · q
61 · 53 = 3233(12 bits) - φ(n) = (p − 1)(q − 1)
60 · 52 = 3120 - e, primo con φ(n)
7 - d = e⁻¹ mod φ(n)
1783(comprobación: e · d mod φ(n) = 1)
Cómo se calcula d: Euclides extendido paso a paso
Se divide φ(n) entre e, luego e entre el resto, y así hasta llegar a resto 0. Las columnas s y t cumplen siempre r = s · φ(n) + t · e. En la fila del resto 1, t es el inverso de e (si sale negativo, se le suma φ(n)).
| cociente | resto r | s | t |
|---|---|---|---|
| 3120 | 1 | 0 | |
| 7 | 0 | 1 | |
| 445 | 5 | 1 | -445 |
| 1 | 2 | -1 | 446 |
| 2 | 1 | 3 | -1337 |
| 2 | 0 | -7 | 3120 |
Resultado: t = -1337, y d = t mod φ(n) = 1783.
Clave pública (n, e)
Se la das a quien quiera escribirte.
(3233, 7)Clave privada (n, d)
Solo la tienes tú. Sin p y q, calcularla exige factorizar n.
(3233, 1783)2 Cifra un mensaje
El texto se pasa a bytes (UTF-8) y se agrupan de 1 en 1 para formar números menores que n. Cada número m se cifra con c = me mod n.
| bloque | m (mensaje) | c = me mod n |
|---|---|---|
| 1 | 72 | 1087 |
| 2 | 111 | 3183 |
| 3 | 108 | 1877 |
| 4 | 97 | 1818 |
Exponenciación rápida del primer bloque
En lugar de multiplicar m por sí mismo e veces, se elevan al cuadrado sucesivamente (m, m², m⁴, m⁸…) y se multiplican solo los que corresponden a los bits 1 de e = 111₂. Son 3 pasos en lugar de 7.
| bit de e | m^(2^i) mod n | acumulado |
|---|---|---|
| 1 | 72 | 72 |
| 1 | 1951 | 1453 |
| 1 | 1160 | 1087 |
El enlace lleva el mensaje cifrado y tu clave pública, pero no la privada. ¿Podrá leerlo quien lo reciba?
3 Descifra
4 Intenta romperla
Quien tenga n y consiga factorizarlo obtiene p y q, y con ellos d. Vamos a probar la fuerza bruta (dividir n entre 3, 5, 7… hasta √n) con claves cada vez más grandes, en tu propio dispositivo.