Qual è il problema della doppia spesa?

Il problema della doppia spesa è un potenziale problema nei sistemi di cassa digitali in cui gli stessi fondi vengono pagati a due beneficiari contemporaneamente. Senza contromisure adeguate, il protocollo da solo non può risolvere completamente questo problema. Dopotutto, gli utenti non hanno modo di verificare se i fondi che ricevono sono stati versati ad altri.

Nel mondo del contante digitale è necessario garantire che una determinata unità di valuta non possa essere copiata. Se Alice potesse ricevere 10 unità monetarie, copiarle e incollarle 10 volte, e poi avere lei stessa 100 unità monetarie, l’intero sistema crollerebbe. Allo stesso modo, se potesse inviare le stesse 10 unità monetarie a Bob e Carol contemporaneamente, neanche il sistema funzionerebbe. Pertanto, devono essere predisposti meccanismi per evitare che ciò accada e garantire il corretto funzionamento delle valute digitali.


Come prevenire il problema della doppia spesa?

Approccio centralizzato

Gli approcci centralizzati sono più facili da implementare rispetto alle soluzioni decentralizzate, che di solito richiedono un supervisore per gestire il sistema e controllare l’emissione e l’emissione di unità monetarie. eCash di David Chaum risolve il problema della doppia spesa attraverso un approccio centralizzato.​

Le banche possono utilizzare firme cieche per emettere risorse digitali simili a contanti agli utenti (che possono consentire transazioni peer-to-peer anonime). Ciò è dettagliato nel documento del 1982 "Tecniche di firma cieca per pagamenti non tracciabili" del crittografo David Chaum.

In questo caso, se l’utente Dan desidera ricevere 100$ in contanti digitali, deve prima avvisare la banca. Se c'è un saldo nel suo conto, verrà generato un numero casuale (di più se il valore nominale è inferiore). Supponiamo che vengano generati cinque numeri casuali, ciascuno del valore di $ 20. Per evitare che le banche tengano traccia di specifiche unità monetarie, Dan confonde la situazione aggiungendo un fattore di accecamento a ciascun numero casuale.

Ha poi fornito questi dati alla banca, che ha detratto il saldo di 100 dollari dal suo conto e ha firmato il messaggio, dimostrando che ciascuno dei cinque messaggi era rimborsabile per 20 dollari. Al momento, Dan può utilizzare il contante digitale emesso dalla banca. Andò a mangiare al ristorante di Erin e spese 40 dollari.​

Dan elimina il fattore di accecamento ed espone il nonce associato a ciascuna “banconota” di contante digitale, che è un identificatore univoco per ciascuna unità di valuta (più o meno equivalente a un numero di serie). Rivela due dei numeri casuali a Erin, che deve immediatamente scambiare i fondi con la banca per impedire a Dan di pagare ad altri commercianti. La banca verificherà se la firma è valida e, se è corretta, depositerà $ 40 sul conto di Erin.

Le "banconote" utilizzate vengono poi distrutte e se Erin desidera utilizzare il saldo del suo conto allo stesso modo, è necessario emettere altre banconote.

Il meccanismo Chaumian eCash è estremamente prezioso per i trasferimenti privati. Tuttavia, il meccanismo eCash in sé non ha alcuna resistenza. Poiché le banche sono nodi centralizzati, se il sistema va storto, tutti ne soffriranno. Le banconote emesse dalle banche non hanno valore in sé; il loro valore deriva interamente dalla volontà della banca di scambiare le banconote con dollari statunitensi. I clienti sono soggetti alla banca e devono fare affidamento sulla reputazione della banca per gestire i fondi. Questo è esattamente il problema che le criptovalute mirano a risolvere.


Approccio decentralizzato

Evitare il problema della doppia spesa in un ecosistema privo di meccanismi di supervisione è ancora più impegnativo. I partecipanti con pari potere devono coordinarsi tra loro secondo lo stesso insieme di regole per prevenire le frodi e incentivare tutti gli utenti ad agire con integrità.

La più grande innovazione presentata nel white paper di Bitcoin è la soluzione al problema della doppia spesa. Satoshi Nakamoto ha proposto una struttura dati senza precedenti ora nota come blockchain.

Blockchain è in realtà solo un database con alcune proprietà uniche. I partecipanti alla rete (chiamati nodi) eseguono software specializzato che consente loro di sincronizzare tra loro le proprie copie del database. In questo modo, l’intera rete può verificare la cronologia delle transazioni risalenti al blocco di genesi. Dato che la blockchain è visibile al pubblico, sarà più semplice individuare e prevenire le frodi, ad esempio identificare i tentativi di doppia spesa.

Quando un utente pubblica una transazione, questa non viene immediatamente aggiunta alla blockchain e deve prima essere minata prima che il blocco possa essere caricato. Pertanto, solo quando il blocco viene inserito nella catena il beneficiario può confermare che la transazione è valida. Altrimenti, il destinatario rischierà di perdere fondi se il mittente paga lo stesso token altrove.​

