Português (Portugal)
  • 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 assinaturas de Token Web JSON (JWT), abordando duas das abordagens de criptografia assimétrica mais populares: RSA e EC. Saiba mais sobre os prós e contras 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 de representar reivindicações segura para URLs. A estrutura inclui um cabeçalho, carga útil e assinatura.

Nos dias de hoje, 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 por um cliente? Como o token é emitido e assinado pelo emissor? Nesta postagem do blog, falaremos sobre criptografia assimétrica e exploraremos os prós e contras dos diferentes algoritmos de assinatura que o Logto usa em seus tokens JWT.

Estrutura do JWT

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 JWT assinada consiste em três partes: o cabeçalho, a carga útil e a assinatura, separadas por pontos (.).

Cabeçalho JOSE (JSON Object Signing and Encryption)

O cabeçalho geralmente consiste nas seguintes partes:

  • typ: O tipo do token, que é JWT.
  • alg: O algoritmo de assinatura utilizado, 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 se o remetente do JWT não é um impostor e se a mensagem não foi adulterada. Ao usar um JWT assinado, deve-se 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 do JWT e sistemas semelhantes, a chave pública é usada para verificação de assinaturas, não para criptografia. Quando os dados são assinados com a chave privada e o destinatário possui a chave pública correspondente, eles podem validar que os dados foram realmente assinados pelo detentor da chave privada e não foram adulterados durante a transmissão.
  • Chave privada: Em contraste, a chave privada é um segredo bem guardado que só deve ser conhecido por seu proprietário legítimo. No contexto do JWT, a chave privada é usada para criar assinaturas digitais que podem ser verificadas por qualquer pessoa com acesso à chave pública correspondente.

Esse arranjo exclusivo de chaves forma a base da transmissão segura de dados e mecanismos de autenticação de usuários no mundo digital. Confira esta postagem no blog para mais detalhes.

Algoritmos de assinatura de chave JWT populares: RSA vs EC

Os algoritmos RSA (Rivest-Shamir-Adelman) e EC (Curva Elíptica) são as duas "funções matemáticas" mais comumente usadas em criptografia assimétrica.

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

Algoritmo de assinatura RSA (Ex.: 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 uma longa história de segurança confiável, e seus algoritmos são bem entendidos pela comunidade criptográfica.
  • Contras:
    1. Tamanhos das chaves: as chaves RSA são mais longas para alcançar o mesmo nível de segurança que o EC, resultando em tamanhos de token maiores e aumento de sobrecarga computacional.
    2. Desempenho: operações RSA tendem a ser mais lentas que o EC, o que pode ser uma desvantagem em aplicações de alto tráfego.

Algoritmo de assinatura EC (Ex.: ECDSASHA384)

  • Prós:
    1. Eficiência: o EC possui desempenho superior em comparação ao RSA, tornando-o ideal para aplicações com restrições de recursos ou cargas de tráfego altas.
    2. Tamanhos de chave compactos: as chaves EC são muito mais curtas 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: o EC é altamente considerado por sua segurança robusta, fortificado pela intrincada matemática por trás das curvas elípticas, tornando-o resiliente contra ataques de força bruta.
  • Contras:
    1. Suporte limitado: alguns sistemas antigos e bibliotecas podem não suportar completamente o EC, possivelmente causando problemas de compatibilidade. Ex.: O Cloudflare Zero Trust não suporta tokens assinados com EC.
    2. Complexidade: implementar EC pode ser mais complicado devido às complexidades matemáticas envolvidas.

A escolha dos algoritmos de assinatura JWT do Logto

Logto sempre foi 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. O EC oferece uma combinação vencedora de segurança robusta e eficiência computacional, tornando-o ideal para as necessidades modernas de autenticação e autorização. Portanto, o EC tem sido nosso algoritmo de chave de assinatura padrão desde o estágio inicial de nosso produto.

No entanto, também reconhecemos que os tokens assinados com EC não são compatíveis com alguns sistemas e frameworks de terceiros, especialmente os legados. Portanto, introduzimos uma funcionalidade 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

Então, se você está enfrentando o problema de não conseguir se conectar a uma plataforma de terceiros devido ao algoritmo de assinatura JWT não suportado, agora é hora 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 a longo prazo das chaves. Rotacionar regularmente chaves privadas deve ser uma prática fundamental na estratégia de segurança de qualquer organização e é altamente recomendado pelo Logto.

Recapitulação: Os algoritmos de assinatura JWT mais utilizados: 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 de sua aplicação.

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 sua aplicação trabalhar com um framework de autenticação e autorização.

Logto continuará a explorar e oferecer a você uma experiência de usuário mais segura e robusta.