Coindaro

Notizie crypto, mercati e guide

Capitalizzazione 2,28 T $ −6,41 % in 24 oreVolume 24 h 91,15 Mld $Dominanza BTC 58,7 %ETH 10,1 %Fear & Greed 13 Paura estremaCrypto 22.238

Cos’è la doppia spesa (double spending) e come la blockchain la evita

Doppia spesa spiegata: perché il denaro digitale si copia, come Bitcoin ordina i pagamenti, gli attacchi reali dal 2013 e quante conferme aspettare.

Principiante 24 min di letturaAggiornato Da leggere prima: Cos’è un UTXO? Il modello di Bitcoin e i conti di Ethereum a confronto
Una moneta, un documento, blocchi isometrici, nodi collegati e un lucchetto insieme
Indice
  1. Cos’è la doppia spesa (double spending)?
    1. Perché una moneta digitale si copia e una banconota no
    2. La doppia spesa è una questione di ordine, non di falsificazione
  2. Prima di Bitcoin, un contabile centrale risolveva ogni disputa
    1. Banche e circuiti di carte: un registro, un impiegato
    2. La zecca di Chaum: controlli in linea, cheater scoperti dopo
  3. Come Bitcoin risolve la doppia spesa senza un’autorità centrale
    1. Ogni pagamento viene annunciato a tutti
    2. I blocchi mettono i pagamenti in un ordine pubblico
    3. I nodi rifiutano ogni moneta già spesa
    4. Due blocchi insieme: vince la catena con più lavoro
    5. Che cosa può e non può fare un attaccante
  4. Cinque modi di spendere due volte
    1. Race attack: due pagamenti in conflitto insieme
    2. Replace-by-fee: quando il mittente può cambiare il pagamento
    3. Finney attack: un miner nasconde un blocco
    4. Vector76: una conferma non sempre basta
    5. Attacco di maggioranza: riscrivere la storia recente
  5. Doppie spese reali, dal 2013 al 2020
  6. Perché sei conferme, e perché una basta per un caffè
  7. Pagamenti a zero conferme: il vero rischio del commerciante
  8. Ethereum e le altre catene ad account: ci pensa il nonce
    1. Solana: un blockhash recente che scade
  9. Proof of stake: il «double signing» è un altro tipo di doppio
  10. Nessuno storno in crypto: il confronto con carte e banche
  11. Che cosa ricordare, da utente o da commerciante

Se mandi una foto a un amico, la foto resta anche a te. blockchain that runs exactly as written when it is called, holding and moving funds according to its code, without an intermediary able to change the outcome.">smart contract holding reserves of two or more tokens, supplied by users, that a decentralized exchange uses to execute trades automatically at a price set by a formula.">pool diverge, compared with simply holding the same tokens in a wallet. It becomes permanent when the provider withdraws.">Il denaro che esiste solo come dato ha lo stesso difetto: senza una regola in più, potresti inviare la stessa moneta digitale a due persone e tenerla pure per te. Questa è la doppia spesa, in inglese double spending, e ogni forma di denaro elettronico ha dovuto risolverla. Bitcoin la risolve con un registro pubblico che mette in fila tutti i pagamenti. La difesa è solida, con due punti deboli: i minuti prima che un pagamento entri nel registro e i rari momenti in cui la rete tiene due versioni dello stesso registro.

Uno di quei momenti arrivò nella notte dell’11 marzo 2013. Un aggiornamento del software spaccò per errore la rete Bitcoin e per qualche ora due versioni del registro crebbero una accanto all’altra. Un utente, per sua stessa ammissione sul forum Bitcointalk, pagò 211,9 bitcoin, circa 10.000 dollari di allora, al servizio di pagamento OKPay su una versione, mentre una seconda transazione che rimandava gli stessi fondi a lui finiva nell’altra. Quando i miner riportarono la rete a una sola versione, quella vincente non conteneva il pagamento a OKPay. Era sparito.

L’analisi tecnica dei due fronti, la BIP 50 degli sviluppatori di Bitcoin, conferma «at least one large double spend» (almeno una doppia spesa di grande importo) e spiega che a farla fu qualcuno che voleva provare se fosse possibile, e che non era «intended to be malicious», cioè non aveva intento malevolo. È la doppia spesa di un pagamento confermato più nota sulla rete Bitcoin vera e propria. E mostra la regola su cui gira tutta questa lezione: quando due pagamenti usano gli stessi fondi ne sopravvive uno solo, e tutto dipende da quale dei due la rete decide di tenere.

Cos’è la doppia spesa (double spending)?

