Hashing refere-se ao processo de geração de saídas de tamanho fixo a partir de entradas de tamanho variável. Isso é feito usando fórmulas matemáticas conhecidas como funções hash (implementadas como algoritmos hash). 

Embora nem todas as funções hash envolvam o uso de criptografia, as chamadas funções hash criptográficas estão no centro das criptomoedas. Graças a eles, blockchains e outros sistemas distribuídos podem atingir níveis significativos de integridade e segurança de dados.

As funções hash normais e criptográficas são determinísticas. Determinismo significa que, desde que os dados de entrada não mudem, o algoritmo de hash sempre produzirá o mesmo resultado (também conhecido como resumo ou hash).

Os algoritmos de hash de criptomoeda são normalmente projetados como funções unilaterais, o que significa que não podem ser revertidos sem muito tempo e recursos de computação. Em outras palavras, é bastante fácil gerar uma saída a partir de uma entrada, mas relativamente difícil ir na direção inversa (gerar uma entrada apenas a partir de uma saída). Em geral, quanto mais difícil for encontrar a entrada, mais seguro será considerado o algoritmo de hashing.


Como funciona uma função hash?

Diferentes funções hash produzirão saídas de tamanhos diferentes, mas os tamanhos de saída possíveis de cada algoritmo de hash são sempre constantes. Por exemplo, o algoritmo SHA-256 só pode produzir saídas de 256 bits, enquanto o SHA-1 sempre gerará um resumo de 160 bits.

Para ilustrar, vamos passar as palavras “Binance” e “binance” através do algoritmo de hash SHA-256 (aquele usado no Bitcoin).

SHA-256

Saída

Saída (256 bits)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binância

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Observe que uma ligeira alteração (o caso da primeira letra) resultou em um valor de função hash completamente diferente. Mas como estamos usando SHA-256, as saídas sempre terão um tamanho fixo de 256 bits (ou 64 caracteres), independentemente do tamanho da entrada. Além disso, não importa quantas vezes executamos as duas palavras no algoritmo, as duas saídas permanecerão constantes.

E se passarmos as mesmas entradas pelo algoritmo de hash SHA-1, obteremos os seguintes resultados:

SHA-1

Saída

Saída (160 bits)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binância

e58605c14a76ff98679322cca0eae7b3c4e08936


É interessante que a abreviatura SHA signifique Secure Hash Algorithms (algoritmos de criptografia seguros). É um conjunto de funções hash criptográficas que incluem algoritmos SHA-0 e SHA-1, bem como grupos de SHA-2 e SHA-3. SHA-256 faz parte da família SHA-2, junto com SHA-512 e outras variantes. Atualmente, apenas os grupos SHA-2 e SHA-3 são considerados seguros.


Qual é a importância desta tecnologia?

As funções hash convencionais têm uma ampla gama de utilizações, incluindo pesquisas em bancos de dados, análise de arquivos grandes e gerenciamento de dados. Por outro lado, as funções hash criptográficas são amplamente utilizadas em aplicações de segurança da informação, como autenticação de mensagens e impressão digital. Quando se trata de Bitcoin, as funções criptográficas de hash são parte integrante do processo de mineração e também desempenham um papel na geração de novos endereços e chaves.

O verdadeiro poder do hashing é revelado ao trabalhar com grandes quantidades de informações. Por exemplo, você pode executar um arquivo ou conjunto de dados grande por meio de uma função hash e, em seguida, usar suas saídas para verificar rapidamente a precisão e a integridade dos dados. Isso é possível devido à natureza determinística das funções hash: a entrada sempre resulta em uma saída compactada e simplificada (hash). Este método elimina a necessidade de armazenar e “memorizar” grandes quantidades de dados.

Hashing é particularmente útil no contexto da tecnologia blockchain. A blockchain do Bitcoin possui diversas operações relacionadas ao hashing, a maioria das quais são realizadas no processo de mineração. Na verdade, quase todos os protocolos de criptomoeda dependem de hashing para vincular e combinar grupos de transações em blocos e para criar links criptográficos entre cada bloco, criando assim um blockchain.


Funções hash criptográficas

Novamente, uma função hash usando técnicas criptográficas pode ser definida como uma função hash criptográfica. Em geral, quebrar uma função hash criptográfica requer muitas tentativas de força bruta. Para "desdobrar" uma função hash criptográfica, você precisa selecionar as entradas por tentativa e erro até obter uma saída adequada. No entanto, existe também a possibilidade de que diferentes entradas produzam o mesmo resultado, caso em que ocorrerá uma “colisão”.

Tecnicamente, uma função hash criptográfica deve atender a três propriedades para ser considerada bem protegida. Podemos descrevê-los como: resistência à colisão e resistência ao ataque para encontrar o primeiro e o segundo protótipo.

Antes de descrever cada propriedade, vamos resumir sua lógica em três frases curtas.

  • Resistência à colisão: impossibilidade de encontrar duas entradas diferentes que produzam o mesmo hash.

  • Resistência em encontrar o primeiro protótipo: não há possibilidade de “reversão” da função hash (encontrar uma entrada através de uma determinada saída).

  • Resistência em encontrar um segundo exemplo: A incapacidade de encontrar qualquer segunda entrada que tenha o mesmo hash da primeira.


