24 juni 2021 16:13

Hoe voorkomt een blockchain dubbele besteding van Bitcoins?

Een van de belangrijkste zorgen van elke ontwikkelaar van cryptocurrency is de kwestie van dubbele uitgaven. Dit verwijst naar de incidentie van een individu dat een saldo van die cryptocurrency meer dan eens uitgeeft, waardoor in feite een ongelijkheid ontstaat tussen het bestedingsrecord en het bedrag van die cryptocurrency die beschikbaar is, evenals de manier waarop deze wordt gedistribueerd.

De kwestie van dubbele uitgaven is een probleem dat contant geld niet heeft; als je voor een boterham betaalt met een biljet van $ 10 en die rekening aan de maker van de sandwich overhandigt, kun je je niet omdraaien en diezelfde $ 10 ergens anders uitgeven. Een transactie waarbij een digitale valuta zoals bitcoin wordt gebruikt, verloopt echter volledig digitaal. Dit betekent dat het mogelijk is om de transactiegegevens te kopiëren en opnieuw uit te zenden, zodat dezelfde BTC meerdere keren door een enkele eigenaar kan worden uitgegeven. Hieronder zullen we onderzoeken hoe ontwikkelaars van cryptocurrency ervoor hebben gezorgd dat dubbele uitgaven niet kunnen gebeuren.

Belangrijkste leerpunten

  • Een technisch probleem dat zich voordoet bij het idee van een digitale valuta is de mogelijkheid voor iemand om het digitale geld te dupliceren en het tegelijkertijd op twee of meer plaatsen uit te geven.
  • Dit probleem van ‘dubbele uitgaven’ wordt voorkomen in op blockchain gebaseerde cryptocurrencies zoals Bitcoin door een consensusmechanisme te gebruiken dat bekend staat als proof-of-work (PoW).
  • Dit PoW wordt uitgevoerd door een gedecentraliseerd netwerk van ‘miners’ die niet alleen de betrouwbaarheid van de transacties uit het verleden in het grootboek van de blockchain veiligstellen, maar ook dubbele uitgaven detecteren en voorkomen.

Inzicht in de blockchain

De blockchain die aan een digitale valuta als bitcoin ten grondslag ligt, kan op zichzelf dubbele uitgaven niet voorkomen. In plaats daarvan worden alle verschillende transacties met betrekking tot de relevante cryptocurrency op de blockchain geplaatst, waar ze afzonderlijk worden geverifieerd en beschermd door een bevestigingsproces. In het geval van bitcoin en vele andere cryptocurrencies worden transacties die op deze manier zijn bevestigd onomkeerbaar; ze worden openbaar gepost en voor altijd onderhouden.

Bitcoin was de eerste grote digitale valuta die het probleem van dubbele uitgaven oploste. Het deed dit door dit bevestigingsmechanisme te implementeren en een gemeenschappelijk, universeel grootboeksysteem te handhaven. Op deze manier bewaart de bitcoin-blockchain records van transacties met tijdstempel die teruggaan tot de oprichting van de cryptocurrency in 2009.

In Bitcoin-termen is een ” blok ” een bestand met permanent geregistreerde gegevens. Alle recente transacties worden in blokken geschreven, net als een grootboek voor aandelentransacties op een beurs. Informatie uit blokken wordt om de paar minuten aan het grootboek toegevoegd; alle knooppunten op het netwerk houden een kopie van het blockchain-grootboek bij. Gebruikers kunnen door de blockchain voor bitcoin navigeren en transacties alleen in termen van hoeveelheid bekijken. Details over de identiteit van de koper en verkoper bij elke transactie worden beschermd door versleuteling op hoog niveau, die ook het grootboek beschermt tegen manipulatie door externe bronnen. Wanneer het blockchain-grootboek wordt bijgewerkt, geldt dat ook voor alle bitcoin-wallets.

Omgaan met dubbele uitgaven

Stel je voor dat je 1 BTC hebt en je probeert het twee keer uit te geven in twee afzonderlijke transacties. U kunt dit proberen door dezelfde BTC naar twee afzonderlijke bitcoin-portemonnee-adressen te sturen. Beide transacties gaan dan naar de pool van niet-bevestigde transacties. De eerste transactie wordt goedgekeurd via het bevestigingsmechanisme en vervolgens geverifieerd in het volgende blok. De tweede transactie zou echter door het bevestigingsproces als ongeldig worden herkend en niet worden geverifieerd. Als beide transacties tegelijkertijd ter bevestiging uit de pool worden gehaald, wordt de transactie met het hoogste aantal bevestigingen in de blockchain opgenomen, terwijl de andere wordt verwijderd.

