Início / Guias / Armazenamento de senhas — segurança com salt, bcrypt e Argon2

Se você armazena senhas em texto puro, no momento em que o banco de dados vaza, todas as contas ficam expostas. Por isso as senhas são convertidas em hash antes de serem guardadas e, no login, compara-se o hash do valor digitado. Como o conteúdo original não é armazenado, mesmo com um vazamento não é possível descobrir a senha de imediato.

Mas um simples hash SHA-256 não é suficiente. Como a mesma senha sempre produz o mesmo hash, um invasor pode fazer comparações em massa usando rainbow tables, que pré-calculam os hashes de senhas comuns. Para evitar isso, é preciso adicionar a cada conta um valor aleatório, o salt, antes de gerar o hash.

A velocidade também é um problema. O SHA-256 é tão rápido que um invasor consegue tentar bilhões de combinações por segundo. Por isso, para senhas usam-se hashes dedicados intencionalmente lentos, como bcrypt, scrypt e Argon2. Eles ajustam o número de iterações e o custo de memória para retardar muito os ataques de força bruta.

Em resumo, os três princípios do armazenamento de senhas são salt + hash dedicado e lento + parâmetros de custo suficientes. SHA-256/512 comuns servem para integridade de arquivos e assinaturas, mas, para armazenar senhas, use um algoritmo dedicado como o Argon2.

Gerar hash com este algoritmo