O que é hash? [Guia passo a passo sob o capô do blockchain]

Então, o que realmente é hash?

TLDR:

  1. Hashing é gerar um valor ou valores a partir de uma string de texto usando uma função matemática.
  2. O hash é uma forma de habilitar a segurança durante o processo de transmissão da mensagem quando a mensagem se destina apenas a um destinatário específico. Uma fórmula gera o hash, que ajuda a proteger a segurança da transmissão contra adulteração.

É importante saber como o hash de blockchain funciona. Para fazer isso, no entanto, precisamos primeiro entender um dos princípios básicos que entram na criação do blockchain. A tecnologia Blockchain é uma das descobertas mais inovadoras e definidoras de uma era do século passado. Vendo a influência que teve nos últimos anos e o impacto que terá no futuro, certamente não é exagero dizer isso. Para entender como várias criptomoedas como Ethereum e Bitcoin funcionam.

 Então, o que é hash?

Em termos simples, hashing significa pegar uma string de entrada de qualquer comprimento e dar uma saída de comprimento fixo. No contexto de criptomoedas como bitcoin, as transações são tomadas como entrada e executadas por meio de um algoritmo de hash (bitcoin usa SHA-256) que fornece uma saída de comprimento fixo.

Vamos ver como funciona o processo de hash. Vamos colocar certas entradas. Para este exercício, vamos usar o SHA-256 (Secure Hashing Algorithm 256).

O que é hash? Sob o capô do Blockchain

Como você pode ver, no caso de SHA-256, não importa quão grande ou pequena seja sua entrada, a saída sempre terá um comprimento fixo de 256 bits. Isso se torna crítico quando você está lidando com uma grande quantidade de dados e transações. Então, basicamente, em vez de lembrar os dados de entrada que podem ser enormes, você pode apenas lembrar o hash e manter o controle. Antes de prosseguirmos, precisamos primeiro ver as várias propriedades das funções de hashing e como elas são implementadas no blockchain. 

Funções criptográficas de hash

Uma função hash criptográfica é uma classe especial de funções hash que possui várias propriedades, tornando-a ideal para criptografia. Existem certas propriedades que uma função hash criptográfica precisa ter para ser considerada segura. Vamos examiná-los um por um.

Propriedade 1: Determinística

Isso significa que não importa quantas vezes você analise uma entrada específica por meio de uma função hash, você sempre obterá o mesmo resultado. Isso é crítico porque se você obtiver hashes diferentes a cada vez, será impossível acompanhar a entrada.

Propriedade 2: computação rápida

A função hash deve ser capaz de retornar o hash de entrada rapidamente. Se o processo não for rápido o suficiente, o sistema simplesmente não será eficiente.

Propriedade 3: resistência pré-imagem

Quais são os estados de resistência da pré-imagem que, dado H (A), é inviável determinar A, onde A é a entrada e H (A) é o hash de saída. Observe o uso da palavra “inviável” em vez de “impossível”. Já sabemos que não é impossível determinar a entrada original a partir de seu valor hash. Vamos dar um exemplo.

Suponha que você esteja lançando um dado e a saída seja o hash do número que sai dos dados. Como você poderá determinar qual era o número original? É simples, tudo o que você precisa fazer é descobrir os hashes de todos os números de 1 a 6 e comparar. Uma vez que as funções hash são determinísticas, o hash de uma determinada entrada será sempre o mesmo, então você pode simplesmente comparar os hashes e descobrir a entrada original.

Mas isso só funciona quando a quantidade de dados fornecida é muito menor. O que acontece quando você tem uma grande quantidade de dados? Suponha que você esteja lidando com um hash de 128 bits. O único método que você tem para encontrar a entrada original é usando o “método de força bruta”. O método de força bruta basicamente significa que você tem que pegar uma entrada aleatória, fazer um hash e então comparar a saída com o hash alvo e repetir até encontrar uma correspondência.