Hoewel hiermee het probleem van dubbele uitgaven effectief wordt aangepakt, is het niet zonder problemen. De beoogde ontvanger van de tweede (mislukte) transactie zou bijvoorbeeld geen deel hebben aan de mislukte transactie zelf, en toch zou die persoon niet de bitcoin ontvangen die ze hadden verwacht. Veel handelaren wachten op minimaal 6 bevestigingen van een transactie (wat betekent dat er na de betreffende transactie zes opeenvolgende blokken met transacties aan de blockchain zijn toegevoegd). Op dit punt kan de handelaar er veilig van uitgaan dat de transactie geldig is.

Er blijven andere kwetsbaarheden in dit systeem waardoor aanvallen met dubbele uitgaven kunnen plaatsvinden. Als een aanvaller bijvoorbeeld op de een of andere manier in staat is om ten minste 51% van de macht van het netwerk te controleren, kunnen ze dubbele uitgaven plegen. Als een aanvaller op de een of andere manier controle zou krijgen over zoveel rekenkracht, zouden ze transacties kunnen terugdraaien en een afzonderlijke, privé-blockchain kunnen creëren. De snelle groei van bitcoin heeft er echter vrijwel voor gezorgd dat dit type aanval onmogelijk is.

Bewijs van werk en ‘mijnbouw’ uitgelegd

Laten we nu wat technischer worden. De manier waarop gebruikers sabotage detecteren, zoals een poging om dubbele uitgaven in de praktijk, is door middel van  hashes, lange reeksen getallen die dienen als bewijs van werk (PoW). Zet een bepaalde set gegevens via een hash-functie (bitcoin gebruikt SHA-256), en het zal maar één hash genereren. Vanwege het “lawine-effect” zal zelfs een kleine verandering in een deel van de originele gegevens echter resulteren in een totaal onherkenbare hash. Ongeacht de grootte van de originele dataset, de hash die door een bepaalde functie wordt gegenereerd, heeft dezelfde lengte. De hash is een eenrichtingsfunctie: hij kan niet worden gebruikt om de originele gegevens te verkrijgen, alleen om te controleren of de gegevens die de hash hebben gegenereerd, overeenkomen met de originele gegevens.

Het genereren van zomaar een hash voor een reeks bitcoin-transacties zou voor een moderne computer triviaal zijn, dus om het proces in ‘werk’ te veranderen, stelt het bitcoin-netwerk een bepaald niveau van ‘moeilijkheid’ in. Deze instelling wordt aangepast zodat een nieuw blok wordt ” gemined ” – toegevoegd aan de blockchain door een geldige hash te genereren – ongeveer elke 10 minuten. Moeilijkheden instellen wordt bereikt door een  “doel” voor de hash vast te stellen : hoe lager het doel, hoe kleiner de set geldige hashes en hoe moeilijker het is om er een te genereren. In de praktijk betekent dit een hash die begint met een lange reeks nullen: de hash voor blok # 429818 is bijvoorbeeld 000000000000000004dd3426129639082239efd583b5273b1bd75e8d78ff2e8d. Dat blok bevat 2.012 transacties met iets meer dan 1.000 bitcoin, evenals de header van het vorige blok. Als een gebruiker één transactiebedrag zou wijzigen met 0,0001 bitcoin, zou de resulterende hash onherkenbaar zijn en zou het netwerk de fraude afwijzen.

Aangezien een bepaalde set gegevens slechts één hash kan genereren, hoe zorgen miners ervoor dat ze een hash genereren onder het doel? Ze veranderen de invoer door een geheel getal toe te voegen, een zogenaamde  nonce  (“eenmalig gebruikt getal”). Zodra een geldige hash is gevonden, wordt deze naar het netwerk uitgezonden en wordt het blok toegevoegd aan de blockchain.

Mijnbouw is een competitief proces, maar het is meer een loterij dan een race. Gemiddeld zal iemand elke tien minuten een acceptabel bewijs van werk genereren, maar wie het zal zijn, is een raadsel. Mijnwerkers bundelen samen om hun kansen op miningblokken te vergroten, wat transactiekosten genereert en, voor een beperkte tijd, een beloning van nieuw gecreëerde bitcoins.

Bewijs van werk maakt het buitengewoon moeilijk om elk aspect van de blockchain te wijzigen, omdat een dergelijke wijziging alle volgende blokken opnieuw zou moeten minen. Het maakt het ook moeilijk voor een gebruiker of een groep gebruikers om de rekenkracht van het netwerk te monopoliseren, aangezien de machines en het vermogen die nodig zijn om de hash-functies te voltooien, duur zijn.