Generador Claves RSA

Generar pares de claves RSA

warning
Importante: Guarde su clave privada de forma segura. No será almacenada.
Entendiendo Criptografía asimétrica RSA
TL;DR

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:

  1. 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)
  2. Calcular el módulo n = p x q (esto se convierte en parte tanto de la clave pública como de la privada)
  3. Calcular el totiente phi(n) = (p-1)(q-1)
  4. Elegir el exponente público e (casi siempre 65537, que equilibra seguridad y rendimiento)
  5. Calcular el exponente privado d tal que (d x e) mod phi(n) = 1 (el inverso multiplicativo modular)
  6. 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.

RSA Key Pair: Encryption and Digital Signatures Two primes p and q are combined to generate the public key (n, e) and private key (n, d). The public key encrypts and verifies signatures. The private key decrypts and creates signatures. Key Generation prime p prime q n = p x q Public Key (n, e=65537) Private Key (n, d) Encryption Plaintext Public Key Ciphertext Private Key Plaintext Digital Signature Document Priv Key Sig Pub Key Verified Public key encrypts and verifies. Private key decrypts and signs.

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

AlgoritmoTamaño de claveNivel de seguridadTamaño de firmaRendimiento
RSA-10241024 bitsObsoleto (~80 bits)128 bytesRápido
RSA-20482048 bitsMínimo (~112 bits)256 bytesModerado
RSA-30723072 bitsPost-2030 (~128 bits)384 bytesMás lento
RSA-40964096 bitsAlta seguridad (~140 bits)512 bytesLento
ECDSA P-256256 bits~128 bits64 bytesRápido
Ed25519256 bits~128 bits64 bytesEl 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

Clave pública RSA de 2048 bits válida Válido

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-----
Clave inválida (Base64 corrupto) Inválido

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-----