Diagrama de uma Hash

O que é uma Hash e qual sua importância.

Integridade é um dos pilares mais importantes da segurança da informação junto da Confidencialidade e Disponibilidade, falhar em sua proteção pode resultar em um incidente gravíssimo de segurança. Imagine que você está realizando uma perícia forense e precisa, posteriormente, garantir que a imagem de backup que você gerou para análise não fora alterada? Para este e outros fins podemos gerar uma hash daquele arquivo.

Uma hash é uma função matemática de via única que, a partir de um arquivo vai gerar uma string – Uma pequena cadeia de texto – que é única desta origem. Vale ressaltar que gerar uma hash de um arquivo não significa criptografá-lo. Isto é, não é possível realizar o caminho inverso para chegar ao arquivo ou cadeia de texto original.

A criptografia tem como função garantir a Confidencialidade de um documento, embaralhando um texto com o objetivo de esconder seu conteúdo original, podendo ser revertido por qualquer um que souber a chave que o gerou. Já a técnica de hashing tem o objetivo de garantir sua Integridade, ou seja, ela procura garantir que o arquivo original não sofreu alterações. Uma hash gerada a partir do texto “Segurança!”, será completamente diferente de uma hash gerada a partir do texto “Segurança.”.

A utilização de uma hash junto a criptografia resulta nos Certificados Digitais, utilizados para garantir a Integridade e a Autenticidade de um documento, da mesma forma que sua assinatura analógica feita numa folha de papel.

Gerar uma hash é uma tarefa bem simples, bastando utilizar softwares como o HashCalc.  Abaixo você pode conferir o resultado de uma hash gerada a partir do texto “Segurança!”, e em seguida outra gerada com o texto “Segurança.”, ambas em MD5 e SHA256.

É possível gerar uma hash a partir de um arquivo também, bastando alterar o “Data Format” de Text String para File.

Há, porém, uma vulnerabilidade que pode ser explorada nesta técnica, chamada Hash Collision, onde dois textos diferentes podem gerar a mesma hash. Tal vulnerabilidade foi descoberta em 1996 no algoritmo do MD5¹, sendo recomendado o uso de outros algoritmos, como os da família SHA, principalmente para o hashing de senhas.

Outro problema está relacionado também as senhas. O uso de senhas fracas ou comuns pode ser driblada tanto pelos conhecidos ataques de força bruta quanto pelo uso das chamadas “Rainbow Tables” no caso de senhas no formato de hash.

Uma Rainbow Table é uma wordlist (lista de senhas) que possui a hash de diversas senhas comuns. A hash MD5 da senha “senha”, por exemplo, será sempre “e8d95a51f3af4a3b134bf6bb680a213a”, desta forma, alguns sites produzem uma lista com todas essas senhas. Assim, caso você tenha acesso a hash de uma senha, não será possível decriptografá-la, porém, ainda é possível verificar se a hash que você obteve é a mesma de uma lista de senhas, veja a seguir:

                Utilizamos neste caso, o site CrackStation, é possível também utilizar diversas outras ferramentas, como o findmyhash no Kali Linux, e o hash-identifier para identificar o tipo da hash que você possui.

                Para driblar este problema existe uma técnica chamada “salting”, em tradução livre, algo como temperar. Esta técnica “tempera” a sua hash, adicionando a ela seis bytes de caracteres aleatórios no início da string para impedir que ela apareça nessas Rainbow Tables.


¹MD5 – https://en.wikipedia.org/wiki/MD5#:~:text=In%201996%2C%20Dobbertin%20announced%20a,%2D1%20or%20RIPEMD%2D160.

Leave a Reply

Your email address will not be published. Required fields are marked *