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.
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.
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.
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.
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.