Fundamentos da Blockchain – Parte 3: Funções de hash

Nesse terceiro capítulo sobre os fundamentos da Blockchain vamos descobrir o propósito da função de hashing.

Antes de iniciarmos – Fundamentos da Blockchain – Parte 3: Funções de hash, caso ainda não tenha acompanhado a primeira e a segunda parte sugiro ler para melhor entendimento da terceira parte.

Fundamentos da Blockchain – Parte 3: Funções de hash

  • Por que a blockchains precisa de funções de hashing?

O endereço da sua carteira, um ID de transação, um ID de bloco, tudo isso são saídas de funções de hashing. Funções de hash são primitivas que também fornecem comportamento determinístico de nós com respeito à ordem de transação. Esse primitivo é usado para construir a chamada Árvore Merkel em Bitcoin ou Trei no caso da rede RSK.

Hashes parecem um conjunto aleatório de caracteres. No entanto, um hash não é aleatório. O valor faz pouco sentido para um leitor humano porque se destina a ser lido e interpretado por um computador. A razão de seu uso na tecnologia blockchain é sua versatilidade para fins de privacidade e integridade de dados.

Hashes protegem a integridade dos dados ocultando e codificando a mensagem original em uma frase única e, portanto, criam, de certa forma, o elemento dos melhores pseudônimos no blockchain, permitindo que tudo permaneça transparente.

Um algoritmo hash é uma função matemática que transforma qualquer entrada em uma saída de tamanho fixo. Para ser criptograficamente seguro e utilizável na tecnologia blockchain ao mesmo tempo, a função hash precisa ser resistente a colisões, o que significa que é praticamente impossível encontrar duas entradas que produzam a mesma saída. Embora uma função de hashing seja uma função criptográfica, não é criptografia. A criptografia funciona com um sistema em que você tem uma entrada, fórmula de criptografia, uma chave e uma saída criptografada.

Conhecendo a entrada criptografada e a chave, você pode descriptografar a saída e obter a mensagem original. Uma função de hashing, em contraste com a criptografia, funciona como uma função unilateral; você não consegue encontrar a mensagem original quando a única coisa que conhece é o hash.

Embora os dados de entrada de um hash possam ter qualquer tamanho, de um único caractere a todo o conteúdo de  livros da maior biblioteca do mundo, a saída é sempre de 32 bytes (SHA-1) ou 64 bytes (SHA-2 ). Isso é um número entre 0 e 4.294.967.295 para um hash de 32 bytes e entre 0 e 9.223.372.036.854.775.807 para um hash de 64 bytes.

O recurso que preserva o comprimento fixo de uma saída de função de hash é fornecido por funções de compactação, que são parte de um algoritmo de hash. Tal como acontece com o blockchain em si, onde novos nós de blockchain precisam sincronizar-se com o resto dos nós completos em execução ao primeiro, uma função de hash é sublinhada pelo princípio do determinismo – a mesma mensagem com hash com a mesma função sempre retornará o mesmo resultado com hash (não importa o lugar ou a hora).

Um aspecto importante das funções de hash seguras é: se você alterar apenas um único caractere da entrada, o hash resultante será algo completamente diferente. Ao mesmo tempo, dois hashes de aparência semelhante terão entradas muito diferentes. Se você alterar apenas um único caractere da entrada, o hash resultante será algo completamente diferente. Ao mesmo tempo, dois hashes de aparência semelhante terão entradas muito diferentes.

Se você alterar apenas um único caractere da entrada, o hash resultante será algo completamente diferente. Ao mesmo tempo, dois hashes de aparência semelhante terão entradas muito diferentes.

O Bitcoin usa o algoritmo de hash SHA-256, que é mais seguro do que os algoritmos SHA-1, para gerar números “aleatórios” verificáveis ​​de uma maneira que requer uma quantidade previsível de esforço da CPU. Gerar um hash SHA-256 com um valor menor que o alvo atual resolve um bloco e ganha algumas moedas.

Desmistificando

SHA é a abreviatura de “Secret Hashing Algorithm”. Não é um único algoritmo de hash, mas uma família de funções muito diferentes, das quais apenas SHA-2 e SHA-3 são recomendados para uso hoje.

Uma saída de uma função hashing é sempre um número discreto descrito como um conjunto de unidades binárias: zeros e uns. Normalmente, o hash é mostrado na forma hexadecimal. Portanto, em vez de ter dígitos de 0 a 9, os dígitos vão de 0 a f (onde “a” é 10 e “f” é 15). É por isso que – mesmo que um ID de transação ou endereço de carteira seja um número justo – você também pode identificar algumas letras nele.

Como funciona o algoritmo SHA

SHA-1 tem uma notável semelhança na estrutura com os algoritmos de hash MD4 e MD5 que foram usados ​​anteriormente. SHA-1 = 160 bits, palavras 5×32 bits, quatro bytes cada. Ao fazer hash com SHA-2, temos frases de 256 ou 512 bits construídas com zeros e uns.

Os dados de entrada são classificados por meio de um loop em grandes blocos de dados de 256 ou 512 bits, dependendo da variação SHA-2 usada, um de cada vez até que o arquivo seja expandido. Se uma mensagem for grande o suficiente para preencher exatamente um bloco (por exemplo, 512 bits de comprimento), o loop hash será executado apenas uma vez.

SHA-2 é mais seguro do que o SHA-1

A diferença entre SHA-1 e SHA2 está nas funções de compressão ligeiramente diferentes e no estado interno mais longo: são 256 ou 512 bits em vez dos 160 bits do SHA-1.

  • O risco de colisão

O ponto crítico em que enfoco com a segurança da função de hashing é a possibilidade de criar uma colisão. Uma colisão ocorre quando você encontra duas mensagens distintas com o mesmo valor em hash: significado, duas entradas diferentes compartilham a mesma impressão digital hash. Essa colisão pode ser produzida por um acidente aleatório ou por um ataque de adivinhação de força bruta.

Em muitos protocolos, entretanto, as colisões não importam. O essencial é a resistência a segundas pré-imagens. Uma segunda pré-imagem é como uma colisão, exceto que o invasor não consegue escolher uma das mensagens. Em vez disso, o invasor é desafiado a encontrar um par de mensagens em conflito, sendo a primeira mensagem definida pelo alvo do invasor (por exemplo, um certificado criptográfico gerado por uma autoridade de certificação) encontrar uma segunda pré-imagem é, portanto, muito mais difícil do que encontrar colisões.

A colisão de 23 de fevereiro de 2017 foi apenas o primeiro caso conhecido de realmente executar o ataque. Em 2013, Marc Stevens publicou um artigo que delineou uma abordagem teórica para criar uma colisão SHA-1. A primeira fase da simulação de colisão de 2017 começou com a criação de um prefixo PDF criado especificamente para gerar dois documentos com conteúdos visuais distintos arbitrários, mas que seriam hash para o mesmo resumo SHA-1. Para superar alguns desafios de computação ao construir esse ataque teórico na prática, uma equipe de simulação aproveitou a experiência técnica e a infraestrutura de nuvem do Google para calcular a colisão, um dos maiores cálculos já concluídos.

Foto de Neidson Soares
Foto de Neidson Soares O autor:

Conheceu esse universo dos criptoativos em 2016 e desde 2017 vem intensificando a busca por conhecimentos na área. Hoje trabalha juntamente com sua esposa no criptomercado de forma profissional. Bacharelando em Blockchain, Criptomoedas e Finanças na Era Digital.