[Actualizado a 24 de septiembre de 2026]
Ejercicio de cifrado asimétrico¶
Esta es la guía paso a paso para realizar la práctica de Cifrado Asimétrico (RSA) con OpenSSL y comunicación vía Netcat en Ubuntu Linux.
Requisitos previos en ambos equipos (A y B)¶
- netcat
- openssl
Nota sobre el puerto 80: Para evitar el uso de puertos reservados (y por tanto permisos de
root, emplearemos el puerto 8080 para las comunicaciones, por lo que deberemos crear una regla en el firewall de AWS.La regla del firewall la crearemos de
entrada,tcp, puerto8080de destino y sólo para la IP del instituto.Para averigura la IP del instituto podemos usar el comando
curl ifconfig.meocurl myip.wtf.
Paso 1: Generación de claves (Ambos alumnos)¶
Cada alumno genera en su máquina su par de llaves RSA (privada y pública):
Alumno A:
# Genera la llave privada
openssl genpkey -algorithm RSA -out privada_A.pem -pkeyopt rsa_keygen_bits:2048
# Extrae la llave pública
openssl pkey -in privada_A.pem -pubout -out publica_A.pem
Alumno B:
# Genera la llave privada
openssl genpkey -algorithm RSA -out privada_B.pem -pkeyopt rsa_keygen_bits:2048
# Extrae la llave pública
openssl pkey -in privada_B.pem -pubout -out publica_B.pem
Paso 2: Intercambio inicial de llaves públicas¶
Antes de enviar mensajes secretos, deben intercambiar sus llaves públicas por Netcat.
- Alumno B se pone en escucha:
nc -l -p 8080 > publica_A.pem
- Alumno A le envía su llave pública:
nc <IP_DE_B> 8080 < publica_A.pem
- Ahora al revés (Alumno A se pone en escucha):
nc -l -p 8080 > publica_B.pem
- Alumno B le envía su llave pública:
nc <IP_DE_A> 8080 < publica_B.pem
Paso 3: Alumno A envía mensaje cifrado a Alumno B¶
1. Alumno A cifra el mensaje con la llave pública de B¶
# 1. Crear el mensaje de texto plano
echo "Hola B, este mensaje es confidencial." > mensaje1.txt
# 2. Cifrar con la llave pública de B
openssl pkeyutl -encrypt -inkey publica_B.pem -pubin -in mensaje1.txt -out mensaje1.enc
2. Transmisión vía Netcat (Puerto 8080)¶
2.1. Alumno B abre el puerto 8080 para recibir:
nc -l -p 8080 > mensaje1.enc
2.2. Alumno A envía el archivo cifrado:
nc <IP_DE_B> 8080 < mensaje1.enc
3. Alumno B descifra el mensaje con su llave privada¶
openssl pkeyutl -decrypt -inkey privada_B.pem -in mensaje1.enc -out mensaje1_descifrado.txt
# Ver el texto original
cat mensaje1_descifrado.txt
Paso 4: Alumno B responde cifrado a Alumno A¶
1. Alumno B cifra la respuesta con la llave pública de A¶
# 1. Crear la respuesta
echo "Recibido A, tu mensaje está seguro conmigo." > respuesta1.txt
# 2. Cifrar con la llave pública de A
openssl pkeyutl -encrypt -inkey publica_A.pem -pubin -in respuesta1.txt -out respuesta1.enc
2. Transmisión vía Netcat (Puerto 80)¶
2.1. Alumno A abre el puerto 8080 para recibir:
nc -l -p 8080 > respuesta1.enc
2.2. Alumno B envía el archivo cifrado:
nc <IP_DE_A> 8080 < respuesta1.enc
3. Alumno A descifra la respuesta con su llave privada¶
openssl pkeyutl -decrypt -inkey privada_A.pem -in respuesta1.enc -out respuesta1_descifrada.txt
# Ver la respuesta
cat respuesta1_descifrada.txt