La doppia spesa è il rischio che la stessa unità di denaro digitale venga spesa più di una volta, perché un file o un messaggio si copia a costo zero. Qualunque sistema di contante elettronico deve garantire che, quando due pagamenti usano gli stessi fondi, ne conti uno solo e che tutti siano d’accordo su quale.

Perché una moneta digitale si copia e una banconota no

Una banconota è un oggetto fisico. Quando la consegni al negoziante non ce l’hai più, e nessuno ha bisogno di consultare un registro per saperlo. Una moneta digitale è una sequenza di byte, e i byte si copiano quante volte si vuole senza spendere nulla. Se mandi un «file moneta» per email, ce l’hai ancora sul tuo computer, pronto per essere inviato di nuovo.

Le firme digitali non risolvono il problema. Una firma dimostra che il proprietario ha approvato un pagamento; non dice nulla sul fatto che lo stesso proprietario abbia già approvato un altro pagamento della stessa moneta a un’altra persona. Due transazioni perfettamente valide e perfettamente firmate possono spendere gli stessi fondi. Chi riceve l’una non può accorgersi, guardandola da sola, che esiste anche l’altra.

La doppia spesa è una questione di ordine, non di falsificazione

Il punto, quindi, non è impedire a qualcuno di scrivere un secondo pagamento. Chiunque può scriverlo. Il compito vero è decidere quale di due pagamenti in conflitto sia arrivato prima e far accettare quella decisione a tutti. Satoshi Nakamoto lo dice con chiarezza nella sezione 2 del white paper di Bitcoin (in inglese): «the earliest transaction is the one that counts, so we don’t care about later attempts to double-spend.» In italiano: conta la transazione più antica, e dei tentativi successivi non ci si preoccupa.

La stessa sezione indica la parte difficile: «The only way to confirm the absence of a transaction is to be aware of all transactions.» Per sapere che una moneta non è già stata spesa serve un registro completo e condiviso di tutti i pagamenti e del loro ordine. Per decenni l’unico modo noto per costruirlo è stato affidarlo a un’unica parte di fiducia.

Prima di Bitcoin, un contabile centrale risolveva ogni disputa

Banche e circuiti di carte: un registro, un impiegato

Il tuo conto in banca non è un mucchio di monete. È una riga in un database controllato dalla banca. Quando paghi con la carta o con un bonifico, la banca o il circuito scrive l’addebito, controlla il saldo e rifiuta il secondo pagamento se i soldi sono finiti. In questo schema la doppia spesa è impossibile perché un solo impiegato vede tutte le richieste e le mette in ordine. Il prezzo da pagare è dipendere da quell’impiegato: può bloccare, stornare o rifiutare un pagamento, e i suoi registri sono l’unica verità.

La zecca di Chaum: controlli in linea, cheater scoperti dopo

I primi tentativi seri di contante digitale tenevano un contabile. Nell’eCash di David Chaum una banca, o «zecca», emetteva le monete e controllava ciascuna al momento della spesa, rifiutando quelle già viste. La nostra lezione sul denaro digitale prima di Bitcoin racconta questa storia, insieme a Hashcash, b-money e bit gold. Quello che conta qui è che cosa accadeva quando la zecca era offline: il sistema non poteva fermare la doppia spesa, ma solo smascherare il colpevole in un secondo momento. Hal Finney, spiegando nel 1993 lo schema offline di Chaum, ne riassunse la promessa così: «Anonymity as long as you don’t cheat, and double-spenders get caught» (anonimato finché non imbrogli, e chi spende due volte viene scoperto), nel suo testo «Detecting Double-Spending».

Il paper di Nakamoto descrive quel modello e il suo limite in una frase: una risposta comune è «to introduce a trusted central authority, or mint, that checks every transaction for double spending», cioè introdurre un’autorità centrale fidata, una zecca, che controlla ogni transazione. Tutto dipende allora dall’azienda che gestisce la zecca, con ogni pagamento che passa da lei, «just like a bank». L’obiettivo di Bitcoin era tenere la protezione e togliere la zecca.

Come Bitcoin risolve la doppia spesa senza un’autorità centrale

L’abstract del white paper dichiara l’ambizione in una riga: «We propose a solution to the double-spending problem using a peer-to-peer network.» La soluzione ha più parti, ciascuna semplice. La nostra guida al white paper di Bitcoin spiegato riassume l’intero documento; questa lezione segue solo il filo della doppia spesa.

Ogni pagamento viene annunciato a tutti

