Introdução aos algoritmos de assinatura EC e RSA em JWT
Aprenda os fundamentos da criptografia assimétrica e compreenda as vantagens e desvantagens dos dois populares algoritmos de assinatura de chave JWT - EC e RSA.
Antecedentes
No mundo digital, a busca por uma segurança aprimorada na transmissão de dados tem permanecido constante e em constante evolução. Atualmente, 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, vamos falar sobre criptografia assimétrica e explorar as vantagens e desvantagens 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 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 dos JWT e sistemas similares, a chave pública é usada para verificação de assinatura, não para 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. No entanto, no uso tradicional da criptografia assimétrica, como o HTTPS, a chave pública é usada para criptografar, e os dados criptografados só podem ser descriptografados pelo servidor de destino que possua a chave privada emparelhada.
- Chave privada: Em contraste, a chave privada é um segredo bem guardado que deve ser conhecido apenas por seu proprietário legítimo. No contexto dos 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 uma criptografia assimétrica mais tradicional, a chave privada é de fato usada para descriptografar, permitindo o acesso aos dados que foram criptografados de forma segura com a chave pública.
Este arranjo único de chaves, onde a chave pública verifica ou criptografa os dados e a chave privada assina ou descriptografa, forma a base de mecanismos seguros de transmissão de dados e autenticação de usuários no mundo digital. Verifique este post no blog para mais detalhes.
Algoritmos de criptografia assimétrica: 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 somos apresentados a uma escolha entre esses algoritmos ao lidar com um framework de autenticação e seus JWTs. Mas qual seria sua escolha? Vamos explorar as vantagens e desvantagens de cada um.
Algoritmo de assinatura RSA
- Prós:
- Suporte amplo: O RSA é amplamente suportado em várias plataformas e bibliotecas, garantindo compatibilidade em uma ampla gama de ambientes.
- Longo histórico: O RSA tem um longo hist órico de segurança confiável, e seus algoritmos são bem compreendidos pela comunidade criptográfica.
- Contras:
- Tamanho das chaves: As chaves RSA são mais longas para alcançar o mesmo nível de segurança que as EC, resultando em tamanhos de token maiores e maior sobrecarga computacional.
- Desempenho: As operações RSA tendem a ser mais lentas que as EC, o que pode ser uma desvantagem em aplicações de alto tráfego.
Algoritmo de assinatura EC
- Prós:
- Eficiência: A EC oferece desempenho superior em comparação com o RSA, tornando-a ideal para aplicações com restrições de recursos ou cargas de tráfego elevadas.
- Tamanho compacto das chaves: 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: A EC é altamente considerada por sua robustez de segurança, fortalecida pela matemática intricada por trás das curvas elípticas, tornando-a resiliente contra ataques de força bruta.
- Contras:
- Suporte limitado: Alguns sistemas e bibliotecas mais antigos podem não ter suporte abrangente para EC, potencialmente causando problemas de compatibilidade. Por exemplo, o Cloudflare Zero Trust não suporta tokens assinados com EC.
- Complexidade: Implementar EC pode ser mais intrincado devido às complexidades matemáticas envolvidas.
Escolha de algoritmos de assinatura JWT pelo Logto
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 eficazes em seu núcleo. A EC oferece uma combinação vencedora de segurança robusta e eficiência computacional, tornando-a uma escolha ideal para as necessidades modernas de autenticação e autorização. Portanto, a EC tem sido nosso algoritmo de chave de assinatura padrão desde o início do nosso produto.
No entanto, também recebemos inúmeros feedbacks de nossos utilizadores, 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 para fornecer suporte ao algoritmo RSA também, garantindo que o Logto permaneça adaptável e versátil para todas as suas necessidades de autenticação.
Em um próximo lançamento, o Logto Cloud introduzirá um recurso de “Rotação de Chave Privada”, que permite criar uma nova chave privada OIDC e chave de cookie no seu inquilino. (A chave privada é usada para assinar seus tokens JWT e a chave de cookie para assinar seus cookies.)
Este recurso ajuda a mitigar os riscos associados à exposição ou comprometimento de chaves a 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 rodar sua chave de assinatura JWT, também forneceremos uma opção para selecionar o algoritmo de chave de assinatura entre EC e RSA. Portanto, 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 rodar e selecionar o algoritmo RSA para sua nova chave privada.
Como essa configuração reside na página de configurações do inquilino, a interface do usuário não estará disponível para usuários OSS. Mas não se preocupe, você ainda pode conseguir isso ao atualizar para a última versão e executar os seguintes comandos CLI no diretório raiz do Logto.
Em resumo
A criptografia assimétrica ajuda a proteger seus tokens JWT no seu sistema de autenticação. Ambos os algoritmos EC e RSA são essenciais e populares na criptografia. Compreender as vantagens e desvantagens e os princípios matemáticos por trás desses algoritmos ajuda a tomar decisões melhores para sua aplicação ao trabalhar com um framework 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.