Então, o que acontecerá se você usar este método?

  • Melhor cenário possível: Você obtém sua resposta na primeira tentativa. Você realmente terá que ser a pessoa mais sortuda do mundo para que isso aconteça. As chances de isso acontecer são astronômicas.
  • Pior cenário: Você obtém sua resposta após 2 ^ 128 – 1 vezes. Basicamente, significa que você encontrará sua resposta no final de todos os dados.
  • Cenário médio: Você o encontrará em algum lugar no meio, então basicamente após 2 ^ 128/2 = 2 ^ 127 vezes. Para colocar isso em perspectiva, 2 ^ 127 = 1,7 X 10 ^ 38. Em outras palavras, é um número enorme.

Então, embora seja possível quebrar a resistência da pré-imagem através do método da força bruta, leva tanto tempo que não importa.

Propriedade 4: Pequenas mudanças na entrada mudam o hash.

Mesmo se você fizer uma pequena mudança em sua entrada, as mudanças que serão refletidas no hash serão enormes. Vamos testar usando SHA-256:

O que é hash? Sob o capô do Blockchain

Você vê isso? Mesmo que você tenha acabado de alterar o caso do primeiro alfabeto da entrada, observe o quanto isso afetou o hash de saída. Esta é uma função crítica porque esta propriedade de hashing leva a uma das maiores qualidades do blockchain, sua imutabilidade (mais sobre isso posteriormente).

Propriedade 5: resistente à colisão

Dadas duas entradas diferentes A e B onde H (A) e H (B) são seus respectivos hashes, é inviável que H (A) seja igual a H (B). Isso significa que, na maioria das vezes, cada entrada terá seu próprio hash exclusivo. Por que dizemos “na maior parte”? Vamos falar sobre um conceito interessante chamado “O Paradoxo do Aniversário”.

Qual é o paradoxo do aniversário?

Se você encontrar qualquer estranho aleatório nas ruas, as chances de vocês dois terem o mesmo aniversário são muito baixas. Na verdade, supondo que todos os dias do ano tenham a mesma probabilidade de fazer aniversário, a chance de outra pessoa compartilhar sua data de aniversário é de 1/365, que é 0,27%. Em outras palavras, é muito baixo.

No entanto, tendo dito isso, se você reunir 20-30 pessoas em uma sala, a probabilidade de duas pessoas compartilharem o mesmo dia de aniversário aumenta astronomicamente. Na verdade, há uma chance de 50-50 para 2 pessoas compartilharem o mesmo dia de aniversário neste cenário!

O que é hash? Sob o capô do Blockchain

Crédito da imagem: (YouTube)

Por que isso acontece? É por causa de uma regra simples de probabilidade que é a seguinte. Suponha que você tenha N possibilidades diferentes de um evento acontecer, então você precisa da raiz quadrada de N itens aleatórios para que eles tenham 50% de chance de uma colisão.

Aplicando esta teoria para aniversários, você tem 365 possibilidades diferentes de aniversários, então você só precisa de Sqrt (365), que é ~ 23 ~, pessoas escolhidas aleatoriamente para 50% de chance de duas pessoas compartilharem aniversários.

Qual é a aplicação disso no hashing?

Suponha que você tenha um hash de 128 bits com 2 ^ 128 possibilidades diferentes. Ao usar o paradoxo do aniversário, você tem 50% de chance de quebrar a resistência à colisão no sqrt (2 ^ 128) = 2 ^ 64ª instância.

Como você pode ver, é muito mais fácil quebrar a resistência à colisão do que quebrar a resistência de pré-imagem. Nenhuma função hash é livre de colisão, mas geralmente leva muito tempo para encontrar uma colisão. Então, se você estiver usando uma função como SHA-256, é seguro assumir que se H (A) = H (B), então A = B.

Propriedade 6: Quebra-cabeça amigável

Agora, esta é uma propriedade fascinante, e a aplicação e o impacto que esta propriedade teve na criptomoeda são enormes (mais sobre isso mais tarde, quando cobrirmos os quebra-cabeças de mineração e criptografia). Primeiro, vamos definir a propriedade, depois disso vamos examinar cada termo em detalhes.

Para cada saída “Y”, se k for escolhido de uma distribuição com alta min-entropia, é inviável encontrar uma entrada x tal que H (k | x) = Y.

