Um hash é uma string de comprimento fixo (digest) gerada a partir de dados de entrada de qualquer tamanho usando uma função de hash. O processo é unidirecional — você não pode descriptografar ou reverter um hash para obter os dados originais. É por isso que "criptografia de hash" é um nome impróprio; Hashing não é criptografia.
Algoritmos de hash populares incluem:
MD5 (obsoleto para fins de segurança)
SHA-1 (obsoleto)
SHA-256, SHA-512 (parte da família SHA-2)
SHA-3
bcrypt, scrypt, Argon2 (para hashing seguro de senhas)
O hashing atende a vários propósitos em segurança cibernética e integridade de dados. Os principais motivos para usar hash incluem:
Integridade dos Dados: Garante que os dados não foram alterados (por exemplo, somas de verificação de arquivos).
Armazenamento de Senhas: Armazena senhas com segurança comparando hashes em vez de armazenar senhas reais.
Assinaturas Digitais: Hashes são assinados em vez de documentos grandes.
Eficiência: Valores de hash pequenos e de tamanho fixo são mais rápidos de comparar do que grandes blocos de dados.
Como os hashes são determinísticos e rápidos, eles são ideais para tarefas de verificação.
Usar uma função hash envolve:
Inserir dados (por exemplo, um arquivo, string ou senha).
Processar os dados com um algoritmo de hash.
Obter um resumo, que é uma string de tamanho fixo que representa exclusivamente a entrada.
Para proteção por senha:
Combinar a senha com um salt (dados aleatórios).
Aplicar uma função hash segura (por exemplo, bcrypt ou Argon2).
Armazenar o hash e o salt resultantes com segurança.
Como os hashes não podem ser revertidos, você verifica a entrada (como uma senha) fazendo o hash novamente e comparando o novo hash com o armazenado.
O hash deve ser usado quando:
A integridade dos dados precisa ser verificada (por exemplo, verificando se há corrupção ou adulteração).
As senhas precisam ser armazenadas com segurança (não criptografadas ou em texto simples).
Assinaturas digitais e certificados estão envolvidos (o hash garante a autenticidade do documento).
A comparação rápida de dados é necessária (por exemplo, em tabelas de hash ou caches).
O hash não é adequado quando você precisa recuperar dados originais posteriormente — é para isso que serve a criptografia.