Table of contents10 sections
A escolha entre HS256 e RS256 se resume a uma pergunta: quem precisa verificar seus tokens? HS256 usa uma única chave secreta para assinar e verificar, o que é simples e rápido, mas significa que todo verificador também tem o poder de criar tokens. RS256 usa uma chave privada para assinar e uma chave pública separada para verificar, permitindo que você distribua a chave pública para qualquer um sem dar a capacidade de falsificar. Entenda essa diferença e o resto da decisão se encaixa.
A maioria das comparações para em "simétrico versus assimétrico" e deixa você descobrir qual o seu sistema realmente precisa. Este guia oferece uma regra de decisão ligada à sua arquitetura, diferenças reais no nível de código, a troca de desempenho que raramente importa e o único erro de configuração que transforma qualquer algoritmo em uma brecha de falsificação.
HS256 vs RS256 de Relance#
Ambos são algoritmos de assinatura de JSON Web Token definidos na especificação JWA (RFC 7518). Eles protegem a mesma coisa: a integridade de um token, para que um servidor possa confiar que as declarações internas (ID do usuário, função, expiração) não foram adulteradas. Eles diferem totalmente em como a chave de assinatura é estruturada.
| Propriedade | HS256 | RS256 |
|---|---|---|
| Nome completo | HMAC com SHA-256 | Assinatura RSA com SHA-256 |
| Tipo de chave | Um segredo compartilhado (simétrica) | Par de chaves privada/pública (assimétrica) |
| Quem pode assinar | Qualquer um com o segredo | Apenas o detentor da chave privada |
| Quem pode verificar | Qualquer um com o segredo | Qualquer um com a chave pública |
| Tamanho do token | Assinatura menor | Assinatura maior |
| Velocidade | Muito rápido | Mais lento para assinar, rápido para verificar |
| Melhor para | Serviço único confiável | Muitos verificadores, terceiros |
Dica chave: com HS256, o verificador e o signatário usam a mesma chave, então a capacidade de verificação e a capacidade de falsificação são inseparáveis. Com RS256, elas são separadas. Esse único fato orienta quase todas as decisões de arquitetura abaixo.
Como o HS256 Funciona (Simétrico, Segredo Compartilhado)#
HS256 significa HMAC usando SHA-256. HMAC é um hash com chave: você alimenta o cabeçalho do token mais o payload e uma string secreta, e ele produz uma assinatura fixa. Para verificar, o serviço receptor executa o mesmo HMAC com o mesmo segredo e verifica se as assinaturas coincidem.
Como a assinatura e a verificação usam um único segredo idêntico, não existe o conceito de lado "público". Qualquer um que possa verificar um token também pode criar um válido. Isso é aceitável quando um único serviço emite tokens e os verifica por conta própria.
Uma configuração típica de HS256 em Node se parece com isso:
import jwt from "jsonwebtoken";
// Assinar
const token = jwt.sign({ sub: "user_123", role: "admin" }, SHARED_SECRET, {
algorithm: "HS256",
expiresIn: "15m",
});
// Verificar (mesmo segredo)
const claims = jwt.verify(token, SHARED_SECRET, { algorithms: ["HS256"] });
O segredo deve ser uma string longa e aleatória (pelo menos 32 bytes para SHA-256). Um segredo fraco ou adivinhável é a forma mais comum de comprometer implantações HS256, pois um invasor que recupere o segredo pode assinar qualquer coisa.
Quando o HS256 é a escolha certa#
- Um monólito único ou um serviço de backend assina e verifica seus próprios tokens.
- Uma conexão interna entre serviços onde você controla totalmente ambas as pontas e pode rotacionar um segredo compartilhado com segurança.
- Você quer o menor token possível e a assinatura mais rápida, sem necessidade de expor a verificação a terceiros.
Como o RS256 Funciona (Assimétrico, Par de Chaves)#
O RS256 é uma assinatura RSA usando SHA-256. Você gera um par de chaves: uma chave privada que assina e uma chave pública que verifica. A chave privada nunca sai do seu servidor de autenticação. A chave pública pode ser publicada abertamente, pois quem a possui pode verificar tokens, mas nunca criá-los.
Essa separação é o ponto principal. Você pode distribuir a chave pública para uma dúzia de microsserviços, um aplicativo móvel ou um parceiro externo, e nenhum deles conseguirá forjar um token, mesmo que a cópia da chave vaze.
import jwt from "jsonwebtoken";
// Assinar com a chave privada (apenas servidor de autenticação)
const token = jwt.sign({ sub: "user_123", role: "admin" }, PRIVATE_KEY, {
algorithm: "RS256",
expiresIn: "15m",
});
// Verificar com a chave pública (qualquer serviço)
const claims = jwt.verify(token, PUBLIC_KEY, { algorithms: ["RS256"] });
A maioria dos grandes provedores de identidade (Auth0, AWS Cognito, Okta, Google e outros que usam OpenID Connect) emite tokens RS256 e publica suas chaves públicas em um endpoint JWKS (uma URL .well-known/jwks.json). Seus serviços buscam a chave pública lá e verificam localmente, sem nunca contatar o servidor de autenticação por requisição.
Aviso: O RS256 só protege você se mantiver a chave privada em segredo e verificar com a chave pública. Um número surpreendente de bugs vem de configurar acidentalmente um serviço para "verificar" com a chave privada, ou lidar incorretamente com formatos de chave. Em caso de dúvida, inspecione o cabeçalho do token para confirmar se o
algé o esperado.
Quando o RS256 é a escolha certa#
- Microsserviços: muitos serviços precisam verificar tokens, mas apenas um deve emiti-los.
- Verificação por terceiros: um parceiro ou aplicativo cliente deve validar seus tokens sem poder criá-los.
- Você usa um provedor de identidade externo ou OpenID Connect, onde RS256 com JWKS é o padrão.
- Você quer rotacionar chaves de assinatura sem redistribuir um segredo para cada verificador (publique uma nova chave pública, retire a antiga).
ES256 e a Família Mais Ampla de Algoritmos#
HS256 e RS256 são os dois que você encontrará com mais frequência, mas não são as únicas opções. ES256 (ECDSA usando P-256 e SHA-256) também é assimétrico, como RS256, mas usa criptografia de curva elíptica. Ele oferece o mesmo modelo de chave privada para assinar e chave pública para verificar, com chaves e assinaturas muito menores, mantendo os tokens compactos.
| Algoritmo | Tipo | Observações |
|---|---|---|
| HS256 | Simétrico (HMAC) | Segredo compartilhado, rápido, confiança única |
| RS256 | Assimétrico (RSA) | Padrão amplamente suportado para OIDC, assinaturas maiores |
| ES256 | Assimétrico (ECDSA) | Chaves/assinaturas menores, moderno, suporte de bibliotecas ligeiramente menos universal |
Se você precisa de assinatura assimétrica e se preocupa com o tamanho do token ou desempenho em escala, ES256 vale a pena considerar. Se você precisa de máxima compatibilidade com ferramentas e provedores de identidade existentes, RS256 continua sendo o padrão mais seguro. A lógica de decisão entre ES256 e RS256 é a mesma que entre RS256 e HS256, acrescida de uma verificação de compatibilidade com suas bibliotecas.
A Regra de Decisão: Quem Verifica Seus Tokens?#
Esta é a parte que a maioria dos artigos ignora. Esqueça velocidade e tamanho da chave por um momento e responda a uma pergunta: quantas partes distintas verificam seus tokens, e você confia que todas elas também podem assinar?
Use HS256 se todo verificador também for um signatário confiável#
Se a única coisa que verifica seus tokens é o mesmo serviço (ou um pequeno conjunto de serviços internos totalmente confiáveis) que os emite, o modelo de segredo compartilhado é mais simples e rápido. Não há problema de distribuição de chaves porque há um segredo e você controla todos os lugares onde ele está. Um monólito clássico com um único backend é o caso típico para HS256.
Use RS256 (ou ES256) no momento em que a verificação se espalhar#
Assim que um token precisar ser verificado por algo que você não quer que seja capaz de assinar, você precisa de chaves assimétricas. Exemplos:
- Um frontend ou cliente móvel verificando a validade de um token.
- Uma frota de microsserviços, onde comprometer qualquer verificador não deve permitir que um invasor forje tokens para todo o sistema.
- Um consumidor de API externo ou parceiro que deve confiar nos tokens que você emite.
- Qualquer fluxo OpenID Connect / OAuth com um provedor de identidade externo.
A regra em uma frase: se o conjunto de verificadores for maior que o conjunto de partes em que você confia para assinar, use RS256. Com um segredo compartilhado, todo verificador é um potencial falsificador, e esse risco cresce a cada serviço que detém o segredo.
Desempenho: Real, mas Geralmente Não é o Fator Decisivo#
HMAC (HS256) é dramaticamente mais rápido que RSA (RS256) na etapa de assinatura, muitas vezes por uma ordem de grandeza em benchmarks brutos. A verificação RSA é razoavelmente rápida, mas a assinatura RSA é a operação cara. Portanto, se você assina enormes volumes de tokens em uma única máquina, o HS256 vence em CPU.
Para a maioria dos aplicativos, essa diferença é irrelevante. Você normalmente assina um token uma vez no login e o verifica muitas vezes durante sua curta vida útil. A verificação com RS256 é rápida o suficiente para que o custo por requisição seja insignificante em comparação com uma consulta ao banco de dados ou um salto de rede. Escolha seu algoritmo com base no modelo de confiança primeiro, e só deixe o desempenho desempatar se você estiver assinando em escala extrema.
Dica: o tamanho do token é uma preocupação mais prática que a CPU. As assinaturas RS256 são maiores, o que infla cada requisição que carrega o token em um cabeçalho. Se você tem restrições de largura de banda e precisa de chaves assimétricas, o ES256 produz tokens visivelmente menores que o RS256.
O Erro que Quebra Ambos: Confiar no Cabeçalho alg#
Independentemente do algoritmo escolhido, o erro de configuração mais perigoso é deixar o próprio token decidir como será verificado. Um JWT carrega um campo alg em seu cabeçalho, e um código de verificação ingênuo lê esse campo e verifica de acordo. Atacantes exploram isso de duas maneiras conhecidas.
Primeiro, o truque alg: none: um atacante define o algoritmo como none, remove a assinatura, e algumas bibliotecas aceitam felizmente o token não assinado como válido. Segundo, o ataque de confusão RS256 para HS256: um servidor configurado para RS256 publica sua chave pública, um atacante altera o cabeçalho para HS256 e assina um token falsificado usando essa chave pública como se fosse um segredo HMAC. Se o servidor então verificar HS256 com a chave pública que conhece, o token falsificado passa.
A correção é a mesma em ambos os casos e é uma linha de intenção: fixe o algoritmo aceito no verificador. Nunca deixe o token escolher.
// Bom: o servidor dita o algoritmo, o token não
jwt.verify(token, PUBLIC_KEY, { algorithms: ["RS256"] });
Sempre passe uma lista explícita de algoritmos permitidos para sua chamada de verificação e certifique-se de que ela não inclua none. Não misture HS256 e RS256 no mesmo caminho de verificação, pois essa ambiguidade é exatamente o que o ataque de confusão precisa. Se você quiser entender por que apenas decodificar um token não diz nada sobre se ele é genuíno, nosso guia sobre decodificar versus verificar um JWT explica a diferença que pega muitos desenvolvedores.
Quando estiver depurando um token em qualquer algoritmo, cole-o em nosso decodificador JWT gratuito para ler o cabeçalho e confirmar o valor de alg, expiração e claims antes de confiar nele. Ver o cabeçalho real é a maneira mais rápida de detectar um algoritmo adulterado ou incompatível.
Gerenciamento de Chaves: A Diferença Prática no Dia a Dia#
A escolha do algoritmo determina silenciosamente quanto trabalho de gerenciamento de chaves você terá.
Com HS256 você tem um único segredo. É fácil de armazenar, mas rotacioná-lo significa atualizar todos os lugares que o armazenam ao mesmo tempo, e um vazamento em qualquer lugar resulta em comprometimento total. Mantenha-o em um gerenciador de segredos, nunca no controle de versão, e trate qualquer serviço que o armazene como parte do seu núcleo confiável.
Com RS256 você gerencia um par de chaves. A rotação é mais suave: publique uma nova chave pública (geralmente via um endpoint JWKS com um id de chave), comece a assinar com a nova chave privada e retire a chave antiga quando os tokens pendentes expirarem. Os verificadores captam a nova chave pública automaticamente. A desvantagem é mais complexidade inicial, por isso um único serviço pequeno raramente precisa disso.
Para uma visão mais ampla sobre manipulação segura de tokens, incluindo armazenamento, expiração e o que verificar em cada validação, veja nosso guia sobre decodificador JWT e segurança de tokens.
HS256 vs RS256: A Conclusão Final#
A decisão entre HS256 e RS256 não é realmente sobre a força criptográfica, já que ambos são seguros quando configurados corretamente. Trata-se de limites de confiança. Use HS256 quando um único serviço confiável assina e verifica seus próprios tokens e você busca simplicidade e velocidade. Recorra ao RS256 (ou ES256 para tokens menores) assim que mais partes precisarem verificar do que você confia para assinar, o que descreve quase toda configuração de microsserviços, dispositivos móveis, terceiros e OpenID Connect.
Seja qual for sua escolha, fixe o algoritmo no verificador com uma lista de permissões explícita, nunca aceite none e nunca verifique tokens de um algoritmo com a chave de outro. Quando algo parecer estranho, decodifique o token e leia seu cabeçalho para saber exatamente com o que está lidando.
Perguntas Frequentes#
O RS256 é mais seguro que o HS256? Não inerentemente. Ambos são criptograficamente sólidos quando configurados corretamente. O RS256 é mais seguro para sistemas distribuídos porque a chave pública de verificação não pode ser usada para forjar tokens, então vazá-la para vários verificadores tem baixo risco. O HS256 concentra todo o poder em um segredo compartilhado, o que é aceitável para um único serviço confiável, mas mais arriscado quanto mais lugares detêm o segredo.
Posso migrar do HS256 para o RS256 depois? Sim, mas planeje uma janela de transição. Você gerará um par de chaves, começará a assinar novos tokens com a chave privada RS256 e atualizará os verificadores para aceitar RS256. Evite configurar um serviço para aceitar ambos os algoritmos ao mesmo tempo, pois essa ambiguidade possibilita o ataque de confusão de algoritmo. Migre de forma limpa e desative a verificação HS256 após a expiração dos tokens antigos.
Qual algoritmo os provedores de identidade como Auth0 e Cognito usam?
A maioria dos grandes provedores de identidade usa RS256 como padrão e publica suas chaves públicas em um endpoint JWKS (uma URL .well-known/jwks.json). Seus serviços buscam a chave pública e verificam os tokens localmente. É por isso que o RS256 é o padrão prático para qualquer integração OpenID Connect ou OAuth com um provedor externo.
Por que o RS256 é mais lento que o HS256? A assinatura RSA é matematicamente mais pesada que a operação HMAC usada pelo HS256, então a assinatura é visivelmente mais lenta, muitas vezes por uma ordem de grandeza em benchmarks brutos. A verificação é rápida para ambos. Para a maioria dos aplicativos, essa diferença não importa, pois você verifica com muito mais frequência do que assina, e o custo da verificação é pequeno comparado ao tempo de rede e banco de dados.
O que é o ataque de confusão de algoritmo?
É uma exploração onde um servidor que espera RS256 é enganado para verificar um token HS256 usando sua própria chave pública como segredo HMAC. Como a chave pública é, por design, conhecida por atacantes, eles podem forjar um token válido. A correção é fixar o algoritmo aceito no verificador com uma lista de permissões e nunca deixar o cabeçalho alg do token decidir. Você pode confirmar o algoritmo declarado de um token com um decodificador JWT gratuito durante a depuração.
Devo usar ES256 em vez de RS256? Considere ES256 quando precisar de assinatura assimétrica, mas quiser tokens e chaves menores, o que ajuda na largura de banda e em clientes móveis. Ele usa o mesmo modelo de assinatura privada e verificação pública do RS256. A principal ressalva é o suporte ligeiramente menos universal de bibliotecas e provedores, então verifique se sua pilha lida com ES256 antes de se comprometer.
More from Molixa

Quantifique Conquistas no Currículo Sem Números (Guia Prático)
August 13, 2026

Currículo ATS: Fórmula + Exemplos de Tópicos
August 13, 2026

Como Resumir Qualquer Artigo de uma URL em Segundos
August 12, 2026

Como Escrever Títulos de Blog SEO que Geram Cliques
August 12, 2026

Linhas de Assunto de E-mail que São Abertas (Com Exemplos)
August 11, 2026

Por que seus e-mails frios vão para o spam (e como resolver)
August 11, 2026
Try Molixa Tools
50+ free AI tools for content creation, SEO, coding, and more. No watermark, no card.
Explore all tools