O processamento hash refere-se ao processo de geração de uma saída de tamanho fixo a partir de uma entrada de tamanho diferente. Isso é feito por meio do uso de uma fórmula matemática conhecida como função hash (implementada como um  algoritmo de hashing). 

Embora nem todas as funções hash estejam relacionadas ao uso de criptografia, aquelas conhecidas como funções hash criptográficas estão no centro das criptomoedas. Graças a isso, o blockchain e outros sistemas distribuídos são capazes de atingir níveis significativos de integridade e segurança de dados.

Funções de hash convencionais e hashes criptográficos são a mesma coisa: determinísticos. Ser determinístico significa que, desde que a entrada não mude, o algoritmo de hash sempre produzirá a mesma saída (também conhecida como resumo ou hash).

Em particular, os algoritmos de hash das criptomoedas são projetados como funções unidirecionais, o que significa que não podem ser facilmente revertidos sem enormes recursos e tempo de computação. Em outras palavras, é muito fácil produzir saída a partir de entrada, mas relativamente difícil fazer o oposto (produzir entrada somente a partir de saída). Em geral, quanto mais difícil for encontrar a entrada, mais seguro será o algoritmo de hash.


Como funciona uma função hash?

Diferentes funções de hash produzirão saídas de tamanhos diferentes, mas o possível tamanho de saída de cada algoritmo de hash é sempre constante. Por exemplo, o algoritmo SHA-256 produzirá apenas saídas de 256 bits, enquanto o SHA-1 sempre produzirá resumos de 160 bits.

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

SHA-265

Entrada

Saída (256 bits)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binância

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Observe que uma pequena alteração (tamanho da primeira letra) produz um valor de hash muito diferente. Mas como estamos usando SHA-256, a saída sempre terá um tamanho fixo de 256 bits (ou 64 caracteres) - independentemente do tamanho da entrada. Além disso, não importa quantas vezes executemos essas duas palavras no algoritmo, ambas as saídas serão sempre constantes.

Por outro lado, se executarmos as entradas através do algoritmo de hash SHA-1, teremos os resultados abaixo:

SHA-1

Entrada

Saída (160 bits)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binância

e58605c14a76ff98679322cca0eae7b3c4e08936


Especificamente, a sigla SHA significa Secure Hash Algorithms. Refere-se a um conjunto de funções de hash criptográficas que inclui os algoritmos SHA-0 e SHA-1, juntamente com os grupos SHA-2 e SHA-3. SHA-256 faz parte do grupo SHA-2, junto com SHA-512 e outras variantes. Atualmente, apenas os grupos SHA-2 e SHA-3 são considerados seguros.


Por que isso é importante?

As funções de hash convencionais têm uma ampla variedade de casos de uso, incluindo pesquisas em bancos de dados, análise de big data e gerenciamento de dados. Por outro lado, funções de hash criptográficas são amplamente utilizadas em aplicações de segurança da informação, como autenticação de mensagens e impressões digitais. Quando se trata de Bitcoin, as funções de hash criptográficas são uma parte essencial do processo de mineração e desempenham um papel na criação de novos endereços e chaves.

O verdadeiro poder do hash é visto quando se lida com grandes quantidades de informação. Por exemplo, é possível executar um arquivo grande ou conjunto de dados por meio de uma função hash e, em seguida, usar a saída 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 produz uma saída simples e concisa (hash). Essas técnicas eliminam a necessidade de armazenar e “lembrar” grandes quantidades de dados.

Em particular, o hash é muito útil na tecnologia blockchain. A blockchain do Bitcoin tem diversas operações envolvendo hash, a maioria das quais estão no processo de mineração. Na verdade, quase todos os protocolos de criptomoedas dependem de hash para conectar grupos compactos de transações em blocos e também para gerar links criptográficos entre cada bloco, criando efetivamente um blockchain.


Funções de hash criptográficas

Novamente, uma função hash que propaga técnicas criptográficas pode ser definida como uma função hash criptográfica. Em geral, quebrar uma função de hash criptográfica requer uma infinidade de tentativas de força bruta. Se alguém quiser “reverter” uma função hash criptográfica, ele ou ela deve adivinhar qual é a entrada por tentativa e erro até que a saída apropriada seja produzida. No entanto, também é possível que entradas diferentes produzam exatamente a mesma saída, caso em que ocorre uma “colisão”.

Tecnicamente, uma função hash criptográfica deve seguir três propriedades para ser considerada segura e eficaz. Podemos descrevê-los como resistência à colisão, resistência à pré-imagem e resistência à segunda pré-imagem.

Antes de discutir cada uma das propriedades, vamos resumir essa lógica em três frases curtas.

  • Resistência à colisão: não é fácil encontrar duas entradas diferentes que produzam o mesmo hash como saída.

  • Resistência à pré-imagem: não é fácil “reverter” uma função hash (encontrar a entrada a partir da saída fornecida).

  • Resistência à segunda pré-imagem: não é fácil encontrar uma segunda entrada que entre em conflito com a entrada fornecida.


