🚀 Oferta especial: 60% OFF no CrazyStack - Últimas vagas!Garantir vaga →
Segurança

Bcrypt e o Limite de 72 Caracteres: Falha de Segurança Silenciosa

Bcrypt possui uma limitação crítica pouco conhecida: trunca senhas com mais de 72 caracteres silenciosamente, criando vulnerabilidades de segurança inesperadas.

CrazyStack Team
8 min de leitura
BcryptSegurançaSenhasHashAutenticação

Por que isso é importante

Bcrypt trunca senhas com mais de 72 caracteres silenciosamente, sem retornar erro. Isso pode criar vulnerabilidades críticas onde "minhasenha123" + 200 caracteres extras se torna apenas "minhasenha123" no hash.

A Descoberta Inesperada

Durante testes de QA, um testador criou uma senha de 255 caracteres e fez uma descoberta alarmante: conseguia fazer login usando apenas os primeiros 72 caracteres da senha, mesmo adicionando caracteres incorretos no final.

Esta descoberta revelou uma limitação crítica do bcrypt que a maioria dos desenvolvedores desconhece: o algoritmo processa apenas os primeiros 72 caracteres de qualquer senha, ignorando completamente o restante.

Como Funciona a Limitação

O bcrypt não retorna erro quando recebe senhas com mais de 72 caracteres. Ele simplesmente trunca a senha internamente, processando apenas os primeiros 72 bytes.

⚠️Exemplo Prático da Vulnerabilidade

Senha original: "minhasenha123" + 200 caracteres aleatórios
Bcrypt processa: apenas "minhasenha123" (primeiros 72 caracteres)
Login funciona com: "minhasenha123" + qualquer coisa após 72 caracteres

Implicações de Segurança

Esta limitação cria cenários de vulnerabilidade onde a segurança aparente de senhas longas é uma ilusão. Usuários podem acreditar ter senhas ultra-seguras quando na prática têm apenas 72 caracteres efetivos.

1
Falsa Sensação de Segurança: Usuários criam senhas de 100+ caracteres pensando ter máxima segurança, quando apenas 72 são efetivos.
2
Vulnerabilidade de Autenticação: Atacantes podem descobrir que senhas longas podem ser truncadas para facilitar ataques de força bruta.
3
Inconsistência de Validação: Sistemas podem aceitar senhas longas no registro mas falhar na validação adequada durante login.
4
Problemas de Compliance: Políticas de segurança que exigem senhas longas podem ser comprometidas silenciosamente.

Detalhes Técnicos

O bcrypt é baseado no algoritmo Blowfish, que foi projetado para chaves de até 72 bytes. Esta limitação é fundamental na arquitetura do algoritmo, não um bug que pode ser corrigido.

Comportamento Interno

Quando o bcrypt recebe uma senha, ele internamente usa apenas os primeiros 72 bytes para gerar o hash. Não há validação ou aviso sobre o truncamento, tornando o problema silencioso e perigoso.

ℹ️Limitação Fundamental

A limitação de 72 caracteres não é um bug, mas uma característica fundamental do algoritmo Blowfish subjacente. Isso significa que não pode ser "corrigida" sem mudar completamente o algoritmo.

Soluções e Mitigações

Para proteger aplicações desta vulnerabilidade, é essencial implementar validações adequadas tanto no frontend quanto no backend.

1
Validação no DTO: Modifique Data Transfer Objects para limitar senhas a 72 caracteres durante registro e login.
2
Validação no Frontend: Implemente validação JavaScript/TypeScript para alertar usuários sobre o limite antes do envio.
3
Documentação Clara: Documente explicitamente o limite de 72 caracteres em políticas de senha e documentação da API.
4
Testes Automatizados: Inclua testes que verificam o comportamento com senhas longas para detectar regressões.

Alternativas ao Bcrypt

Para aplicações que requerem suporte a senhas longas, existem algoritmos alternativos que não possuem esta limitação.

Argon2

Algoritmo moderno recomendado para novos projetos

Prós
  • Sem limitação de tamanho de senha
  • Resistente a ataques de GPU e ASIC
  • Vencedor da competição de hash de senhas
  • Configuração flexível de memória e tempo
  • Suporte nativo em muitas linguagens
Contras
  • Mais novo que bcrypt (menos battle-tested)
  • Maior uso de memória
  • Pode não estar disponível em todos os ambientes
  • Curva de aprendizado para configuração otimizada

Scrypt

Algoritmo com foco em resistência a hardware especializado

Prós
  • Sem limitação de tamanho de senha
  • Resistente a ataques de hardware
  • Configuração flexível de parâmetros
  • Amplamente suportado
Contras
  • Alto uso de memória
  • Pode ser mais lento que bcrypt
  • Configuração complexa de parâmetros
  • Menos popular que bcrypt

PBKDF2

Padrão mais antigo ainda amplamente usado

Prós
  • Sem limitação de tamanho de senha
  • Padrão estabelecido (RFC 2898)
  • Amplamente suportado
  • Configuração simples
Contras
  • Vulnerável a ataques de hardware
  • Menos seguro que alternativas modernas
  • Não resistente a GPU/ASIC
  • Considerado legado para novos projetos

Implementação de Validação

A implementação correta de validação deve ocorrer em múltiplas camadas para garantir proteção completa contra esta vulnerabilidade.

Validação no Backend

Implemente validação no DTO (Data Transfer Object) que processa dados de entrada tanto para registro quanto para login, garantindo que senhas não excedam 72 caracteres.

Validação no Frontend

Adicione validação JavaScript/TypeScript para alertar usuários imediatamente quando tentarem criar senhas muito longas, melhorando a experiência do usuário.

Melhores Práticas de Implementação

Validação Dupla: Implemente no frontend e backend. Mensagem Clara: Informe sobre o limite de 72 caracteres. Documentação: Documente a limitação na API.

Testes de Segurança

Desenvolva testes automatizados que verifiquem especificamente o comportamento com senhas longas para detectar esta vulnerabilidade em sistemas existentes.

1
Teste de Truncamento: Verifique se senhas idênticas nos primeiros 72 caracteres são tratadas como iguais.
2
Teste de Validação: Confirme que o sistema rejeita senhas com mais de 72 caracteres.
3
Teste de Regressão: Monitore alterações no código que possam reintroduzir a vulnerabilidade.
4
Teste de Integração: Valide o comportamento completo desde o frontend até o banco de dados.

Migração Segura

Para sistemas existentes que já usam bcrypt, a migração deve ser cuidadosamente planejada para não comprometer usuários ativos.

Estratégia de Migração

Implemente validação de comprimento imediatamente para novos usuários e force atualização de senhas existentes que possam estar truncadas durante o próximo login.

⚠️Cuidado com Usuários Existentes

Usuários que já possuem senhas longas podem não conseguir fazer login após a correção. Implemente um período de transição ou força atualização de senha no próximo login.

Auditoria de Segurança

Realize auditoria completa em sistemas existentes para identificar possíveis senhas afetadas por esta limitação.

Analise logs de autenticação para identificar padrões que possam indicar exploração desta vulnerabilidade, como tentativas de login bem-sucedidas com senhas parciais.

Checklist de Proteção contra Limitação do Bcrypt

Implementou validação de 72 caracteres no DTO backend
Adicionou validação no frontend com mensagem clara
Documentou a limitação na API e documentação
Criou testes automatizados para senhas longas
Auditou sistema existente para senhas afetadas
Considerou migração para Argon2 ou Scrypt
Implementou monitoramento de tentativas de exploração
Atualizou políticas de senha da organização