Invece di mandare il pagamento a un solo impiegato, un wallet Bitcoin lo trasmette a tutta la rete dei computer che eseguono il software, i cosiddetti nodi. Ogni nodo lo passa ad altri. La sezione 2 del white paper dice che le transazioni devono essere «publicly announced», annunciate pubblicamente, perché i partecipanti possano accordarsi su un’unica storia dell’ordine in cui sono state ricevute. Una volta che un pagamento è pubblico, lo è anche un secondo pagamento delle stesse monete, e il conflitto diventa visibile.

I blocchi mettono i pagamenti in un ordine pubblico

Vedere il conflitto non basta: i nodi possono ricevere i due pagamenti in ordine diverso, a seconda di dove si trovano nella rete. La sezione 3 del paper comincia così: «The solution we propose begins with a timestamp server.» Bitcoin raggruppa i pagamenti in blocchi, e ogni blocco contiene l’impronta del precedente, così i blocchi formano una catena nel tempo. Un pagamento incluso in un blocco ha una posizione in quella catena; un pagamento in conflitto può arrivare solo dopo, e chi arriva dopo perde.

Ecco che cosa significa «conferma»: un pagamento riceve la prima conferma quando viene incluso in un blocco, e una in più ogni volta che si aggiunge un nuovo blocco sopra. Più è in profondità, più è difficile spostarlo.

Un calendario, anelli di catena, un rack di server e una lente d'ingrandimento affiancati
Ogni blocco data un gruppo di pagamenti con il suo posto nel tempo, e ogni nodo lo controlla.

I nodi rifiutano ogni moneta già spesa

Bitcoin non tiene traccia dei saldi, ma delle uscite non spese: ogni pagamento consuma per intero uscite precedenti e ne crea di nuove, come spiegato nella lezione precedente sui modelli UTXO e account. Ogni nodo conserva l’elenco delle uscite ancora non spese. Quando una transazione prova a spendere un’uscita che non è più in quell’elenco, il nodo la rifiuta, e un blocco che la contiene è non valido per ogni nodo onesto. La doppia spesa, dunque, non è un trucco contabile: è una gara per stabilire quale di due transazioni dall’aspetto valido entra per prima nella storia condivisa.

Due blocchi insieme: vince la catena con più lavoro

A volte due miner trovano un blocco quasi nello stesso momento, e per un breve periodo la rete ha due versioni dell’ultima pagina. La nostra lezione su come funziona una blockchain mostra come si risolve: i miner continuano a costruire, un ramo prende vantaggio e tutti i nodi passano a quello. La regola del paper è che «Nodes always consider the longest chain to be the correct one and will keep working on extending it.»

«Più lunga» va intesa con attenzione. Nella sezione 4 il paper dice che la decisione di maggioranza spetta alla catena «which has the greatest proof-of-work effort invested in it», quella con il maggior lavoro di proof of work investito. È la catena con più lavoro accumulato, non con più blocchi, ed è ciò che confronta davvero il software Bitcoin Core. Produrre quel lavoro costa elettricità e hardware veri, ed è per questo che riscrivere la storia di una blockchain ha un prezzo.

Quando i nodi passano da un ramo all’altro, i blocchi del ramo abbandonato escono dalla catena. Gli ingegneri lo chiamano riorganizzazione, o reorg. Ogni pagamento che stava solo nel ramo abbandonato perde le sue conferme, e se nel ramo vincente c’è un pagamento in conflitto, il primo non potrà più essere incluso. Una reorg è il momento in cui una doppia spesa diventa reale.

Che cosa può e non può fare un attaccante

La sezione 11 del paper è precisa sui limiti di chi imbroglia, anche con molta potenza di calcolo. Dice che «An attacker can only try to change one of his own transactions to take back money he recently spent.» L’attaccante può solo cercare di cambiare una sua transazione per riprendersi denaro speso da poco. Non può creare monete dal nulla né spendere monete che non sono mai state sue, perché i nodi onesti rifiutano le transazioni non valide qualunque sia la catena. Il pericolo è circoscritto: un pagamento recente dell’attaccante, annullato dopo che la vittima ha consegnato la merce o il denaro.

Cinque modi di spendere due volte

La pagina del wiki di Bitcoin sulle transazioni irreversibili (in inglese) elenca gli attacchi classici di doppia spesa. Si distinguono per il momento in cui colpiscono e per la potenza di cui l’attaccante ha bisogno. Alcuni richiedono solo un wallet. Il più forte richiede hashrate, la potenza di calcolo spesa nel mining, che è la risorsa a decidere quale versione del registro vince.

