Generador Claves RSA
Generar pares de claves RSA
RSA usa un par de claves matemáticamente vinculadas: una clave pública que cualquiera puede usar para cifrar, y una clave privada que solo usted puede usar para descifrar. La seguridad se basa en la dificultad de factorizar números primos grandes.
¿Qué es RSA?
RSA (Rivest-Shamir-Adleman) es un algoritmo criptográfico asimétrico que usa un par de claves matemáticamente relacionadas: una clave pública y una clave privada. A diferencia del cifrado simétrico (donde ambas partes comparten la misma clave secreta), RSA permite que cualquiera cifre un mensaje usando la clave pública del destinatario, pero solo el destinatario puede descifrarlo con su clave privada correspondiente.
La criptografía asimétrica resolvió uno de los problemas más antiguos de la criptografía: la distribución de claves. Antes de RSA y algoritmos similares, dos partes tenían que intercambiar de forma segura un secreto compartido antes de poder comunicarse de manera privada. RSA elimina este requisito: puede publicar su clave pública al mundo, y cualquiera puede enviarle un mensaje cifrado sin necesidad de conocerle en persona.
RSA es uno de los algoritmos criptográficos más ampliamente desplegados en la historia. Asegura conexiones HTTPS, sesiones SSH, cifrado de correo electrónico (PGP/S/MIME), firmas digitales, firma de código y un sinfín de otros protocolos. A pesar de tener casi 50 años, RSA sigue siendo seguro cuando se usa con claves suficientemente grandes, aunque las alternativas modernas basadas en curvas elípticas son cada vez más preferidas para nuevos sistemas.
Cómo funciona la generación de claves
La generación de claves RSA se basa en la dificultad matemática de factorizar el producto de dos números primos grandes. Mientras que multiplicar dos primos es trivial, encontrar los primos originales a partir de su producto es computacionalmente inviable para números suficientemente grandes.
El proceso de generación de claves funciona de la siguiente manera:
- Elegir dos primos grandes aleatorios, p y q (cada uno típicamente la mitad del tamaño de clave deseado, por lo que para una clave de 2048 bits, cada primo es de aproximadamente 1024 bits)
- Calcular el módulo n = p x q (esto se convierte en parte tanto de la clave pública como de la privada)
- Calcular el totiente phi(n) = (p-1)(q-1)
- Elegir el exponente público e (casi siempre 65537, que equilibra seguridad y rendimiento)
- Calcular el exponente privado d tal que (d x e) mod phi(n) = 1 (el inverso multiplicativo modular)
- Descartar p y q: los primos individuales nunca deben almacenarse ni revelarse
La clave pública es el par (n, e). La clave privada es el par (n, d). La seguridad de RSA depende enteramente del hecho de que recuperar d a partir de (n, e) requiere factorizar n, lo cual es computacionalmente inviable para n grande.
Cifrado vs. firmas digitales
RSA admite dos operaciones fundamentales que usan el par de claves en direcciones opuestas.
Cifrado
En el cifrado RSA, el emisor usa la clave pública del destinatario para cifrar un mensaje. Solo el destinatario, que posee la clave privada correspondiente, puede descifrarlo. Esto proporciona confidencialidad: nadie más puede leer el mensaje.
En la práctica, RSA rara vez se usa para cifrar datos directamente. El cifrado RSA está limitado a datos más pequeños que el tamaño de la clave (por ejemplo, 245 bytes para una clave de 2048 bits con relleno OAEP). En su lugar, RSA se usa en un esquema de cifrado híbrido: una clave simétrica aleatoria (por ejemplo, AES-256) cifra los datos reales, y RSA cifra la clave simétrica. Esto combina las ventajas de distribución de claves de RSA con la velocidad y flexibilidad del cifrado simétrico.
Firmas digitales
En la firma digital, el firmante usa su clave privada para crear una firma sobre un mensaje (en realidad sobre un hash del mensaje). Cualquiera que tenga la clave pública del firmante puede verificar la firma, confirmando que (a) el mensaje fue firmado por el titular de la clave privada, y (b) el mensaje no ha sido alterado.
Las firmas digitales proporcionan tres propiedades:
- Autenticación: Demuestra la identidad del firmante
- Integridad: Demuestra que el mensaje no ha sido modificado
- No repudio: El firmante no puede negar haber firmado (útil para contextos legales y contractuales)
Tamaño de clave y comparación de algoritmos
| Algoritmo | Tamaño de clave | Nivel de seguridad | Tamaño de firma | Rendimiento |
|---|---|---|---|---|
| RSA-1024 | 1024 bits | Obsoleto (~80 bits) | 128 bytes | Rápido |
| RSA-2048 | 2048 bits | Mínimo (~112 bits) | 256 bytes | Moderado |
| RSA-3072 | 3072 bits | Post-2030 (~128 bits) | 384 bytes | Más lento |
| RSA-4096 | 4096 bits | Alta seguridad (~140 bits) | 512 bytes | Lento |
| ECDSA P-256 | 256 bits | ~128 bits | 64 bytes | Rápido |
| Ed25519 | 256 bits | ~128 bits | 64 bytes | El más rápido |
Ed25519 alcanza la misma seguridad que RSA-3072 con claves 12 veces más pequeñas y operaciones significativamente más rápidas. Para nuevos proyectos, Ed25519 es la opción recomendada para firmas digitales, y X25519 (ECDH) para intercambio de claves.
Casos de uso comunes
- TLS/SSL (HTTPS): Las claves RSA se usan en certificados X.509 para autenticar servidores y establecer conexiones cifradas. Durante un handshake TLS, la clave RSA del servidor puede usarse para intercambio de claves o firma digital dependiendo del conjunto de cifrado
- Autenticación SSH: Las claves SSH (típicamente RSA o Ed25519) permiten el inicio de sesión sin contraseña en servidores remotos. Su clave pública se coloca en el servidor, y su clave privada permanece en su máquina local
- Firma de código: Los editores de software firman binarios con claves RSA para demostrar autenticidad. Los sistemas operativos verifican estas firmas antes de instalar o ejecutar el código
- Cifrado de correo PGP/GPG: Los pares de claves RSA permiten el cifrado de extremo a extremo del correo electrónico. Usted publica su clave pública para que otros puedan cifrar mensajes hacia usted, y firma los mensajes salientes con su clave privada
- Firma de JWT (RS256): Los JWT firmados con RSA (algoritmo RS256) usan la clave privada para firmar y la clave pública para verificar. Esto es útil en sistemas distribuidos donde muchos servicios necesitan verificar tokens pero solo un servicio los emite
- Firma de documentos: Las firmas digitales de PDF y XML usan RSA para proporcionar firmas legalmente vinculantes y a prueba de manipulaciones en contratos, facturas y documentos oficiales
- Intercambio de claves: Aunque RSA puede cifrar directamente claves simétricas, los protocolos modernos (TLS 1.3) prefieren el intercambio de claves Diffie-Hellman efímero para proporcionar secreto perfecto hacia adelante, usando RSA solo para autenticación
Prueba estos ejemplos
Una clave pública RSA codificada en PEM en formato PKCS#8. El contenido Base64 codifica el módulo (n) y el exponente público (e, típicamente 65537). Esta clave puede compartirse libremente para cifrado y verificación de firmas.
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Z3VS5JJcds3xfn/ygWe
GNlBSMpjSMGRlMHKbFMoepKqnOgEnyNJBPMzWiKRGhpE5JsuhJRNxJHR3OSGM4Pe
+14ktHBBh0VhpGkdOW5Y5E7fGECJO1GxaRE2qBVMlBMn+BNEQ0VPwJmBJL3CwZ1
q6Twv3BQKL2+9jFnhOOGlFk7mPKACQJeBm5N+eXzqBLeIOHQJmkgJnN8k0hm5NU
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-----END PUBLIC KEY----- Los encabezados PEM están presentes pero el contenido no es Base64 válido, por lo que la clave no puede decodificarse. Las causas comunes incluyen errores de copiar y pegar, corrupción de saltos de línea o problemas de codificación del archivo.
-----BEGIN PUBLIC KEY-----
THIS_IS_NOT_VALID_BASE64!!!
-----END PUBLIC KEY-----