Vai al contenuto
buybitcoinsmart

Glossario / Nodi e software

Verifica semplificata dei pagamenti

Noto anche come SPV.

Che cos'è la verifica semplificata dei pagamenti?
La verifica semplificata dei pagamenti controlla che una transazione si trovi in un blocco con dietro una proof of work reale, usando solo le intestazioni dei blocchi e un ramo di Merkle.

Satoshi Nakamoto ha descritto il metodo nella sezione 8 del whitepaper del 2008, come il modo per usare bitcoin senza gestire un server. È economico perché un'intestazione di blocco è di 80 byte: con circa 960.000 blocchi l'intera catena di intestazioni pesa all'incirca 77 MB, contro i 759 GB dei blocchi stessi ad agosto 2026. Ti dà la prova che i miner hanno incluso il tuo pagamento, e assolutamente nulla su se quel pagamento fosse lecito.

Come funziona

La verifica semplificata dei pagamenti risponde a una sola domanda con due elementi di prova.

Il primo è la catena di intestazioni. Ogni intestazione di blocco è esattamente di 80 byte e contiene l'hash dell'intestazione precedente, la radice di Merkle delle transazioni al suo interno, un timestamp e il target di difficoltà che il miner ha dovuto superare. Un client scarica solo le intestazioni, controlla che ciascuna si colleghi a quella precedente e che ogni hash cada davvero sotto il target dichiarato, e finisce con una catena a cui può attribuire un prezzo in elettricità. Falsificarla non è questione di mentire in modo convincente: significa rifare il mining.

Il secondo è il ramo di Merkle. Le transazioni di un blocco vengono sottoposte a hash a coppie finché ne resta una sola radice, quindi dimostrare che una specifica transazione è in un blocco richiede solo la manciata di hash fratelli lungo il percorso verso quella radice. Il numero è logaritmico: un blocco con 4.096 transazioni richiede 12 hash, cioè 384 byte, e raddoppiare il blocco ne aggiunge solo uno. Il tuo client risale il ramo calcolando gli hash, confronta il risultato con la radice di Merkle nell'intestazione di cui si fida già, e la transazione o è in quel blocco o non lo è.

Mettendo insieme le due cose si ottiene l'affermazione che fa la verifica semplificata dei pagamenti: questa transazione è stata inclusa da un blocco, e da allora vi si è accumulata sopra una quantità misurabile di lavoro.

Ora le lacune, perché sono la parte utile. L'inclusione non è la validità. Il metodo non può dirti che i bitcoin spesi esistevano, che le firme erano valide, che il blocco ha assegnato al miner il sussidio corretto o che gli stessi bitcoin non sono stati spesi in un altro ramo. Né può dimostrare un fatto negativo: un server che semplicemente omette un pagamento non lascia alcuna prova. Satoshi ha scritto l'avvertenza direttamente nel whitepaper, osservando che la tecnica è affidabile finché i nodi onesti gestiscono la rete e che le attività che ricevono pagamenti frequenti vorranno comunque gestire il proprio nodo.

Perché questo conta quando compri bitcoin

Il segno di spunta verde in un wallet sullo smartphone di solito non è affatto una verifica.

La maggior parte dei wallet che le persone installano dopo il primo acquisto su un exchange non costruisce mai una catena di intestazioni. Chiede al server di un'azienda quanto hai, mostra la risposta e la etichetta come confermata. È una garanzia più debole del metodo del whitepaper, e il metodo del whitepaper è a sua volta più debole di un nodo. Per piccoli saldi di tutti i giorni quella catena di fiducia va bene, e fingere il contrario non aiuta nessuno. Smette di andare bene nel punto in cui l'importo farebbe male.

La domanda pratica è di chi ti fidi e per quanto tempo. Le nostre recensioni degli exchange elencano ciò che ogni piattaforma richiede prima di sbloccare un prelievo, e ognuno di quei numeri di conferme è un dato riportato dal nodo dell'exchange stesso. Quando i bitcoin arrivano, il wallet che te li mostra sta riportando di nuovo dal nodo di qualcun altro. È improbabile che una delle due parti stia mentendo. Entrambe possono sbagliare, essere offline o servire una catena che è stata loro fornita, e nessuna delle due te lo dirà quando accade.