Isso provavelmente passou pela sua cabeça! Mas está tudo bem, vamos agora entender o que essa definição significa.

Qual é o significado de “alta min-entropia”?

Isso significa que a distribuição da qual o valor é escolhido é amplamente distribuída, de modo que escolher um valor aleatório tem uma probabilidade desprezível. Basicamente, se você tivesse que escolher um número entre 1 e 5, essa é uma distribuição de baixa entropia mínima. No entanto, se você escolher um número entre 1 e um zilhão, essa é uma distribuição de alta entropia mínima.

O que significa “k | x”?

O “|” denota concatenação. Concatenação significa adicionar duas strings. Por exemplo. Se eu concatenar “BLUE” e “SKY”, o resultado será “BLUESKY”.

Então, agora vamos revisitar a definição.

Suponha que você tenha um valor de saída “Y”. Se você escolher um valor aleatório “k” de uma distribuição ampla, é inviável encontrar um valor X tal que o hash da concatenação de k e x dará a saída Y.

Mais uma vez, observe a palavra “inviável”, não é impossível porque as pessoas fazem isso o tempo todo. Na verdade, todo o processo de mineração funciona sobre isso (mais sobre isso mais tarde).

Exemplos de funções criptográficas de hash

  • MD 5: Produz um hash de 128 bits. A resistência à colisão foi quebrada após ~ 2 ^ 21 hashes.
  • SHA 1: produz um hash de 160 bits. A resistência à colisão quebrou após ~ 2 ^ 61 hashes.
  • SHA 256: Produz um hash de 256 bits. Isso está sendo usado atualmente por bitcoin.
  • Keccak-256: produz um hash de 256 bits e é usado atualmente pelo ethereum.

Hashing e estruturas de dados

Uma estrutura de dados é uma forma especializada de armazenar dados. Existem duas propriedades de estrutura de dados que são críticas se você quiser entender como funciona uma blockchain. Eles são:

  1. Ponteiros.
  2. Listas Ligadas.

Ponteiros

Ponteiros são variáveis ​​de programação que armazenam o endereço de outra variável. Normalmente variáveis ​​normais em qualquer linguagem de programação armazenam dados.

Por exemplo. int a = 10, significa que existe uma variável “a” que armazena valores inteiros. Neste caso, ele está armazenando um valor inteiro que é 10. Esta é uma variável normal.

Ponteiros, no entanto, em vez de armazenar valores, armazenarão endereços de outras variáveis. É por isso que são chamados de ponteiros, porque estão literalmente apontando para a localização de outras variáveis.

Listas Ligadas

Uma lista vinculada é um dos itens mais importantes nas estruturas de dados. Esta é a aparência de uma lista vinculada:

O que é hash? Sob o capô do Blockchain

É uma sequência de blocos, cada um contendo dados vinculados ao próximo bloco por meio de um ponteiro. A variável de ponteiro, neste caso, contém o endereço do próximo nó nela e, portanto, a conexão é feita. O último nó, como você pode ver, tem um ponteiro nulo, o que significa que ele não tem valor.

Uma coisa importante a se notar aqui, o ponteiro dentro de cada bloco contém o endereço do próximo bloco. É assim que o apontar é alcançado. Agora você pode estar se perguntando o que isso significa para o primeiro bloco da lista? Onde fica o ponteiro do primeiro bloco?

O primeiro bloco é denominado “bloco de gênese” e seu ponteiro fica no próprio sistema. É mais ou menos assim:

O que é hash? Sob o capô do Blockchain

Cortesia de imagem: Coursera

Se você está se perguntando o que significa “ponteiro de hash”, chegaremos lá em breve.

Como você já deve ter adivinhado, é nisso que se baseia a estrutura do blockchain. Um blockchain é basicamente uma lista vinculada. Vamos ver como é a estrutura do blockchain:

O que é hash? Sob o capô do Blockchain

O blockchain é uma lista vinculada que contém dados e um ponteiro de hash que aponta para seu bloco anterior, criando assim a cadeia. O que é um ponteiro de hash? Um ponteiro de hash é semelhante a um ponteiro, mas em vez de conter apenas o endereço do bloco anterior, ele também contém o hash dos dados dentro do bloco anterior. Este pequeno ajuste é o que torna os blockchains tão incrivelmente confiáveis ​​e pioneiros.

