Caso práctico de aplicación de criptosistema de clave pública en Python

 

Hasta ahora, hemos explorado los fundamentos de la criptografía de clave pública, sus algoritmos representativos y sus diferencias con la criptografía simétrica. Ahora, daremos un paso adelante y veremos un caso práctico de aplicación de un criptosistema de clave pública utilizando Python.

Elección del algoritmo: RSA

Para este caso práctico, elegiremos el algoritmo RSA debido a su amplia adopción y aplicaciones en la seguridad de la información. RSA es adecuado para cifrar y firmar digitalmente datos, y su implementación en Python es relativamente sencilla gracias a bibliotecas como cryptography.

Escenario de aplicación: Cifrado de correos electrónicos

Uno de los escenarios más comunes para la criptografía de clave pública es el cifrado de correos electrónicos. Imagina que Alice desea enviar un correo electrónico confidencial a Bob, pero quiere asegurarse de que solo Bob pueda leerlo. En lugar de compartir una clave secreta con Bob, Alice puede utilizar el cifrado RSA para proteger el correo electrónico.

Cómo usar RSA en Python

A continuación, te mostraremos cómo utilizar el algoritmo RSA en Python para cifrar y descifrar mensajes. Primero, asegúrate de tener la biblioteca cryptography instalada. Puedes instalarla con pip:

pip install cryptography


Luego, aquí tienes un ejemplo simple de cómo generar claves RSA, cifrar un mensaje y descifrarlo:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding


# Generar un par de claves RSA
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)


# Obtener la clave pública correspondiente
public_key = private_key.public_key()


# Convertir las claves a formato PEM
private_pem = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption()
)


public_pem = public_key.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
)


# Cifrar un mensaje con la clave pública de Bob
message = b"Mensaje secreto"
ciphertext = public_key.encrypt(
    message,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)


# Descifrar el mensaje con la clave privada de Bob
decrypted_message = private_key.decrypt(
    ciphertext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)


# Mostrar el mensaje descifrado
print("Mensaje descifrado:", decrypted_message.decode())


Este es solo un ejemplo simple de cómo utilizar RSA en Python. En un escenario real, Alice y Bob tendrían sus propias claves y compartirían las claves públicas para cifrar y descifrar los mensajes.

Conclusión

La criptografía de clave pública, implementada a través de algoritmos como RSA, ofrece una forma segura de proteger la comunicación y los datos confidenciales en línea. La implementación en Python, utilizando bibliotecas como cryptography, facilita la aplicación de esta tecnología en diversos escenarios, como el cifrado de correos electrónicos.

En el próximo artículo, exploraremos observaciones y recomendaciones clave para implementar la criptografía de clave pública de manera efectiva y segura en aplicaciones y sistemas.

Referencias Bibliográficas

  1. cryptography.io. (**https://cryptography.io/en/latest/**)
  2. Rivest, R. L., Shamir, A., & Adleman, L. M. (1978). A method for obtaining digital signatures and public-key cryptosystems. Communications of the ACM, 21(2), 120-126.

Comentarios

Entradas populares