Cifrado / Firma RSA
CifradoCifrado RSA-OAEP y firma RSASSA-PKCS1-v1_5 con Web Crypto. Genera un par de claves o pega una clave PEM.
En esta página
¿Qué es RSA?#
RSA es criptografía asimétrica: funciona con un par de claves emparejadas en lugar de con un único secreto compartido. Una clave pública se puede entregar a cualquiera: su único trabajo es cifrar datos y comprobar firmas. Una clave privada se queda contigo y es lo único que puede descifrar datos cifrados con la clave pública o producir una firma que cualquiera puede verificar. Esa separación es lo que permite a dos partes que nunca han compartido un secreto intercambiar mensajes confidenciales y probar autenticidad.
Esta página cubre las cuatro operaciones para las que se usa normalmente RSA, todas a través del motor nativo Web Crypto del navegador:
- Cifrar / Descifrar usan RSA-OAEP con SHA-256, el esquema moderno de relleno autenticado. Un mensaje corto cifrado con la clave pública solo puede leerse con la clave privada.
- Firmar / Verificar usan RSASSA-PKCS1-v1_5 con SHA-256, el esquema de firma más interoperable, el que la mayoría de JWTs y cadenas X.509 aún usan.
- La generación de claves produce pares de 2048, 3072 o 4096 bits con un exponente público de 65537, exportados como PEM estándar (SubjectPublicKeyInfo para la clave pública, PKCS#8 para la privada).
RSA está deliberadamente limitado a payloads cortos. Con RSA-2048 y SHA-256, el mensaje más grande que puedes cifrar es de unos 190 bytes; para algo más grande, usa la herramienta simétrica y protege su clave con RSA.
Cómo usarlo#
- Genera un par. Elige un tamaño de clave (2048 / 3072 / 4096) y pulsa Generar par de claves. Se rellenan dos cajas de solo lectura: la clave pública y la clave privada, ambas en PEM. Copia cada una a un sitio seguro: la clave privada es lo que nunca debes compartir.
- Elige un modo: Cifrar, Descifrar, Firmar o Verificar.
- Pon la clave correcta en el campo Clave según el modo:
- Cifrar → pega la clave pública.
- Descifrar → pega la clave privada.
- Firmar → pega la clave privada.
- Verificar → pega la clave pública.
- Escribe el mensaje. Para verificar, pega también la firma (base64) en el campo de firma.
- Ejecútalo. La línea de estado reporta el resultado; para verificar indica de forma explícita si la firma es válida o no.
Características principales#
- Dos algoritmos, un único par de claves. El mismo PEM sirve para el cifrado OAEP y la firma PKCS#1, porque Web Crypto toma el algoritmo al importar.
- Salida PEM estándar. Las claves públicas son SPKI, las privadas PKCS#8: los formatos que cualquier lenguaje y plataforma leen de forma nativa.
- Exponente público 65537. El valor universalmente elegido; lo bastante pequeño para ser rápido, lo bastante grande para evitar debilidades conocidas.
- Firmas interoperables. RSASSA-PKCS1-v1_5 es el formato que esperan los JWTs reales, la firma de código y las cadenas de certificados.
- Cero subidas. La generación de claves, el cifrado y la firma se ejecutan localmente en tu navegador; la clave privada nunca toca un servidor.
Ejemplo detallado#
Pulsa Generar par de claves con 2048 seleccionado. La caja de la clave pública se rellena con un bloque PEM de esta forma:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyY7v...(líneas de base64)
-----END PUBLIC KEY-----
La caja de la clave privada se rellena con un bloque -----BEGIN PRIVATE KEY----- más largo. Ahora cambia a Cifrar, pega la clave pública en el campo Clave, escribe handshake: 0x4F2A como mensaje y ejecútalo. La salida es un único blob base64 de unos 344 caracteres: exactamente 256 bytes de texto cifrado RSA-2048, codificados en base64.
Cambia a Descifrar, pega la clave privada en el campo Clave, suelta ese blob en el campo del mensaje y ejecútalo: el handshake: 0x4F2A original regresa. Para firmar, el mismo flujo con Firmar produce una firma base64 de 344 caracteres que Verificar confirmará como válida frente a la clave pública, y reportará como no válida si cambias un solo carácter del mensaje antes.
Preguntas frecuentes#
¿Por qué RSA solo puede cifrar mensajes cortos?#
RSA opera con números módulo el tamaño de la clave. Con RSA-2048 tienes un bloque de 256 bytes, y el relleno OAEP consume 2 * hashLen + 2 bytes de él (98 para SHA-256), dejando 190 bytes para el mensaje. Es por diseño: RSA es para claves y firmas, no para datos en volumen. El patrón estándar es «híbrido»: cifra los datos en volumen con AES (usa la herramienta simétrica) y luego cifra solo la clave AES con RSA.
¿2048, 3072 o 4096 bits?#
2048 es la base actual y aún se considera adecuada para la mayoría de los usos. 3072 equivale aproximadamente a una fuerza simétrica de 128 bits; 4096 es la opción conservadora para claves que quieres que duren una década o más. Cada paso cuesta tiempo real en la generación de claves y en cada operación, con rendimientos de seguridad decrecientes.
¿Cuál es la diferencia entre cifrar y firmar?#
El cifrado va sobre secreto: la clave pública cierra, la clave privada abre. La firma va sobre autenticidad: la clave privada crea la firma, la clave pública la comprueba. Usan el mismo par de claves pero algoritmos distintos (OAEP frente a PKCS#1) y responden a preguntas distintas: «¿puede alguien leer esto?» frente a «¿produjo esto de verdad el poseedor de esta clave?».
¿Mi clave privada se envía a algún sitio cuando la genero o la uso?#
No. La generación, el cifrado, el descifrado, la firma y la verificación se realizan todos dentro de la página por Web Crypto. Los bloques PEM existen solo en tu pestaña del navegador; no se transmite nada. Si manejas una clave privada de producción, genérala en un entorno que controles en lugar de pegarla en una página web.