bcrypt
O que é bcrypt?
bcryptFunção adaptativa de hashing de palavras-passe baseada no cifrador Blowfish com fator de custo ajustável, projetada por Provos e Mazières em 1999.
O bcrypt é um esquema de hashing de palavras-passe publicado em 1999 por Niels Provos e David Mazières (artigo da USENIX "A Future-Adaptable Password Scheme"), que utiliza uma variante do key schedule do Blowfish ("EksBlowfish") para derivar um hash de 192 bits a partir de uma palavra-passe com salt. A dispendiosa fase de configuração de chave entrelaça o salt e a palavra-passe através de expansões de chave repetidas e, em seguida, cifra 64 vezes a cadeia constante "OrpheanBeholderScryDoubt". O seu parâmetro de custo — o log2 do número de rondas de configuração de chave — permite aos defensores aumentar o fator de trabalho à medida que o hardware evolui; um custo de 12 significa 2^12 = 4096 iterações.
Uma peculiaridade definidora é o limite rígido de 72 bytes de entrada do bcrypt: tudo o que ultrapassa o byte 72 é silenciosamente truncado. Foi isto que causou o incidente de outubro de 2024 na Autenticação Delegada AD/LDAP da Okta, em que a Okta construía uma chave de cache aplicando bcrypt a userId + username + password; para utilizadores com um nome de utilizador de 52 ou mais caracteres, a palavra-passe ficava para além do corte de 72 bytes e era ignorada, permitindo que uma credencial previamente em cache se autenticasse. A lição: pré-hashear as entradas longas (por exemplo, SHA-256 e depois Base64) antes do bcrypt, ou usar uma função sem esse limite.
A pegada de memória pequena e fixa do bcrypt também o torna mais fraco que os desenhos com custo de memória contra o cracking por GPU/ASIC. Continua aceitável com custo >= 12, mas a OWASP recomenda agora Argon2id (ou scrypt) para sistemas novos.
flowchart TD
P[Password + 128-bit salt] --> T{Input > 72 bytes?}
T -->|Yes| TR[Bytes 73+ silently truncated]
T -->|No| K
TR --> K[EksBlowfish key setup]
K --> C[Cost: repeat key schedule 2^cost times]
C --> E["Encrypt 'OrpheanBeholderScryDoubt' x64"]
E --> H["$2b$12$salt + 184-bit digest"]● Exemplos
- 01
Django e Spring Security armazenam palavras-passe com bcrypt em custo 12 por defeito.
- 02
Um hash bcrypt típico começa com $2b$12$ seguido por um salt de 22 caracteres e um resumo de 31 caracteres.
● Perguntas frequentes
O que é bcrypt?
Função adaptativa de hashing de palavras-passe baseada no cifrador Blowfish com fator de custo ajustável, projetada por Provos e Mazières em 1999. Pertence à categoria Criptografia da cibersegurança.
O que significa bcrypt?
Função adaptativa de hashing de palavras-passe baseada no cifrador Blowfish com fator de custo ajustável, projetada por Provos e Mazières em 1999.
Como se defender contra bcrypt?
As defesas contra bcrypt costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para bcrypt?
Nomes alternativos comuns: Hash EksBlowfish, bcrypt de Provos-Mazières.