AttaccoQuando funzionaChi può farloDifesa principale
Race attackPagamento accettato con zero confermeChiunque abbia un walletAspettare almeno una conferma
Sostituzione con replace-by-feePagamento accettato con zero confermeChiunque abbia un walletNon considerare mai pagato un pagamento non confermato
Finney attackPagamento accettato con zero confermeUn miner che trova blocchiAspettare le conferme
Vector76Pagamento accettato dopo una confermaUn miner, ben posizionato nella reteAspettare più conferme
Attacco di maggioranza (51%)Anche dopo molte confermeChi controlla la maggior parte dell’hashratePiù conferme alzano il costo; le catene piccole ne richiedono molte di più

Race attack: due pagamenti in conflitto insieme

Il tentativo più semplice non richiede attrezzature speciali. Chi imbroglia manda un pagamento a un commerciante e, quasi nello stesso istante, una seconda transazione che spende le stesse monete verso un indirizzo proprio, diffusa al maggior numero possibile di nodi e miner. Se la seconda raggiunge i miner per prima, finisce in un blocco e il pagamento al commerciante cade. Il wiki di Bitcoin dice che i commercianti possono ridurre il rischio, per esempio collegandosi a nodi ben connessi, ma «the risk cannot be eliminated», il rischio non si elimina. Funziona solo contro chi accetta un pagamento prima che sia confermato.

Replace-by-fee: quando il mittente può cambiare il pagamento

Il replace-by-fee (RBF) è una funzione normale, non un attacco: permette a chi invia di sostituire una transazione non confermata con una nuova versione che paga una commissione più alta, di solito per sbloccare un pagamento fermo. La nostra guida su come funzionano le transazioni crypto mostra come si fa. Il problema per chi riceve è che la nuova versione può anche spedire il denaro altrove.

In origine la sostituzione era facoltativa. Con la BIP 125, assegnata a dicembre 2015, una transazione segnalava di poter essere sostituita, e la proposta notava che chi riceve può scegliere di non considerare pagato un pagamento del genere finché non è confermato. Quella distinzione è venuta meno. Bitcoin Core 28.0, uscito il 2 ottobre 2024, ha reso il full replace-by-fee il comportamento predefinito, e Bitcoin Core 29.0, uscito il 14 aprile 2025, ha eliminato l’opzione per disattivarlo. Su Bitcoin Core, il software usato dalla maggior parte dei nodi, qualunque pagamento non confermato può essere sostituito da uno in conflitto che paga di più, abbia o no segnalato la sostituibilità. Si tratta di una politica di inoltro, non di una regola di consenso: i miner possono usare altro software, ma un commerciante non può contare su questo.

Finney attack: un miner nasconde un blocco

Il 13 febbraio 2011 Hal Finney descrisse sul forum di Bitcoin un imbroglio alla portata di un miner. Il suo messaggio si apre con «Suppose the attacker is generating blocks occasionally.» Il miner mette un trasferimento tra due propri indirizzi in un blocco che ha trovato ma non ancora pubblicato. Poi paga un commerciante con le stesse monete. Se il commerciante consegna la merce senza aspettare, il miner pubblica il suo blocco, che spende già quelle monete, e il pagamento al commerciante diventa non valido. Lo scenario porta oggi il nome di Finney. Richiede potenza di mining e un po’ di fortuna con i tempi e, come il race attack, sconfigge solo chi accetta zero conferme.

Vector76: una conferma non sempre basta

L’attacco Vector76 unisce i due precedenti. L’attaccante mina un blocco che contiene un deposito, lo manda solo alla vittima, tipicamente un exchange, e lascia che il resto della rete costruisca su un blocco con una transazione in conflitto. La vittima vede per un attimo una conferma, accredita il deposito e consente all’attaccante di prelevare; quando il suo nodo si riallinea al resto della rete, il deposito svanisce. L’attaccante rinuncia a una ricompensa di blocco per farlo, quindi ha senso solo contro un prelievo grande e veloce. Una conferma è molto meglio di nessuna, ma non è una garanzia.

Attacco di maggioranza: riscrivere la storia recente

La versione seria è quella modellata nel white paper. Un attaccante mina in segreto un ramo in cui il suo pagamento alla vittima non è mai avvenuto, aspetta che la vittima consegni, poi pubblica il suo ramo. Se ha più lavoro accumulato di quello pubblico, ogni nodo passa al suo ramo e il pagamento della vittima scompare. Chi controlla più della metà dell’hashrate della rete può vincere questa gara alla lunga, ed è per questo che si parla di attacco del 51%. Sotto la metà, la probabilità di successo dell’attaccante cala in fretta a ogni conferma che la vittima aspetta.

