Práctica de RSA - Tecnologías de Seguridad
Objetivo:
Simular una comunicación segura entre grupos, donde cada grupo genera su par de claves RSA,
cifra un mensaje con la clave pública del receptor y lo descifra con su propia clave privada. Se
realizará usando dos enfoques: Python y CyberChef.
Duración estimada: 90 minutos
Parte I: Implementación con Python
1. Generar par de claves RSA
from [Link] import rsa
from [Link] import serialization
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()
with open("clave_privada.pem", "wb") as f:
[Link](private_key.private_bytes(
encoding=[Link],
format=[Link],
encryption_algorithm=[Link]()
))
with open("clave_publica.pem", "wb") as f:
[Link](public_key.public_bytes(
encoding=[Link],
format=[Link]
))
2. Cifrar mensaje con la clave pública del otro grupo
from [Link] import hashes
from [Link] import padding
with open("clave_publica_receptor.pem", "rb") as f:
public_key_receptor = serialization.load_pem_public_key([Link]())
mensaje = b"Coordenadas de extracción: 00°N, 78°W a las 23:00"
mensaje_cifrado = public_key_receptor.encrypt(
mensaje,
[Link](
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
with open("mensaje_cifrado.bin", "wb") as f:
[Link](mensaje_cifrado)
3. Descifrar mensaje recibido con clave privada
with open("clave_privada.pem", "rb") as f:
private_key = serialization.load_pem_private_key([Link](), password=None)
with open("mensaje_cifrado_recibido.bin", "rb") as f:
mensaje_cifrado = [Link]()
mensaje_descifrado = private_key.decrypt(
mensaje_cifrado,
[Link](
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("Mensaje descifrado:", mensaje_descifrado.decode())
Parte II: Implementación con CyberChef
CyberChef es una herramienta web visual para realizar operaciones criptográficas.
URL: [Link]
1. Generar par de claves RSA
- Abre CyberChef: [Link]
- Busca y arrastra la operación 'Generate RSA Key Pair' al panel de recetas.
- Configura:
- Key size: 2048
- Encoding: PEM
- Haz clic en 'Run Recipe'.
- Guarda la clave pública y privada (copiar y pegar en archivos separados).
- Intercambia SOLO la clave pública con otro grupo.
2. Cifrar mensaje con la clave pública del receptor
- Borra las recetas anteriores.
- Escribe tu mensaje secreto en el área de entrada (inferior).
- Arrastra la operación 'Encrypt with RSA' al panel.
- Configura:
- Public key: pega la clave pública del otro grupo.
- Scheme: RSAES-PKCS1-v1_5
- Encoding: Base64
- Haz clic en 'Run Recipe'.
- Copia el resultado y guárdalo como 'mensaje_cifrado.txt'.
3. Descifrar mensaje recibido con clave privada
- Borra cualquier receta anterior.
- Pega el mensaje cifrado recibido en el área de entrada.
- Arrastra la operación 'Decrypt with RSA' al panel.
- Configura:
- Private key: pega tu clave privada.
- Scheme: RSAES-PKCS1-v1_5
- Encoding: Base64
- Haz clic en 'Run Recipe' y obtendrás el mensaje descifrado.
Reflexión final:
- ¿Qué hubiera pasado si usaban cifrado simétrico?
- ¿Por qué es fundamental no compartir la clave privada?
- ¿Qué ventajas y desventajas encuentras en cada método (Python vs CyberChef)?