Hashing se refere ao processo de geração de uma saída de tamanho fixo a partir de uma entrada de tamanho variável. Tal processo é realizado através do uso de fórmulas matemáticas conhecidas como funções hash (implementadas como algoritmos hash).
Embora nem todas as funções hash incluam consistentemente o uso de criptografia, as funções hash criptográficas estão no centro das criptomoedas. Através desses recursos, blockchains e outros tipos de sistemas distribuídos são capazes de atingir níveis significativos de integridade e segurança de dados.
As funções hash convencionais e criptográficas são determinísticas. Isso significa que, desde que a entrada não mude, o algoritmo de hash sempre produzirá a mesma saída (também conhecida como hash ou hash).
Normalmente, os algoritmos de hash de criptomoeda são projetados como funções unilaterais, o que significa que não podem ser facilmente revogados sem grandes quantidades de tempo e recursos de computação. Em outras palavras, é muito fácil criar uma saída a partir de uma entrada, mas relativamente difícil ir na direção oposta (gerar a entrada apenas a partir da saída). No 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 de hash produzirão saídas de tamanhos diferentes, mas os possíveis tamanhos de saída específicos para cada algoritmo de hash são sempre constantes. Por exemplo, o algoritmo SHA-256 só pode produzir saída de 256 bits, enquanto o SHA-1 sempre gerará um hash de 160 bits.
Para ilustrar, vamos aplicar uma função hash SHA-256 (usada para Bitcoin) às palavras Binance e binance.
Observe como uma pequena alteração (aqui o caso da primeira letra) resultou em um valor de hash totalmente diferente. Como estamos usando SHA-256, as saídas sempre terão um tamanho fixo de 256 bits (ou 64 caracteres) – independente do tamanho da entrada. Além disso, não importa quantas vezes se aplique esse algoritmo a essas palavras específicas, ambas as saídas serão sempre as mesmas.
Por outro lado, se utilizarmos as mesmas entradas através do algoritmo de hash SHA-1, obteríamos os seguintes resultados:
A sigla SHA significa Algoritmos de Hash Seguros. Refere-se a um conjunto de funções criptográficas que inclui os algoritmos SHA-0 e SHA-1, bem como 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 eles são importantes?
As funções de hash convencionais têm uma ampla variedade de casos de uso, incluindo pesquisas em bancos de dados, análises 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 de impressões digitais. Quando se trata de Bitcoin, as funções criptográficas de hash são uma parte essencial 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 quando se trata de processar grandes quantidades de informações. Por exemplo, pode-se executar um arquivo ou conjunto de dados por meio de uma função hash e, em seguida, usar sua 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 resultará em uma saída simplificada e condensada (hash). Tal técnica elimina a necessidade de armazenar e lembrar grandes quantidades de dados.
Hashing é particularmente útil no contexto da tecnologia blockchain. A blockchain do Bitcoin possui diversas operações que envolvem hashing, a maioria das quais ocorre no processo de mineração. Na verdade, quase todos os protocolos de criptomoeda dependem de hashing para vincular e condensar grupos de transações em blocos, bem como para produzir links criptográficos entre cada bloco para, em última análise, criar um blockchain.
Funções hash criptográficas
Uma função hash que implementa técnicas criptográficas pode ser definida como uma função hash criptográfica. Normalmente, quebrar uma função hash criptográfica requer uma infinidade de tentativas de força bruta. Para que um indivíduo reverta com sucesso uma função hash criptográfica, ele precisaria adivinhar qual foi a entrada por meio de inúmeras tentativas e falhas até produzir a saída correta. No entanto, existe também a possibilidade de diferentes inputs produzirem exactamente o mesmo output, caso em que ocorre conluio.
Tecnicamente, uma função hash criptográfica deve seguir três propriedades para ser considerada efetivamente segura. Podemos descrever isso como: resistência à colisão, resistência à pré-imagem e resistência à segunda pré-imagem.
Antes de discutir cada propriedade, vamos resumir sua lógica em três frases curtas.
Resistência à colisão: é inviável encontrar duas entradas distintas que produzam o mesmo hash que a saída.
Força da pré-imagem: é impossível reverter a função hash (encontrar a entrada de uma determinada saída).
Segunda resistência de pré-imagem: É impossível encontrar uma segunda entrada que colida com uma entrada especificada.
Resistência à colisão
Conforme mencionado, uma colisão ocorre quando entradas diferentes produzem exatamente o mesmo hash. Portanto, uma função hash é considerada resistente a colisões até que alguém encontre uma colisão. Observe que sempre existirão colisões 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, uma função hash é resistente a colisões quando a chance de encontrar uma colisão é tão baixa que exigiria milhões de anos de computação. Portanto, embora não existam funções hash livres de colisão, algumas delas são fortes o suficiente para serem consideradas robustas (por exemplo, SHA-256).
Entre os diferentes algoritmos SHA, os grupos SHA-0 e SHA-1 não são mais considerados seguros porque foram encontradas colisões. Atualmente, SHA-2 e SHA-3 são considerados resistentes a colisões.
Resistência à pré-imagem
A propriedade de resistência à pré-imagem está relacionada ao conceito de funções unidirecionais. Uma função hash é considerada resistente à imagem quando há uma probabilidade muito baixa de encontrar a entrada que gerou uma saída específica.
Observe que esta propriedade é diferente da anterior, porque aqui um invasor hipotético tentaria adivinhar a entrada observando uma determinada saída. Uma colisão, por outro lado, ocorre quando alguém encontra duas entradas diferentes que geram a mesma saída, mas não importa especificamente qual entrada foi usada.
A propriedade de resistência à pré-imagem é valiosa para proteger dados porque o simples hash de uma mensagem pode provar sua autenticidade, sem a necessidade de divulgar seu conteúdo. Na prática, muitos provedores de serviços e aplicações web armazenam e usam hashes gerados a partir de senhas em vez de senhas em texto simples.
Resistência à segunda pré-imagem
Para simplificar, podemos dizer que a resistência da segunda pré-imagem está em algum lugar entre as outras duas propriedades. Um segundo ataque de pré-imagem ocorre quando alguém consegue encontrar uma entrada específica que gera a mesma saída que outra entrada que já conhece.
Em outras palavras, um segundo ataque de pré-imagem envolve encontrar uma colisão, mas em vez de procurar duas entradas aleatórias que gerem o mesmo hash, procuramos uma entrada que gere o mesmo hash que outra entrada específica.
Portanto, qualquer função hash resistente a colisões também é resistente a ataques de segunda pré-imagem, porque estes sempre envolverão uma colisão. No entanto, ainda é possível realizar um ataque de pré-imagem em uma função resistente a colisões, porque envolve 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, vinculação de entrada/saída de transações e hash de transações em um bloco para formar uma árvore Merkle. Mas um dos principais motivos pelos quais o blockchain Bitcoin é seguro é que os mineradores devem realizar uma infinidade de operações de hashing para encontrar uma solução válida para criar e adicionar um bloco.
Especificamente, um minerador deve tentar diversas entradas diferentes ao criar um valor hash para o bloco ao qual está solicitando. Em essência, eles só conseguirão validar seu bloco se gerarem um hash de saída que comece com um certo número de zeros. O número de zeros é o que determina a dificuldade de mineração e varia dependendo da taxa de hash dedicada à rede.
Neste caso, a taxa de hash representa a quantidade de energia computacional investida na mineração de Bitcoin. Se a taxa de hash da rede aumentar, o protocolo Bitcoin ajustará automaticamente a dificuldade de mineração para que o tempo médio necessário para minerar um bloco permaneça próximo de 10 minutos. Por outro lado, se vários mineiros decidirem parar a mineração, resultando numa queda significativa na taxa de hash, a dificuldade de mineração será ajustada, o que tornará a mineração mais fácil (até que o tempo médio de bloqueio seja reduzido para 10 minutos).
Observe que os mineradores não precisam verificar possíveis colisões porque existem vários hashes que podem gerar como saída válida (começando com um número específico de zeros). Portanto, existem várias soluções possíveis para um determinado bloco, e os mineradores devem encontrar uma – de acordo com o limite determinado pela dificuldade de mineração.
Como a mineração de Bitcoin é uma tarefa de alto custo, os mineradores não têm motivos para trapacear no sistema, pois isso resultaria em perdas financeiras significativas. Quanto mais mineradores houver em um blockchain e, portanto, quanto maior ele for, mais forte ele se tornará.
Concluir
Não há dúvida de que as funções hash são ferramentas essenciais na computação, especialmente quando se trata de grandes quantidades de dados. Em combinação com a criptografia, os algoritmos de hash podem ser bastante versáteis, principalmente para segurança e autenticação, de diversas maneiras. Assim, as funções criptográficas de hash são vitais para quase todas as redes de criptomoedas, portanto, compreender suas propriedades e mecanismos de funcionamento é definitivamente útil para qualquer pessoa interessada na tecnologia blockchain.

