¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Criptografía de clave pública y RSA

Después de esta lección: Puedo explicar cómo trabajan juntas una clave pública y una clave privada.

Lección de 60 min2 comandosLaboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

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

PalabraQué significaEjemplo
Clave públicala clave que cualquiera puede conocer y sirve para cifrar
Clave privadala clave que solo guarda su dueño y sirve para descifrar
Par de clavesuna clave pública y su clave privada, hechas a la vez
RSAun método de clave pública basado en multiplicar números primos
Móduloel resto de una división, con el que se "da la vuelta" a los números17 % 5 es 2
Cifrado híbridoclave 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

PasoValorCómo sale
Primos p y q17 y 11los eliges
n (público)18717 por 11
e (público)7un número que cumple las reglas
d (privado)237 por 23 deja resto 1 con 160
Mensaje42menor que n
Cifrado1542 elevado a 7, resto de dividir entre 187
Descifrado4215 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

Comando
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

Comando
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

Código: python
# 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.

Sobre este laboratorio y su código: Laboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.