O que é um hash?
Na ciência da computação, um
hash (também conhecido como código de hash
,
Valor de hash , ou
hash soma ) é uma representação numérica de tamanho fixo de uma quantidade arbitrária de dados. É como uma impressão digital ou assinatura digital para obter uma informação.
Propriedades -chave de um hash: *
Saída de tamanho fixo: Independentemente do tamanho dos dados de entrada, a função de hash sempre produz uma saída de um comprimento predefinido específico (por exemplo, 256 bits, 160 bits).
*
determinístico: A mesma entrada sempre produz a mesma saída de hash. Isso é crucial para consistência e confiabilidade.
*
Resistência à colisão (idealmente): Deve ser extremamente difícil encontrar duas entradas diferentes que produzem a mesma saída de hash (uma "colisão"). Embora a resistência à colisão perfeita seja impossível na prática (devido ao princípio do pombo), as boas funções de hash minimizam a probabilidade de colisões.
*
Função unidirecional (idealmente): Deve ser inviável computacionalmente reverter a função de hash, o que significa que você não pode determinar os dados de entrada original do seu valor de hash. Isso é importante para aplicativos de segurança.
Pense assim: Imagine que você tem uma máquina (a função de hash) que pega qualquer objeto (os dados de entrada) e produz um rótulo exclusivo e de tamanho fixo (o valor do hash) para esse objeto. Os rótulos são muito mais curtos que os próprios objetos.
Como os hashes são usados na programação de computador:
Os hashes têm inúmeras aplicações na programação de computadores, incluindo:
1.
tabelas de hash (dicionários, mapas): *
Objetivo: As tabelas de hash são uma estrutura de dados fundamental usada para armazenamento eficiente e recuperação de dados com base em pares de valor-chave.
*
como funciona: * A chave é passada para uma função de hash.
* A função de hash calcula um valor de hash (um número inteiro) da chave.
* Esse valor de hash é usado como um índice em uma matriz (a tabela de hash).
* O valor correspondente é armazenado nesse índice.
*
Benefícios: Fornece a complexidade de O (1) O (1) (tempo constante) para operações de inserção, exclusão e pesquisa, tornando-o incrivelmente rápido para pesquisar e recuperar dados.
*
Exemplo: `` `Python
my_dict ={} # um dicionário vazio (tabela de hash)
my_dict ["Apple"] =1 # inserir "maçã" como a chave e 1 como o valor
my_dict ["banana"] =2
Print (my_dict ["Apple"]) # saída:1 (pesquisa rápida)
`` `
2.
*
Objetivo: Para verificar se os dados não foram corrompidos durante a transmissão ou armazenamento.
*
como funciona: * Calcule o hash de um arquivo ou bloco de dados antes da transmissão/armazenamento.
* Após a transmissão/recuperação, recalcule o hash.
* Compare os dois valores de hash. Se eles corresponderem, os dados provavelmente estarão intactos.
*
Exemplos: * Downloads de arquivo:MD5, SHA-256 SOMS são frequentemente fornecidas para verificar a integridade dos arquivos baixados.
* Protocolos de rede:Os mecanismos de detecção e correção de erros usam somas de verificação com base nas funções de hash.
*
Por que é útil: Uma mudança de bit nos dados de entrada resultará em um valor de hash dramaticamente diferente.
3.
criptografia: *
armazenamento de senha: Em vez de armazenar senhas diretamente, os sistemas armazenam o hash da senha. Dessa forma, mesmo que o banco de dados esteja comprometido, as senhas reais não são reveladas (pois é difícil reverter o hash). O sal é geralmente adicionado para evitar ataques de mesa de arco -íris.
*
assinaturas digitais: O hash é usado para criar uma assinatura digital de um documento ou mensagem. O remetente hashes o documento e, em seguida, criptografa o hash com sua chave privada. O receptor descriptografa a assinatura com a chave pública do remetente e compara o hash resultante com seu próprio hash calculado do documento. Se eles correspondem, ele verifica a autenticidade e a integridade da mensagem.
*
Códigos de autenticação de mensagem (MACs): Semelhante às assinaturas digitais, os Macs são usados para verificar a autenticidade e a integridade das mensagens, mas usam uma chave secreta compartilhada em vez de pares de chave pública/privada.
*
Tecnologia blockchain: O hashing é um componente central da tecnologia blockchain. Cada bloco contém o hash do bloco anterior, formando uma cadeia de blocos resistentes à adulteração.
4.
cache: *
Objetivo: Para recuperar rapidamente dados acessados com frequência.
*
como funciona: A chave usada para acessar os dados é hash e o hash resultante é usado para identificar a localização dos dados em cache.
*
Benefícios: Evita operações caras, como consultas de banco de dados ou cálculos complexos, armazenando resultados em um cache e recuperando -os rapidamente usando o hash.
5.
Deduplicação de dados: *
Objetivo: Para reduzir o espaço de armazenamento, identificando e eliminando cópias duplicadas de dados.
*
como funciona: Arquivos ou blocos de dados são hashed. Se dois arquivos diferentes tiverem o mesmo hash, é provável que eles sejam idênticos (embora as colisões sejam possíveis). Uma cópia é armazenada e a outra é substituída por um ponteiro para a cópia armazenada.
6.
Indexação de banco de dados: *
Objetivo: Para acelerar as consultas do banco de dados.
*
como funciona: O hash pode ser usado para criar um índice em uma coluna de tabela. Quando uma consulta procura um valor específico, o valor é hash e o índice é usado para localizar rapidamente as linhas correspondentes na tabela.
algoritmos comuns de hash: *
md5 (algoritmo de digestão da mensagem 5): Algoritmo mais antigo, agora considerado criptograficamente quebrado (vulnerável a colisões). Ainda usado para somas de verificação em alguns contextos, mas desencorajou para aplicativos sensíveis à segurança.
*
sha-1 (algoritmo de hash seguro 1): Também considerado criptograficamente fraco. Desencorajado para novas aplicações.
*
família SHA-2 (SHA-256, SHA-512, etc.): Mais seguro que o MD5 e o SHA-1. Amplamente utilizado para aplicações criptográficas e verificações de integridade de dados.
*
SHA-3 (KECCAK): Um algoritmo diferente da família SHA-2, selecionado como vencedor de uma competição do NIST.
*
bcrypt, scrypt, argon2: Projetado especificamente para hash de senha, esses algoritmos são mais caros computacionalmente e resistentes a ataques de força bruta.
Considerações importantes: *
Escolhendo a função de hash certa: A função de hash apropriada depende do aplicativo específico. As aplicações críticas de segurança requerem fortes funções de hash criptográfico (como SHA-256 ou mais recente). Para tabelas de hash, desempenho e resistência de colisão são fatores importantes.
*
Manuseio de colisão: As tabelas de hash devem ter uma estratégia para lidar com colisões (quando duas chaves diferentes hash para o mesmo índice). As técnicas comuns de resolução de colisão incluem encadeamento separado e endereçamento aberto.
*
Segurança: Ao usar hashes para fins de segurança, é crucial usar algoritmos fortes e bem-vindos de hash e tomar medidas para evitar ataques como ataques de mesa de arco-íris (por exemplo, usando salga).
Em resumo, o hash é uma técnica poderosa e versátil usada extensivamente na programação de computadores para tarefas que variam de armazenamento de dados e recuperação à verificação e segurança da integridade de dados. Compreender os princípios do hash é essencial para qualquer desenvolvedor de software.