Sommario

  • Cos'è un albero Merkle?

  • Come funziona un albero Merkle?

  • Perché Merkel Root viene utilizzata in Bitcoin?

    • Estrazione

    • verificare

  • Riassumere


Cos'è un albero Merkle?

Agli inizi degli anni ’80 Ralph Merkle, un noto informatico nel campo della crittografia a chiave pubblica, propose il concetto di albero di Merkle.

La struttura ad albero Merkle può verificare efficacemente l'integrità del set di dati ed è più efficace nelle reti peer-to-peer che richiedono ai partecipanti di condividere e verificare in modo indipendente le informazioni.

Le funzioni hash sono al centro della struttura ad albero Merkle. Pertanto, ti consigliamo di comprendere cos'è l'hashing prima di procedere con questo articolo.


Come funziona un albero Merkle?

Supponiamo che tu voglia scaricare un file di grandi dimensioni. Con i download di software open source, spesso è necessario verificare se l'hash del file scaricato corrisponde a quello reso pubblico dallo sviluppatore. Se corrispondono, i due documenti sono coerenti.

Se gli hash non corrispondono, sei nei guai. O hai scaricato un file dannoso mascherato da software oppure lo hai scaricato in modo errato e il risultato finale è che il file è inutilizzabile. Se il download non è corretto, ti sentirai sicuramente infastidito perché hai aspettato a lungo il download del file. Ora, se ricominci da capo, devi sperare che lo stesso problema non si ripeta.

Hai mai considerato se esiste un modo più semplice per risolvere questo problema? È qui che entra in gioco l'albero Merkle. Gli alberi Merkle possono suddividere i file in più blocchi di dati. Ad esempio, un file da 50 GB può essere suddiviso in 100 copie, ciascuna delle quali ha una dimensione di 0,5 GB. Quindi puoi scaricarli uno per uno. Ecco come funzionano i torrent.

L'origine del file in questo momento è un valore hash, chiamato Merkle root. Questo singolo valore hash rappresenta tutti i blocchi di dati che compongono il file. Inoltre, le radici Merkle semplificano la convalida dei dati.

Per facilitare la comprensione riportiamo un esempio. Di seguito, un file da 8 GB è diviso in otto parti e ciascun frammento è denominato rispettivamente da A a H. Ogni frammento viene quindi inserito in una funzione hash, risultando in otto diversi valori hash.


通过哈希函数,计算出八个片段的哈希值。

Attraverso la funzione hash vengono calcolati i valori hash degli otto frammenti.


Speriamo che la spiegazione dell'esempio sopra sia facile da capire. Abbiamo i valori hash di tutti i frammenti. Se uno di essi è sbagliato, possiamo trovare il problema confrontandolo con il file sorgente? Forse, ma è comunque estremamente inefficiente. Se il file contiene decine di migliaia di frammenti, dobbiamo eseguire l'hashing di tutti i frammenti e confrontare i risultati in dettaglio?

non necessario. Dobbiamo solo combinare una coppia di valori hash ed eseguire un'operazione hash combinata. Cioè, eseguiamo l'hash con hA + hB, hC + hD, hE + hF e hG + hH. Il risultato saranno quattro valori hash. Procediamo quindi al ciclo successivo di hash uniti finché non otteniamo due valori hash. Questi due valori hash vengono poi combinati e alla fine si ottiene il valore hash principale, che è la radice Merkle (detta anche valore hash root).


这个结构看起来像一棵倒置的树。底部一排叶子,相互结合产生节点,最后生成根。

La struttura sembra un albero capovolto. La fila inferiore di foglie si combina tra loro per creare i nodi e infine le radici.


Ora abbiamo la radice Merkle che rappresenta il file scaricato. Confronta l'hash root con il valore del file sorgente e, se corrisponde, tutti sono contenti! Una volta che i valori hash sono diversi, ciò dimostra che i dati sono stati manomessi. In altre parole, uno o più frammenti hanno generato un valore hash diverso. Pertanto, anche piccole modifiche ai dati possono cambiare completamente la radice della Merkel.

Fortunatamente, è anche facile verificare la presenza di segmenti errati. Supponiamo che l'errore sia hE. Per prima cosa chiediamo agli altri due hash (hABCD e hEFGH) per generare la radice Merkle. Il nostro valore hBCD dovrebbe corrispondere a quello degli altri, dimostrando che il sottoalbero è privo di errori. Se hEFGH non corrisponde, possiamo correggere l'errore da qui. Quindi chiedi agli altri i loro hash hEF e hGH e confrontali con i tuoi. Se hGH va bene, hEF è il colpevole. Infine, confrontiamo i valori hash di hE e hF Una volta scoperto che la fonte dell'errore è hE, possiamo scaricare nuovamente il blocco dati.

