Função hash
Função que mapeia dados de tamanhos arbitrários para um sequência de dados de tamanho fixo.
Características
Determinismo: Uma entrada deve sempre gerar o mesmo código hash;
Unidirecionalidade: Conhecido um resumo h(M), deve ser computacionalmente impossível encontrar M a partir do resumo;
Compressão: A partir de uma mensagem de qualquer tamanho, a saída de h(M) deve ter um tamanho fixo. O normal é que a longitude de h(M) seja menor do que a da mensagem M.
Facilidade de cálculo: Deve ser fácil calcular h(M) a partir de uma mensagem M.
Difusão: A saída de h(M) deve ser uma função complexa de todos os bits da mensagem M. Se modifica um só bit da mensagem M, o hash h(M) deveria mudar a metade dos seus bits aproximadamente.
Colisão: Busca-se que seja difícil conhecido M, encontrar outro M' tal que h(M) = h(M'). Isto se conhece como resistência débil às colisões.
Exemplos de Algorítimos:
md4, md5, sha1, sha256, sha512.
Utilização
Hash Tables - Estrutura de dados que permite a rápida localização dos dados salvos em sua estruturas;
Encontrar dados duplicados - É possível utilizar uma hash table onde cada hash calculado é colocado em uma entrada da estrutura, e quando uma entrada recebe dois valores, significa que houveram valores duplicados;
Proteção de dados - Um valor hash pode ser utilizado para identificar unicamente uma informação, como uma assinatura;
- Entre outros...