Whitepaper – Simplified Payment Verification

Indice

Ottavo capitolo di approfondimento del Whitepaper di Bitcoin. Stiamo per raggiungere il traguardo, ma le sorprese non sono ancora finite.

Pronti? Iniziamo!

Come abbiamo scoperto nel precedente articolo, Recupero Spazio su Disco, la timechain di Bitcoin occupa attualmente circa 445 GB.

Per permettere a molti wallet e ad applicazioni che non possono permettersi di avere a disposizione tutto lo storico delle transazioni, Satoshi ha utilizzato l’algoritmo Merkle Tree per comprimere tutte le transazioni nel Block Headers, riducendo così la timechain a meno di 100 MB.

Se non ricordate questi passaggi, vi consiglio di leggere l’articolo precedente prima di procedere con la lettura 😉

L’intuizione

Satoshi aveva intuito che, con il passare degli anni, i nostri cellulari sarebbero diventati sempre più connessi ad internet ed utilizzati. Aveva capito che per rendere Bitcoin un sistema di pagamento di successo, sarebbe stato necessario integrare un wallet Bitcoin in ogni singolo dispositivo mobile.

Consapevole del fatto che un dispositivo mobile non sarebbe stato in grado di gestire un intero nodo Bitcoin con tutte le transazioni, Satoshi ha introdotto nel suo whitepaper un sistema che permettesse a telefoni e tablet di implementare comunque dei pagamenti sicuri.

Questo sistema si chiama: Simplified Payment Verification (SPV).

Che cos’è il Simplified Payment Verification (SPV)?

Il Simplified Payment Verification può essere visto come un nodo che, a differenza di un full node, richiede il download solo dei Block Headers dei blocchi e non di tutte le transazioni. In questo modo un nodo SPV può funzionare con pochi mega byte di dati invece che con i 445 GB dell’intera timechain.

Ora vi dovrebbe essere palesemente chiaro perchè il Merkle Tree è stato fondamentale per Nakamoto e per Bitcoin.

Come funziona il Simplified Payment Verification?

Dalle parole di Nakamoto cerchiamo di capire come funziona l’SPV.

Supponiamo che sul nostro cellulare sia installato un wallet Bitcoin e di conseguenza un nodo SPV. Il nostro wallet ha quindi accesso solo ai Block Headers della timechain.

Come può il wallet verificare che una transazione, e quindi un pagamento, sia valido?

Ricordiamoci come le transazioni siano organizzate in una struttura dati efficiente chiamata Merkle Tree. Le foglie dell’albero sono le transazioni avvenute in quel blocco. Mano a mano che si risale l’albero, queste transazioni vengono raggruppate a coppie di hash fino a raggiungere la radice dell’albero, chiamata Merkle Root.

Il Merkle Root racchiude quindi tutte le transazioni avvenute in un determinato blocco.

Ora supponiamo di ricevere un pagamento sul nostro wallet. Per semplicità supponiamo che il wallet sia completamente nuovo e che il pagamento sia la prima transazione in arrivo su quel indirizzo.

Il nostro wallet, nodo SPV, invia una richiesta ai full node, chiedendo di inviare il Block Header relativo alla transazione in arrivo su quell’indirizzo (Bloom Filters).

Per rinfrescarvi la memoria, ecco com’è strutturato un Block Header:

A questo punto il full node risponde al nodo SPV inviando un messaggio chiamato Merkleblock che contiene il Block Header del blocco più il percorso che collega quella transazione al Merkle Root.

Il nodo SPV, utilizza il percorso Merkle Root inviato dal full node per verificare che la transazione sia effettivamente inclusa nel blocco (se non vi ricordate come vi è un esempio nel precedente articolo).

All’interno del Block Header, c’è anche un’altra importante informazione: l’hash del blocco precedente.

Questa informazione permette al nodo SPV di collegare il blocco in cui è inclusa la transazione al resto della timechain.

La combinazione di questi due collegamenti, tra transazione e blocco, e tra blocco e timechain, dimostra che la transazione è stata registrata nella timechain.

Che cos’è un Bloom Filters?

Poco fa abbiamo accennato ad un Bloom Filters parlando della richiesta fatta dai nodi SPV verso i full node. Per non lasciare le cose in sospeso, spieghiamolo in poche righe.

Il Bloom Filtering delle transazioni è un metodo che consente a client leggeri, come appunto i wallet, di limitare la quantità di dati sulle transazioni che ricevono dai full node alle sole transazioni che riguardano il loro portafoglio.

Nell’esempio precedente, per semplificare la spiegazione, poiché il wallet era nuovo e aveva una sola transazione, il Bloom Filter era costituito appunto da una sola transazione.

Un wallet può creare un filtro Bloom per tutti i suoi indirizzi di portafoglio, inviare tale filtro ad un full node utilizzando i messaggi del protocollo peer-to-peer e quindi richiedere una forma speciale di blocchi al nodo, i Merkleblock.

Un Merkleblock, conterrà solo informazioni relative alle transazioni che corrispondono al filtro precedentemente inviato, e quindi:

  • i block headers dei blocchi che contengono le transazioni richieste
  • il ramo di merkle parziale che collega ogni transazione al Merkle Root dei block headers

Il problema della fiducia

La semplicità però ha un caro prezzo: la sicurezza.

I nodi SPV si devono per forza affidare a terze parti parte poter interagire con la rete Bitcoin.

La verifica risulta affidabile finché la rete è controllata da nodi onesti, ma è più vulnerabile se la rete viene attaccata da un aggressore. Finché un aggressore ha possesso delle rete un nodo SPV può essere ingannato da transazioni falsificate non essendo a conoscenza dell’intera timechain.

Come sostiene Satoshi, un modo per proteggere un nodo SPV potrebbe essere quello di ricevere avvisi dai nodi della rete quando rilevano un blocco non valido. In tal modo, il wallet scaricherà il blocco completo e le transazioni relative, così da poter confermare eventuali incongruenze.

Nakamoto suggerisce, inoltre, alle aziende o alle entità che ricevono pagamenti frequenti di installare un proprio full node, in modo da evitare i problemi di sicurezza sopra menzionati e con il vantaggio di poter verificare più velocemente le transazioni.

Nella realtà i nodi SPV si affidano all’interrogazione di full-node che conoscono e che si fidano.

Conclusioni

Nel 2008 c’è stato un boom di lancio di telefoni cellulari. Si può dire che quasi ogni giorno veniva introdotto un nuovo modello.

L’inclusione di un metodo per gestire i pagamenti Bitcoin su dispositivi mobili nel Whitepaper di Satoshi ha contribuito alla diffusione di Bitcoin e alla sua popolarità. I wallet per dispositivi mobili sono diventati una scelta popolare per gli utenti di Bitcoin poiché consentono di effettuare transazioni ovunque ci si trovi, purché si abbia accesso a Internet. Inoltre, le applicazioni wallet offrono una maggiore comodità e flessibilità rispetto ai wallet tradizionali basati su desktop o su hardware.

Tutto questo ha sicuramente contribuito a rendere Bitcoin più accessibile e conveniente per un pubblico più ampio.

Chapeau a Satoshi Nakamato 🙂

Nel prossimo capitolo andremo ad approfondire le transazioni ed in particolar modo andremo a vedere le famose UTXO, Unspent Transaction Outputs.

Fonti e approfondimenti

Condividi questo post

CONTATTACI

Compila il form per qualsiasi richiesta di assitenza.