Salt e Pepper em Hashes
Definição
Salt e Pepper são técnicas usadas para fortalecer a segurança de funções de hash, principalmente no armazenamento de senhas.
- Salt: é um valor aleatório gerado individualmente para cada senha e concatenado a ela antes da aplicação da função de hash.
- Pepper: é um valor secreto adicional (geralmente comum a todas as senhas) que também é concatenado à senha antes do hash, mas mantido fora do banco de dados.
O objetivo de usar salt e pepper é proteger contra ataques de dicionário, ataques de rainbow tables e dificultar tentativas de quebra de hashes.
Objetivos de Salt e Pepper
- Evitar ataques de rainbow table: o salt torna impraticável o uso de tabelas pré-computadas de hashes.
- Garantir unicidade dos hashes: mesmo que dois usuários tenham a mesma senha, seus hashes serão diferentes por causa do salt.
- Adicionar uma camada secreta: o pepper dificulta ainda mais ataques, já que o atacante precisaria conhecer o valor secreto.
- Reforçar a segurança de senhas armazenadas: deixando os ataques de força bruta mais lentos e custosos.
Exemplo prático (Python) — Uso de Salt e Pepper
import hashlib
import os
# Pepper (deve ser armazenado de forma segura e fora do banco de dados)
pepper = "pepper_super_secreto"
def gerar_hash_senha(senha):
# Gerar salt aleatório
salt = os.urandom(16).hex()
# Concatenar senha + salt + pepper
senha_completa = senha + salt + pepper
# Gerar o hash
hash_objeto = hashlib.sha256(senha_completa.encode())
return salt, hash_objeto.hexdigest()
# Exemplo de uso
senha_usuario = "senha123"
salt, hash_gerado = gerar_hash_senha(senha_usuario)
print("Salt:", salt)
print("Hash da senha:", hash_gerado)
(Nota: Em sistemas reais, é recomendado usar funções específicas para hashing de senhas, como bcrypt, scrypt ou Argon2, em vez de SHA-256 direto.)
Saída
Salt: a3f5c67b2d8e9a41f1c29e9b77e2a7e0
Hash da senha: 4e8d3c2a85c9303f5d14e37fa3af8c1dc258c45d94b383b77c2c5e7f3a21ec4f
(Cada vez que a função for chamada, o salt será diferente, produzindo hashes diferentes mesmo para a mesma senha.)
O ciclo de Salt e Pepper
[Senha Original] + [Salt Aleatório] + [Pepper Secreto] --> (Função de Hash) --> [Hash Seguro]
Salt individual protege contra ataques de tabelas pré-computadas.
Pepper adiciona um segredo extra para proteção adicional.