Português (Brasil)
  • segurança
  • criptografia
  • jws
  • assimétrico
  • ec
  • rsa
  • chave pública
  • chave privada
  • token
  • assinatura jwt

Visão geral dos algoritmos de assinatura JWT

Explore os algoritmos de assinatura de JSON Web Token (JWT), abordando duas das abordagens mais populares de criptografia assimétrica: RSA e EC. Aprenda sobre as vantagens e desvantagens de cada algoritmo e como o Logto os utiliza para proteger seus tokens JWT.

Charles
Charles
Developer

O que é um JWT?

JSON Web Token (JWT) é uma maneira compacta e segura baseada em URL para representar reivindicações. A estrutura inclui um cabeçalho, carga útil e assinatura.

Hoje em dia, os JWTs foram amplamente adotados e desempenham um papel crucial no OAuth 2.0 e OIDC. Mas como um servidor de autorização verifica e confia em um JWT enviado de um cliente? Como o token é emitido e assinado pelo emissor? Neste post, falaremos sobre criptografia assimétrica e aprofundaremos os prós e contras de diferentes algoritmos de assinatura que o Logto usa em seus tokens JWT.

Estrutura JWT

O Logto assina todos os tokens JWT, incluindo tokens de ID e tokens de acesso. Um JWT assinado também é conhecido como JWS (JSON Web Signature). Uma estrutura de JWT assinada consiste em três partes: o cabeçalho, a carga útil e a assinatura, separados por pontos (.).

Cabeçalho JOSE (JSON Object Signing and Encryption)

O cabeçalho geralmente consiste nas seguintes partes:

  • typ: O tipo de token, que é o JWT.
  • alg: O algoritmo de assinatura sendo usado, como RS256 ou ES384.
  • kid: Uma dica indicando qual chave foi usada para proteger o JWT.

Carga útil

A carga útil contém as reivindicações, que são declarações sobre uma entidade (tipicamente, o usuário) e dados adicionais. Por exemplo, um token de ID pode conter as seguintes reivindicações:

Assinatura

A assinatura é usada para verificar que o remetente do JWT não é um impostor e que a mensagem não foi adulterada. Ao usar um JWT assinado, é necessário verificar a assinatura do token para garantir a integridade do token. Confira este guia sobre como validar tokens JWT para proteger sua API.

O que é criptografia assimétrica?

A criptografia assimétrica, também conhecida como criptografia de chave pública, um conceito fundamental em segurança computacional e criptografia, envolve o uso de um par único de chaves relacionadas: uma chave pública e uma chave privada.

Definições de chaves públicas e privadas

  • Chave pública: A chave pública, como o nome sugere, é projetada para compartilhamento aberto. No contexto de JWT e sistemas semelhantes, a chave pública é usada para verificação de assinatura, não criptografia. Quando os dados são assinados com a chave privada e o destinatário possui a chave pública correspondente, ele pode validar que os dados foram de fato assinados pelo detentor da chave privada e não foram adulterados durante a transmissão.
  • Chave privada: Em contraste, a chave privada é um segredo profundamente guardado que deve ser conhecido apenas por seu proprietário legítimo. No contexto de JWT, a chave privada é usada para criar assinaturas digitais que podem ser verificadas por qualquer pessoa com acesso à chave pública correspondente.

Esse arranjo único de chaves forma a base da transmissão segura de dados e dos mecanismos de autenticação de usuários no mundo digital. Confira este post para mais detalhes.

Algoritmos de chave de assinatura JWT populares: RSA vs EC

Os algoritmos RSA (Rivest-Shamir-Adelman) e EC (Elliptic Curve) são as duas “funções matemáticas” mais comumente usadas em criptografia assimétrica.

Como desenvolvedores, frequentemente temos uma escolha entre esses algoritmos ao lidar com uma estrutura de autenticação e seus JWTs. Mas qual seria a sua escolha? Vamos nos aprofundar nos prós e contras de cada um.

