Funções de Hash Seguras (Secure Hash Functions)
Definição
Funções de Hash Seguras (Secure Hash Functions) são funções de hash projetadas para garantir propriedades de segurança específicas, tornando-as adequadas para aplicações como criptografia, armazenamento de senhas, assinaturas digitais e verificação de integridade de dados.
Uma função de hash segura deve possuir:
- Determinismo: a mesma entrada gera sempre a mesma saída.
- Resistência à preimagem: (não é viável encontrar a entrada a partir do hash).
- Resistência à segunda preimagem: (não é viável encontrar outra entrada que produza o mesmo hash).
- Resistência à colisão: (não é viável encontrar duas entradas distintas que gerem o mesmo hash).
Alguns exemplos de funções de hash seguras:
- SHA-256
- SHA-3
- BLAKE2
- SHA-512
(Funções antigas como MD5 e SHA-1 são consideradas inseguras para aplicações críticas.)
Objetivos da Função de Hash Segura
- Garantir integridade dos dados: detectar alterações acidentais ou maliciosas em arquivos ou mensagens.
- Armazenar senhas de forma segura: proteger credenciais sensíveis.
- Base para assinaturas digitais e autenticação: gerar resumos confiáveis para verificação.
- Evitar colisões: impedir que duas entradas diferentes gerem o mesmo hash, o que comprometeria a segurança.
Exemplo prático (Python) — Gerar hash seguro com SHA-256
import hashlib
def gerar_hash_sha256(mensagem):
mensagem_bytes = mensagem.encode()
hash_objeto = hashlib.sha256(mensagem_bytes)
return hash_objeto.hexdigest()
# Exemplo de uso
mensagem = "Programício é incrível!"
hash_gerado = gerar_hash_sha256(mensagem)
print("Mensagem:", mensagem)
print("Hash SHA-256:", hash_gerado)
Saída
Mensagem: Programício é incrível!
Hash SHA-256: 1a7f70582a4a5c4206e38542c5ed7c3e8c9f4d3b19687937fd1943040e0e02f9
(O hash gerado é único para a mensagem, e muda totalmente mesmo com pequenas alterações.)
O ciclo de uma função de hash segura
[Entrada de Dados] --> (Aplicação da Função de Hash Segura) --> [Resumo Fixo e Seguro]
- Pequenas mudanças na entrada resultam em grandes diferenças no hash.
- Sem forma prática de reverter o hash para a entrada original.