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.
CharlesDeveloper
Pare de perder semanas com autenticação de utilizadores
Lance aplicações seguras mais rapidamente com o Logto. Integre a autenticação de utilizadores em minutos e concentre-se no seu produto principal.
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.
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:
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:
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.
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.
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#
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.
Suporte amplo: o RSA é amplamente suportado em várias plataformas e bibliotecas, garantindo compatibilidade em uma ampla gama de ambientes.
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:
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.
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.
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.
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.
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:
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.
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.
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.