Het probleem van dubbele uitgaven speelt een centrale rol bij de creatie van Bitcoin en andere cryptocurrency. Maar wat houdt dit probleem precies in? Dubbele uitgaven is het risico dat geld meer dan eens wordt gebruikt, met andere woorden, dat er sprake is van ‘dubbel uitgeven’. Dit vormt vooral een risico bij digitale valuta, omdat het minder makkelijk is om vast te stellen wanneer dezelfde eenheid meer dan eens is gebruikt. Fysiek geld daarentegen laat zich wel empirisch controleren wanneer een biljet of munt is uitgegeven, waardoor er geen zorgen hoeven te zijn over dubbele uitgaven. Iedereen die videogames heeft gespeeld, kent wel iemand die beweert hun in-game-munten oneindig te kunnen uitgeven zonder voldoende saldo. Als ze geen leugenaar zijn, dan kan dit het resultaat zijn van een double spend exploit. De gebruiker kan twee Roblox-transacties naar dezelfde munten sturen zonder dat het systeem dit opmerkt. De transacties worden voltooid en de gebruiker heeft zijn koopkracht effectief verdubbeld.
Waarom is dit een probleem? Het is vanzelfsprekend dat iemand die digitale valuta uitbuit bij het verdubbelen van uitgaven ze eigenlijk van de markt steelt. Dit is niet alleen oneerlijk ten opzichte van andere gebruikers van dezelfde valuta, maar kan ook leiden tot fluctuaties in de prijs van de digitale valuta – dubbele uitgaven zijn vergelijkbaar met het drukken van meer tokens waardoor de waarde ervan inflatoir wordt. Als een netwerk slachtoffer wordt van een double spend-aanval, dan is de veiligheid van de digitale valuta in het geding. Bovendien kan het oplossen van de problemen veroorzaakt door dubbele uitgaven ertoe leiden dat een dienst die al is geleverd, onbetaald blijft. Het is dus duidelijk dat dit niet ideaal is.
Hoe lost de cryptocurrency-industrie het probleem van dubbele uitgaven op? Met de creatie van Bitcoin werd het probleem van dubbele uitgaven opgelost. Satoshi Nakamoto, de oprichter van Bitcoin, vermeldde al in het Bitcoin-whitepaper dat het probleem van dubbele uitgaven zou worden opgelost. Wanneer een transactie wordt verzonden naar het netwerk, bevindt deze zich in een pool van onbevestigde transacties totdat het netwerk deze klaar heeft voor verwerking. Elke 10 minuten worden er transacties uit deze pool gehaald om te worden verwerkt in een zogenaamd “blok”. Deze blokken fungeren als een permanent record van alle transacties binnen Bitcoin. Zo’n blok kan bijvoorbeeld tonen dat Paul Sally 1 BTC heeft overgemaakt, waardoor het saldo in hun beide portemonnees wordt beïnvloed. Omdat alle blokken op de blockchain worden vastgelegd, is de transactiegeschiedenis van iedereen traceerbaar.
Wanneer een transactie wordt verwerkt, wordt deze via deze geregistreerde gegevens naar uw portemonnee verwezen om te controleren of u het geld heeft dat u probeert uit te geven. Aangezien Bitcoin een gedistribueerd grootboek is, betekent dit dat al deze gegevens (inclusief transactiegeschiedenis, portefeuillesaldo, etc.) worden opgeslagen op duizenden knooppunten over de hele wereld. Dit zorgt ervoor dat Bitcoin gedecentraliseerd is, waardoor het risico wordt verkleind dat iemand deze gegevens direct wijzigt. Dit elimineert het probleem van dubbele uitgaven. Als u bijvoorbeeld toch dezelfde Bitcoin twee keer zou uitgeven, dan zou het netwerk via de gegevens op de blockchain controleren of uw portemonnee voldoende saldo heeft. In dit geval kunnen een of beide transacties niet worden verwerkt.
Hoe merkt het netwerk snel wijzigingen in het grootboek op? Wanneer een blok met succes is gemined, wordt het opgeslagen als een gecodeerd nummer, een hash genaamd (Bitcoin maakt gebruik van het SHA-256-algoritme). Deze hash bevat de informatie van het vorige blok, een tijdstempel en de details van de transactie. Vanwege het lawine-effect zal zelfs een kleine wijziging in een deel van de originele gegevens, leiden tot een compleet andere hash. Dit maakt het voor het netwerk makkelijk op elke verandering in gegevens op de blockchain op te merken.
Hoe zou het Double Spend-probleem ontstaan? Hoewel dubbele uitgaven nu onwaarschijnlijk zijn, is het nog steeds mogelijk. Er zijn (minstens) vier mogelijke aanvallen die kunnen resulteren in een double spend-aanval.
Race-aanval: Bij de race-aanval worden twee transacties tegelijkertijd uitgezonden (één naar een handelaar die een goed of dienst levert, en de tweede naar een aparte portemonnee die wordt beheerd door de aanvaller). Om de aanval te laten slagen, moet eerst de betaling aan de portemonnee van de aanvaller worden verwerkt. Een aanvaller kan de kans vergroten dat de tweede transactie sneller wordt verwerkt door de gaskosten te verhogen, wat mijnwerkers zal stimuleren om deze transactie als eerste te minen. Als de aanval slaagt, wordt de betaling aan de portemonnee van de aanvaller eerst gemined en wordt de transactie aan de handelaar ongeldig, omdat er geen geld in de portemonnee zit. Dit vereist dat de handelaar echter de goederen of diensten levert voordat de transactie wordt gevalideerd; de meeste plaatsen zullen dit niet doen om zichzelf tegen deze aanvallen te beschermen.
Finney-aanval: Hal Finney was een van de eerste Bitcoin-bijdragers; hij was eigenlijk de eerste persoon die ooit de munt van Satoshi Nakamoto zelf ontving! Finney theoretiseerde dat een double spend-aanval zou kunnen plaatsvinden na drie stappen: De aanvaller verstuurt eerst een transactie naar een adres dat hij al beheert. Deze transactie wordt gedolven in een blok waarvoor zij verantwoordelijk zijn (als mijnwerker). Vervolgens voegt de aanvaller de transactie toe aan het blok, maar zendt deze niet uit naar de blockchain. In plaats daarvan legt de aanvaller een transactie voor bij een handelaar dat hetzelfde bedrag be