Hashing de senhas em PHP: bcrypt, argon2 e custo ideal
Segurança Web

Hashing de senhas em PHP: bcrypt, argon2 e custo ideal

8 min de leitura

MD5 e SHA-1 estão mortos para senhas. Entenda a diferença entre bcrypt e argon2id, como calibrar o cost e por que auto-rehash é essencial.

MD5 e SHA-1 estão mortos para senhas

MD5 e SHA-1 são funções hash de propósito geral — rápidas, o que é exatamente o problema para senhas. GPUs modernas podem calcular bilhões de hashes MD5 por segundo, tornando ataques de dicionário triviais.

bcrypt: o padrão atual

bcrypt foi projetado especificamente para senhas. O parâmetro de custo (cost) controla o número de iterações — aumentar o custo em 1 dobra o tempo de cálculo. O custo ideal é o mais alto que mantém o login abaixo de ~300ms no seu hardware.

password_hash($plain, PASSWORD_BCRYPT, ['cost' => 12]);

argon2id: o substituto moderno

argon2id adiciona resistência a ataques de hardware (FPGAs, ASICs) via uso de memória. É o algoritmo recomendado pelo OWASP para sistemas novos. Os parâmetros memory_cost e time_cost permitem tuning fino.

Auto-rehash: a migração transparente

Ao autenticar, verifique com password_needs_rehash() se o hash precisa ser atualizado para o algoritmo atual. Se sim, rehash e salve o novo hash. Isso permite migrar bcrypt → argon2id gradualmente, login a login, sem resetar senhas.