Função hash

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Uma função hash que mapeia nomes para inteiros de 0 a 15. Existe um colisão entre a chaves "John Smith" e "Sandra Dee".

Uma função hash é um algoritmo que mapeia dados de comprimento variável para dados de comprimento fixo. Os valores retornados por uma função hash são chamados valores hash, códigos hash, somas hash (hash sums), checksums ou simplesmente hashes.

Descrição[editar | editar código-fonte]

Um hash (ou escrutínio) é uma sequência de bits geradas por um algoritmo de dispersão, em geral representada em base hexadecimal, que permite a visualização em letras e números (0 a 9 e A a F), representando um nibble cada. O conceito teórico diz que "hash é a transformação de uma grande quantidade de dados em uma pequena quantidade de informações".

Essa sequência busca identificar um arquivo ou informação unicamente. Por exemplo, uma mensagem de correio eletrônico, uma senha, uma chave criptográfica ou mesmo um arquivo. É um método para transformar dados de tal forma que o resultado seja (quase) exclusivo. Além disso, funções usadas em criptografia garantem que não é possível a partir de um valor de hash retornar à informação original.

Como a sequência do hash é limitada, muitas vezes não passando de 512 bits, existem colisões (sequências iguais para dados diferentes). Quanto maior for a dificuldade de se criar colisões intencionais, melhor é o algoritmo.

Uma função de hash recebe um valor de um determinado tipo e retorna um código para ele. Enquanto o ideal seria gerar identificadores únicos para os valores de entrada, isso normalmente não é possível: na maioria dos casos, o contra-domínio de nossa função é muito menor do que o seu domínio, ou seja, x (o tipo de entrada) pode assumir uma gama muito maior de valores do que \operatorname{hash}(x) (o resultado da função de hash).

Os algoritmos de hash mais usados são os de 16 bytes MD4 e MD5 ou o SHA-1, de 20 bytes.[carece de fontes?] Características de alguns algoritmos:

  1. MD4: Desenvolvido em 1990/91 por Ron Rivest, vários ataques foram detectados, o que fez com que o algoritmo fosse considerado frágil. [carece de fontes?]
  2. MD5: O MD5 (Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security, Inc., descrito na RFC 1321, e muito utilizado por softwares com protocolo par-a-par (P2P, ou Peer-to-Peer, em inglês), verificação de integridade e logins. Existem alguns métodos de ataque divulgados para o MD5[1] [2] .
  3. SHA-1 (Secure Hash Algorithm): Desenvolvido pelo NIST e NSA. Já foram exploradas falhas no SHA.[3]
  4. WHIRLPOOL: função criptográfica de hash desenvolvida por Paulo S. L. M. Barreto e por Vincent Rijmen (co-autor do AES). A função foi recomendada pelo projeto NESSIE (Europeu). Foi também adotado pelo ISO e IEC como parte do padrão internacional ISO 10118-3.

O processo é unidirecional e impossibilita descobrir o conteúdo original a partir do hash. O valor de conferência ("Soma de verificação") muda se um único bit for alterado, acrescentado ou retirado da mensagem.

Referências

  1. STEVENS, Marc. On Collisions for MD5. Junho 2007. Mestrado. Eindhoven University of Technology, The Netherlands. (http://www.win.tue.nl/hashclash/On%20Collisions%20for%20MD5%20-%20M.M.J.%20Stevens.pdf)
  2. DAUM, Magnus & LUCKS, Stefan. (2005) Hash Collisions (The Poisoned Message Attack). <http://th.informatik.uni-mannheim.de/people/lucks/HashCollisions/>. Acessado em 25 de março de 2008.
  3. Bruce Schneier, Schneier on Security <http://www.schneier.com/blog/archives/2005/02/sha1_broken.html>. Acessado em 23 de outubro de 2008.

Ver também[editar | editar código-fonte]


Ícone de esboço Este artigo sobre Criptografia é um esboço. Você pode ajudar a Wikipédia expandindo-o.