O que e o algoritmo bcrypt
Bcrypt e um algoritmo de hashing de senhas criado em 1999 por Niels Provos e David Mazieres, baseado na cifra de bloco Blowfish. Foi projetado especificamente para ser lento e computacionalmente caro, tornando ataques de forca bruta e rainbow tables pratica e inviaveiis.
Diferente de algoritmos de hash de uso geral como MD5 e SHA-256, que foram otimizados para velocidade, o bcrypt nasceu com o objetivo oposto: ser deliberadamente lento para dificultar ataques. Isso o torna ideal para armazenar senhas de usuarios em bancos de dados.
Como o bcrypt funciona internamente
O bcrypt usa uma variante do algoritmo EksBlowfish (Expensive Key Schedule Blowfish). O processo envolve tres etapas principais:
- Geracao de salt: 128 bits de dados aleatorios sao gerados automaticamente e incluidos no hash final.
- Expansao de chave: a senha e o salt passam por multiplas rodadas de processamento intensivo, determinadas pelo fator de custo.
- Cifra final: o texto "OrpheanBeholderScryDoubt" e cifrado 64 vezes com a chave resultante, produzindo o hash de 24 bytes.
O hash final tem 60 caracteres no formato $2a$10$..., contendo a versao, o fator de custo, o salt (22 chars) e o hash (31 chars).
Salt rounds e fator de custo
O parametro "salt rounds" (ou work factor) define quantas vezes o algoritmo de expansao de chave e executado: o numero real de iteracoes e 2^rounds. Com 10 rounds, sao 1.024 iteracoes; com 12, sao 4.096.
A beleza desse design e que voce pode aumentar o custo conforme o hardware evolui, sem precisar reescrever todos os hashes existentes — basta aumentar o valor ao gerar novos hashes. O padrao recomendado atualmente e entre 10 e 12 rounds.
Regra pratica: ajuste o fator de custo para que o hash leve pelo menos 100ms no hardware do seu servidor de producao.
Bcrypt vs SHA-256, Argon2 e scrypt
Cada algoritmo tem caracteristicas distintas para casos de uso diferentes:
- MD5 / SHA-256: rapidos e eficientes em GPU — excelentes para integridade de arquivos, pessimos para senhas. Nao use para senhas.
- Bcrypt: resistente a GPU, custo ajustavel, amplamente adotado, limitado a 72 bytes de senha. Excelente escolha para a maioria dos sistemas.
- scrypt: usa memoria alem de CPU, mais resistente a ASICs. Bom para sistemas que precisam de protecao extra.
- Argon2: vencedor do Password Hashing Competition (2015), parametros de memoria e paralelismo configuraveIs. Considerado estado da arte atualmente.
Para novos projetos, Argon2id e a recomendacao do NIST e OWASP. Para sistemas legados ou quando a simplicidade e prioridade, bcrypt continua sendo excelente.
Quando e quando nao usar bcrypt
Use bcrypt para:
- Armazenar senhas de usuarios em bancos de dados
- Sistemas onde a compatibilidade com bibliotecas existentes (Spring Security, Laravel, Devise) e importante
- Projetos que precisam de uma solucao simples e battle-tested
Nao use bcrypt para:
- Hashing de arquivos ou dados nao relacionados a senhas
- Senhas com mais de 72 bytes (caracteres sao truncados)
- Sistemas com requisitos de conformidade que exigem Argon2 ou PBKDF2
Perguntas frequentes
Posso usar bcrypt no frontend (JavaScript)? Sim, a biblioteca bcryptjs funciona no navegador, como nesta ferramenta. Entretanto, para producao, sempre processe hashes no backend para evitar expor a logica de seguranca.
Por que dois hashes da mesma senha sao diferentes? Porque cada hash usa um salt aleatorio diferente. Isso e proposital e protege contra rainbow tables e ataques de dicionario pre-computados.
O bcrypt e seguro em 2025? Sim, bcrypt com 12+ rounds ainda e considerado seguro. Para maxima seguranca em sistemas novos, prefira Argon2id, mas bcrypt com custo adequado continua sendo uma escolha solida.