• seguridad
  • cifrado
  • jws
  • asimétrico
  • ec
  • rsa
  • clave pública
  • clave privada
  • token
  • firma jwt

Descripción general de los algoritmos de firma JWT

Explora los algoritmos de firma de JSON Web Token (JWT), cubriendo dos de los enfoques más populares de cifrado asimétrico: RSA y EC. Conoce los pros y los contras de cada algoritmo y cómo Logto los utiliza para asegurar tus tokens JWT.

Charles
Charles
Developer

¿Qué es un JWT?

JSON Web Token (JWT) es una forma compacta y segura de representar afirmaciones que es segura para URLs. La estructura incluye un encabezado, carga útil y firma.

Hoy en día, los 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 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 los contras de los diferentes algoritmos de firma que Logto utiliza en sus tokens JWT.

Estructura de JWT

Logto firma todos los tokens JWT, incluyendo tanto tokens de ID como tokens de acceso. Un JWT firmado también se conoce como JWS (JSON Web Signature). Una estructura de JWT firmado consta de tres partes: el encabezado, la carga útil y la firma, separadas por puntos (.).

Encabezado JOSE (Firmado y Encriptado de Objetos JSON)

El encabezado generalmente consta de las siguientes partes:

  • typ: El tipo de token, que es JWT.
  • alg: El algoritmo de firma utilizado, como RS256 o ES384.
  • kid: Un indicador que señala qué clave se utilizó para asegurar el JWT.

Carga útil

La carga útil contiene las afirmaciones, que son declaraciones sobre una entidad (típicamente, el usuario) y datos adicionales. Por ejemplo, un token de ID podría contener las siguientes afirmaciones:

Firma

La firma se utiliza para verificar que el remitente del JWT no es un impostor y que el mensaje no ha sido alterado. Al utilizar un JWT firmado, debes verificar la firma del token para asegurar la integridad del mismo. Consulta esta guía sobre cómo validar tokens JWT para proteger tu API.

¿Qué es el cifrado asimétrico?

El cifrado asimétrico, también conocido como criptografía de clave pública, un concepto fundamental en seguridad informática y criptografía, involucra el uso de un par único de claves relacionadas: una clave pública y una clave privada.

Definiciones de claves públicas y privadas

  • Clave pública: La clave pública, como su nombre indica, está diseñada para compartir abiertamente. En el contexto de JWT y sistemas similares, la clave pública se usa para la verificación de la firma, no para el cifrado. Cuando los datos se firman con la clave privada y el receptor posee la clave pública correspondiente, pueden validar que los datos fueron firmados efectivamente por el poseedor de la clave privada y no han sido alterados durante la transmisión.
  • Clave privada: En contraste, la clave privada es un secreto muy bien guardado que solo debe ser conocido por su dueño legítimo. En el contexto de JWT, la clave privada se usa para crear firmas digitales que pueden ser verificadas por cualquier persona que tenga acceso a la clave pública correspondiente.

Este arreglo único de claves forma la base de la transmisión de datos segura y mecanismos de autenticación de usuarios en el mundo digital. Consulta esta entrada de blog para más detalles.

Algoritmos populares de clave de firma JWT: 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 se nos presenta la elección entre estos algoritmos cuando se trata de un marco de autenticación y sus JWT. Pero, ¿cuál sería tu elección? Vamos a profundizar en los pros y los contras de cada uno.

Algoritmo de firma RSA (Ejemplo: RSASHA256)

  • Pros:
    1. Amplio soporte: RSA tiene un amplio soporte en varias plataformas y bibliotecas, asegurando compatibilidad en una amplia gama de entornos.
    2. Larga trayectoria: RSA tiene una larga historia de seguridad confiable, y sus algoritmos son bien entendidos por la comunidad criptográfica.
  • Contras:
    1. 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 sobrecarga computacional.
    2. Rendimiento: Las operaciones de RSA tienden a ser más lentas que las de EC, lo cual puede ser una desventaja en aplicaciones de alto tráfico.

Algoritmo de firma EC (Ejemplo: ECDSASHA384)

  • Pros:
    1. Eficiencia: EC presume un rendimiento superior en comparación con RSA, haciéndolo ideal para aplicaciones con limitaciones de recursos o cargas de tráfico altas.
    2. 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 reducir los requisitos de almacenamiento y red y acelerar las operaciones criptográficas.
    3. Seguridad: EC es altamente valorado por su robusta seguridad, fortalecida por las complejas matemáticas detrás de las curvas elípticas, haciéndolo resistente a ataques de fuerza bruta.
  • Contras:
    1. Soporte limitado: Algunos sistemas y bibliotecas antiguos pueden carecer de soporte integral para EC, lo que podría causar problemas de compatibilidad. Por ejemplo, Cloudflare Zero Trust no soporta tokens firmados con EC.
    2. Complejidad: Implementar EC puede ser más intrincado debido a las complejidades matemáticas involucradas.

Elección de Logto de algoritmos de firma JWT

Logto siempre ha estado comprometido con los más altos estándares de seguridad y flexibilidad y tiende a usar 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 reconocido que los tokens firmados con EC no son compatibles con algunos sistemas y marcos de terceros, especialmente los heredados. Por lo tanto, también hemos introducido una función para cambiar tu algoritmo de clave de firma JWT al rotar tus claves privadas.

Captura de pantalla de la interfaz de usuario de Logto Console para rotar tus claves privadas

Así que si te estás enfrentando al problema de no poder conectarte a una plataforma de terceros debido a un algoritmo de firma JWT no soportado, ahora es el momento de rotar y seleccionar el algoritmo RSA para tu nueva clave privada.

Esta función también ayuda a mitigar los riesgos asociados con la exposición o compromiso a largo plazo de las claves. Rotar regularmente las claves privadas debería ser una práctica fundamental en cualquier estrategia de seguridad de la organización y es muy recomendable por Logto.

Resumen: Los algoritmos de firma JWT comúnmente utilizados: RSA y EC

Firmar tokens JWT asegura la integridad y autenticidad de los datos transmitidos. La elección del algoritmo de firma puede tener un impacto significativo en la seguridad, rendimiento y compatibilidad de tu aplicación.

Tanto los algoritmos RSA como EC son algoritmos esenciales y populares en criptografía. Comprender los pros y los 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.