Cos’è la doppia spesa?

La doppia spesa è un potenziale problema in un sistema di cassa digitale in cui gli stessi fondi vengono inviati a due destinatari contemporaneamente. Senza contromisure adeguate, un protocollo che non risolve il problema è fondamentalmente compromesso: gli utenti non hanno modo di verificare che i fondi che hanno ricevuto non siano già stati spesi altrove.

Quando si tratta di contante digitale, garantire che unità specifiche non possano essere duplicate è di fondamentale importanza. L’intero sistema verrebbe minato se Alice potesse ricevere 10 unità, copiarle e incollarle 10 volte e ritrovarsi in possesso di 100 unità. Allo stesso modo, un tale schema non può funzionare se si possono inviare le stesse 10 unità sia a Bob che a Carol contemporaneamente. Quindi, affinché la moneta digitale funzioni, devono essere messi in atto meccanismi per prevenire questo comportamento.


Come si può prevenire la doppia spesa?

L'approccio centralizzato

Il percorso centralizzato è notevolmente più semplice da implementare rispetto alle alternative decentralizzate. Ciò in genere comporta che un supervisore gestisca il sistema e controlli l'emissione e la distribuzione delle unità. Un buon esempio di soluzione centralizzata al problema della doppia spesa è quello di eCash di David Chaum.

Per fornire agli utenti una risorsa digitale che imita il contante (capace di scambio anonimo e peer-to-peer), una banca può utilizzare firme cieche, come dettagliato dal crittografo David Chaum nel suo articolo del 1982 Blind Signatures for Untraceable Payments.

In un contesto del genere, se un utente (chiamiamolo Dan) desidera ricevere 100 dollari in contanti digitale, è tenuto prima ad informare la banca. A condizione che abbia il saldo sul suo conto, genererà un numero casuale (o molti, per i tagli più piccoli). Supponiamo che produca cinque numeri, a ciascuno dei quali venga assegnato un valore di $20. Per impedire alla banca di monitorare unità specifiche, Dan offusca i numeri casuali aggiungendo un fattore di accecamento a ciascuno di essi.

Quindi consegna questi dati alla banca, che addebita sul suo conto 100 dollari e firma messaggi che certificano che ciascuna delle cinque informazioni è rimborsabile per 20 dollari. Dan ora può spendere i fondi emessi dalla banca. Va al ristorante di Erin e acquista un pasto che gli costa $ 40.

Dan può rimuovere il fattore di accecamento per esporre il numero casuale associato a ciascuna "fattura" di contanti digitale, che funge da identificatore univoco per ciascuna unità (molto simile a un numero di serie). Ne rivela due a Erin, che ora deve riscattarli immediatamente presso la banca per evitare che Dan li spenda con un altro commerciante. La banca controllerà che le firme siano valide e, se tutto risulta corretto, accrediterà 40 dollari sul conto di Erin.

Le banconote utilizzate ora sono sostanzialmente bruciate e se Erin desidera spendere il suo nuovo saldo nello stesso modo è necessario emetterne altre.

La configurazione di Chaumian eCash potrebbe essere utile per i trasferimenti privati. Ma fallisce in termini di resilienza perché la banca è un punto centrale di fallimento. Una banconota emessa non vale nulla di per sé, poiché il suo valore deriva esclusivamente dalla volontà della banca di cambiarla in dollari. I clienti sono alla mercé della banca e devono fare affidamento sulla sua buona volontà affinché il denaro funzioni. Questo è proprio il problema a cui la criptovaluta mira a porre rimedio.


L'approccio decentralizzato

Garantire che i fondi non possano essere spesi due volte in un ecosistema senza supervisore è più impegnativo. Partecipanti altrettanto potenti devono coordinarsi attorno a una serie di regole che prevengono le frodi e incentivano tutti gli utenti ad agire onestamente.

La più grande innovazione presentata nel white paper di Bitcoin è stata la soluzione al problema della doppia spesa. Sebbene non indicato come tale, Satoshi propose la struttura dei dati ora ampiamente conosciuta come blockchain.

Una blockchain è in realtà solo un database con alcune proprietà uniche. I partecipanti alla rete (denominati nodi) eseguono software specializzato, che consente loro di sincronizzare la propria copia del database con i propri pari. Il risultato è che l’intera rete può controllare la cronologia delle transazioni risalenti al blocco di genesi. Avendo la blockchain visibile pubblicamente, è facile rilevare e prevenire attività fraudolente, come le transazioni che tentano di raddoppiare la spesa.

Quando un utente trasmette una transazione, questa non viene immediatamente aggiunta alla blockchain, ma deve prima essere inclusa in un blocco tramite il mining. Pertanto, il destinatario dovrebbe considerare valida la transazione solo dopo che il suo blocco è stato aggiunto alla catena. Altrimenti rischiano di perdere i fondi, poiché il mittente potrebbe spendere le stesse monete altrove.

