Een beginnershandleiding voor double spending
Een beginnershandleiding voor double spending
StartpaginaArtikelen

Een beginnershandleiding voor double spending

Gemiddeld
1w ago
7m

Wat is double spending?

Double spending of dubbel uitgeven is een potentieel probleem in digitale geldsystemen waarbij hetzelfde saldo tegelijkertijd aan twee ontvangers wordt uitgegeven. Zonder adequate tegenmaatregelen is een protocol dat hier niets tegen doet, gedoemd om te mislukken. Gebruikers kunnen namelijk niet controleren of hun saldo niet al ergens anders is uitgegeven.

Als het om digitaal geld gaat, is het van het grootste belang om ervoor te zorgen dat individuele eenheden niet kunnen worden gekopieerd. Het hele systeem zou in elkaar klappen als Alice tien eenheden zou ontvangen, deze tien keer zou kopiëren en zo 100 eenheden zou bezitten. Ook functioneert het systeem niet als ze dezelfde tien eenheden tegelijkertijd naar Bob en Carol kan sturen. Om digitaal geld te laten functioneren, moeten er dus mechanismen zijn die dit kunnen voorkomen.


Hoe kan double spending worden voorkomen?

De gecentraliseerde aanpak

De gecentraliseerde route is aanzienlijk eenvoudiger te implementeren dan gedecentraliseerde alternatieven. Doorgaans houdt dit in dat er één toezichthouder is die het systeem beheert en de uitgave en distributie van eenheden controleert. Een goed voorbeeld van een gecentraliseerde oplossing voor het probleem van double spending is eCash van David Chaum.

Om gebruikers te voorzien van digitale activa als equivalent van contanten (die anoniem en via peer-to-peer kunnen worden uitgewisseld), kan een bank zogenaamde blinde handtekeningen gebruiken. Cryptograaf David Chaum beschreef dit voor het eerst in 1982 in zijn onderzoek Blind Signatures for Untraceable Payments.

Als een gebruiker (laten we hem Dan noemen) in die context $100 wenst te ontvangen in digitale contanten, moet hij eerst de bank daarvan op de hoogte stellen. Als hij genoeg saldo op zijn rekening heeft staan, genereert hij een willekeurig nummer (of meerdere nummers voor kleinere denominaties). Laten we ervan uitgaan dat hij vijf nummers genereert die elk een waarde van $20 krijgen. Om te voorkomen dat de bank specifieke eenheden kan volgen, verbergt Dan de willekeurige nummers door er een zogenaamde verblindende factor aan toe te voegen.

Hij geeft zijn gegevens vervolgens aan de bank, die $100 stort op zijn rekening. Dan ondertekent een aantal berichten die bevestigen dat elk van de vijf stukjes informatie kan worden ingewisseld voor $20 en kan nu het geld uitgeven dat hij van de bank heeft gekregen. Hij gaat naar het restaurant van Erin en bestelt een maaltijd die hem $40 kost.

Dan kan de verblindende factor verwijderen om het willekeurige nummer te tonen dat is gekoppeld aan ieder digitaal geldbiljet. Dit werkt als een unieke identificatiecode voor iedere eenheid (vergelijkbaar met een serienummer). Hij geeft twee nummers aan Erin, die hiermee direct naar de bank moet gaan om te voorkomen dat Dan deze nogmaals uitgeeft bij iemand anders. De bank controleert of de handtekeningen geldig zijn en als alles correct is, wordt er $40 gestort op de rekening van Erin.

De gebruikte biljetten zijn nu in feite ongeldig geworden. Als Erin haar saldo op dezelfde manier wil uitgeven, moet ze hetzelfde proces als Dan doorlopen.

Het eCash van David Chaum kan waardevol zijn voor privétransacties, maar is niet robuust genoeg omdat de bank een centraal faalpunt is. Een digitaal biljet is op zichzelf niets waard - alle waarde is afhankelijk van de bereidheid van de bank om het om te wisselen voor dollars. Klanten zijn overgeleverd aan de genade van de bank en hebben geen andere optie dan deze blindelings te vertrouwen. Dit is precies het probleem dat cryptovaluta tracht op te lossen.


De gedecentraliseerde aanpak

Garanderen dat geld niet meerdere keren kan worden uitgegeven is complexer in een ecosysteem zonder centrale toezichthouder. Deelnemers moeten een set regels overeenkomen die fraude voorkomen en alle gebruikers ertoe aanzetten om eerlijk te handelen.

De grootste innovatie die in het het Bitcoin-whitepaper werd gepresenteerd, was een oplossing voor het probleem van double spending. Hoewel het niet als zodanig werd aangeduid, stelde Satoshi Nakamoto daartoe de gegevensstructuur voor die nu algemeen bekend staat als een blockchain.
Een blockchain is in feite niets anders dan een database met een aantal unieke eigenschappen. Netwerkdeelnemers (aangeduid als nodes) draaien gespecialiseerde software waarmee ze hun kopie van de database kunnen synchroniseren met de andere deelnemers. Het resultaat is dat het netwerk als geheel de transactiegeschiedenis, teruggaand tot het eerste genesis block, kan controleren. Doordat de blockchain openbaar is, is het eenvoudig om frauduleuze activiteiten - zoals pogingen om saldo meerdere keren uit te geven - te detecteren en te voorkomen.
Wanneer een gebruiker een transactie naar het netwerk verstuurt, wordt deze niet meteen toegevoegd aan de blockchain. Eerst moet deze worden opgenomen in een block via het proces van mining. Als zodanig moet een ontvanger een transactie alleen als geldig beschouwen wanneer het block waarin deze transactie is opgenomen, toegevoegd is aan de blockchain. Zo niet, dan loopt de ontvanger het risico het saldo kwijt te raken als de verzender besluit het nogmaals ergens anders uit te geven. 
Zodra de transactie eenmaal is bevestigd, kan het saldo niet nog eens worden uitgegeven omdat het eigendom is toegewezen aan een nieuwe gebruiker en dit door het hele netwerk kan worden gecontroleerd. Om die reden wordt vaak aangeraden om te wachten tot een transactie meerdere keren is bevestigd voordat een betaling als geldig wordt gezien. Elk opeenvolgend block maakt het namelijk veel en veel moeilijker om de blockchain aan te passen of te herschrijven (wat kan voorkomen tijdens een 51% attack).