Per riassumere, la funzione dell'albero Merkle è quella di dividere i dati in più parti, quindi eseguire ripetutamente operazioni di hash per formare infine la radice Merkle, in modo che possa verificare efficacemente dove si trovano i dati errati. Nella prossima sezione presenteremo altre interessanti applicazioni.



Vuoi iniziare il tuo viaggio nella criptovaluta? Vai su Binance e acquista Bitcoin adesso!



Perché Merkel Root viene utilizzata in Bitcoin?

Esistono molti casi d'uso per gli alberi Merkle, ma questo articolo si concentra sul suo ruolo importante nella blockchain. Bitcoin e molte criptovalute sono inseparabili dagli alberi Merkle. Il Merkle tree è parte integrante di ogni blocco, solitamente situato nell'intestazione del blocco. Attraverso il valore hash della transazione (TXID) di ogni transazione nel blocco, possiamo ottenere le foglie.​

In questo contesto, la radice Merkel ha diversi scopi. Diamo un'occhiata all'applicazione di Merkle Root nel mining di criptovaluta e nella verifica delle transazioni.


Estrazione

I blocchi Bitcoin sono costituiti da due parti. La prima parte è l'intestazione del blocco, che ha dimensioni fisse e contiene i metadati del blocco. La seconda parte è il corpo del blocco, che è di dimensioni variabili ma solitamente molto più grande dell'intestazione del blocco e contiene l'elenco delle transazioni.

I minatori devono eseguire ripetutamente l'hashing dei dati finché non viene prodotto un risultato che soddisfi determinate condizioni prima di poter estrarre un blocco valido. Per ottenere il risultato corretto, devono provare trilioni di volte. Ad ogni tentativo, il minatore modifica il numero casuale nell'intestazione del blocco, il valore Nonce, per generare risultati diversi. Tuttavia, il resto del blocco rimane lo stesso e le migliaia di transazioni al suo interno devono ancora essere sottoposte ad hashing ogni volta.

La Merkel ha notevolmente semplificato il processo. Quando inizia il mining, tutte le code delle transazioni vengono compresse e costruite in un albero Merkle e il valore hash root a 32 bit generato viene inserito nell'intestazione del blocco. Quindi, non è necessario eseguire l'hashing dell'intero blocco, ma solo dell'intestazione del blocco.

Questo metodo impedisce la manomissione dei dati ed è quindi efficace, poiché consente di riepilogare in modo efficiente tutte le transazioni in un blocco in una forma compatta. L'elenco delle transazioni delle intestazioni di blocco valide non può essere modificato, altrimenti la radice Merkle verrà modificata. Dopo che il blocco è stato inviato ad altri nodi, l'hash root viene calcolato dall'elenco delle transazioni. Se non corrisponde al valore nell'intestazione del blocco, il blocco può essere rifiutato.


verificare

C’è un’altra proprietà interessante che possiamo utilizzare delle radici Merkle, che riguarda l’applicazione di client leggeri (nodi che non conservano una copia completa della blockchain). Se stai eseguendo un nodo su un dispositivo con risorse limitate, non vuoi scaricare e sottoporre ad hashing tutte le transazioni in un blocco. Invece, chiedi semplicemente una prova Merkle, che è la prova fornita da un nodo completo che una transazione è stata inclusa in un blocco specifico. Questa prova è meglio conosciuta come Simple Payment Verification, o SPV, ed è stata dettagliata nel white paper Bitcoin di Satoshi Nakamoto.


要想检查hD,只需验证红色的哈希值即可。

Per controllare l'hD, basta verificare il cancelletto rosso.


Supponiamo di voler ottenere informazioni sulla transazione relative al TXID hD. Se hC è noto, è possibile calcolare hCD. Quindi, tramite hAB, è possibile calcolare hABCD. Infine, facendo riferimento a hEFGH, puoi verificare se la radice Merkle calcolata è coerente con l'hash radice nell'intestazione del blocco. Una corrispondenza riuscita dimostra che la transazione era inclusa nel blocco, poiché generare lo stesso hash utilizzando dati diversi è quasi impossibile.

Nell'esempio sopra, abbiamo eseguito l'hashing solo tre volte. Senza la certificazione della Merkel ce ne sarebbero voluti sette. I blocchi di oggi contengono migliaia di transazioni e le prove Merkle ci fanno risparmiare molto tempo e potenza di calcolo.


Riassumere

Gli alberi Merkle si sono rivelati importanti nelle applicazioni informatiche e, come abbiamo visto, sono preziosi anche nella blockchain. Gli alberi Merkle rendono più conveniente la verifica delle informazioni nei sistemi distribuiti ed evitano la congestione di dati ridondanti nella rete.

Senza gli alberi Merkle e le radici Merkle, Bitcoin e altri blocchi di criptovaluta non sarebbero così compatti come lo sono oggi. Sebbene i client leggeri non abbiano vantaggi in termini di privacy e sicurezza, con le prove Merkle gli utenti possono verificare che le transazioni siano incluse in blocchi con commissioni minime.