RSA: Cifrado de juguete

Elige dos primos, introduce un mensaje y observa cómo RSA lo cifra y luego lo descifra.

Cargando simulación interactiva...

Lección

La teoría — RSA: Cifrado de juguete

RSA es una sola operación usada dos veces. Cifrar es me mod n y descifrar es cd mod n — la misma exponenciación modular, con otro exponente. El truco está en elegir el par de modo que aplicarlo dos veces devuelva el mensaje, mientras que conocer uno de los exponentes no dice nada del otro. Todo lo que imprime el panel es la búsqueda de ese par. Publicado por Rivest, Shamir y Adleman en 1978 — y, como solo se supo cuando el GCHQ lo desclasificó en 1997, hallado cuatro años antes por Clifford Cocks y guardado en un cajón.

Qué significa cada símbolo

n
el módulo, p·q. Público. El secreto son sus factores, no el número en sí.
φ(n)
la función φ de Euler, (p−1)(q−1). El panel puede imprimirla porque le dieron p y q; un atacante con solo n no puede, y pasar de n a φ es tan difícil como factorizar.
e
el exponente público. Sirve cualquier número coprimo con φ(n), y por eso cambia cuando cambias un primo.
d
el exponente privado, e⁻¹ mod φ(n). Un único inverso modular — inmediato si conoces φ, y todo el juego si no.

De dónde viene la fórmula

  1. Multiplica los primos: n = p·q. Con los valores por defecto, 61 · 53 = 3233. Ese número se publica. Recuperar 61 y 53 a partir de 3233 lleva un momento a mano, y esa es la razón honesta por la que esto se llama juguete.
  2. Calcula φ(n) = (p−1)(q−1) = 60 · 52 = 3120. Es el eje de todo el esquema: n es público y φ(n) no, y el único camino conocido de uno a otro pasa por la factorización.
  3. Elige e coprimo con φ(n) y resuelve e·d ≡ 1 (mod φ(n)) para d. El panel muestra 7⁻¹ mod 3120 = 1783. Fíjate en lo que ese paso no es: no es difícil. Conocido φ, es un solo inverso modular. El secreto de d descansa por entero en el secreto de φ.
  4. Por qué funciona la ida y vuelta: por construcción e·d = 1 + kφ(n), así que med = m1+kφ(n) ≡ m (mod n) — el teorema de Euler. Descifrar no es una operación inversa inventada aparte; es la misma exponenciación, con el exponente que deshace la primera.

Cómo leer lo que ves

La fila que conviene vigilar es e, porque no es una constante. Con los primos por defecto marca 7; cambia p a 67 y pasa a 5. La razón está en la fila de encima: e debe ser coprimo con φ(n), y φ pasó de 3120 a 3432. Compara luego los dos exponentes en pantalla — e = 7 frente a d = 1783. El público es minúsculo y el privado no, y ninguna de las dos cosas es casual: e se elige pequeño a propósito para que cifrar salga barato, y d es lo que resulte del inverso. La última fila es la prueba de que salió bien: m′ = 42, el número que escribiste.

Supone
Que el mensaje es un número menor que n. Con n = 3233 no hay nada que cifrar por encima de 3232 — por eso el RSA real nunca cifra un mensaje directamente: cifra una clave simétrica rellenada de unos cientos de bits y deja que un cifrado más rápido lleve el texto. También supone p ≠ q, y que nunca reutilizas un primo en un segundo módulo: dos módulos que comparten un factor quedan rotos ambos con un solo máximo común divisor.
Falla cuando
Puedes romper esta página sin factorizar nada. Pon p = 67, q = 53 y el mensaje en 3. El panel elige e = 5 e imprime como cifrado 243 — que no es más que 3⁵. Como 3⁵ es menor que n = 3551, la reducción modular nunca ocurrió: el cifrado es una potencia corriente, y la raíz quinta de 243 es 3. Sin clave, sin factorizar, mensaje recuperado. Prueba m = 5 y obtienes 3125, que es 5⁵; en m = 8 la potencia por fin supera a n y el cifrado se convierte en un inútil 809. Esto no es un fallo de esta página — es la razón por la que nadie cifra un número desnudo. El RSA real rellena antes el mensaje con azar estructurado, que es lo que especifica el RFC 8017 y lo que convierte una exponenciación en un criptosistema.

La clave privada se deriva, no se elige 🖖

Observa cómo el panel construye d. Con los primos por defecto muestra φ(n) = 60 · 52 = 3120, luego recurre a e = 7 —su 65537 preferido es aquí mayor que la propia φ— y por fin calcula d ≡ 7⁻¹ mod 3120 = 1783. Ese último paso es un único inverso modular, instantáneo en cualquier máquina. Nada en d es secreto por sí mismo: sale directamente de φ(n), y φ(n) sale directamente de p y q. Así que RSA no oculta el exponente privado, oculta la factorización. Aquí n = 3233, que un portátil parte antes de que termines esta frase; un módulo RSA-2048 tiene 617 cifras decimales, y todos los pasos en pantalla son por lo demás los mismos.

El candado que solo tú abres 🖖

