Come funziona il double spending?
Nozioni di base
Nel mondo del denaro digitale, il double-spending è una preoccupazione critica. Questo problema si verifica quando gli stessi fondi vengono inviati contemporaneamente a due destinatari. Senza contromisure adeguate, il protocollo risulterebbe compromesso, poiché non esisterebbe un modo per verificare che i destinatari abbiano ricevuto fondi unici che non siano già stati spesi altrove.
Per garantire l'integrità del denaro digitale, è cruciale impedire la duplicazione di unità specifiche. L'intero sistema crollerebbe se un utente potesse copiare e incollare unità più volte, creando un eccesso di denaro. Allo stesso modo, sarebbe impossibile per Alice inviare gli stessi 10 unità sia a Bob che a Carol nello stesso momento. Pertanto, devono esistere meccanismi per impedire questo comportamento e assicurare che il denaro digitale funzioni efficacemente.
Soluzioni al problema del double-spending
Ci sono due approcci per prevenire il double-spending nelle transazioni digitali: l'approccio centralizzato e l'approccio decentralizzato. L'approccio centralizzato coinvolge un unico ente che gestisce il sistema e controlla l'emissione e la distribuzione delle unità, mentre l'approccio decentralizzato richiede che partecipanti con pari potere si coordinino attorno a un insieme di regole per prevenire le frodi.
Centralizzato
eCash di David Chaum è un esempio di soluzione centralizzata al problema del double-spend. È considerevolmente più semplice da implementare rispetto alle alternative decentralizzate, poiché prevede un singolo ente che gestisce il sistema e controlla l'emissione e la distribuzione delle unità. Per emettere asset digitali agli utenti, una banca può utilizzare firme cieche come descritto nell'articolo di David Chaum del 1982 Blind Signatures for Untraceable Payments.
Supponiamo che un utente, chiamato Frank, desideri ricevere 100$ in denaro digitale. Frank deve informare la banca e generare un numero casuale, aggiungendo a ciascuno un fattore di offuscamento per impedire alla banca di rintracciare unità specifiche. Frank poi invia questi dati alla banca, che addebita il suo conto e firma messaggi che certificano che ciascuno dei cinque elementi è riscattabile per 20$. Frank può ora spendere i fondi emessi dalla banca.
Per illustrare, il ristorante di Emily accetta denaro digitale e Frank decide di consumare un pasto lì. Rivela due numeri casuali, che fungono da identificatori unici per ogni unità, per pagare il suo pasto da 40$. Emily deve riscattarli immediatamente presso la banca per impedire a Frank di spenderli con un altro commerciante. La banca verifica che le firme siano valide, accredita il conto di Emily con 40$ e annulla le banconote usate. Saranno necessarie nuove banconote se Emily vorrà spendere il suo nuovo saldo allo stesso modo.
Nonostante l'eCash chaumiano possa essere utile per trasferimenti privati, è poco resiliente perché la banca rappresenta un punto di fallimento centrale. Il valore della banconota emessa deriva unicamente dalla disponibilità della banca a scambiarla con dollari, e i clienti devono fare affidamento sulla sua buona volontà affinché il denaro mantenga valore. Questo è il problema che le criptovalute mirano a risolvere.
Decentralizzato
In un sistema decentralizzato, prevenire il double-spending è una sfida. Tutti i partecipanti devono seguire un insieme di regole che prevengano le frodi e incentivino comportamenti onesti. Il white paper di Bitcoin ha introdotto una soluzione a questo problema: la blockchain.
Una blockchain è un database con proprietà uniche che permettono ai partecipanti della rete di sincronizzare le proprie copie del database con i pari. Rendendo la blockchain pubblicamente consultabile, è facile rilevare e prevenire attività fraudolente, come il double-spending.
Quando un utente pubblica una transazione, questa deve prima essere inclusa in un blocco tramite mining prima di essere aggiunta alla blockchain. Di conseguenza, il destinatario dovrebbe considerare la transazione valida solo dopo che il suo blocco è stato aggiunto alla catena. Una volta confermate, le monete non possono essere spese due volte perché la proprietà è assegnata a un nuovo utente e l'intera rete può verificarlo.
Nello scenario di comprare un pasto in un ristorante, se il ristorante accetta Bitcoin, il cliente deve inviare i fondi all'indirizzo pubblico fornito dal locale. Chiunque riceva la transazione firmata può verificare che il cliente avesse l'autorità per inviare le monete. Tuttavia, è consigliabile che il ristorante aspetti almeno sei conferme di blocco (circa un'ora) prima di accettare il pagamento per prevenire frodi.
Sebbene la blockchain risolva il problema del double-spending in un sistema decentralizzato, non è infallibile. Accettare transazioni non confermate è rischioso e può permettere al mittente di spendere le stesse monete altrove. Più conferme di blocco riceve una transazione, più è sicura.
Risolvere il problema del double-spending in Bitcoin
Bitcoin è stato progettato per prevenire attacchi di double-spending, ma funziona solo se le transazioni vengono confermate in un blocco. Se gli utenti attendono la conferma, non è facile per il mittente annullare la transazione. La blockchain dovrebbe essere "invertita", cosa irrealistica senza una quantità eccessiva di potenza di hashing.
Tuttavia, gli attacchi di double-spending sono possibili quando le parti accettano transazioni non confermate. Ad esempio, un commerciante potrebbe non voler aspettare che le transazioni siano incluse in un blocco per acquisti di basso valore. In un ristorante affollato di fast-food, aspettare la conferma di ogni acquisto non è pratico. Se un'azienda abilita pagamenti "istantanei", diventa vulnerabile al double-spending. Qualcuno potrebbe comprare un panino e pagarlo, per poi inviare immediatamente gli stessi fondi al proprio indirizzo. Con una commissione più alta, la nuova transazione potrebbe essere confermata prima e invalidare quella precedente.
Esistono tre metodi popolari per eseguire un double-spend.
- Il primo è un attacco del 51%, che si verifica quando un'entità o organizzazione controlla più del 50% dell'hash rate, permettendole di escludere o modificare l'ordine delle transazioni.
- Il secondo metodo è l'attacco di tipo race, dove due transazioni in conflitto vengono trasmesse in successione, ma solo una viene confermata. L'obiettivo dell'attaccante è invalidare il pagamento facendo convalidare solo la transazione che lo avvantaggia.
- Infine, gli attacchi di tipo Finney coinvolgono un attaccante che pre-mina una transazione in un blocco senza trasmetterla immediatamente, spende le stesse monete in un'altra transazione e solo successivamente trasmette il blocco precedentemente minato, che potrebbe invalidare il pagamento.
Per ridurre al minimo il rischio di essere vittima di double-spend, un commerciante dovrebbe attendere le conferme di blocco prima di accettare un pagamento.
Conclusione
Il problema del double-spending si verifica quando un utente utilizza gli stessi fondi più di una volta in un sistema di denaro elettronico per ottenere un vantaggio finanziario. Questo è stato a lungo un problema senza una soluzione adeguata, ostacolando i progressi nel settore.
Tuttavia, la soluzione proposta dalle firme cieche ha fornito un'interessante risposta per schemi finanziari centralizzati. Successivamente, l'emergere dei meccanismi Proof of Work e della tecnologia blockchain ha dato vita a Bitcoin come forma potente di denaro decentralizzato, che ha ispirato a sua volta migliaia di altri progetti di criptovaluta.