Resistência à colisão

Como mencionado, uma colisão ocorre quando entradas diferentes produzem o mesmo hash. Portanto, uma função hash é considerada resistente a colisões até que alguém encontre uma colisão. Observe que essas colisões sempre existirão para qualquer função hash porque as entradas possíveis são infinitas, enquanto as saídas possíveis são finitas.

Em outras palavras, diz-se que uma função hash é resistente a colisões quando a probabilidade de encontrar uma colisão é muito pequena, pois isso exigiria milhões de anos de computação. Portanto, apesar de não haver uma função hash livre de colisões, algumas delas são muito fortes e podem ser consideradas resistentes (exemplo: SHA-256).

Entre os vários algoritmos SHA, os grupos SHA-0 e SHA-1 não são mais seguros, pois colisões foram descobertas. Atualmente, os grupos SHA-2 e SHA-3 são considerados resistentes a colisões.


Resistência de pré-imagem

A propriedade de resistência de pré-imagem está relacionada ao conceito de funções unidirecionais. Uma função hash é considerada resistente à pré-imagem quando a probabilidade de alguém encontrar uma entrada que resulte em uma saída específica é muito pequena.

Observe que esta propriedade é diferente da anterior porque o invasor tentará adivinhar qual é a entrada observando a saída disponível. Uma colisão, por outro lado, ocorre quando se encontram duas entradas diferentes que produzem a mesma saída, mas não importa qual entrada é usada.

A propriedade de resistência de pré-imagem é muito útil para proteger dados porque um simples hash da mensagem pode provar a autenticidade, sem precisar revelar as informações. Na prática, muitos provedores de serviços e aplicativos da web armazenam e usam hashes gerados a partir de senhas em vez de senhas em texto simples.


Segunda pré-imagem de resistência

Em termos simples, podemos dizer que esta segunda resistência da Pré-imagem está em algum lugar entre as duas propriedades discutidas anteriormente. Um segundo ataque de pré-imagem ocorre quando alguém consegue encontrar uma entrada específica que produz a mesma saída de outra saída de uma entrada diferente e já conhecida.

Em outras palavras, o segundo ataque de pré-imagem é para encontrar colisões, mas em vez de procurar por duas entradas aleatórias que produzem o mesmo hash, eles procuram por entradas que produzem o mesmo hash produzido por outra entrada específica.

Portanto, qualquer função hash resistente a colisões também é resistente a ataques de segunda pré-imagem. No entanto, ainda é possível realizar um ataque de pré-imagem em uma função resistente a colisões, pois isso também significa encontrar uma única entrada a partir de uma única saída.


Mineração

Há muitas etapas na mineração de bitcoin que envolvem funções de hash, como verificação de saldos, conexão de entradas e saídas de transações e hash de transações dentro de um bloco para formar uma Árvore Merkle. Mas uma das principais razões pelas quais o blockchain do Bitcoin é seguro é o fato de que os mineradores precisam realizar um grande número de operações de hash para eventualmente encontrar a solução correta para o próximo bloco.

Especificamente, um minerador deve tentar várias entradas diferentes ao gerar um valor de hash para seu bloco candidato. Em essência, ele só pode validar seu bloco se produzir um hash de saída que comece com um certo número de zeros. O número de zeros determina a dificuldade de mineração, e isso varia dependendo da taxa de hash dedicada à rede.

Nesse caso, a taxa de hash representa quanta energia do computador é usada para mineração de Bitcoin. Se a taxa de hash da rede aumentar, o protocolo Bitcoin ajustará automaticamente a dificuldade de mineração, de modo que o tempo médio necessário para minerar um bloco permaneça próximo de 10 minutos. Por outro lado, se alguns mineradores decidirem parar de minerar, fazendo com que a taxa de hash caia drasticamente, a dificuldade da mineração será ajustada, tornando-a mais fácil (até que o tempo médio de bloco retorne a 10 minutos).

Entenda que os mineradores não precisam encontrar colisões porque há muitos hashes que eles podem produzir como saídas válidas (começando com um certo número de zeros). Portanto, há diversas soluções possíveis para um determinado bloco, e os mineradores só precisam encontrar uma solução dependendo do limite determinado pela dificuldade de mineração. 

Como a mineração de Bitcoin é um empreendimento caro, os mineradores não têm motivos para enganar o sistema, pois isso resultaria em perdas financeiras significativas. Quanto mais mineradores se juntarem à blockchain, maior e mais forte ela será.


Ideia de encerramento

Não há dúvida de que as funções hash são uma ferramenta muito importante na ciência da computação, especialmente quando se lida com grandes quantidades de dados. Quando combinados com criptografia, os algoritmos de hash podem ser versáteis, oferecendo segurança e autenticidade de diversas maneiras. Portanto, funções de hash criptográficas são essenciais para quase todas as redes de criptomoedas, então entender suas propriedades e como elas funcionam é algo extremamente útil para qualquer pessoa interessada na tecnologia blockchain.