Hash: o que é?
Definição de Hash
O hash é uma função matemática capaz de transformar um ficheiro ou documento num código composto por letras e números. Esse código torna-se uma espécie de “impressão digital” do documento, tornando-se um identificador único e exclusivo.
Através de um algoritmo matemático, a função pega num documento, arquivo, chave ou conjunto de dados e transforma-o num código alfanumérico. Este código permite verificar se o conjunto de dados sofreu alguma alteração entre o momento em que foi criado e o momento em que a verificação é feita.
Quem pesquisa por “o que é hash” pensa que se trata de uma forma de ocultar o conteúdo de uma mensagem, mas não é o caso. A conversão do documento num código alfanumérico não dá nenhuma chave ou senha para que os dados originais possam ser lidos. Caso a pessoa que executou o hash (ou a pessoa que vai verificar) não tenha guardado uma cópia dessa mensagem ou conjunto de dados, ela perde-se.
Por outro lado, se tiver acesso a uma cópia desse conjunto de dados, a mesma (ou outra) pessoa poderá verificar mais tarde se o documento é o mesmo ou se foi adulterado. Basta criar duas hash e verificar se são iguais.
Esta técnica de encriptação ou criptografia não se confunde com o conceito de encriptação como ele é entendido em ciências da computação, como veremos neste artigo.
Como funciona um hash?
Um algoritmo hash gera determinados valores, as chamadas funções hash. Os algoritmos hash geram valores diferentes para chaves diferentes. Daí que cada conjunto de dados introduzido seja convertido também numa chave específica.
Porém, nalguns casos (que se pretendem raros), as chaves podem usar valores hash idênticos. Isto pode resultar na chamada colisão hash. Uma característica essencial para avaliar um algoritmo é perceber quão resistente a colisões consegue ser. Uma colisão é uma vulnerabilidade que pode ser aproveitada por hackers ou terceiros mal-intencionados, pelo que um bom algoritmo hash deve ser suficientemente complexo para evitar colisões.
Características das funções hash
A função hash, o que é? É acima de tudo um mecanismo de cibersegurança, que se reveste das características seguintes:
- Facilidade de execução. Os algoritmos de hasing não só são altamente eficientes, resultando sempre em códigos únicos, como exigem uma capacidade de computação mínima para serem executados. Essa é uma característica típica da computação moderna; o que é “pesado”, muitas vezes está relacionado com gráficos, imagens e vídeos – e não com as tarefas de cálculo computacional, que os computadores de há 30 e 40 anos já efetuavam com capacidades bem menores.
- Uniformidade. Seja qual for o tamanho do conjunto de dados introduzidos, a string daí resultante terá sempre um comprimento fixo. Se for usado o SHA-256, a string será de 64 caracteres.
- Exclusividade. Qualquer pequena mudança nos dados introduzidos faz com que a string resultante seja diferente de uma produzida antes, por mais pequena que a mudança seja.
- Irreversibilidade e unidirecionalidade dos hashes. Sendo a mensagem submetida a uma função hash, não é possível reverter o processo e recuperar a mensagem original. Mesmo que alguém tenha acesso ao valor de hash, é extremamente difícil, se não impossível, determinar que conjunto de dados gerou aquele hash específico.
Os algoritmos de hashing mais comuns
Desde o início da década passada, as funções ou algoritmos hash de encriptação mais utilizados são o MD5 e o SHA-1. Devemos também considerar o BLAKE3, sendo uma evolução mais recente e com melhores performances que o SHA e também que a versão anterior, o BLAKE2.
- O MD5 (“Message-Digest algorithm 5”) é um algoritmo de hash de 128 bits desenvolvido pela RSA Data Security. Apresenta algumas falhas em termos de performance, não sendo suficientemente resistente a colisões, pelo que, apesar da sua importância histórica, tem vindo a ser gradualmente substituído.
- O SHA-1 (Secure Hash Algorithm) de 160 bits foi desenvolvido pelo National Institute of Standards and Technology (Instituto Nacional de Padrões e Tecnologia) e pela National Security Agency (Agência de Segurança Nacional) do governo dos Estados Unidos, tendo sido publicado e adotado como padrão a nível mundial. À versão original, lançada em 1993, sucederam-se várias atualizações, pelo que pode ser hoje considerado um protocolo bastante seguro.
- O BLAKE3 é a versão mais recente da função hash BLAKE e, dadas as suas performances de elevado rendimento, deverá vir a ser progressivamente adotado no futuro.
Hash vs encriptação: quais as diferenças?
Os dois processos são totalmente diferentes e não se confundem de forma alguma.
A encriptação é o processo de transformar texto ou dados (o chamado plain text) num conjunto de dados cifrados (cipher text), que pode ser desencriptado por quem tiver a chave necessária para tal. Ao desencriptar, o recetor da mensagem acede ao conjunto de dados original.
E o que é criptografia hash? Como vimos, o hashing transforma o mesmo pedaço de texto ou dados, não em dados cifrados mas num código único. O código identifica o conjunto de dados original, mas não consegue “transformar-se” em texto legível; não serve para aceder à mensagem original.
O hashing é normalmente usado para assegurar a integridade dos dados, principalmente se se tratar de grandes quantidades, mas não permite aceder ao conteúdo de uma mensagem. Já a encriptação, ao invés, esconde mas também permite aceder ao conteúdo da mensagem (assim se tenha a chave).
Pense no hashing como uma espécie de lacre de cartas em formato digital, mas com uma grande diferença. Enquanto o lacre intacto era sinal de que a carta não tinha sido violada, o hash também assegura que uma comunicação se mantém sem alterações desde o momento em que foi criada – só que nem sequer permite ler a carta.
A tabela seguinte resume as principais diferenças:
| Hashing | Encriptação |
---|---|---|
Processo de sentido único; não pode ser revertido | | |
Concebido para manter a integridade dos dados em qualquer circunstância | | |
Concebido para proteger a confidencialidade de dados em trânsito | | |
Útil para empresas e websites | | |
Útil tanto para indivíduos como para organizações | | |
Quão seguros são os algoritmos hash?
Os algoritmos hash não são infalíveis, mas o nível de complexidade das funções hash geradas pelas versões modernas constituiu um grande passo em frente relativamente à capacidade dos hackers para ludibriar o sistema. No caso da versão SHA-256, a estimativa atual é que os supercomputadores atuais demorariam milhões de anos a conseguir partir (“crack”), o código, isto é, a identificar o ficheiro original tendo o código hash como ponto de partida.
Mas isso não significa que, à medida que outros cientistas informáticos desenvolvam novas técnicas, não venha a ser possível pelo menos conseguir versões aproximadas. Tanto assim é que a comunidade de peritos em cibersegurança dos Estados Unidos levou a sério a alegação, lançada no início de 2023 por investigadores chineses, de que teriam sido capazes de decifrar o algoritmo RSA (de encriptação) recorrendo a computadores quânticos. Porém, neste caso concreto, as provas apresentadas foram consideradas escassas, e mais no domínio da hipótese teórica que da prática.
Em que situações e cenários são as funções hash utilizadas?
O hashing é usado em diversas situações nas quais é vital perceber se determinada mensagem, conteúdo ou pacote de dados foi adulterado ou modificado em relação a um momento anterior. O processo passa por executar a função hash ao arquivo que temos em mãos e comparar o código hash resultado com um código gerado anteriormente. Se forem iguais, o arquivo é rigorosamente o mesmo.
Vejamos alguns exemplos:
- Download ou envio de ficheiros. O hash assegura que o ficheiro que é recebido corresponde ao que foi enviado, e que não foi, por exemplo, contaminado com vírus ou malware, ou se não alvo de falsificação.
- A aposição de assinaturas digitais recorre a criptografia hash para garantir a segurança e a eficiência do sistema.
- A verificação de passwords recorre, normalmente, a funções hash. Durante o processo de autenticação, o sistema compara o código hash da senha introduzida pelo utilizador com o seu próprio código hash, previamente arquivado.
- Criptomoedas. A verificação hash ajuda a proteger os sistemas de gestão de criptomoedas de ataques DDoS e outros abusos. Um ladrão escusa de tentar adivinhar uma chave para tentar, por exemplo, intercetar uma transação de criptomoedas se a hash se interpuser de permeio e o impedir.
É importante referir que o desenvolvimento de aplicações de tecnologia blockchain está estreitamente associado ao uso de funções hash. Tal como a blockchain não se limita a criptomoedas, todas as presentes e futuras aplicações desta tecnologia serão mantidas e desenvolvidas com esta técnica criptográfica. É o caso da celebração de contratos públicos, que poderá ser feita recorrendo a blockchain (para garantir o seu caráter único e público, uma vez que é matematicamente verificável por qualquer pessoa) e com o apoio de uma função hash para que a verificação seja quase imediata.
Qual é a vantagem de se usar uma função hash?
Para além das questões de segurança já mencionadas, as funções hash associam a eficiência à rapidez. Recorrendo a um processo matemático, é uma forma relativamente simples de assegurar integridade e também de o fazer com rapidez. Em vez de analisar longos ou pesados ficheiros, o processo analisa códigos alfanuméricos, fazendo com que a verificação seja muito mais rápida.
A segurança online começa com um clique.
Fique em segurança com a principal VPN do mundo