Los involucrados intercambian llaves publicas en un canal inseguro para establecer una llave secreta.
RSA se utiliza en una amplia variedad de aplicaciones como:
la encriptación de datos, la firma digital y la autenticación
de usuarios.
Es uno de los algoritmos de cifrado más populares y ampliamente
utilizados en la actualidad.
RSA se basa en la dificultad computacional de factorizar grandes
números en primos.
Dado un número grande que es el producto de dos números primos,
encontrar esos factores (descomposición en primos) es
computacionalmente costoso.
El propietario de la clave privada selecciona dos números primos grandes, los multiplica para obtener un número llamado módulo, y usa este módulo para generar las claves pública y privada
El cifrado y el descifrado en RSA utilizan exponentes y operaciones modulares, aprovechando propiedades matemáticas que son fáciles de realizar, pero difíciles de invertir sin conocer los factores primos.
RSA solo puede cifrar datos del tamaño del módulo (ej. 2048 bits ≈ 256 bytes). Si el mensaje es más corto, se rellena con padding. Los esquemas de padding agregan bytes de relleno siguiendo reglas específicas
from Crypto.PublicKey import RSA
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()
print("Clave privada:", private_key.decode())
print("Clave pública:", public_key.decode())
RSA se utiliza a menudo para cifrar la clave simétrica utilizada en sistemas de cifrado simétrico, proporcionando así una capa adicional de seguridad.
RSA también se utiliza en el intercambio de claves de manera segura, permitiendo que dos partes acuerden una clave compartida sin revelar sus claves privadas.
La seguridad de RSA depende en gran medida de la longitud de la clave. Longitudes comunes de clave son 2048 bits y 3072 bits, pero se están considerando longitudes mayores para hacer frente a avances en capacidad computacional
Aunque RSA es seguro, puede ser computacionalmente intensivo, especialmente con claves largas. Por esta razón, a menudo se utiliza en combinación con otros algoritmos para operaciones específica