Le cifre di Nakamoto, sempre nella sezione 11, indicano la probabilità che l’attaccante riesca a recuperare, in funzione della sua quota di hashrate e del numero di conferme che la vittima aspetta:

Quota di hashrate dell’attaccanteConferme atteseProbabilità che l’attaccante recuperi (white paper)
10%10,2045873
10%50,0009137
10%60,0002428
30%50,1773523
30%100,0416605
30%24sotto 0,001 (seconda tabella del paper)
30%500,0000006

In parole semplici: con il 10% dell’hashrate, un attaccante che si trova davanti sei conferme riesce circa 2,4 volte su 10.000 tentativi, nel modello del paper. Con il 30%, cinque conferme gli lasciano ancora quasi il 18% di probabilità, e alla vittima servono 24 conferme per portare il rischio sotto lo 0,1%. Analisi successive con ipotesi diverse danno valori più alti, quindi la tabella va letta come il modello semplificato del paper e non come una previsione precisa. Sopra il 50%, nessun numero di conferme protegge la vittima; il wiki dice «No amount of confirmations can prevent this attack», anche se aspettare alza il costo per l’attaccante. Una futura lezione di Coindaro sugli attacchi del 51% entrerà nei dettagli della loro economia.

Doppie spese reali, dal 2013 al 2020

Le doppie spese ci sono state, e i fatti mostrano uno schema chiaro: una su Bitcoin, durante una divisione accidentale, le altre su catene proof of work più piccole il cui hashrate si poteva noleggiare. La nostra guida su se una blockchain può essere hackerata racconta nel dettaglio i casi di Bitcoin Gold ed Ethereum Classic; qui c’è la versione breve.

DataCatenaChe cosa è successoImporto riportato (all’epoca)Fonte
11-12 marzo 2013BitcoinDivisione accidentale tra nodi 0.8 e nodi più vecchi; un pagamento di 211,9 BTC a OKPay annullatocirca 10.000 dollari, secondo il resoconto dell’utenteBIP 50; il thread dell’utente sul forum
Dal 18 maggio 2018Bitcoin GoldUn attaccante con la maggioranza dell’hashrate ha fatto doppie spese sui depositi presso gli exchangeoltre 388.000 BTG transitati dall’indirizzo dell’attaccante; più di 18 milioni di dollari, stima di BleepingComputerBleepingComputer, 24 maggio 2018
Dal 5 gennaio 2019Ethereum ClassicRiorganizzazioni profonde con doppie spese individuate da Coinbase219.500 ETC in 13 doppie spese, circa 1,1 milioni di dollariInfosecurity Magazine, 8 gennaio 2019
Agosto 2020Ethereum ClassicTre riorganizzazioni in un mese, di 3.693, circa 4.000 e più di 7.000 blocchinon indicato nella fonteThe Block, 31 agosto 2020

Marzo 2013 non fu un attacco. Secondo la BIP 50, un blocco accettato dalla versione 0.8 fu respinto da alcuni nodi più vecchi, il lato 0.8 aveva circa il 60% della potenza di calcolo, e due grandi pool tornarono alla versione vecchia per chiudere la divisione. La doppia spesa funzionò anche se entrambi i lati avevano visto le transazioni nello stesso ordine, molto probabilmente perché le memory pool furono svuotate al riavvio dei nodi dei pool. Il resoconto dell’utente sul pagamento è in un thread del forum del 12 marzo 2013, a cui rimanda la stessa analisi post-mortem. Secondo quel racconto, il pagamento a OKPay era un deposito sul suo conto presso l’exchange BTC-e, e le due transazioni in conflitto furono minate alla stessa altezza, il blocco 225.446, una su ciascun ramo.

Bitcoin Gold, un fork di Bitcoin del 2017, fu colpita da un attaccante che controllava più della metà della sua potenza di mining. Secondo BleepingComputer, gli attacchi cominciarono il 18 maggio 2018, l’attaccante depositava monete presso gli exchange mentre mandava le stesse monete al proprio wallet, e dal suo indirizzo passarono più di 388.000 BTG, cosa che secondo il sito faceva pensare a un guadagno di oltre 18 milioni di dollari. Nel mirino c’erano gli exchange e non i singoli possessori: nessun utente aveva perso denaro, scriveva l’articolo.

