ToolActToolAct

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

Clave Pública
Clave Privada
Entrada
Caracteres: 0
Bytes: 0
Salida
Caracteres: 0
Bytes: 0

¿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

  1. Selecciona el tamaño de clave (se recomienda 2048 bits o superior)
  2. Selecciona el esquema de relleno (se recomienda OAEP para mayor seguridad)
  3. Selecciona el algoritmo hash (se recomienda SHA-256)
  4. Haz clic en 'Generar par de claves' para crear claves pública y privada
  5. 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
  6. Para descifrado: pega la clave privada en el área de clave privada, introduce el texto cifrado, el texto plano se genera automáticamente
  7. 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

Generar pares de claves RSA-OAEP en el navegadorElige una longitud de módulo de 512, 1024, 2048, 3072 o 4096 bits y un hash SHA-1, SHA-256, SHA-384 o SHA-512, luego genera claves pública y privada exportables en formato PEM a través de Web Crypto. El par de claves permanece en la pestaña del navegador y se exporta como bloques PEM SPKI (público) y PKCS#8 (privado), útil para diseñar una prueba de interoperabilidad sin provisionar un servidor de claves.
Cifrar y descifrar payloads de texto cortoPega una clave pública para cifrar texto plano en Base64 o hexadecimal, o pega una clave privada para descifrar texto cifrado en el formato seleccionado. Los conteos de bytes de entrada y salida ayudan a revelar problemas de tamaño de payload, lo que importa porque RSA-OAEP(SHA-256) con clave de 2048 bits solo puede envolver aproximadamente 190 bytes de texto plano. La clave privada y el mensaje permanecen en la pestaña local durante toda la operación.
Probar el manejo de claves sin herramientas externasCopia bloques PEM público o privado, intercambia paneles al experimentar y cambia el modo cifrar/descifrar mientras permaneces en una sola página. Esto es útil para aprender la semántica de RSA-OAEP, verificaciones de interoperabilidad contra openssl y prototipos locales donde el material de claves no debe salir de la máquina.
Elegir el hash OAEP para verificaciones de interoperabilidadAlterna entre SHA-1, SHA-256, SHA-384 y SHA-512 en la configuración de OAEP para coincidir con el hash que usa tu aplicación par. Los hashes no coincidentes causan que el descifrado falle con un 'OperationError' genérico de Web Crypto, así que verificar el emparejamiento aquí ahorra tiempo de depuración al conectar claves entre Node crypto, Python cryptography o los servicios javax.crypto de Java.
Reconocer los límites de tamaño de payload antes de cifrarRSA-OAEP solo puede cifrar mensajes más cortos que el módulo de la clave menos 2*hashLen - 2 bytes de sobrecarga de relleno, por lo que los intentos en blobs de varios kilobytes lanzarán un InvalidAccessError. Usa el contador de bytes de entrada y la longitud de salida del cifrado (que equivale al módulo de la clave en bytes para OAEP) para confirmar que la prueba permanezca bajo el límite, luego mueve los datos grandes a AES con claves de sesión envueltas por RSA.

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

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

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