Un hash rápido como SHA-256 permite a un atacante probar miles de millones de contraseñas por segundo con GPU. Los hashes de contraseñas añaden una sal aleatoria única por contraseña (lo que inutiliza las tablas precalculadas) y un coste ajustable. La Password Storage Cheat Sheet de OWASP recomienda, por este orden: Argon2id (RFC 9106) con al menos 19 MiB de memoria, 2 iteraciones y paralelismo 1; scrypt con N = 2¹⁷, r = 8, p = 1; bcrypt con un factor de trabajo de 10 o más (trunca la entrada a 72 bytes), y, donde se exija FIPS 140, PBKDF2-HMAC-SHA256 con al menos 600.000 iteraciones.
Guarda el algoritmo y los parámetros junto con el hash (el formato de cadena PHC $argon2id$v=19$m=19456,t=2,p=1$…, el $2b$10$… de bcrypt) para poder aumentar el coste más adelante y actualizar los hashes antiguos en el siguiente inicio de sesión. Una pimienta (pepper) opcional, un secreto guardado fuera de la base de datos, añade protección si solo se filtra la base de datos.
NIST SP 800-63B-4 exige un almacenamiento con sal y con un coste de cálculo elevado y, para las contraseñas usadas como único factor de autenticación, una longitud mínima de 15 caracteres. Las llaves de acceso eliminan por completo el secreto almacenado: el servidor solo guarda una clave pública.