Ethereum Classic, la catena che ha mantenuto la storia originale di Ethereum dopo il 2016, fu attaccata nel gennaio 2019. Coinbase rilevò il 5 gennaio una riorganizzazione profonda con una doppia spesa, poi altre 12 doppie spese, per un totale di 219.500 ETC, circa 1,1 milioni di dollari di allora, come riportato da Infosecurity Magazine. Nell’agosto 2020 la catena subì tre riorganizzazioni in un mese, l’ultima profonda più di 7.000 blocchi, circa due giorni di mining secondo l’operatore di pool Bitfly, stando a The Block.

Una figura incappucciata con un piccone accanto a una catena spezzata e a un grattacielo di uffici
Su Bitcoin Gold ed Ethereum Classic, attaccanti con la maggioranza della potenza di mining hanno riscritto blocchi ai danni degli exchange.

La lezione di questi casi riguarda la dimensione. Riscrivere la catena di Bitcoin significherebbe superare l’hashrate della più grande rete proof of work. Su una catena il cui intero hashrate si può noleggiare per qualche ora, lo stesso attacco può costare meno delle monete rubate. Dopo l’attacco a Bitcoin Gold, gli exchange alzarono il numero di conferme richieste per i depositi, ha riportato BleepingComputer.

Perché sei conferme, e perché una basta per un caffè

Sei conferme, circa un’ora in media, sono diventate il margine di sicurezza abituale di Bitcoin. La lezione sul mempool e le commissioni di transazione spiega da dove viene la convenzione e come un pagamento passa dalla trasmissione al blocco. La tabella del white paper mostra perché è sensata: contro un attaccante con il 10% dell’hashrate, sei blocchi portano il rischio allo 0,024% nel modello del paper.

Sei è una convenzione, non una regola del protocollo. Ogni ricevente sceglie la propria soglia, e il numero giusto dipende da due cose: l’importo in gioco e l’hashrate della catena. Kraken, per esempio, accredita i depositi in Bitcoin dopo tre conferme, secondo la sua pagina di aiuto sui tempi di elaborazione dei depositi aggiornata il 22 ottobre 2026. Chi vende un’auto potrebbe aspettarne più di sei. Un bar che vende un caffè da 4 dollari può accettare il rischio di zero conferme, perché la perdita è piccola e l’imbroglione deve presentarsi al bancone.

Sulle catene proof of work più piccole lo stesso numero di blocchi offre molta meno sicurezza, perché produrli costa molto meno. Per questo un exchange può chiedere molte più conferme su una di queste catene che su Bitcoin.

Pagamenti a zero conferme: il vero rischio del commerciante

Finché non è confermato, un pagamento è una promessa annunciata, non un pagamento regolato. Tra il momento in cui il wallet mostra «ricevuto» e il primo blocco, chi invia può ancora tentare un race attack o, con il software dei nodi predefinito oggi, semplicemente trasmettere una sostituzione con una commissione più alta. Alle 09:50 UTC del 7 novembre 2026 mempool.space consigliava 2 satoshi per byte virtuale per la conferma più rapida, quindi una sostituzione potrebbe costare pochissimo a chi imbroglia.

I ricercatori diedero l’allarme presto. In un articolo del 2012, «Two Bitcoins at the Price of One?», Ghassan Karame, Elli Androulaki e Srdjan Čapkun partirono da un fast food che accettava bitcoin e mostrarono che le doppie spese contro pagamenti rapidi di quel tipo si potevano organizzare a basso costo con il software Bitcoin di allora.

Per un commerciante le regole pratiche sono poche:

  • Considera un pagamento con zero conferme come non ancora ricevuto, a meno che l’importo non sia uno che sei pronto a perdere.
  • Spedisci la merce o rilascia i fondi solo dopo il numero di conferme che hai scelto per quell’importo.
  • Chiedi più conferme su una catena con poco hashrate che su Bitcoin.
  • Per i pagamenti piccoli e istantanei usa un sistema pensato per questo, come una rete di canali di pagamento quale Lightning, invece di transazioni on-chain non confermate.

Ethereum e le altre catene ad account: ci pensa il nonce

Ethereum non usa uscite non spese. Tiene un saldo per ogni account, e ogni transazione porta un nonce, che la pagina di ethereum.org sulle transazioni descrive come «a sequentially incrementing counter which indicates the transaction number from the account», un contatore che cresce in sequenza e indica il numero della transazione dell’account. La prima transazione di un account usa il nonce 0, la successiva il nonce 1, e così via.

Il nonce svolge il ruolo che su Bitcoin ha l’«uscita già spesa». Due transazioni dello stesso account con lo stesso nonce sono in conflitto, e solo una può essere inclusa nella catena. La lezione sui modelli UTXO e account mostra l’altra faccia di questa regola, il nonce bloccato che ferma tutte le transazioni successive.