Laten we terugkeren naar het scenario in het restaurant. Dan komt weer langs en ziet nu een sticker met 'Bitcoin Accepted Here' op het raam. Het eten was hem de laatste keer uitstekend bevallen, dus hij besluit om hetzelfde weer opnieuw te bestellen. Dit keer kost het hem 0,005 BTC.

Erin geeft hem een openbaar adres waarnaar hij de BTC moet sturen. Dan stuurt zijn transactie naar het netwerk - in feite niets anders dan een ondertekend bericht waarin hij bevestigt dat de 0,005 BTC die hij in zijn bezit had, nu van Erin zijn. Zonder te diep in detail te treden kan iedereen die de ondertekende transactie van Dan ziet controleren dat hij inderdaad in bezit van de BTC was en dus de bevoegdheid had om ze te versturen.

Zoals eerder vermeld is de transactie alleen geldig als deze wordt opgenomen in een block dat vervolgens wordt bevestigd. Het accepteren van onbevestigde transacties is vergelijkbaar met het accepteren van $40 in eCash in het vorige voorbeeld, zonder dit onmiddellijk naar de bank te brengen - waardoor de verzender de tijd heeft om het nog eens ergens anders uit te geven. Erin besluit daarom ten minste 6 zogenaamde block confirmations te wachten (een uurtje, ongeveer) voordat ze de betaling van Dan accepteert.


Double spending en Bitcoin

Bitcoin is zorgvuldig ontworpen om double spending tegen te gaan - zo lang het protocol wordt gebruikt zoals de bedoeling is. Wacht iedereen tot transacties zijn bevestigd in een block, dan is het vrijwel onmogelijk voor de verzender om dit ongedaan te maken. De enige manier waarop dit kan is door de blockchain 'terug te draaien' - maar dit vereist een onrealistisch grote hoeveelheid rekenkracht.

Dat gezegd hebbende, bestaan er een handjevol soorten aanvallen die specifiek zijn gericht op het mogelijk maken van double spending bij partijen die onbevestigde transacties accepteren. Een verkoper heeft niet altijd de luxe om te wachten tot een transactie is opgenomen in een block, zeker niet als het om lage bedragen en hoge volumes gaat. Een druk fastfood-restaurant kan zich niet veroorloven om bij iedere aankoop te wachten tot het netwerk de transactie heeft verwerkt. Als een bedrijf 'directe' betalingen aanbiedt, maakt het zich alleen wel kwetsbaar voor double spends. Iemand kan een hamburger bestellen, ervoor betalen en vervolgens onmiddellijk het desbetreffende saldo overboeken naar een ander adres. Als hiervoor een hogere vergoeding wordt betaald, zal deze transactie waarschijnlijk eerder worden bevestigd en de betaling voor de hamburger op die manier ongedaan maken.

De drie meest bekende methoden voor het uitvoeren van een double spend zijn:

  • 51% attacks: als een enkele entiteit of organisatie meer dan 50% van de hash rate van het netwerk controleert, wordt het mogelijk om transacties uit de blockchain te verwijderen of aan te passen. Een dergelijke aanval is erg onwaarschijnlijk op het Bitcoin-netwerk, maar is elders al voorgekomen.
  • Race attacks: twee conflicterende transacties die gebruik maken van hetzelfde saldo worden tegelijkertijd naar het netwerk gestuurd, maar slechts één transactie wordt bevestigd. Het doel van de aanvaller is om de betaling ongeldig te maken door alleen de transactie waar hij zelf van profiteert (bijvoorbeeld een transactie naar een adres dat hij zelf in bezit heeft) te laten valideren. Race attacks vereisen dat de ontvanger onbevestigde transacties accepteert als betaling.
  • Finney attacks: een aanvaller minet vooraf een transactie in een block, zonder dit meteen naar het netwerk te sturen. In plaats daarvan geeft hij het saldo nog een keer uit in een andere transactie. Pas daarna verstuurt hij het geminede block naar het netwerk, waardoor de tweede transactie ongeldig wordt. Finney attacks moeten zorgvuldig worden gepland en zijn ook afhankelijk van het feit of de ontvanger onbevestigde transacties accepteert.

Ondertussen is vast wel duidelijk geworden dat wachten op block confirmations het risico dat iemand niet betaald krijgt en slachtoffer wordt van double spending, drastisch verlaagt.


Tot slot

Double spending stelt een gebruiker in staat om een elektronisch geldsysteem voor eigen gewin te misbruiken door hetzelfde saldo meerdere keren uit te geven. Traditioneel heeft een gebrek aan adequate oplossingen vooruitgang op dit gebied in de weg gestaan.

Gelukkig is er in de vorm van blind signatures een interessante oplossing voor gecentraliseerde financiële systemen ontstaan. Later zorgden de creatie van Proof of Work-mechanismen en blockchain-technologie voor het ontstaan van Bitcoin als vorm van gedecentraliseerd geld, wat op zijn beurt de inspiratie vormde voor duizenden andere cryptovalutaprojecten.