Um hash, também chamado de "digesto", é uma espécie de "assinatura" ou "impressão digital" que representa o conteúdo de um fluxo de dados. Com certa frequência os hashes são chamados de checksum, o que provoca alguma confusão com os verdadeiros checksums, os quais têm aplicações e cálculos totalmente diferentes. Um hash pode ser comparado com um selo de embalagem que indica clara e inequivocamente se a embalagem já foi aberta ou violada.
Hashes não são cifragens, são digestos! As cifragens transformam os dados do texto claro num criptograma e vice-versa, ou seja, é uma operação de duas vias. Além disso, o tamanho do criptograma geralmente é igual ao comprimento do texto claro. Hashes, por sua vez, transformam os dados do texto (claro ou cifrado) num pequeno digesto, de tamanho fixo, numa operação de via única. Uma operação de via única não tem volta, ou seja, não é possível obter o texto claro a partir de um resultado hash.
Os hashes produzem "selos de segurança" de comprimento fixo, não importa o comprimento do fluxo de dados ou do arquivo que representem. Qualquer alteração efetuada no arquivo, por mínima que seja, altera substancialmente o resultado hash. Isto ocorre porque, mesmo se apenas um dos bits do arquivo for alterado, muitos bits do resultado serão afetados. Este comportamento é conhecido como efeito avalanche.
O efeito avalanche fica bastante claro quando observamos o impacto da mudança de apenas um bit no resultado hash. Para exemplificar, vamos usar os caracteres ASCII "A" e "a". Note que apenas o sexto bit (contando da direita para a esquerda e iniciando pelo bit zero) é diferente:
Caracter ASCII ASCII
(decimal) (binário)
----------------------------------
A 65 0100 0001
a 97 0110 0001
Usando o algoritmo MD5, o resultado hash obtido para os textos "Aldeia NumaBoa" e "aldeia NumaBoa", cuja diferença reside num único bit, é completamente diferente:
Aldeia NumaBoa 3cdb658425ee484e4bff3d4583f6f851Transformando o valor hexadecimal do hash dos dois textos nos seus correspondentes binários, o efeito avalanche fica evidente pois a alteração de apenas um bit no texto ocasionou a alteração de 62 bits do resultado hash:
aldeia NumaBoa 9c1f41ef263026b0283676d63df21fd1
3cdb6584 0011 1100 1101 1011 0110 0101 1000 0100
9c1f41ef 1001 1100 0001 1111 0100 0001 1110 1111
x.x. .... xx.. .x.. ..x. .x.. .xx. x.xx 12 bits diferentes
25ee484e 0010 0101 1110 1110 0100 1000 0100 1110
263026b0 0010 0110 0011 0000 0010 0110 1011 0000
.... ..xx xx.x xxx. .xx. xxx. xxxx xxx. 20 bits diferentes
4bff3d45 0100 1011 1111 1111 0011 1101 0100 0101
283676d6 0010 1000 0011 0110 0111 0110 1101 0110
.xx. ..xx xx.. x..x .x.. x.xx x..x ..xx 16 bits diferentes
83f6f851 1000 0011 1111 0110 1111 1000 0101 0001
3df21fd1 0011 1101 1111 0010 0001 1111 1101 0001
x.xx xxx. .... .x.. xxx. .xxx x... .... 14 bits diferentes
Aplicações práticas do hash
Se os dados originais não podem ser recuperados a partir do hash gerado pelos mesmos, então para que servem os hashes? Apesar de parecer contraditório, é exatamente esta característica que possibilita o uso de algoritmos hash sempre que uma autenticação ou uma validação seja necessária. Dentre as inúmeras aplicações destacam-se as seguintes:
1 - Integridade de arquivos
Qualquer tipo de arquivo, por exemplo um arquivo de texto ou um programa de computador, é um fluxo de dados que produz um resultado hash único. Quando um arquivo é disponibilizado para download, não existe a garantia de que o arquivo baixado seja idêntico ao original. Basta que ocorra um pequeno problema durante a transmissão que altere os dados recebidos para que a "cópia" não seja perfeita. Uma das maneiras de poder verificar se o arquivo baixado é idêntico ao disponibilizado é conhecer o hash do arquivo original. Após o download é possível calcular o hash do arquivo baixado e, se os dois hashes forem idênticos, a integridade da cópia é comprovada. É importante lembrar que hashes parecidos ou "quase iguais" indicam sempre que os dados que os produziram são diferentes, e nunca parecidos ou quase iguais!
2 - Segurança de senhas
Guardar senhas em texto claro é dar chance para o azar. Se um arquivo de senhas for roubado ou um banco de dados com registros de senhas for hackeado, o estrago pode ser enorme. Como um hash não é reversível e, para serem usadas, as senhas precisam ser conferidas, é muito mais prudente armazenar os resultados hash das senhas do que as próprias senhas. O uso de uma senha pressupõe que um usuário a digite. Tendo a senha como entrada, é fácil e rápido calcular o resultado hash da senha fornecida e compará-lo com o valor arquivado. Se forem idênticos, a senha confere, mostrando que o usuário conhecia uma senha válida. Este procedimento reduz sensivelmente os riscos porque o único momento em que a senha pode ser roubada é enquanto está sendo digitada e antes de ser transformada em hash.
3 - Assinaturas digitais
Para se obter uma assinatura digital válida são necessárias duas etapas. A primeira é criar um hash do documento. Este hash identifica unicamente e inequivocamente o documento do qual ele se originou. A seguir, o assinante submete o hash a um método criptográfico usando sua chave privada. Como o hash criptografado só pode ser recuperado usando a chave pública do assinante, isto comprova a identidade da pessoa que assinou - é a chamada assinatura digital - e como o hash recuperado identifica o documento, a assinatura está associada unicamente a este documento.
Fonte: http://www.numaboa.com/
0 comentários:
Postar um comentário