Introducción a los algoritmos de firma EC y RSA en JWT
Aprende lo esencial sobre el cifrado asimétrico y comprende los pros y contras de los dos algoritmos de clave de firma JWT más populares: EC y RSA.
Antecedentes
En el mundo digital, la búsqueda de una mayor seguridad en la transmisión de datos ha sido constante y siempre en evolución. Hoy en día, los JSON Web Tokens (JWT) han sido ampliamente adoptados y juegan un papel crucial en OAuth 2.0 y OIDC. Pero ¿cómo verifica y confía un servidor de autorización en un token JWT enviado desde un cliente? ¿Cómo se emite y firma el token por parte del emisor? En esta publicación del blog, hablaremos sobre el cifrado asimétrico y profundizaremos en los pros y contras de diferentes algoritmos de firma que utiliza Logto en sus tokens JWT.
Comprendiendo el cifrado asimétrico
El cifrado asimétrico, también conocido como criptografía de clave pública, un concepto fundamental en la seguridad informática y criptografía, implica el uso de un par único de claves relacionadas: una clave pública y una clave privada. Al principio, los roles de estas claves pueden parecer contraintuitivos, pero son esenciales para la seguridad de los datos.
- Clave pública: La clave pública, como su nombre lo indica, está diseñada para compartir de manera abierta. En el contexto de JWT y sistemas similares, la clave pública se utiliza para la verificación de firmas, no para el cifrado. Cuando los datos están firmados con la clave privada y el receptor posee la clave pública correspondiente, pueden validar que los datos fueron, de hecho, firmados por el titular de la clave privada y que no han sido alterados durante la transmisión. Sin embargo, en el uso tradicional del cifrado asimétrico, como HTTPS, la clave pública se utiliza para el cifrado, y los datos cifrados solo pueden ser descifrados por el servidor de destino que posee la clave privada emparejada.
- Clave privada: Por el contrario, la clave privada es un secreto muy bien guardado que solo debe ser conocido por su propietario legítimo. En el contexto de JWT, la clave privada se utiliza para crear firmas digitales que pueden ser verificadas por cualquiera que tenga acceso a la clave pública correspondiente. Además, en el contexto del cifrado asimétrico más tradicional, la clave privada, de hecho, se utiliza para el descifrado, permitiendo el acceso a datos que han sido cifrados de forma segura con la clave pública.
Esta disposición única de claves, donde la clave pública verifica o cifra los datos y la clave privada los firma o descifra, forma la base de la transmisión segura de datos y los mecanismos de autenticación de usuarios en el mundo digital. Consulta esta publicación del blog para obtener más detalles.
Algoritmos de cifrado asimétrico: RSA vs EC
Los algoritmos RSA (Rivest-Shamir-Adelman) y EC (Curva Elíptica) son las dos “funciones matemáticas” más comúnmente utilizadas en el cifrado asimétrico. Como desarrolladores, a menudo nos enfrentamos a una elección entre estos algoritmos al tratar con un marco de autenticación y sus JWT. Pero, ¿cuál sería tu elección? Vamos a profundizar en los pros y contras de cada uno.
Algoritmo de firma RSA
- Ventajas:
- Soporte generalizado: RSA es ampliamente compatible en varias plataformas y bibliotecas, lo que garantiza compatibilidad en una amplia gama de entornos.
- Historial prolongado: RSA tiene un largo historial de seguridad confiable, y sus algoritmos son bien entendidos por la comunidad criptográfica.
- Desventajas:
- Tamaños de clave: Las claves RSA son más largas para lograr el mismo nivel de seguridad que EC, resultando en tamaños de token más grandes y mayor carga computacional.
- Rendimiento: Las operaciones RSA tienden a ser más lentas que EC, lo que puede ser una desventaja en aplicaciones con alto tráfico.
Algoritmo de firma EC
- Ventajas:
- Eficiencia: EC cuenta con un rendimiento superior en comparación con RSA, lo que lo hace ideal para aplicaciones con restricciones de recursos o cargas de tráfico altas.
- Tamaños de clave compactos: Las claves EC son mucho más cortas que sus contrapartes RSA, mientras ofrecen niveles de seguridad equivalentes. Esto lleva a una reducción en los requerimientos de almacenamiento y red y a operaciones criptográficas aceleradas.
- Seguridad: EC es altamente considerado por su seguridad robusta, reforzada por las intrincadas matemáticas detrás de las curvas elípticas, lo que lo hace resistente a ataques de fuerza bruta.
- Desventajas:
- Soporte limitado: Algunos sistemas y bibliotecas más antiguos pueden carecer de soporte completo para EC, causando potencialmente problemas de compatibilidad. Por ejemplo, Cloudflare Zero Trust no soporta tokens firmados por EC.
- Complejidad: Implementar EC puede ser más intricado debido a las complejidades matemáticas involucradas.
La elección de Logto de algoritmos de firma JWT
Logto siempre se ha comprometido con los más altos estándares de seguridad y flexibilidad y tiende a utilizar las soluciones más modernas y eficientes en su núcleo. EC ofrece una combinación ganadora de seguridad robusta y eficiencia computacional, lo que lo convierte en un ajuste ideal para las necesidades modernas de autenticación y autorización. Por lo tanto, EC ha sido nuestro algoritmo de clave de firma predeterminado desde la etapa temprana de nuestro producto.
Sin embargo, también hemos recibido numerosos comentarios de nuestros usuarios de que los tokens firmados por EC no son compatibles con algunos sistemas y marcos de terceros, especialmente los más antiguos. Por lo tanto, hemos estado trabajando para proporcionar soporte para el algoritmo RSA también, asegurando que Logto siga siendo adaptable y versátil para todos tus requerimientos de autenticación.
En el próximo lanzamiento, Logto Cloud presentará una función de “Rotación de Clave Privada”, que te permitirá crear una nueva clave privada OIDC y una clave de cookie en tu inquilino. (La clave privada se utiliza para firmar tus tokens JWT y la clave de cookie para firmar tus cookies.)
Esta función ayuda a mitigar los riesgos asociados con la exposición o compromiso prolongado de claves. Rotar regularmente las claves privadas debería ser una práctica fundamental en cualquier estrategia de seguridad organizacional y es altamente recomendada por Logto.
Además, al rotar tu clave de firma JWT, también proporcionaremos una opción para seleccionar el algoritmo de clave de firma entre EC y RSA. Así que si estás enfrentando el problema de no poder conectarte a una plataforma de terceros debido al algoritmo de firma JWT no soportado, ahora es el momento de rotar y seleccionar el algoritmo RSA para tu nueva clave privada.
Dado que esta configuración reside en la página de configuraciones del inquilino, la UI no estará disponible para los usuarios de OSS. Pero no te preocupes, aún puedes lograr esto actualizando a la última versión y ejecutando los siguientes comandos CLI en el directorio raíz de Logto.
En pocas palabras
El cifrado asimétrico ayuda a asegurar tus tokens JWT en tu sistema de autenticación. Tanto los algoritmos EC como RSA son algoritmos esenciales y populares en criptografía. Comprender los pros y contras y los principios matemáticos detrás de estos algoritmos ayuda a tomar mejores decisiones para que tu aplicación funcione con un marco de autenticación y autorización.
Logto continuará explorando y ofreciéndote una experiencia de usuario más segura y robusta.