Algoritmo de assinatura RSA (por exemplo, RSASHA256)

  • Prós:
    1. Suporte amplo: o RSA é amplamente suportado em várias plataformas e bibliotecas, garantindo compatibilidade em uma ampla gama de ambientes.
    2. Histórico longo: o RSA tem um longo histórico de segurança confiável, e seus algoritmos são bem compreendidos pela comunidade criptográfica.
  • Contras:
    1. Tamanhos de chave: as chaves RSA são mais longas para alcançar o mesmo nível de segurança que EC, resultando em tamanhos de token maiores e aumento da sobrecarga computacional.
    2. Desempenho: as operações RSA tendem a ser mais lentas do que EC, o que pode ser uma desvantagem em aplicativos de alto tráfego.

Algoritmo de assinatura EC (por exemplo, ECDSASHA384)

  • Prós:
    1. Eficiência: a EC possui um desempenho superior em comparação com o RSA, tornando-a ideal para aplicativos com restrições de recursos ou cargas de tráfego altas.
    2. Tamanhos de chave compactos: as chaves EC são muito mais curtas do que suas contrapartes RSA, oferecendo níveis de segurança equivalentes. Isso leva a requisitos reduzidos de armazenamento e rede e operações criptográficas aceleradas.
    3. Segurança: a EC é altamente valorizada por sua segurança robusta, fortalecida pelos complexos matemáticos por trás das curvas elípticas, tornando-a resistente a ataques de força bruta.
  • Contras:
    1. Suporte limitado: alguns sistemas e bibliotecas mais antigas podem não oferecer suporte abrangente a EC, potencialmente causando problemas de compatibilidade. Por exemplo, Cloudflare Zero Trust não suporta tokens assinados por EC.
    2. Complexidade: implementar EC pode ser mais intrincado devido às complexidades matemáticas envolvidas.

Escolha do Logto de algoritmos de assinatura JWT

O Logto sempre esteve comprometido com os mais altos padrões de segurança e flexibilidade e tende a usar as soluções mais modernas e eficientes em seu núcleo. A EC oferece uma combinação vencedora de segurança robusta e eficiência computacional, tornando-a um ajuste ideal para as necessidades modernas de autenticação e autorização. Portanto, a EC tem sido nosso algoritmo padrão de chave de assinatura desde o estágio inicial de nosso produto.

No entanto, também reconhecemos que os tokens assinados por EC não são compatíveis com alguns sistemas e frameworks de terceiros, especialmente os legados. Assim, também introduzimos um recurso para alterar seu algoritmo de chave de assinatura JWT rotacionando suas chaves privadas.

Captura de tela da UI do Console Logto para rotacionar suas chaves privadas

Portanto, se você estiver enfrentando o problema de não conseguir se conectar a uma plataforma de terceiros devido ao algoritmo de assinatura JWT não suportado, agora é o momento de rotacionar e selecionar o algoritmo RSA para sua nova chave privada.

Este recurso também ajuda a mitigar os riscos associados à exposição ou comprometimento de chaves a longo prazo. Realizar a rotação regular de chaves privadas deve ser uma prática fundamental na estratégia de segurança de qualquer organização e é altamente recomendada pelo Logto.

Recapitulação: os algoritmos de assinatura JWT mais comumente usados: RSA e EC

Assinar tokens JWT garante a integridade e autenticidade dos dados transmitidos. A escolha do algoritmo de assinatura pode ter um impacto significativo na segurança, desempenho e compatibilidade do seu aplicativo.

Ambos os algoritmos RSA e EC são essenciais e populares na criptografia. Compreender os prós e contras e os princípios matemáticos por trás desses algoritmos ajuda a tomar melhores decisões para que seu aplicativo funcione com um framework de autenticação e autorização.

O Logto continuará explorando e oferecendo uma experiência de usuário mais segura e robusta.