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

Introdução aos algoritmos de assinatura EC e RSA em JWT

Aprenda o essencial sobre criptografia assimétrica e compreenda os prós e contras dos dois populares algoritmos de chave de assinatura JWT - EC e RSA.

Charles
Charles
Developer

Contexto

No mundo digital, a busca por segurança aprimorada na transmissão de dados tem sido constante e em constante evolução. Hoje em dia, os JSON Web Tokens (JWT) 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 token JWT enviado de um cliente? Como o token é emitido e assinado pelo emissor? Neste artigo de blog, falaremos sobre criptografia assimétrica e mergulharemos nos prós e contras dos diferentes algoritmos de assinatura que o Logto usa em seus tokens JWT.

Compreendendo a criptografia assimétrica

A criptografia assimétrica, também conhecida como criptografia de chave pública, um conceito fundamental na segurança de computadores e na criptografia, envolve o uso de um par único de chaves relacionadas: uma chave pública e uma chave privada. Os papéis dessas chaves podem parecer contraintuitivos a princípio, mas são essenciais para a segurança dos dados.

  • Chave pública: A chave pública, como o nome sugere, é projetada para compartilhamento aberto. No contexto de JWT e sistemas similares, a chave pública é usada para verificação de assinatura, não para encriptação. 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 realmente assinados pelo detentor da chave privada e não foram alterados durante a transmissão. No entanto, no uso tradicional de criptografia assimétrica, como HTTPS, a chave pública é usada para encriptação, e os dados encriptados só podem ser descriptografados pelo servidor alvo que possui a chave privada emparelhada.
  • Chave privada: Em contraste, a chave privada é um segredo bem guardado que deve ser conhecido apenas pelo 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. Além disso, no contexto de criptografia assimétrica mais tradicional, a chave privada é realmente usada para descriptografia, permitindo acesso aos dados que foram encriptados com segurança com a chave pública.

Esta disposição única de chaves, onde a chave pública verifica ou encripta os dados e a chave privada assina ou descriptografa, forma a base para a transmissão segura de dados e mecanismos de autenticação de usuários no mundo digital. Confira este artigo de blog para mais detalhes.

Algoritmos de criptografia assimétrica: 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, muitas vezes nos deparamos com uma escolha entre esses algoritmos ao lidar com uma estrutura de autenticação e seus JWTs. Mas qual seria a sua escolha? Vamos explorar os prós e contras de cada um.

Algoritmo de assinatura RSA

  • Prós:
    1. Suporte generalizado: O RSA é amplamente suportado em várias plataformas e bibliotecas, garantindo compatibilidade em uma ampla gama de ambientes.
    2. Histórico prolongado: O RSA possui uma longa história 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 o EC, resultando em tamanhos de token maiores e maior sobrecarga computacional.
    2. Desempenho: As 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

  • Prós:
    1. Eficiência: O EC oferece desempenho superior em comparação com o RSA, tornando-o ideal para aplicações com restrições de recursos ou altas cargas de tráfego.
    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 à redução de requisitos de armazenamento e rede e acelera as operações criptográficas.
    3. Segurança: O EC é altamente conceituado por sua robusta segurança, fortalecida pelas complexas matemáticas por trás das curvas elípticas, tornando-o resiliente a ataques de força bruta.
  • Contras:
    1. Suporte limitado: Alguns sistemas e bibliotecas mais antigos podem não ter suporte abrangente ao EC, potencialmente causando problemas de compatibilidade. Ex.: O Cloudflare Zero Trust não suporta tokens assinados com EC.
    2. Complexidade: Implementar o EC pode ser mais intrincado devido às complexidades matemáticas envolvidas.

Escolha do Logto para 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 performáticas em seu núcleo. O EC oferece uma combinação vencedora de segurança robusta e eficiência computacional, tornando-o uma escolha ideal para 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 recebemos inúmeras opiniões de nossos usuários de que os tokens assinados com EC não são compatíveis com alguns sistemas e frameworks de terceiros, especialmente os legados. Assim, temos trabalhado em fornecer suporte para o algoritmo RSA também, garantindo que o Logto permaneça adaptável e versátil para todas as suas necessidades de autenticação.

Na próxima versão, o Logto Cloud introduzirá um recurso de “Rotação de Chave Privada”, que permitirá a criação de uma nova chave privada OIDC e chave de cookie em seu locatário. (A chave privada é usada para assinar seus tokens JWT e a chave de cookie para assinar seus cookies.)

Captura de tela da UI do Console para girar chaves OIDC

Este recurso ajuda a mitigar os riscos associados à exposição ou comprometimento de chaves de longo prazo. 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.

Além disso, ao rotacionar sua chave de assinatura JWT, também forneceremos uma opção para selecionar o algoritmo de chave de assinatura entre EC e RSA. Então, se você está enfrentando problemas ao conectar-se 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.

Como essa configuração está localizada na página de configurações do locatário, a interface do usuário não estará disponível para usuários OSS. Mas não se preocupe, você ainda pode conseguir isso atualizando para a última versão e executando os seguintes comandos CLI no diretório raiz do Logto.

Em resumo

A criptografia assimétrica ajuda a proteger seus tokens JWT em seu sistema de autenticação. Ambos os algoritmos EC e RSA são algoritmos 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 decisões melhores para que seu aplicativo funcione com uma estrutura de autenticação e autorização.

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