Una volta confermata la transazione, le monete non possono essere spese due volte, poiché la proprietà viene assegnata a un nuovo utente – e l’intera rete può verificarlo. È per questo motivo che molti consigliano di attendere più conferme prima di accettare un pagamento come valido. Ogni blocco successivo aumenta drasticamente la quantità di sforzo richiesto per modificare o riscrivere la catena (cosa che può verificarsi durante un attacco del 51%).

Rivisitiamo lo scenario del ristorante. Dan torna al ristorante e questa volta nota un adesivo Bitcoin Accepted Here sulla finestra. Gli è piaciuto il pasto dell'ultima volta, quindi lo ordina di nuovo. Gli costa 0,005 BTC.

Erin gli presenta un discorso pubblico al quale deve inviare i fondi. Dan trasmette la transazione, che è essenzialmente un messaggio firmato in cui si afferma che gli 0,005 BTC che erano in possesso di Dan sono ora in quello di Erin. Senza entrare troppo nei dettagli, chiunque si presenti con la transazione firmata da Dan può verificare che lui fosse effettivamente in possesso delle monete, e quindi avesse l’autorità di inviarle.

Come accennato, però, la transazione è valida solo se inclusa in un blocco che viene confermato. Accettare transazioni non confermate è molto simile ad accettare i 40$ in eCash dell'esempio precedente, senza incassarli immediatamente presso la banca: consente al mittente di spenderli altrove. Pertanto, si consiglia a Erin di attendere almeno 6 conferme di blocco (circa un'ora) prima di accettare il pagamento di Dan.


Doppia spesa in Bitcoin

Bitcoin è attentamente progettato per prevenire attacchi di doppia spesa, almeno quando il protocollo viene utilizzato come previsto. Cioè, se gli individui attendono la conferma delle transazioni in un blocco, non esiste un modo semplice per il mittente di annullarle. Per fare ciò, avrebbero bisogno di “invertire” la blockchain, il che richiede una quantità irrealistica di potere di hashing.

Tuttavia, esistono alcuni attacchi di doppia spesa che mirano alle parti che accettano transazioni non confermate. Per gli acquisti di basso valore, ad esempio, un commerciante potrebbe non voler attendere che le transazioni vengano incluse in un blocco. Un fast-food affollato probabilmente non può permettersi di restare a guardare mentre la rete elabora ogni acquisto. Pertanto, se un’azienda consente pagamenti “istantanei”, si apre a doppie spese. Qualcuno potrebbe ordinare un hamburger, pagarlo e poi inviare immediatamente gli stessi fondi al proprio indirizzo. Con una commissione più alta, è probabile che questa nuova transazione venga confermata per prima, invalidando quindi quella precedente.

Esistono tre metodi popolari per eseguire una doppia spesa:

  • Attacchi del 51%: quando una singola entità o organizzazione riesce a controllare più del 50% dell'hash rate, il che consente loro di escludere o modificare l'ordine delle transazioni. Un simile attacco è altamente improbabile su Bitcoin, ma è avvenuto in altre reti.

  • Attacchi razziali: due transazioni contrastanti vengono trasmesse in successione, utilizzando gli stessi fondi, ma solo una transazione viene confermata. L'obiettivo dell'aggressore è invalidare il pagamento convalidando solo la transazione che gli avvantaggia (ad esempio, inviando gli stessi fondi a un indirizzo da lui controllato). Gli attacchi razziali richiedono che il destinatario accetti una transazione non confermata come pagamento.

  • Attacchi Finney: un utente malintenzionato pre-mina una transazione in un blocco senza trasmetterla immediatamente alla rete. Invece, spende le stesse monete in un'altra transazione e solo allora trasmette il blocco precedentemente minato, il che potrebbe invalidare il pagamento. Gli attacchi Finney richiedono che si verifichi una sequenza specifica di eventi e dipendono anche dall’accettazione da parte del destinatario di transazioni non confermate.

Come possiamo vedere, un commerciante che attende la conferma del blocco ridurrà notevolmente il rischio di diventare vittima di doppie spese.


Pensieri conclusivi

Una doppia spesa consente a un utente di sfruttare un sistema di cassa elettronico per ottenere un guadagno finanziario, utilizzando gli stessi fondi più di una volta. Tradizionalmente, la mancanza di soluzioni adeguate al problema ha ostacolato il progresso nel settore.

Fortunatamente, però, l’uso delle firme cieche ha proposto una soluzione interessante per gli schemi finanziari centralizzati. Successivamente, la creazione dei meccanismi Proof of Work e della tecnologia blockchain ha dato vita a Bitcoin come una potente forma di denaro decentralizzato – che, a sua volta, ha ispirato migliaia di altri progetti di criptovaluta.