Resistência à colisão

Conforme mencionado anteriormente, uma colisão ocorre quando diferentes entradas produzem o mesmo hash. A função hash é então considerada resistente a colisões até que alguém descubra tal colisão. Observe que sempre existirão colisões para qualquer uma das funções hash devido ao número infinito de entradas e ao número finito de saídas.

Assim, uma função hash é resistente a colisões quando a probabilidade de detectar uma colisão é tão pequena que levaria milhões de anos de computação. Por esta razão, embora não existam funções hash livres de colisão, algumas são tão fortes que podem ser consideradas estáveis ​​(por exemplo, SHA-256).

Entre os diferentes algoritmos SHA, os grupos SHA-0 e SHA-1 não são mais seguros porque foram detectadas colisões. Atualmente, apenas os grupos SHA-2 e SHA-3 são considerados resistentes a colisões.


Resistência em encontrar o primeiro protótipo

Esta propriedade está intimamente relacionada ao conceito de funções unilaterais. Uma função hash é considerada robusta para encontrar a primeira visualização, desde que haja uma probabilidade muito baixa de que alguém possa encontrar a entrada usando a saída gerada.

Observe que esta propriedade é diferente da anterior porque o invasor precisa adivinhar a entrada com base em uma saída específica. Esse tipo de colisão ocorre quando alguém encontra duas entradas diferentes que produzem a mesma saída, independentemente de qual entrada específica foi usada.

A propriedade da prova de primeira vista é valiosa para a segurança dos dados, pois um simples hash de uma mensagem pode provar sua autenticidade sem a necessidade de divulgar informações adicionais. Na prática, muitos provedores de serviços e aplicações web armazenam e usam hashes gerados a partir de senhas em vez de usá-los em formato de texto.


Resistência em encontrar um segundo protótipo

Este tipo de estabilidade está em algum lugar entre as duas propriedades anteriores. O ataque de localização do segundo protótipo consiste em encontrar uma entrada específica com a qual seja possível gerar tal saída que já foi gerada a partir de outra entrada previamente conhecida.

Em outras palavras, um segundo ataque de pesquisa envolve detecção de colisão, mas em vez de encontrar duas entradas aleatórias que geram o mesmo hash, o ataque visa encontrar uma entrada que possa reproduzir um hash que já foi gerado por outra entrada.

Portanto, qualquer função hash que seja resistente a colisões também é resistente ao ataque de encontrar o segundo primo, já que este sempre precisa de uma colisão. Entretanto, ainda é possível realizar um primeiro ataque de pesquisa em uma função tolerante a colisões, pois isso envolve a busca por uma entrada com uma saída.


Mineração

Existem muitas etapas na mineração de Bitcoin que são realizadas usando funções hash. Isso é verificação de saldo, vinculação de entradas e saídas de transações e hash de todas as transações em um bloco para formar uma árvore Merkle. Mas uma das principais razões pelas quais a blockchain do Bitcoin é segura é que os mineradores devem realizar tantas operações de hashing quanto possível para eventualmente encontrar a solução correta para o próximo bloco.

Um minerador deve usar diversas entradas diferentes ao gerar um hash para seu bloco candidato. Só será possível verificar o bloco se a saída gerada corretamente na forma de hash começar com um determinado número de zeros. O número de zeros determina a dificuldade de mineração e varia dependendo do hashrate da rede.

Nesse caso, hashrate é uma medida da potência do seu computador que você investe na mineração de Bitcoin. Se o hashrate começar a aumentar, o protocolo Bitcoin ajustará automaticamente a dificuldade de mineração para que o tempo médio necessário para minerar um bloco seja de cerca de 10 minutos. Se vários mineradores decidirem interromper a mineração, resultando em uma queda significativa no hashrate, a dificuldade de mineração será ajustada para facilitar temporariamente o cálculo (até que o tempo médio de formação do bloco retorne a 10 minutos).

Observe que os mineradores não precisam procurar colisões porque existem vários hashes que eles podem gerar como saída válida (começando com um certo número de zeros). Assim, existem diversas soluções possíveis para um determinado bloco, e os mineradores devem encontrar apenas uma delas – de acordo com um limite determinado pela dificuldade de mineração. 

Como a mineração de Bitcoin é uma tarefa cara, os mineradores não têm motivação para enganar o sistema, pois isso resultaria em perdas financeiras significativas. Conseqüentemente, quanto mais mineradores aderem ao blockchain, maior e mais forte ele se torna.


Resultados

Não há dúvida de que as funções hash são uma das principais ferramentas da ciência da computação, principalmente quando se trabalha com grandes quantidades de dados. Quando combinados com criptografia, os algoritmos de hash podem ser muito úteis, fornecendo segurança e autenticação de diversas maneiras. Portanto, as funções criptográficas de hash são vitais para quase todas as redes de criptomoedas, e compreender suas propriedades e mecanismos de funcionamento é certamente útil para qualquer pessoa interessada na tecnologia blockchain.