La logica dei pagamenti a zero conferme è la stessa di Bitcoin. Una transazione Ethereum in attesa può essere sostituita da un’altra con lo stesso nonce e una commissione più alta; le regole predefinite di Geth, un client Ethereum molto diffuso, chiedono una commissione di almeno il 10% più alta. Un pagamento ancora in attesa non è un pagamento.

Ethereum ha anche chiuso una porta che si era aperta con la divisione della catena nel 2016. Con l’EIP-155, una transazione firma l’identificativo della catena a cui è destinata, quindi non può essere copiata e riprodotta su un’altra catena che ne condivide la storia. Da quando è passata al proof of stake, Ethereum segna inoltre i blocchi come definitivi dopo un certo intervallo, tema di una lezione successiva su finalità e riorganizzazioni.

Solana: un blockhash recente che scade

Solana segue un’altra strada. Ogni transazione deve includere un blockhash recente, un riferimento a un blocco recente, e i validatori la accettano solo per un tempo limitato: l’SDK di Solana fissa l’età massima a 150 blockhash recenti, un minuto o meno alla velocità di Solana. Una transazione troppo vecchia viene rifiutata, quindi un pagamento firmato non può restare in giro per giorni in attesa di essere riprodotto. In quella finestra i validatori tengono anche traccia delle firme già elaborate e rifiutano la stessa transazione una seconda volta. Le spese in conflitto dallo stesso account vengono semplicemente ordinate dal validatore che produce il blocco.

Proof of stake: il «double signing» è un altro tipo di doppio

Sulle catene proof of stake la parola «doppio» compare con un altro significato. I validatori, che bloccano monete per partecipare, vengono puniti con lo slashing se firmano due versioni in conflitto della storia. La pagina di ethereum.org su ricompense e penalità elenca tre infrazioni: proporre e firmare due blocchi diversi per lo stesso slot, attestare un blocco che ne «circonda» un altro e il doppio voto, cioè attestare due candidati per lo stesso blocco.

Non è un utente che paga due volte. È un validatore che prova a sostenere due storie, esattamente ciò che servirebbe a una doppia spesa profonda. Lo slashing brucia parte della posta del validatore e lo espelle, quindi il tentativo è costoso e riconducibile a chi l’ha fatto. Un utente che manda due pagamenti in conflitto non subisce slashing: un pagamento semplicemente fallisce.

Nessuno storno in crypto: il confronto con carte e banche

Il rovescio del disegno di Bitcoin è che un pagamento confermato non ha un impiegato che possa annullarlo. Il white paper lo presenta come un vantaggio per chi vende: «Transactions that are computationally impractical to reverse would protect sellers from fraud.» Per chi ha pagato un truffatore significa che i soldi sono persi. La guida per i consumatori sulle truffe crypto della Federal Trade Commission statunitense lo dice senza giri di parole: «Cryptocurrency payments typically are not reversible.»

Il confronto con le carte e i bonifici è questo: un pagamento bancario o con carta è un credito su un registro tenuto da istituzioni che la legge può obbligare a stornare una scrittura; un trasferimento crypto confermato non ha una controparte del genere. Come esempio di ciò che esiste fuori dalle crypto, ecco le tutele di altri due paesi, ricavate dalle norme originali.

Negli Stati Uniti, secondo la Regulation E, la norma del CFPB sui trasferimenti elettronici, la responsabilità del consumatore per i trasferimenti non autorizzati è limitata a 50 dollari se la banca viene avvisata entro due giorni lavorativi da quando il consumatore ha saputo della perdita o del furto della carta, e a 500 dollari dopo, con 60 giorni dall’estratto conto per segnalare i trasferimenti non autorizzati. Con la Regulation Z, la responsabilità di chi ha una carta di credito per l’uso non autorizzato è limitata a 50 dollari, e un errore di fatturazione segnalato entro 60 giorni dall’estratto conto deve essere risolto entro due cicli di fatturazione e comunque non oltre 90 giorni.

Nel Regno Unito, le Payment Services Regulations 2017 impongono al prestatore di servizi di pagamento di rimborsare un pagamento non autorizzato entro la fine del giorno lavorativo successivo a quello in cui ne viene a conoscenza, salvo fondati sospetti di frode. La sezione 75 del Consumer Credit Act 1974 rende l’emittente della carta responsabile in solido con il venditore per acquisti singoli sopra le 100 sterline e fino a 30.000 sterline. Dal 7 ottobre 2024, perfino le vittime di truffe con pagamento autorizzato, cioè chi ha mandato il denaro a un truffatore di sua mano con Faster Payments o CHAPS, possono essere rimborsate fino a 85.000 sterline. Il limite per i Faster Payments l’ha fissato il Payment Systems Regulator e la Bank of England, che gestisce CHAPS, ha scelto lo stesso.

