Por que você nunca deve armazenar senhas em texto simples (Hashing e Salting)
Muitas vezes ouvimos notícias sobre violações de banco de dados.
Nesses eventos, as empresas costumam afirmar: "As senhas são criptografadas e seguras". Estritamente falando, isso está incorreto. As senhas não devem ser 'Criptografadas', mas 'Hasheadas'.
Vamos explorar a diferença entre criptografia e hashing, e por que você deve evitar usar MD5 ou SHA-1.
1. Criptografia vs. Hashing
A principal diferença está na "Reversibilidade".
- Criptografia: Transforma dados usando uma chave. Pode ser revertido (descriptografado) de volta ao original se você tiver a chave. (Bidirecional)
- Hashing: Transforma dados em uma string de comprimento fixo. Não pode ser revertido ao original. (Unidirecional)
Mesmo os administradores de servidores não devem saber as senhas dos usuários. Portanto, devemos usar Hashing, que é irreversível.
2. Ataques de Rainbow Table
"Então, usar uma função hash como SHA-256 é seguro?"
Infelizmente, não. As funções hash são determinísticas; elas sempre produzem a mesma saída para a mesma entrada.
Hackers pré-calculam valores hash para senhas comuns como 123456 ou password e os armazenam em tabelas massivas chamadas Rainbow Tables.
Se eles roubarem as senhas hasheadas do seu banco de dados, eles podem simplesmente procurá-las nessas tabelas para quebrar as senhas originais instantaneamente.
3. Salting
Para resolver isso, usamos Salting.
Antes de fazer o hash da senha, anexamos uma string aleatória (Salt) a ela.
Hash("password") -> Perigoso
Hash("password" + "random_salt_value") -> Seguro
Com o salting, mesmo que dois usuários tenham a mesma senha, eles terão valores hash diferentes (já que seus salts são diferentes), tornando as Rainbow Tables inúteis.
Conclusão
Não use funções hash simples (MD5, SHA-1, SHA-256) para armazenamento de senhas. Elas são projetadas para serem rápidas, o que as torna vulneráveis a ataques de força bruta.
Em vez disso, use algoritmos especializados que incorporem Salting e Key Stretching.
- Algoritmos Recomendados: Argon2, bcrypt, scrypt, PBKDF2
A segurança não é sobre ser "inquebrável", mas sobre "aumentar o custo de invasão". Usar o algoritmo de hashing correto aumenta esse custo astronomicamente.
Explore ferramentas relacionadas
Experimente estas ferramentas gratuitas do Pockit