Merkle tree

Difficoltà: avanzato

Argomento: tecnologia


DEFINIZIONE

Un Merkle Tree è una struttura dati che consente di avere un unico hash, chiamato root, che rappresenta una quantità anche grande di valori, e garantire tramite questo unico hash che tutti i dati non siano alterabili.

Ha una struttura ad albero, nel quale i vari rami sono a loro volta degli hash.

In un Merkle Tree ogni nodo foglia è etichettato con l'hash di un blocco di dati e ogni nodo non foglia è etichettato con l'hash crittografico delle etichette dei suoi nodi figli. Gli alberi di hash permettono una verifica efficiente e sicura del contenuto delle blockchain, poiché ogni cambiamento si propaga verso l'alto e la verifica può essere fatta semplicemente guardando l'hash superiore.

Uso di Merkle Tree in Bitcoin

È una componente fondamentale della blockchain bitcoin, in quanto consente delle verifiche molto rapide, ed è usata anche su altre cripto.

Un Merkle Tree riassume tutte le transazioni in un blocco producendo un'impronta digitale (cioè un singolo hash) dell'intero insieme di transazioni.

I Merkle Tree sono utilizzati per memorizzare tutte le transazioni in un dato blocco. Il vantaggio di questo sistema è che un nodo può facilmente dimostrare ad un altro che una data transazione era contenuta in un blocco specifico. Questo è utile per i nodi SPV e i light client, che non memorizzano l'intera blockchain e sono interessati solo a certe transazioni o blocchi.

Per esempio, se un utente ha un wallet e sta aspettando la conferma della sua transazione, ma non ha un full node, può richiedere una prova Merkle ad un altro utente che gestisce un full node. Questa prova viene considerata sufficiente per stabilire che la transazione a cui è interessato l'utente sia inclusa in un blocco valido, senza che l'utente che gestisce il full node debba condividere tutte le transazioni o l'intero blocco con il richiedente.

Da un punto di vista tecnico, un Merkle Tree ha degli strati. Il primo strato è la lista di tutti i txid, gli ID delle transazioni, in un blocco. Per produrre il secondo strato, questi txid sono concatenati e sottoposti a hash a coppie usando SHA-256. Così, il secondo strato sarà lungo la metà del primo strato. Questo processo continua fino a quando l'ultimo strato contiene esattamente un hash. Questo è chiamato Merkle root. Date le proprietà di un hash, se un singolo id di transazione viene cambiato, questo cambiamento risalirà l'albero e cambierà interamente l'hash della root.

Il vantaggio di un Merkle Tree è che la presenza di qualsiasi dato id di transazione in un Merkle Tree può essere dimostrato senza rivelare l'intero Merkle Tree. Per esempio, in un Merkle Tree con otto transazioni, devono essere forniti solo tre hash per provare che uno dei txid è stato incluso in quel Merkle Tree. Questo fornisce una grande efficienza per i Light Client, che non memorizzano l'intera blockchain, e quindi devono interrogare altri nodi per la prova che certe transazioni sono confermate.


aggiornato il 2021-11-10