C'è anche una dimensione di privacy. Lo studio del 2014 sui client con filtri di Bloom ha rilevato che i filtri pensati per nascondere quali indirizzi interessassero a un wallet ne rivelavano la maggior parte. Per questo Bitcoin Core ha disattivato la funzione per impostazione predefinita nella versione 0.19.0 a novembre 2019, e per questo i wallet leggeri più recenti scaricano filtri compatti invece di caricare richieste.

Cosa la verifica semplificata dei pagamenti avrebbe mancato a settembre 2018

CVE-2018-17144 è l'illustrazione più chiara della differenza tra inclusione e validità nella storia di bitcoin.

Un'ottimizzazione aggiunta in Bitcoin Core 0.14.0 saltava un controllo che si riteneva ridondante, con il risultato che le versioni interessate elaboravano in parte un blocco contenente una transazione che spendeva due volte lo stesso input. Gestito in un modo, faceva andare in crash il nodo. Gestito in un altro, permetteva a un miner di creare bitcoin dal nulla. Il bug è stato segnalato il 17 settembre 2018 e corretto in Bitcoin Core 0.16.3 il giorno successivo. Nessuno lo ha sfruttato sulla rete reale.

Immagina che qualcuno lo avesse fatto. Un miner produce un blocco che gonfia l'offerta, con un'intestazione che porta una proof of work del tutto autentica e un albero di Merkle perfettamente corretto. Un nodo completo aggiornato analizza il blocco, trova l'input duplicato, lo rifiuta e disconnette il peer che glielo ha inviato. Un client che esegue la verifica semplificata dei pagamenti controlla l'intestazione, controlla il ramo e segnala come confermato il pagamento al suo interno, perché ogni elemento di prova di cui dispone è valido. Non ha accesso all'input speso, quindi la domanda non si pone mai.

Questo è l'intero compromesso. La verifica semplificata dei pagamenti eredita le sue regole da chi sta minando. Un nodo no.

Verifica semplificata dei pagamenti vs Neutrino

La verifica semplificata dei pagamenti e Neutrino permettono entrambi a un wallet di funzionare senza la catena completa, e orientano il filtraggio in direzioni opposte. L'approccio classico con BIP37 invia i tuoi interessi a un peer: carichi un filtro, il peer cerca per te e apprende all'incirca quali indirizzi possiedi. Neutrino, l'implementazione di BIP157 e BIP158 usata dalla maggior parte dei wallet Lightning mobili, fa sì che il nodo pubblichi un filtro compatto per blocco per tutti; il tuo wallet scarica i filtri, li verifica in privato e richiede solo i blocchi che corrispondono. La verifica che fai dopo è la stessa aritmetica di Merkle e di intestazioni. Ciò che cambia è che nessuno dall'altra parte apprende cosa stavi cercando.

Da non confondere con

Domande frequenti

Un wallet SPV è sicuro per importi elevati?

È sicuro contro il furto e debole contro l'inganno. Le tue chiavi restano tue, ma il wallet non può rilevare un blocco non valido né un pagamento che un server ha scelto di non menzionare. I saldi elevati vanno tenuti dietro un wallet hardware verificato con un nodo che gestisci tu.

Un wallet hardware fa la verifica semplificata dei pagamenti?

No. Un wallet hardware protegge e applica le tue chiavi private; non conserva dati della blockchain e non verifica alcun blocco. È il software con cui lo abbini a decidere cosa possiedi, ed è per questo che collegare quel software al tuo nodo è importante.

Quanti dati richiede la verifica semplificata dei pagamenti?

Circa 77 MB per l'intera catena di intestazioni con circa 960.000 blocchi, più qualche centinaio di byte per ogni prova di Merkle. Le intestazioni crescono di circa 4,2 MB all'anno, dato che 80 byte moltiplicati per i circa 52.560 blocchi all'anno sono un costo fisso.

Leggi anche

Termini correlati

Altro in Nodi e software

Leggi questa pagina in inglese