Una clave para cerrar y otra para abrir
La criptografía de clave pública usa un par de claves: una pública, que cualquiera puede conocer, y una privada, que solo tú guardas. Resuelve el problema de compartir una clave secreta con alguien a quien nunca has visto.
Una tienda online recibe pedidos de clientes desconocidos. Les da su clave pública, y solo ella puede abrir lo que le envían.
Al final de esta lección
Nota
Puedo explicar cómo trabajan juntas una clave pública y una clave privada.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Clave pública | la clave que cualquiera puede conocer y sirve para cifrar | |
| Clave privada | la clave que solo guarda su dueño y sirve para descifrar | |
| Par de claves | una clave pública y su clave privada, hechas a la vez | |
| RSA | un método de clave pública basado en multiplicar números primos | |
| Módulo | el resto de una división, con el que se "da la vuelta" a los números | 17 % 5 es 2 |
| Cifrado híbrido | clave pública para acordar una clave secreta que cifra los datos |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La clave pública cierra y la privada abre
Piensa en un buzón de la calle. Cualquiera puede echar una carta por la ranura. Solo quien tiene la llave abre el buzón y la lee.
La clave pública es la ranura: la das a todos. La clave privada es la llave: no sale de tu equipo. Lo que cifras con una solo se descifra con la otra.
RSA mezcla dos primos y un resto
En RSA eliges dos números primos, p y q, y publicas n = p * q. Con ellos se calculan e, público, y d, privado.
Cifras con mensaje ** e % n. Descifras con cifrado ** d % n. Quien solo conoce n debería factorizarlo para sacar d, y con números grandes eso es inviable.
Ejemplo: RSA con números pequeños
| Paso | Valor | Cómo sale |
|---|---|---|
| Primos p y q | 17 y 11 | los eliges |
| n (público) | 187 | 17 por 11 |
| e (público) | 7 | un número que cumple las reglas |
| d (privado) | 23 | 7 por 23 deja resto 1 con 160 |
| Mensaje | 42 | menor que n |
| Cifrado | 15 | 42 elevado a 7, resto de dividir entre 187 |
| Descifrado | 42 | 15 elevado a 23, resto de dividir entre 187 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cifra 42 con la clave pública
python3 -c "print(pow(42, 7, 187))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Descífralo con la clave privada
python3 -c "print(pow(15, 23, 187))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cifra y descifra con números pequeños
# RSA de juguete con números pequeños.
p = 17
q = 11
n = p * q # 187, se publica
e = 7 # exponente público
d = 23 # exponente privado
mensaje = 42
cifrado = pow(mensaje, e, n)
print("Cifrado:", cifrado)
print("Descifrado:", pow(cifrado, d, n))
# Cambia mensaje a 100 (debe ser menor que n) y pulsa Ejecutar.
Un error frecuente
Advertencia
Mucha gente cree que hay que dar la clave privada a quien quiere escribirte. No es así. Esa persona cifra con tu clave pública y solo tu privada lo abre. La privada no sale de tu equipo.
Las claves reales son enormes
Este RSA es un juguete: se rompe a mano. Las claves reales de RSA tienen 2048 bits o más, unos 600 dígitos.
RSA es lento. Por eso se usa para acordar una clave secreta corta, y esa clave cifra los datos con AES. Es el cifrado híbrido.
No programes tu propio RSA. Usa una biblioteca probada.
Para ir más lejos
Elige tú los primos 11 y 13 y el exponente e = 7. Calcula n, y busca d probando hasta que 7 * d deje resto 1 al dividir entre 120.
Cifra el 9 con pow en la terminal. Antes de ejecutar, di qué número deberías obtener al descifrar.