HS256 versus RS256: JWTs simétricos versus assimétricos
Escolha o algoritmo de assinatura adequado para seu sistema de autenticação.
HS256 versus RS256: JWTs simétricos versus assimétricos é uma aula grátis de Cryptology Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cryptology Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cryptology Academy inclui 4 aulas no total.
Famílias de algoritmos
A assinatura de JWT usa algoritmos simétricos (HMAC) ou assimétricos (RSA, ECDSA). HS256 = HMAC-SHA256. RS256 = RSA-PKCS1v1.5-SHA256. ES256 = ECDSA-P256-SHA256. A escolha afeta a distribuição de chaves e o modelo de confiança.
HS256: HMAC simétrico
O HS256 usa uma única chave secreta compartilhada tanto para assinar quanto para verificar. O emissor e cada verificador precisam possuir o mesmo segredo. É simples de implementar, mas exige uma distribuição segura da chave para todos os verificadores.
Casos de uso do HS256
O HS256 é apropriado quando o emissor e o verificador são o mesmo serviço (por exemplo, uma API monolítica que assina e verifica seus próprios tokens). Nunca use HS256 se vários serviços independentes precisarem verificar tokens — todos eles precisarão do segredo.
RS256: RSA assimétrico
O RS256 usa uma chave privada para assinar e uma chave pública para verificar. Somente o servidor de autenticação possui a chave privada. Todos os servidores de recursos buscam a chave pública no endpoint de JWKS e verificam localmente — não é necessário compartilhar segredos.
Casos de uso do RS256
O RS256 é ideal para arquiteturas de microsserviços: o provedor de identidade assina os tokens; cada serviço subsequente verifica usando a chave pública, sem contatar o IDP a cada solicitação. A arquitetura escala horizontalmente sem o risco da distribuição de chaves.
ES256: alternativa com ECDSA
O ES256 usa ECDSA sobre P-256. O tamanho da assinatura é de 64 bytes, contra 256 bytes do RS256 para uma chave de 2048 bits. A verificação é cerca de 10 vezes mais rápida que a do RS256. É preferível quando a largura de banda ou a velocidade de verificação é crítica (APIs móveis, IoT).
Rotação de chaves
Para RS256/ES256: faça a rotação das chaves publicando uma nova chave (novo kid) no JWKS, assinando novos tokens com a nova chave, permitindo um período de tolerância para que os tokens antigos expirem e, depois, removendo a chave antiga. A rotação de HMAC exige redistribuir o novo segredo.
Comparação de desempenho
Verificação HS256: ~1 µs. Verificação RS256: ~100 µs (2048 bits). Verificação ES256: ~50 µs (P-256). HS256 é o mais rápido, mas exige o compartilhamento do segredo. ES256 oferece o melhor equilíbrio entre segurança e desempenho para sistemas distribuídos.
Prévia do ataque ao cabeçalho alg
Uma vulnerabilidade crítica: se o verificador confiar cegamente no cabeçalho alg, um invasor poderá alterar alg de RS256 para HS256 e assinar o token com a chave pública do servidor (que é pública), usando-a como segredo HMAC. Correção: nunca confie no cabeçalho alg.
Seleção de um algoritmo
Decisão: serviço único → HS256. Vários serviços/microsserviços → RS256 ou ES256. Aplicativo móvel de alto volume → ES256. Em caso de dúvida, use ES256 (P-256) ou RS256 com chaves de 2048 bits ou mais. Nunca use RS512 em caminhos sensíveis ao desempenho.
Bibliotecas e padrões
Use PyJWT (Python), jose (Node.js) ou auth0/java-jwt. Sempre fixe o algoritmo esperado na chamada de verificação: jwt.decode(token, secret, algorithms=["HS256"]). Nunca passe algorithms=None nem omita o parâmetro.
Verificação rápida
Por que RS256 é preferível a HS256 em arquiteturas de microsserviços?
Recapitulação
HS256 é simétrico (segredo compartilhado); RS256/ES256 são assimétricos (chave privada para assinar, chave pública para verificar). Use algoritmos assimétricos em sistemas com várias partes. Próximo: exploração de vulnerabilidades de JWT.
Perguntas Frequentes
A aula “HS256 versus RS256: JWTs simétricos versus assimétricos” é grátis?
Sim — o texto completo de “HS256 versus RS256: JWTs simétricos versus assimétricos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cryptology Academy, atualize para CoddyKit PRO. O curso de Cryptology Academy inclui 4 aulas no total.
O que vou aprender em “HS256 versus RS256: JWTs simétricos versus assimétricos”?
Escolha o algoritmo de assinatura adequado para seu sistema de autenticação. Você pratica Cryptology Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Cryptology Academy?
Nenhuma experiência prévia é necessária. Cryptology Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “HS256 versus RS256: JWTs simétricos versus assimétricos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Cryptology Academy?
Sim. Cada aula de Cryptology Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Anatomia do JWT: cabeçalho, carga útil e assinatura
- HS256 versus RS256: JWTs simétricos versus assimétricos
- Vulnerabilidades de JWT: alg=none e confusão de chaves
- Práticas recomendadas para uma implementação segura de JWT