Segurança web

Hash bcrypt

Definição

O bcrypt é uma função de hash criada para armazenar senhas. Ela incorpora um salt aleatório e um fator de custo ajustável que torna cada cálculo propositalmente lento, o que freia bastante os ataques contra um banco de dados roubado. O WordPress o usa por padrão desde a versão 6.8.

Hash bcrypt, Segurança web

O bcrypt foi apresentado em 1999 por Niels Provos e David Mazières, do projeto OpenBSD, em um artigo chamado “A Future-Adaptable Password Scheme”. A ideia central está no próprio título: uma função de hash para senhas precisa poder ficar mais lenta à medida que os computadores ficam mais rápidos. Enquanto uma função rápida como o SHA-256 permite que um invasor teste bilhões de candidatas, o bcrypt torna cada tentativa custosa, tanto para ele quanto para o servidor.

Como o bcrypt funciona

O bcrypt se baseia em uma variante do algoritmo de criptografia Blowfish, cuja preparação de chaves é propositalmente cara. Três elementos entram no cálculo:

  • a senha, da qual só os primeiros 72 bytes são considerados;
  • um salt aleatório, sorteado para cada senha;
  • um fator de custo: cada unidade a mais dobra o tempo de cálculo.

O resultado reúne tudo o que é preciso para verificar a senha mais tarde: o identificador do algoritmo ($2y$ no PHP), o custo, o salt e o hash. A função password_verify() relê esses parâmetros e refaz o cálculo, sem necessidade de guardar o salt separadamente.

$hash = password_hash( $senha, PASSWORD_BCRYPT ); // custo 12 por padrão desde o PHP 8.4
password_verify( $digitada, $hash ); // true ou false

O bcrypt comparado a outros algoritmos

O guia da OWASP sobre armazenamento de senhas coloca o Argon2id como primeira escolha, o scrypt em seguida, e reserva o bcrypt para sistemas legados, com fator de custo de pelo menos 10 e atenção especial ao limite de 72 bytes. Ainda assim, o bcrypt continua muito difundido porque está disponível em todo lugar: é o único algoritmo que o PHP garante em todas as instalações. Em qualquer caso, ele protege muito melhor do que uma função rápida como MD5 ou SHA-1 usada sozinha, que pode ser calculada em velocidade enorme em uma placa de vídeo.

No WordPress

Durante anos, o WordPress usou a biblioteca phpass, baseada em MD5 com muitas iterações. O WordPress 6.8, lançado em 15 de abril de 2025, passou a usar bcrypt para as senhas dos usuários. Os detalhes, publicados no blog dos desenvolvedores do núcleo:

Esquema em quatro camadas: a senha digitada passa por um pré-hash HMAC-SHA384 codificado em base64 para contornar o limite de 72 bytes, depois pelo bcrypt com um salt aleatório e um fator de custo, e o hash armazenado começa com $wpy$ seguido do custo, do salt e do resultado
O caminho de uma senha no WordPress 6.8 e versões posteriores.
  • A senha passa primeiro por um pré-hash HMAC-SHA384 e depois é codificada em base64, para que senhas com mais de 72 bytes mantenham toda a sua entropia.
  • Os hashes levam o prefixo $wp$2y$, que os diferencia de um bcrypt comum.
  • Os hashes antigos do phpass continuam aceitos e são convertidos para bcrypt no próximo login ou na próxima troca de senha de cada usuário.
  • As senhas de aplicativo, as chaves de redefinição e alguns outros tokens usam outra função, o BLAKE2b da biblioteca Sodium; as senhas de aplicativo já criadas não são convertidas automaticamente.
  • O filtro wp_hash_password_algorithm permite escolher o Argon2id se o servidor oferecer suporte, e o wp_hash_password_options permite ajustar os parâmetros, como o custo.

Você não precisa fazer nada. Só tenha em mente que voltar para o WordPress 6.7 ou anterior impediria os usuários já convertidos de fazer login até redefinirem a senha. Nosso artigo sobre o wp-config.php comenta essa mudança e as chaves de segurança do arquivo.

O que o bcrypt não faz

O bcrypt protege as senhas depois de um vazamento do banco de dados: ele torna mais lenta a sua recuperação offline. Ele não faz nada contra um ataque de força bruta online na página de login, nem contra uma senha que já apareceu em um vazamento e é reutilizada em outro lugar, a base do credential stuffing. Para isso, conte com senhas únicas, limite de tentativas e a autenticação de dois fatores, que o WP Masquerade Pro oferece junto com a limitação de logins.

Para saber mais

  • Artigo wp-config.php: as configurações de segurança que realmente importam
  • Página Proteção contra força bruta no WordPress

Fontes

  1. Make WordPress Core: WordPress 6.8 will use bcrypt for password hashing (link externo, abre em uma nova aba)
  2. WordPress Developer Resources: wp_hash_password() (link externo, abre em uma nova aba)
  3. OWASP: Password Storage Cheat Sheet (link externo, abre em uma nova aba)
  4. USENIX 1999: A Future-Adaptable Password Scheme (Provos et Mazières) (link externo, abre em uma nova aba)

Todas as definições

Segurança WordPress, sem ruído

Um e-mail quando importa: novos ataques observados, atualizações do plugin e guias práticos. Sem spam, cancelamento com um clique.

Comece de graça e mude para o Pro quando estiver pronto

A versão gratuita já oculta o WordPress e muda o endereço da página de login. O Pro acrescenta aliases, verificação em duas etapas e monitoramento.