Imagine isso por um segundo, um hacker ataca o bloco 3 e tenta alterar os dados. Por causa das propriedades das funções hash, uma ligeira mudança nos dados mudará o hash drasticamente. Isso significa que quaisquer pequenas alterações feitas no bloco 3, irão alterar o hash que está armazenado no bloco 2, agora que por sua vez irá alterar os dados e o hash do bloco 2, o que resultará em alterações no bloco 1 e assim por diante e assim por diante . Isso mudará completamente a cadeia, o que é impossível. É exatamente assim que blockchains alcançam imutabilidade.

Então, como é um cabeçalho de bloco?

O que é hash? Sob o capô do Blockchain

Um cabeçalho de bloco contém:

  • Versão: o número da versão do bloco.
  • Hora: o carimbo de data / hora atual.
  • O alvo de dificuldade atual. (Mais sobre isso mais tarde).
  • Hash do bloco anterior.
  • Nonce (mais sobre isso mais tarde).
  • Hash da Raiz Merkle.

Agora, vamos nos concentrar no Hash da Raiz Merkle. Mas antes disso, precisamos entender o que é uma árvore Merkle.

O que é uma árvore Merkle?

O que é hash? Sob o capô do Blockchain

Cortesia de imagem: Wikipedia

O diagrama acima mostra a aparência de uma árvore Merkle. Em uma árvore Merkle, cada nó não folha é o hash dos valores de seus nós filhos.

Nó folha: os nós folha são os nós da camada mais baixa da árvore. Portanto, no diagrama acima, os nós folha serão L1, L2, L3 e L4.

O que é hash? Sob o capô do Blockchain

Nós filhos: para um nó, os nós abaixo de sua camada que estão sendo alimentados são seus nós filhos. No diagrama, os nós rotulados como “Hash 0-0” e “Hash 0-1” são os nós filhos do nó rotulado como “Hash 0”.

Nó raiz: o nó único no nível mais alto denominado “Hash superior” é o nó raiz.

O que é hash? Sob o capô do Blockchain

Então, o que uma árvore Merkle tem a ver com blockchains?

Cada bloco contém milhares e milhares de transações. Será muito ineficiente em termos de tempo armazenar todos os dados dentro de cada bloco como uma série. Fazer isso tornará a localização de qualquer transação específica extremamente complicada e demorada. Se você usar uma árvore Merkle, no entanto, você reduzirá bastante o tempo necessário para descobrir se uma determinada transação pertence a esse bloco ou não.

Vamos ver isso em um exemplo. Considere a seguinte árvore Merkle:

O que é hash? Sob o capô do Blockchain

Cortesia de imagem: Coursera

Agora, suponha que eu queira descobrir se esses dados específicos pertencem ao bloco ou não:

O que é hash? Sob o capô do Blockchain

Em vez de passar pelo processo complicado de olhar para cada hash individual e ver se ele pertence aos dados ou não, posso simplesmente rastreá-lo seguindo a trilha de hashes que leva aos dados:

O que é hash? Sob o capô do Blockchain

Fazer isso reduz significativamente o tempo gasto.

Hashing na mineração: os quebra-cabeças criptográficos.

Quando dizemos “mineração”, basicamente significa procurar um novo bloco a ser adicionado ao blockchain. Mineiros de todo o mundo estão trabalhando constantemente para garantir que a rede continue crescendo. Anteriormente, costumava ser fácil para as pessoas minerar usando apenas seus laptops, mas com o tempo, as pessoas começaram a formar piscinas de mineração para reunir seus poderes de computador e minerar com mais eficiência.