Una volta confermata una transazione, la proprietà del token viene assegnata al nuovo utente e verificata dall'intera rete, quindi i token non possono più essere spesi due volte. Per questo motivo molte persone consigliano di attendere più conferme prima di accettare un pagamento valido. Ogni blocco successivo aumenta significativamente la quantità di lavoro necessaria per modificare o riscrivere la catena (come nel caso di un attacco del 51%).

Torniamo alla situazione del ristorante. Dan è tornato al ristorante e questa volta ha notato l'adesivo sulla vetrina che diceva "Questo negozio supporta il pagamento con Bitcoin". Non poteva dimenticare il suo ultimo pasto e ha ordinato di nuovo lo stesso cibo, costando 0,005 Bitcoin.​

Erin mostra a Dan l'indirizzo pubblico, che è l'indirizzo del trasferimento. L'annuncio della transazione da parte di Dan è essenzialmente un messaggio firmato che annuncia che gli 0,005 Bitcoin che possiede sono ora di proprietà di Erin. Senza entrare troppo nei dettagli, chiunque veda la transazione firmata da Dan può confermare che i token sono effettivamente suoi, e quindi Dan ha l'autorità di inviarli.

Tuttavia, come accennato prima, la transazione è valida solo dopo essere stata caricata nel blocco e confermata. Ricevere una transazione non confermata è come ricevere in precedenza $ 40 in eCash. Se non vengono immediatamente incassati tramite la banca, il mittente può spendere i fondi altrove. Pertanto, Erin dovrebbe attendere almeno 6 conferme di blocco (circa un'ora) prima di accettare il pagamento da Dan.


Il problema della doppia spesa di Bitcoin

Bitcoin è attentamente progettato per prevenire attacchi di doppia spesa, almeno se il protocollo viene utilizzato come previsto. Cioè, se qualcuno sta aspettando che una transazione riceva la conferma del blocco, il mittente non sarà in grado di annullare facilmente la transazione. Solo “invertendo” la blockchain è possibile invertire una transazione, il che richiede enormi quantità di potere di hashing.

Tuttavia, alcuni attacchi di doppia spesa prendono di mira specificamente gli utenti che accettano transazioni non confermate. Ad esempio, con piccoli acquisti, i commercianti non vogliono aspettare finché la transazione non viene inclusa nel blocco. I fast-food affollati potrebbero non essere in grado di attendere il tempo necessario alla rete per elaborare ogni transazione. Pertanto, se un commerciante ha abilitato i pagamenti "istantanei", potrebbe trovarsi ad affrontare un problema di doppia spesa. Qualcuno può ordinare un hamburger e pagarlo, quindi rispedire immediatamente gli stessi fondi al proprio indirizzo. Finché la commissione di gestione della transazione successiva è più alta, questa potrebbe essere confermata per prima, rendendo non valida la transazione precedente.

Attualmente esistono tre attacchi comuni a doppia spesa:

  • Attacco del 51%: una singola entità o organizzazione riesce a controllare più del 50% dell'hash rate per eliminare o modificare l'ordine delle transazioni. È estremamente improbabile che questo tipo di attacco si verifichi sulla rete Bitcoin, ma si è verificato su altre reti.

  • Attacco razziale: vengono pubblicate in successione due transazioni contrastanti utilizzando gli stessi fondi, ma viene confermata solo una transazione. L'obiettivo dell'aggressore è invalidare un altro pagamento convalidando una transazione a suo favore. Ad esempio, inviando fondi a un indirizzo da lui controllato. Un attacco razziale in genere comporta che il destinatario accetti una transazione non confermata come pagamento.

  • Attacchi Finney: un utente malintenzionato pre-mina una transazione e la inserisce in un blocco, ma non la pubblica immediatamente sulla rete. Invece, ha versato lo stesso token in un'altra transazione prima di pubblicare un blocco precedentemente minato, invalidando così il pagamento. Le condizioni necessarie per un attacco Fenney sono che gli eventi si svolgano in un ordine specifico e il successo dipende anche dall’accettazione o meno della transazione non confermata da parte del destinatario.

Come possiamo vedere, i commercianti possono ridurre notevolmente il rischio ed evitare di cadere vittime di una doppia spesa semplicemente aspettando pazientemente le conferme del blocco.


Riassumere

Gli utenti possono utilizzare attacchi double-spend per manomettere i sistemi di cassa elettronica peer-to-peer e utilizzare gli stessi fondi più volte per ottenere guadagni ingiusti. In passato, poiché questo problema doveva essere risolto bene, lo sviluppo di questo campo è stato stagnante.

Fortunatamente, l’uso delle firme cieche è diventato una soluzione accattivante nelle soluzioni finanziarie centralizzate. Successivamente, lo sviluppo del meccanismo di prova del lavoro e della tecnologia blockchain ha dato vita a Bitcoin, una potente forma di valuta decentralizzata, che a sua volta ha fornito ispirazione per migliaia di progetti di criptovaluta.