Um hash rápido como o SHA-256 permite que atacantes testem bilhões de palpites por segundo em GPUs. Os hashes de senha acrescentam um salt aleatório e único por senha (o que neutraliza tabelas pré-calculadas) e um custo ajustável. O Password Storage Cheat Sheet da OWASP recomenda, nesta ordem: Argon2id (RFC 9106) com pelo menos 19 MiB de memória, 2 iterações e paralelismo 1; scrypt com N = 2¹⁷, r = 8, p = 1; bcrypt com fator de trabalho 10 ou mais (ele trunca a entrada em 72 bytes); e, onde o FIPS 140 for exigido, PBKDF2-HMAC-SHA256 com pelo menos 600.000 iterações.
Armazene o algoritmo e os parâmetros junto com o hash (o formato de string PHC $argon2id$v=19$m=19456,t=2,p=1$…, o $2b$10$… do bcrypt) para que os custos possam ser aumentados depois e os hashes antigos atualizados no próximo login. Um pepper opcional, um segredo guardado fora do banco de dados, acrescenta proteção caso apenas o banco de dados vaze.
O NIST SP 800-63B-4 exige armazenamento com salt e custo reforçado e, para senhas usadas como fator único de autenticação, um comprimento mínimo de 15 caracteres. As chaves de acesso eliminam por completo o segredo armazenado: o servidor guarda apenas uma chave pública.