Isso, entretanto, pode ter sido um problema. Existe um limite para cada criptomoeda, por exemplo. para bitcoin, é apenas 21 milhões. Existem apenas 21 milhões de bitcoins por aí. Se os mineiros forem autorizados a continuar, nesse ritmo, eles irão pescar todos os bitcoins existentes. Além disso, deve haver um limite de tempo específico entre a criação de cada bloco. Para bitcoin, o limite de tempo entre a criação do bloco é de 10 minutos. Se os blocos pudessem ser criados mais rapidamente, isso resultaria em:

  • Mais colisões: mais funções hash serão geradas, o que inevitavelmente causará mais colisões.
  • Mais blocos órfãos: se muitos mineiros acabarem de minerar, eles criarão novos blocos simultaneamente. Isso fará com que ou mais blocos não façam parte da cadeia principal e se tornem blocos órfãos.

Portanto, a fim de restringir a criação de blocos, um nível de dificuldade específico é definido. A mineração é como um jogo, você resolve o quebra-cabeça e ganha recompensas. Definir a dificuldade torna o quebra-cabeça muito mais difícil de resolver e, portanto, mais demorado. Bitcoins WRT, o alvo de dificuldade é uma string de 64 caracteres (que é o mesmo que uma saída SHA-256) que começa com um monte de zeros. Um número de zeros aumenta conforme o nível de dificuldade aumenta. O nível de dificuldade muda após cada bloco de 2016.

O processo de mineração

Nota: Estaremos falando principalmente sobre mineração de Bitcoin aqui.

Quando o software de mineração de bitcoin deseja adicionar um novo bloco ao blockchain, este é o procedimento a seguir. Sempre que um novo bloco chega, todo o conteúdo dos blocos é primeiro hash. Se o hash for menor que o alvo de dificuldade, ele será adicionado ao blockchain e todos na comunidade reconhecerão o novo bloco.

No entanto, não é tão simples assim. Você terá que ser extremamente sortudo para obter um novo bloco assim. É aí que entra o nonce. O nonce é uma string arbitrária concatenada com o hash do bloco. Depois disso, essa string concatenada é hash novamente e comparada ao nível de dificuldade. Se não for menor que o nível de dificuldade, então o nonce é alterado e continua se repetindo um milhão de vezes até que finalmente os requisitos sejam atendidos. Quando isso acontece, o bloco é adicionado ao blockchain.

Então, para recapitular:

  • O hash do conteúdo do novo bloco é obtido.
  • Um nonce (string aleatória) é anexado ao hash.
  • A nova string é hash novamente.
  • O hash final é então comparado ao nível de dificuldade e visto se é realmente menor que isso ou não.
  • Caso contrário, o nonce é alterado e o processo se repete novamente.
  • Se sim, o bloco é adicionado à cadeia e o livro-razão público é atualizado e alertado da adição.
  • Os mineiros responsáveis ​​por isso são recompensados ​​com bitcoins.

Lembra da propriedade número 6 das funções hash? A facilidade de quebra-cabeça?

Para cada saída “Y”, se k for escolhido de uma distribuição com alta min-entropia, é inviável encontrar uma entrada x tal que H (k | x) = Y.

Então, quando se trata de mineração de bitcoin:

  • K = Nonce
  • x = o hash do bloco
  • Y = o alvo de dificuldade

Todo o processo é completamente aleatório, não há nenhum processo de pensamento por trás da seleção dos nonces. É apenas força bruta pura onde o software continua gerando strings aleatoriamente até atingirem seu objetivo. Todo o processo segue o protocolo de Prova de Trabalho que basicamente significa:

  • A resolução de quebra-cabeças deve ser difícil.
  • Verificar a resposta deve, no entanto, ser fácil para todos. Isso é feito para garantir que nenhum método dissimulado foi usado para resolver o problema.

O que é taxa de hash?

A taxa de hash significa basicamente a velocidade com que essas operações de hashing ocorrem durante a mineração. Uma alta taxa de hash significa que mais pessoas e máquinas de software estão participando do processo de mineração e, como resultado, o sistema está funcionando perfeitamente. Se a taxa de hash for muito rápida, o nível de dificuldade aumenta. Se a taxa de hash ficar muito lenta, o nível de dificuldade diminui.

Conclusão – O que é hash?

O hash foi realmente fundamental na criação da tecnologia blockchain. Se alguém quiser entender do que se trata o blockchain, ele definitivamente deve entender o que significa hash.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
map