RSA le da a todos un candado abierto (tu clave pública) que pueden cerrar en torno a un mensaje, pero solo tu clave privada puede volver a abrirlo. Como cerrar y abrir usan claves distintas, puedes publicar la pública a la vista de todo el mundo sin revelar cómo descifrar. Esta herramienta te deja recorrer el ciclo completo con primos diminutos; los sistemas reales usan los mismos pasos con números de cientos de cifras.

El cifrado al revés es una firma 🖖

La misma operación de RSA, ejecutada en sentido contrario, demuestra quién envió un mensaje en lugar de ocultarlo. Si "descifras" un mensaje con tu clave privada, cualquiera puede "cifrarlo" de vuelta con tu clave pública para comprobar que de verdad viene de ti: eso es una firma digital. Así, una sola operación matemática impulsa tanto la confidencialidad como la autenticación, con solo intercambiar qué clave va primero.

Problemas resueltos al detalle

  1. Un par de claves RSA para p = 61 y q = 53 5 pasos

    Genere el par de claves RSA para p = 61 y q = 53, y cifre m = 42. Cada uno de los números siguientes se deduce de esos tres, incluido el exponente público.

    1. El módulo se publica y la función fi (totient) se destruye, aunque ambos están a una sola multiplicación de distancia de los primos. φ(n) cuenta los enteros menores que n que no comparten ningún factor con él, lo que para un producto de dos primos distintos es (p − 1)(q − 1).

    2. El exponente público debe ser invertible módulo φ, lo que significa que debe ser coprimo con él. Al factorizar φ, los candidatos pequeños se eliminan a sí mismos, dejando el 7 como el exponente impar más pequeño disponible. Las claves reales usan 65537, pero eso es mayor que este φ, por lo que la herramienta recurre al coprimo más pequeño.

    3. Invertir 7 módulo 3120 es el algoritmo de Euclides extendido y nada más. Tres divisiones llegan a un resto de 1, y al deshacer esas mismas tres líneas se escribe ese 1 como una combinación de 3120 y 7.

    4. El coeficiente de 7 en esa combinación es negativo, y un inverso negativo se vuelve positivo sumando el módulo una vez. El cifrado es entonces una única exponenciación modular, realizada elevando al cuadrado dos veces en lugar de multiplicando 42 por sí mismo siete veces.

    5. El descifrado nunca tiene que comprobarse por fuerza bruta, y para tamaños de clave realistas ni siquiera se podría. Los dos exponentes se construyeron de modo que su producto sea una unidad más que un múltiplo de φ, y el teorema de Euler lo remata para cualquier m coprimo con n (que es el caso de 42).

    Respuesta

    La herramienta imprime n = 3233, φ = 3120, d = 1783 y c = 240, y confirma que 240 se descifra de nuevo como 42. La parte que conviene recordar es lo que realmente es φ. No es un segundo secreto al lado de p y q: es el mismo secreto escrito de otra forma. Dados n y φ se tiene p + q = n − φ + 1 = 114 y pq = 3233, una ecuación de segundo grado cuyo discriminante es un cuadrado perfecto, y devuelve 61 y 53 en una sola línea. Por lo tanto, un generador de claves que filtre φ ha filtrado la factorización tan completamente como si hubiera impreso los primos, razón por la cual φ se calcula una vez, se usa para hallar d y luego se descarta.

  2. Factorización de 3233 en 61 × 53 para vulnerar la seguridad RSA 6 pasos

    El panel factoriza 3233 en 61 × 53 antes de que termines de leer la página. Esa factorización es toda la seguridad de RSA, aparentemente rota al instante. Calcula qué hace imposible el mismo problema un tamaño de clave más allá.

    1. Los dos números con los que arranca el panel: el módulo, y la función φ que sale de los dos primos.

    2. A un atacante le basta un hecho: el primo menor no puede pasar de la raíz cuadrada del módulo. Cualquiera mayor necesitaría un socio más pequeño que él mismo.

    3. La búsqueda recorre entonces los primos hasta 56, y hay dieciséis. El decimosexto es 53. Dieciséis divisiones no son seguridad, son un error de redondeo.

    4. Mete ahora un módulo de los que se usan de verdad. 2048 bits significa n cerca de 2²⁰⁴⁸, y su raíz cuadrada es 2¹⁰²⁴, unos 10³⁰⁸.

    5. Ponle precio. A mil millones de divisiones por segundo son 10²⁹⁹ segundos, frente a un universo de unos 4 × 10¹⁷ segundos.

    6. El tiempo es la unidad equivocada para un número así; compáralo mejor con algo físico.

    Respuesta

    Dieciséis divisiones frente a 10³⁰⁸, y 10³⁰⁸ es 10²²⁸ veces el número de átomos en el universo observable, por lo que ni siquiera podrías almacenar el contador. Lo útil es la forma más que el tamaño: el trabajo del atacante crece como √n mientras que la clave crece como log n, así que cada dos bits adicionales de clave duplican el coste de romperla y le cuestan al defensor dos bits. Esa asimetría es todo el producto. La respuesta instantánea de la herramienta no es un fallo en la demostración. Es la demostración, porque 3233 es el aspecto de un módulo cuando no se le ha dado espacio a la asimetría para actuar.

Referencias (4)

Problemas de ejemplo