Niente di simile esiste su una blockchain pubblica. Un exchange può rimborsare un cliente di tasca propria, e un destinatario può scegliere di restituire le monete, ma il protocollo non ha un pulsante per contestare. La FTC lo dice così: di solito si riesce a riavere i soldi solo se la persona pagata li rimanda indietro. La nostra guida su come evitare le truffe crypto raccoglie le abitudini che contano di più quando non c’è nessuno storno.

Che cosa ricordare, da utente o da commerciante

Un registro pubblico e ordinato permette a degli estranei di mettersi d’accordo su quale pagamento sia arrivato per primo, senza una banca. Non protegge un pagamento che non è ancora nel registro, né uno che sta su una catena economica da riscrivere, e da questo discendono alcune abitudini.

  • Un pagamento non confermato può ancora essere sostituito o scartato: trattalo come una promessa in sospeso.
  • Proporziona l’attesa all’importo: più la somma è alta, più conferme servono prima di rilasciare merce o fondi.
  • Una piccola catena proof of work richiede molte più conferme di Bitcoin, perché il suo hashrate costa poco da noleggiare.
  • Un pagamento crypto confermato a un truffatore non si può stornare: controlla l’indirizzo e il destinatario prima di inviare.
  • Su Ethereum una transazione in attesa può essere sostituita da un’altra con lo stesso nonce; su Bitcoin qualunque transazione non confermata può essere sostituita con una commissione più alta.

La prossima lezione di questo percorso riguarda la finalità e le riorganizzazioni: quanto in profondità può arrivare una reorg sulle diverse catene, e quando un pagamento si può dire definitivo e non soltanto molto probabilmente stabile.

Fonti

  1. Satoshi Nakamoto: Bitcoin, A Peer-to-Peer Electronic Cash System, white paper, sezioni 2, 3, 4, 5, 11 (in inglese) bitcoin.org
  2. BIP 50: March 2013 Chain Fork Post-Mortem, di Gavin Andresen (in inglese) github.com
  3. Bitcointalk, 12 marzo 2013: il resoconto di un utente sulla doppia spesa di 211,9 BTC contro OKPay (in inglese) bitcointalk.org
  4. Wiki di Bitcoin: Irreversible Transactions, attacchi race, Finney, Vector76 e di maggioranza (in inglese) en.bitcoin.it
  5. Note di rilascio di Bitcoin Core 29.0, full replace-by-fee come comportamento standard (in inglese) github.com
  6. Karame, Androulaki e Capkun: Two Bitcoins at the Price of One? Double-Spending Attacks on Fast Payments in Bitcoin, IACR ePrint 2012/248 (in inglese) eprint.iacr.org
  7. BleepingComputer, 24 maggio 2018: attacco di doppia spesa sulla rete Bitcoin Gold (in inglese) bleepingcomputer.com
  8. Infosecurity Magazine, 8 gennaio 2019: Coinbase disattiva ETC dopo gli attacchi di doppia spesa (in inglese) infosecurity-magazine.com
  9. The Block, 31 agosto 2020: il terzo attacco del 51% a Ethereum Classic in un mese (in inglese) theblock.co
  10. ethereum.org: ricompense e penalità del proof of stake, infrazioni sanzionate con lo slashing (in inglese) ethereum.org
  11. Solana SDK, costanti di clock: MAX_PROCESSING_AGE di 150 blockhash (in inglese) github.com
  12. Federal Trade Commission statunitense: What To Know About Cryptocurrency and Scams (in inglese) consumer.ftc.gov
  13. Payment Systems Regulator: conferma della decisione sul rimborso delle truffe APP, 85.000 sterline (in inglese) psr.org.uk
Redazione di Coindaro

Chi ha scritto questo articolo

Redazione

Guide, recensioni e glossario verificati sulle fonti primarie

  • Formazione crypto
  • Recensioni exchange
  • Wallet
  • Glossario

La redazione di Coindaro ricerca e scrive ogni articolo, recensione e guida pubblicata su Coindaro. Ogni fatto è verificato su fonti primarie come documenti ufficiali, autorità di regolamentazione e documentazione dei progetti, e ogni pagina cita le sue fonti. Copriamo mercati crypto, tecnologia e regolamentazione per i lettori di Europa e Nord America, in modo indipendente e senza contenuti a pagamento.

Continua a imparare