La doppia spesa è uno degli eventi più temuti in assoluto, in ambito crypto. Ove si verifichi, infatti, viene messa a repentaglio la reputazione della blockchain interessata, spingendo gli utenti a chiedersi se sia il caso di affidarsi ad una rete così vulnerabile. Il problema che pone tale incidente, del resto, è molto semplice: la criptovaluta in questione viene essenzialmente privata di valore. A renderla tale il fatto che chiunque potrebbe essere in grado di dare vita a due o più transazioni utilizzando la stessa valuta virtuale e in ogni momento lo voglia.
Doppia spesa: di cosa si tratta?
Per double-spending (o doppia spesa) si intende un potenziale problema in grado di compromettere un sistema di moneta digitale. Si verifica quando gli stessi fondi sono impiegati in contemporanea in due transazioni differenti. Il protocollo che non sia in grado di adottare contromisure preventive tali da evitare il fenomeno perde in pratica di ogni forma di legittimità, in quanto i suoi utenti non sono più in grado di verificare che i fondi ricevuti non siano già stati oggetto di una spesa precedente.
A rendere gravissimo l’accaduto, infatti, è il fatto che la tecnologia blockchain si regge su un assunto di base: l’immutabilità dei dati contenuti al suo interno. Una volta caduto tale presupposto diventa praticamente inutile, o quasi. Con la doppia spesa, in effetti, si verifica proprio questo corto circuito, con il rischio che possa venire meno il rapporto fiduciario tra la rete e i suoi utenti. Un venire meno il quale è praticamente irrimediabile proprio in conseguenza del fatto che nella tecnologia dei registri distribuiti non esiste un’autorità centrale cui richiamarsi.
Doppia spesa: quali i modi per portarla avanti?
I fenomeni di doppia spesa possono avere veste diversa, pur puntando sempre allo stesso esito, la possibile spesa degli stessi fondi all’interno di transazioni diverse. Solitamente, comunque, i metodi più utilizzati per condurla a fondo sono tre:
- attacco 51%, che si verifica quando un attaccante riesce a prendere il controllo del 50% + 1 dell’hash rate di una blockchain. Così facendo l’attaccante è in grado di modificare l’ordine delle transazioni o escluderne l’aggiunta. Se su Bitcoin è praticamente impossibile, in quanto necessita di risorse nell’ordine dei miliardi di dollari, per portarla a termine, su altre blockchain ha invece già avuto luogo;
- attacco Finney, che viene condotto pre-minando una transazione all’interno di un blocco senza che la stessa sia inviata immediatamente al network. La trasmissione avviene soltanto in un secondo momento, quando lo stesso fondo sarà stato impiegato anche in un’altra operazione. Questo genere di attacco, per la sua riuscita, dipende dall’accettazione da parte del ricevente di transazioni non confermate dai validatori e può verificarsi quando un commerciante ha fretta di concludere l’operazione, a costo di sottoporsi a pericoli aggiuntivi;
- Race attack, in cui due transazioni in conflitto sono trasmesse in rapida successione, usando gli stessi fondi, con la pratica accettazione di una sola di esse. L’obiettivo di chi conduce questo genere di raid consiste nell’invalidazione del pagamento concorrente e nella convalida della sua. Per poterlo portare a termine generalmente invia gli stessi fondi ad un indirizzo controllato. Anche in questo caso è necessario che il ricevente si risolva ad accettare come pagamento una transazione che però deve ancora essere convalidata.
Conclusioni
Il fenomeno della doppia spesa è uno dei più temuti in assoluto, nell’ambito dell’innovazione finanziaria. Ove un attacco di questo genere vada in porto, la blockchain che ne è vittima perde credibilità agli occhi dei suoi utenti, i quali non possono più avere sicurezze sul denaro digitale che ricevono.
Se nella rete Bitcoin si tratta di una pura ipotesi scolastica, su altre reti nel passato si sono verificati molti episodi di questo genere. Proprio per questo motivo ogni progetto deve cercare di implementare meccanismi di consenso in grado di dare una risposta concreta al cosiddetto problema dei generali bizantini. Deve cioè dare vita ad un sistema in grado di tollerare l’ipotesi che qualcosa vada storto o che qualche nodo non agisca onestamente. Tale esigenza è all’origine del continuo lavoro condotto dagli sviluppatori, con esiti più o meno efficaci.