Um guia para árvores Merkle
Você já ouviu falar sobre as árvores Merkle ao discutir a tecnologia de blockchain? Isso ocorre porque a árvore Merkle está no centro da própria tecnologia.
Então, o que exatamente é isso?
Neste artigo, examinaremos a árvore Merkle em detalhes e compreenderemos seu papel em tornar a tecnologia de blockchain um sucesso.
Vamos começar.
O que é uma árvore Merkle?
Uma árvore Merkle é uma estrutura de dados usada para verificação segura de dados em um grande pool de conteúdo. Também é eficiente e consistente quando se trata de verificar os dados.
Ethereum e Bitcoin utilizam árvores Merkle.
O problema: No núcleo da rede centralizada, os dados podem ser acessados a partir de uma única cópia. Isso significa que eles não precisam fazer muito para armazenar ou acessar os dados. No entanto, quando se trata da rede blockchain descentralizada, as coisas ficam confusas à medida que cada dado é copiado entre os nós. Portanto, é um desafio acessar os dados de forma eficiente. O desafio também é fazer uma cópia dos dados e compartilhá-los entre os nós. Além disso, os dados compartilhados precisam ser verificados para cada um dos nós de recebimento.
A solução: Árvores Merkle permitem que blockchains descentralizados compartilhem dados, verifiquem-nos e os tornem confiáveis. Ele organiza os dados de tal forma que não é necessário muito poder de processamento para compartilhar e verificar os dados. Também facilita a transação segura graças ao uso de funções hash e criptografia.
Satoshi Nakamoto foi a primeira pessoa a implementar árvores Merkle na tecnologia blockchain via Bitcoin. Seu uso abriu um novo ramo da ciência da computação, onde não há necessidade de uma autoridade centralizada. Ele também usou árvores Merkle em um grau excessivo e árvores Fast Merkle.
No entanto, o conceito foi introduzido pela primeira vez por Ralph Merkle, que o patenteou em 1979. Recebeu o nome dele.
Leia também, Hyperledger Cactus: A New Hyperledger Framework
Funções criptográficas de hash
Antes de discutirmos as árvores Merkle, precisamos entender melhor a função hash criptográfica.
Uma função hash é responsável por mapear qualquer forma de dados arbitrários de qualquer comprimento para uma saída de tamanho fixo. É uma função criptográfica e, portanto, é amplamente utilizada em criptografia.
As funções hash são eficientes e são conhecidas por sua única propriedade, ou seja, a função não pode ser revertida. É uma função unilateral projetada para funcionar apenas dessa maneira.
O hash tem vários usos, incluindo
- Proteção de senha
- Verificações e verificações de integridade de arquivos
- Criptomoeda
Existem várias famílias de hash por aí, incluindo Message Direct (MD), Secure Hash Function (SHF) e RIPE Message Direct (RIPEMD).
Se você usar um algoritmo de hash SHA256 e passar 101Blockchains como entrada, obterá a seguinte saída
fbffd63a60374a31aa9811cbc80b577e23925a5874e86a17f712bab874f33ac9
Para resumir, as principais propriedades das funções hash incluem:
- Determinístico
- Resistente à Pré-Imagem
- Eficiente computacionalmente
- Não pode ser invertido com engenharia
- Resistente à Colisão
Se você quiser saber mais sobre as funções criptográficas de hash, confira os artigos detalhados aqui:
Como funcionam as árvores Merkle?
Agora que temos um bom entendimento das funções de hash, é hora de aprender mais sobre árvores Merkle.
Então, tecnicamente, árvores Merkle são árvores de estrutura de dados onde o nó não folha é definido como um valor hash de seus respectivos nós filhos.
Isto também significa que a árvore Merkle está invertida onde os nós folha são os nós mais baixos.
Para entender melhor o que estou tentando transmitir, vamos dar uma olhada no exemplo da árvore Merkle:
Fonte: Wikipedia
No centro das árvores Merkle, precisamos aprender três termos importantes. Eles são os seguintes:
- Raiz Merkle
- Nós Folha
- Nós não-folha
Se você observar a árvore Merkle como um todo, verá que é uma árvore de cabeça para baixo. A árvore é capaz de resumir todo um conjunto de transações por si só. Isso significa que o usuário pode verificar se uma transação faz parte do bloco ou não.
Para fazer as árvores Merkle funcionarem, o hash é usado. Ele simplesmente faz o hash dos pares de nós repetidamente até que apenas um valor de hash reste. O valor de hash esquerdo é conhecido como Merkle Root ou o Root Hash. A árvore é criada de baixo para cima usando os hashes de transações individuais. Os hashes de transação individuais também são conhecidos como IDs de transação.
Os nós folha são os nós que contêm hashes de dados transacionais. No caso dos nós não-folha, eles armazenam o hash dos dois hashes anteriores.
Outra propriedade importante das árvores Merkle é que são de natureza binária. Isso significa que ele exige que os nós folha sejam iguais para que funcione. No caso, se houver um número ímpar de nós folha, ele simplesmente duplicará o último hash e o tornará par.
Um exemplo
Vamos tentar entender tomando um exemplo.
Exemplo de Merkle Tree
Aqui, vemos que quatro transações ocorreram no bloco. Essas transações são chamadas de X, Y, Z e W. As transações são então hash e armazenadas em nós folha que chamamos de Hash X, Hash Y, Hash Z e Hash W.
Uma vez feito isso, os nós folha de Hash X, Y, Z e W são novamente hash e criados em um hash combinado de XY e ZW. Finalmente, esses dois hashes são usados para criar a Raiz Merkle ou Hash de Raiz.
Todo o processo de hashing pode ser feito em um conjunto de dados muito grande, o que torna a estrutura de dados Merkle Trees útil no caso de redes descentralizadas.
Como discutimos anteriormente, o uso de algoritmos de hash depende da implementação. No entanto, uma das funções hash mais comuns que são usadas inclui a função hash criptográfica SHA-2.
Assim, uma transação pode ser verificada se as transações anteriores são verificáveis, graças aos valores de hash.
E quanto à integridade de dados?
A árvore Merkle é ideal para integridade de dados. Além disso, não há necessidade de passar por toda a transação para ver sua verificabilidade. As transações podem ser verificadas com o uso das informações armazenadas no cabeçalho do bloco. O valor da raiz Merkle também é alterado dependendo das transações anteriores.
Isso também significa que os valores raiz são alterados com frequência e podem ser usados para verificar transações quase que instantaneamente.
Tudo isso pode soar um pouco semelhante a lista de hash, no entanto, isso não é verdade. Para uma lista de hash, você precisa baixar a lista completa para verificar as transações ou dados.
No caso da árvore Merkle, você pode baixar o branch e então usá-lo para verificar as transações.
Não há necessidade de baixar a árvore inteira para verificar as transações. Isso também significa que toda a árvore pode ser dividida em pequenos blocos de dados que podem ser usados para verificar as transações em toda a rede. O conceito é conhecido como Provas Merkle.
Você também pode verificar Merkle tree python – uma implementação de árvore Merkle em Python artigo.
Como funcionam as árvores Merkle no Bitcoin
Bitcoin foi a primeira criptomoeda que empregou árvores Merkle de forma eficaz. Para garantir que os valores de hash sejam protegidos e não possam ser revertidos facilmente, ele utiliza o famoso Secure Hashing Algorithm SHA-256. Isso também significa que a saída dos valores de hash tem 256 bits. No núcleo, as árvores Merkle são usadas para armazenar dados e também podar transações.
Leia também, Como começar a usar o Blockchain
No bitcoin, cada bloco é conectado aos blocos anteriores usando valores hash. É assim que todo o blockchain é criado. Em um bloco, existem cabeçalhos de bloco que contêm informações importantes, como:
- Merkle Root Hash
- Número da versão do bloco
- Timestamp
- Nonce
- Alvo de dificuldade de mineração
- Hash do bloco anterior
Para entender melhor, vamos dar uma olhada no diagrama abaixo. É tirado do White paper Bitcoin em si.
Legenda: Árvores Merkle em Bitcoin
Como você pode ver, é necessário que os mineiros incluam as transações no bloco. Uma vez feito isso, ele é hash e se torna parte da árvore Merkle.
O uso de Árvores Merkle, dessa forma, pode levar a vários benefícios. Isso inclui um benefício notável, ou seja, a verificação de pagamento simples (SPV). Esses SVPs são nós que também podem ser denominados como clientes leves. Então o que eles fazem? Eles simplesmente baixam os cabeçalhos de bloco de cadeia mais longos e, portanto, não precisam baixar o blockchain inteiro. Para fazer tudo isso, eles precisam verificar se ele possui os cabeçalhos de bloco armazenados para a cadeia mais longa. É assim que a implementação da árvore Merkle é feita em bitcoin.
No final, um SPV pode usar a Prova de Mapa Merkle e verificar uma transação usando o hash raiz da árvore Merkle.
Como árvores Merkle são usadas em Ethereum
O blockchain Ethereum também utiliza árvores Merkle. No entanto, a abordagem aqui é diferente daquela de como o bitcoin o utiliza. Em Ethereum, a árvore Merkle Patricia é usada, que é uma versão complexa da árvore Merkle. Isso é possível porque Ethereum é Turing-completo.
Se você quiser saber mais sobre como as árvores Merkle funcionam em Ethereum, verifique a postagem detalhada aqui.
Implementação de outras árvores Merkle: casos de uso
Existem, é claro, outras implementações de árvores Merkle por aí. Um dos mais populares é o Git – um sistema de controle de versão distribuído. É usado por programadores de todo o mundo para gerenciar seus projetos.
Outra implementação útil é vista em Sistema de Arquivo Interplanetário – um protocolo distribuído ponto a ponto. Ele também é de código aberto e permite que dispositivos de computação se unam e usem um sistema de arquivos onipresente.
Até as autoridades de certificação utilizam as árvores Merkle em seu benefício. Eles o usam no mecanismo para criar logs de transparência de certificados verificáveis. Como o registro é enorme, as árvores Merkle permitem que os computadores verifiquem sem perder muito tempo e esforço.
O último caso de uso que vamos discutir são os sistemas de banco de dados, como Amazon DynamoDB e Apache Cassandra. Esses bancos de dados distribuídos No-SQL assumem o controle de inconsistências usando árvores Merkle durante o processo de replicação de dados. Se houver algum problema, ele pode atualizar ou reparar os dados usando o processo de reparo anti-entropia.
Em suma, o uso de casos de árvores Merkle incluem
- Sincronização de dados
- Verificação de dados
- Verificação de consistência
Benefícios das Árvores Merkle
Nesta seção, daremos uma olhada rápida nos benefícios da árvore Merkle.
- Valide a integridade dos dados: Pode ser usado com eficácia para validar a integridade dos dados.
- Ocupa pouco espaço em disco: A árvore Merkle ocupa pouco espaço em disco em comparação com outras estruturas de dados.
- Pequenas informações nas redes: Árvores Merkle podem ser divididas em pequenas informações para verificação.
- Verificação eficiente: A estrutura de dados é eficiente e leva apenas um tempo para verificar a integridade dos dados.
Conclusão
A árvore Merkle é um dos conceitos importantes da ciência da computação. É amplamente utilizado em muitos casos de uso e seu uso em criptomoedas deu origem a uma tecnologia revolucionária, – blockchain.
Então, o que você sabe sobre as árvores Merkle? Comente abaixo e deixe-nos saber.