Herramienta de Cifrado y Descifrado RSA
Cifrado RSA asimétrico en línea con generación de par de claves, cifrado con clave pública y descifrado con clave privada
Gestión de Claves
¿Qué es el Cifrado RSA?
RSA (Rivest-Shamir-Adleman) es el primer algoritmo de cifrado asimétrico ampliamente utilizado, inventado en 1977 por tres matemáticos del MIT. A diferencia de los algoritmos simétricos como AES, RSA utiliza un par de claves: una pública para cifrar y una privada para descifrar. La seguridad de RSA se basa en la dificultad matemática de factorizar números enteros grandes. Se recomiendan claves de 2048 bits o más. RSA se usa en HTTPS/TLS, firmas digitales, cifrado de correo electrónico (PGP/GPG) y transacciones blockchain. Esta herramienta utiliza la API Web Crypto nativa del navegador.
Cómo usar
Cómo usarlo
- Selecciona el tamaño de clave (se recomienda 2048 bits o superior)
- Selecciona el esquema de relleno (se recomienda OAEP para mayor seguridad)
- Selecciona el algoritmo hash (se recomienda SHA-256)
- Haz clic en 'Generar par de claves' para crear claves pública y privada
- Para cifrado: pega la clave pública en el área de clave pública, introduce el texto plano, el texto cifrado se genera automáticamente
- Para descifrado: pega la clave privada en el área de clave privada, introduce el texto cifrado, el texto plano se genera automáticamente
- Copia los resultados o haz clic en 'Intercambiar' para intercambiar entrada y salida
Guía de parámetros
- Usa RSA-OAEP con SHA-256 o superior para nuevas pruebas de cifrado; PKCS#1 v1.5 solo debe usarse para compatibilidad con sistemas heredados.
- RSA solo puede cifrar cargas pequeñas. Para datos más grandes, cifra una clave AES aleatoria con RSA y usa AES para el contenido real.
- Mantén las claves privadas fuera de chats, tickets, capturas de pantalla y registros compartidos. Las claves públicas pueden compartirse, pero las claves privadas deben permanecer secretas.
Casos de uso
Principio técnico
RSA es el criptosistema de clave pública Rivest-Shamir-Adleman de 1977. La generación de claves elige dos números primos grandes aleatorios p y q, establece el módulo n = p · q, calcula la función totiente de Euler φ(n) = (p-1)(q-1), elige un exponente público e coprimo con φ(n) (e = 65537 = 2^16 + 1 es el valor por defecto de facto porque su bajo peso de Hamming acelera la exponenciación modular), y deriva el exponente privado d ≡ e^-1 (mod φ(n)) mediante el algoritmo extendido de Euclides. El cifrado es c = m^e mod n; el descifrado es m = c^d mod n. La seguridad descansa en la supuesta dificultad de factorizar n en p y q para n suficientemente grande. RSA en bruto es determinista y moldeable, por lo que cada implementación real envuelve el mensaje en un esquema de relleno. RSA-OAEP, definido en RFC 8017 (PKCS#1 v2.2) con una función de generación de máscara MGF1 sobre SHA-256 (o SHA-1/384/512), proporciona seguridad semántica: el mismo texto plano cifra a un texto cifrado diferente en cada llamada, y la verificación de integridad del relleno detiene los ataques de texto cifrado elegido. El relleno más antiguo PKCS#1 v1.5 sigue siendo común por compatibilidad con sistemas heredados pero es vulnerable al ataque de oráculo de un millón de mensajes de Bleichenbacher. Para firmas, RSASSA-PSS se prefiere sobre PKCS#1 v1.5 por las mismas razones. La elección del tamaño de clave está limitada tanto por el rendimiento como por los últimos récords de factorización. NIST SP 800-57 exige ≥ 2048 bits hoy y ≥ 3072 bits después de 2030. La criptografía de curva elíptica iguala RSA 3072 con solo 256 bits (NIST P-256, Curve25519), por lo que la mayoría de nuevas implementaciones de TLS prefieren ECDHE + ECDSA. RSA-OAEP con clave de 2048 bits puede envolver como máximo ⌊keysize/8⌋ − 2·hashLen − 2 bytes de texto plano (≈ 190 bytes con SHA-256), por lo que los sistemas en producción usan RSA solo para envolver una nueva clave de sesión simétrica y dejan que AES-GCM transporte la carga útil — el patrón híbrido detrás de cada handshake TLS. En el navegador, la API Web Crypto (window.crypto.subtle) maneja la generación, importación, cifrado y descifrado de claves con PEM/DER (SPKI para pública, PKCS#8 para privada) o JWK como formatos de transmisión.
- Matemáticas: elegir primos p, q; n = p·q; φ(n) = (p-1)(q-1); elegir e (típicamente 65537 = 2^16+1); calcular d = e^-1 mod φ(n); cifrar c = m^e mod n; descifrar m = c^d mod n.
- Relleno: RSA-OAEP según RFC 8017 (PKCS#1 v2.2) con MGF1+SHA-256 para código nuevo; PKCS#1 v1.5 solo para interoperabilidad con sistemas heredados, sujeto a Bleichenbacher (CVE-2017-13099 y otros).
- Tamaños de clave: NIST SP 800-57 establece mínimo de 2048 bits hoy y 3072 bits desde 2030; RSA de 1024 bits se considera roto y 4096 bits tiene un coste de CPU notablemente mayor.
- Límite de carga útil: RSA-OAEP puede envolver como máximo ⌊k/8⌋ − 2·hashLen − 2 bytes (≈ 190 bytes con 2048 bits + SHA-256); datos más grandes usan RSA para envolver una clave de sesión AES-GCM.
- Fuerza comparable: RSA 3072 ≈ ECC 256 (NIST P-256 o Curve25519) con seguridad simétrica de ~128 bits; ECC gana en tamaño de clave y velocidad de firma, RSA gana en verificación.
- API y formatos del navegador: window.crypto.subtle.generateKey('RSA-OAEP'); exportar como SPKI PEM (público) y PKCS#8 PEM (privado), o JWK; las claves privadas nunca deben salir del entorno local en texto plano.
Ejemplos
Cifrado básico
1. Genera un par de claves de 2048 bits
2. Copia la clave pública
3. Introduce el texto plano: Hello, RSA!
4. Selecciona OAEP + SHA-256
5. Salida: texto cifrado en Base64
RFC: RFC 8017 (PKCS#1 v2.2) define el esquema de cifrado RSAES-OAEPFlujo de trabajo típico
Emisor:
1. Obtiene la clave pública del destinatario
2. Cifra el mensaje con la clave pública
3. Envía el texto cifrado
Destinatario:
1. Descifra con la clave privada
2. Lee el mensaje original
Nota: el cifrado RSA proporciona confidencialidad; para autenticidad, combínalo con firmas RSA (RSASSA-PSS en RFC 8017)Cifrado híbrido (RSA + AES)
RSA es para datos pequeños (como claves de sesión)
Para datos grandes, usa cifrado híbrido:
1. Genera una clave AES-256 aleatoria
2. RSA cifra la clave AES (máx. ~190 bytes con OAEP-SHA256)
3. AES-GCM cifra los datos reales
4. Envía la clave cifrada con RSA + texto cifrado AES + IV + auth tag
Esto combina la distribución de claves de RSA con la velocidad de AES y es el patrón estándar en TLS, PGP y S/MIME.
RFC: RFC 8017 sección 7.1 trata RSAES-OAEP para encapsulación de clavesPreguntas frecuentes
¿Qué tamaño de clave debería generar?
RSA-2048 es el mínimo práctico hoy y es lo que llevan años usando los certificados TLS. RSA-3072 es el valor por defecto conservador actual según NIST SP 800-57. RSA-4096 es excesivo para la mayoría de usos (mucho más lento) pero apropiado para claves de firma de larga vida. RSA-1024 está roto por política y no debería generarse para nada nuevo.
Clave pública vs. clave privada: ¿cuál cifra y cuál descifra?
Para confidencialidad: cifra con la clave pública, descifra con la privada. Cualquiera puede cifrarte un mensaje; solo quien tenga la clave privada puede leerlo. Para firmas es al revés: firma con la clave privada, verifica con la pública.
¿Por qué cifrar el mismo texto dos veces da cifrados distintos?
RSA-OAEP (el esquema de padding recomendado) añade aleatoriedad para que textos en claro idénticos produzcan cifrados distintos. Es por diseño: previene ataques de texto cifrado elegido. RSA sin padding (textbook RSA) es determinista e inseguro; no lo uses.
¿Por qué RSA es tanto más lento que AES?
RSA hace exponenciación modular con enteros grandes; AES hace operaciones de bits de tamaño fijo sobre un bloque pequeño. Un cifrado RSA de 2048 bits es miles de veces más lento que un cifrado AES-128. En la práctica, usas RSA solo para envolver una pequeña clave de sesión AES y luego cifras la carga útil real con AES.
¿Cuál es el tamaño máximo de datos que puedo cifrar con una clave RSA?
RSA-OAEP con SHA-256 deja unos (tamaño_clave_en_bits / 8 - 66) bytes disponibles por cifrado: 190 bytes para una clave de 2048 bits, 318 para 3072, 446 para 4096. Para cifrar algo más grande, cifra una clave AES con RSA y los datos con AES.
¿La generación de claves es aleatoria y local?
Sí. La generación usa crypto.subtle.generateKey de la Web Crypto API, que se siembra desde el CSPRNG del sistema operativo. Las claves nunca salen de tu navegador. Recarga la página para descartar una clave y generar otra; no pegues una clave privada de producción en ninguna página web.
¿RSA es resistente a la computación cuántica?
No. Una computadora cuántica suficientemente grande ejecutando el algoritmo de Shor rompe RSA con cualquier tamaño de clave práctico. NIST ha estandarizado alternativas postcuánticas (ML-KEM, ML-DSA en 2024). Para datos que deban permanecer confidenciales durante décadas, planifica una migración; para sesiones TLS de corta duración, RSA sigue valiendo.