Bitcoin Whitepaper

In 2008 publiceerde Satoshi Nakamoto een paper waarin hij het concept van Bitcoin beschrijft en dit noemen we een whitepaper. Hoewel niet bekend is wie Satoshi Nakamoto is of misschien wel zijn, heeft zijn artikel wel geleid tot een cryptocurrency die inmiddels een marktwaarde van bijna 300 miljard dollar heeft. Op deze pagina wordt de inhoud van het paper besproken en worden sommige zaken nog extra verduidelijkt.

1. Introductie

Satoshi begint zijn artikel met een introductie. Voor het uitvoeren van elektronische betalingen was men ten tijde van de publicatie aangewezen op een derde partij. Dit systeem heeft enkele zwakke plekken doordat men er maar op moet vertrouwen dat de derde partij de transactie eerlijk verwerkt. Een groot nadeel hierbij is dat deze partijen vaak hoge transactiekosten vragen. Daarnaast lopen verkopers een risico doordat de transacties soms teruggetrokken kunnen worden. Een betaling ontvangen via PayPal kan bijvoorbeeld 30 dagen later nog worden teruggetrokken indien er een dispuut wordt aangemaakt. Dergelijke nadelen zijn niet aanwezig bij een contante betaling, echter was er nog geen mogelijkheid om digitaal een onomkeerbare transactie uit te voeren zonder afhankelijk te zijn van een derde partij.

Satoshi geeft aan dat er een nieuw elektronisch betalingssysteem nodig is dat gebaseerd is op cryptografie in plaats van vertrouwen. Hierbij komen echter enkele problemen naar voren. Hoe kunnen in zo’n systeem dubbele uitgaven worden voorkomen en hoe wordt de volgorde van transacties bepaald? In het vervolg van het paper legt hij uit hoe een peer-to-peer netwerk ingericht kan worden om deze problemen op te lossen.

In de verdere uitleg van het artikel wordt soms gesproken over een hashfunctie die leidt tot een bepaalde hash. Een hash is de uitkomst van het toepassen van een hashfunctie op een bepaalde input. Bij de hashfunctie die gebruikt wordt in het Bitcoin-netwerk, sha-256, bestaat de uitkomst uit een 32 tekens. Hierbij is zo dat de uitkomst uniek is en in hoge mate verschilt indien de input ook maar iets gewijzigd wordt. Hierdoor is het niet mogelijk om de input te wijzigen zonder dat de uitkomst ook wijzigt.

Een hash kan dus gezien worden als een versleuteling van data

2. Transacties

Satoshi definieert een elektronische munt als een ketting van digitale handtekeningen. Hierbij is het niet zo dat een gebruiker daadwerkelijk een bepaald stukje code bezit dat een bepaalde waarde vertegenwoordigd. Het netwerk houdt eigenlijk alle transacties bij die plaatsvinden. Met een digitale handtekening kan iemand aangeven dat hij de bitcoins die hij uit wil geven ook daadwerkelijk heeft ontvangen.

Transacties bitcoin netwerk

Zoals in bovenstaande afbeelding uit het Bitcoinpaper is te zien beschikt elke gebruiker over een publieke key en een private key. Een publieke key kan met iedereen gedeeld worden zodat bitcoins verstuurd kunnen worden naar deze publieke key. De publieke key wordt dan ook wel het Bitcoinadres genoemd, hier kunnen bitcoins naartoe gestuurd worden. Met de private key kan iemand aantonen dat de publiek key bij hem hoort, bij elke publieke key hoort namelijk 1 private key. Op de combinatie van de gegevens voor een transactie en de private key wordt versleuteld doormiddel van een hash-functie. Uit de uitkomst van deze hash kan iemand afleiden dat de juiste private key is gebruikt voor de versleuteling, echter kan de private key niet worden afgeleid.

Een probleem wat hierbij komt kijken is dat iemand kan proberen om een transactie meerdere keren uit te voeren. In het geval van een bankoverschrijving dient een derde partij, de bank van de verzender, te bevestigen dat het geld dat iemand op stuurt niet al een keer naar iemand anders is gestuurd. Hierbij is men echter volledig afhankelijk van de eerlijkheid van de bank. Er is dus nog een manier nodig om te voorkomen dat iemand niet meerdere keren dezelfde transactie als input gaat gebruiken voor een nieuwe transactie.

In het systeem van Bitcoin wordt aangenomen dat de eerste keer dat een transactie wordt gebruikt als input voor een nieuwe transactie, de enige geldige transactie is. Om te kunnen weten of een transactie niet al als input is gebruikt moet men echter beschikken over de gegevens van alle transacties die al hebben plaatsgevonden. Hiervoor dienen alle transacties publiekelijk gemaakt te worden en moeten alle gebruikers overeenstemming hebben over wat de volgorde van de transacties is. De ontvanger van een transactie moet kunnen nagaan of meer dan de helft van het gehele netwerk het er mee eens is dat de transactie origineel is.

3. Tijdserver

Om te kunnen nagaan wat de volgorde van alle transacties is wordt gebruik gemaakt van een tijdserver, binnen Bitcoin is dat de zogenaamde blockchain. Voor elk blok wordt een hash gemaakt die gebaseerd is op alle transacties die moeten worden vastgelegd in het blok, en de hash van het vorige blok. Hierdoor is het bijvoorbeeld niet mogelijk om het derde blok te maken voordat het tweede blok er is, omdat de hash van het tweede blok nodig is als input voor het derde blok. Door de hash van het vorige blok toe te voegen aan de input van een nieuw blok ontstaat een soort ketting van blokken: de block chain. Dit is geïllustreerd in onderstaande afbeelding uit het originele Bitconartikel.

Bitcoin block chain

4. Proof-of-Work

Om er voor te zorgen dat niet iedereen zomaar een blok kan toevoegen aan de ketting van blokken dient de uitkomst van de hash aan een bepaalde voorwaarde te voldoen. Naast de transacties en de hash van het vorige blok, wordt nog een random getal toegevoegd aan de input van de hash. Door dit getal te variëren kan de uitkomst van de hash worden gevarieerd. In de onderstaande afbeelding uit de bitcoin paper van Satoshi wordt dit random getal een ‘nonce’ genoemd.

Proof of work bitcoin

Voordat een blok wordt goedgekeurd als een nieuw blok dient de hash van het blok te voldoen aan een bepaalde eis. Op basis van de snelheid van het gehele netwerk wordt deze eis, ook wel difficulty genoemd, zo aangepast dat er gemiddeld elke tien minuten een juiste hash gevonden wordt. Na elke 2016 blocks wordt de difficulty zo aangepast dat het vinden van een nieuw blok weer gemiddeld tien minuten in beslag zal nemen.

Binnen het netwerk wordt de blockchain met de langste keten geaccepteerd als de geldende blockchain. Als een aanvaller een transactie in een blok wil wijzigen, moet hij daarom ook de proof-of-work leveren voor alle blokken die volgen op het blok dat hij wil aanpassen. Het aantal blokken dat gevonden is na het blok waarin een transactie zit is daarom bepalend voor de veiligheid van de transactie.

5. Netwerk

Zoals aangegeven in de introductie wordt er voor Bitcoin gebruik gemaakt van een peer-to-peer netwerk. Een computer binnen een peer-to-peer netwerk wordt ook wel een node genoemd. Binnen een dergelijk netwerk heeft elke node een gelijke waarde.

Satoshi noemt in zijn Bitcoin-artikel de volgende stappen die worden uitgevoerd in het netwerk:

  1. Nieuwe transacties worden verspreid over alle nodes.
  2. Elke node verzamelt de transacties in een blok.
  3. Elke node zoekt naar een nieuw blok.
  4. Als een node een nieuw blok vindt stuurt hij dit naar alle andere nodes.
  5. Elke node accepteert alleen een blok als alle transacties geldig zijn en nog niet eerder zijn uitgegeven (de input heeft nog niet eerder als input gediend).
  6. Elke node geeft aan dat hij het blok accepteert door de hash van dat blok als input te gebruiken in zijn zoektocht naar een nieuw blok.

Zoals eerder aangegeven wordt alleen rekening gehouden met de langste ketting van blokken. Als twee nodes een verschillende versie van een nieuw blok tegelijk publiceren kan het zijn dat bepaalde nodes verder werken met het ene blok, en andere nodes verder werken met het andere blok. Op het moment dat er weer een nieuw blok wordt gevonden is de ene ketting weer langer dan de andere ketting, en zal de korste ketting worden vergeten. Alle nodes gaan namelijk verder met het zoeken van een nieuw blok voor de langste ketting.

Het kan voorkomen dat een node nog niet alle vorige blokken binnen heeft op het moment dat er een nieuw blok wordt aangeboden. Deze node herkent echter dat hij enkele blokken mist en zal dan op zoek gaan naar de missende blokken.

6. Beloning

Om het zoeken naar nieuwe blokken in stand te houden wordt er aan de vinder van een blok een beloning gegeven. Deze beloning wordt vastgelegd in de eerste transactie van een blok. Deze transactie is de enige transactie waarvoor geen andere transacties als input benodigd zijn. Op deze manier komen er steeds meer bitcoins in omloop zonder dat ze door een centrale partij uitgedeeld hoeven te worden. Satoshi vergelijkt het zoeken van bitcoins met het delven van goud, daarom wordt de zoektocht naar bitcoins ook wel minen genoemd (Engels voor delven). Een miner verdient een beloning omdat hij rekenkracht toevoegt aan het netwerk, wat tijd en geld kost.

De beloning in het bitcoinnetwerk startte met 50 bitcoins per gevonden blok. Deze beloning halveert na elke 210.000 nieuwe blokken. Zoals eerder aangegeven zorgt de moeilijkheidsgraad er voor dat er gemiddeld elke tien minuten een nieuw blok wordt gevonden. Dit betekent dat de beloning voor een blok ongeveer na vier jaar halveert. Uiteindelijk zullen er in totaal 21 miljoen bitcoins worden gegenereerd, dit aantal zal bereikt worden rond het jaar 2140.

Naast dat de beloning die is vastgesteld per blok ontvangt de vinder van een blok ook de fee’s die zijn toegevoegd aan de transacties in het blok. Een fee bestaat uit het verschil tussen de input van een transactie en de output van een transactie. Op de input en output van een transactie wordt verder ingegaan in hoofdstuk 9.

De beloning voor het vinden van een blok zorgt er ook voor dat nodes in het netwerk eerlijk zullen blijven. Zoals eerder aangegeven moet iemand die het netwerk wil aanvullen over zeer veel rekenkracht beschikken. Simpel gezegd geldt dat om een goede aanval uit te voeren er meer rekenkracht nodig is dan de totale rekenkracht van de rest van het netwerk. Als iemand echter over zoveel rekenkracht beschikt is het voor diegene misschien wel voordeliger om gewoon eerlijk bitcoins te minen, dan om te proberen de transacties in oude blokken te veranderen. Doordat een geslaagde aanval kritieke gevolgen heeft voor de betrouwbaarheid van Bitcoin zal bij een geslaagde aanval de waarde van een bitcoin waarschijnlijk enorm dalen. Hierdoor is het maar de vraag of een aanval wel zin heeft, aangezien de bitcoins die er mee verdiend worden misschien wel niks meer waard zijn na de aanval.

7. Terugwinnen van schijfruimte

Zoals eerder aangegeven moet een node over de gehele block chain beschikken als hij wil controleren of een bitcoin niet dubbel wordt uitgegeven. Het opslaan van de gehele blockchain kan uiteindelijk zeer veel schijfruimte in beslag nemen. Op het moment dat een transactie is gebruikt als input voor een nieuwe transactie, en er na het blok van deze transactie weer genoeg nieuwe blokken zijn gegenereerd, kunnen de voorgaande transacties worden vergeten. Om dit mogelijk te maken worden transacties gehasht in een zogenaamde Merkle Tree. Dit betekend dat alleen de laatste hash van een ketting van transacties wordt opgenomen in een nieuw blok. Dit is geïllustreerd in onderstaande afbeelding uit het originele Bitcoin whitepaper.

Bitcoin Merkle Tree

8. Gesimplificeerde betalingsverificatie

Om te controleren of een transactie uit het verleden geldig is hoeft een gebruiker niet perse een node te zijn in peer-to-peernetwerk. Een gebruiker hoeft alleen te beschikken over de headers van de blokken uit de langste block chain. Met behulp van deze headers kan hij de tak van de Merkle Tree opvragen waar de transactie in zit die als input voor de nieuwe transactie wordt gebruikt. Doordat de gebruiker kan nagaan dat de transactie is opgenomen in het netwerk, weet hij dat de nodes in het netwerk de transactie hebben geaccepteerd.

Block chain Bitcoin

Op basis van deze controle is de verificatie betrouwbaar zolang het netwerk bestaat uit eerlijke nodes. Op het moment dat een aanvaller over meer dan de helft van de rekenkracht van het netwerk beschikt kan hij echter blokken aanpassen. Hiervoor moet hij echter wel de proof-of-work uitvoeren voor alle opvolgende blokken. Bedrijven die regelmatig grote transacties moeten verifiëren kunnen het beste wel als node deel uitmaken van het netwerk. Hierdoor kunnen ze transacties beter en sneller verifiëren.

9. Combineren en splitten van waarde

Eerder op deze pagina spraken we al enkele keren over de input en output van een transactie. Elke transactie heeft namelijk een andere transactie als input. Dit betekend echter niet dat als je tien bitcoins ontvangt in één transactie je alleen maar tien bitcoins kunt uitgeven in je volgende transactie. Ook is het niet zo dat als je vijf bitcoins naar iemand wil sturen, je eerst van iemand anders vijf bitcoins in één transactie moet hebben ontvangen.

Doordat een transactie uit meerdere inputs en outputs mag bestaan is het mogelijk om waardes te splitsen en te combineren. Een transactie met een grote output kan meerdere transacties als input gebruiken. Daarnaast kan voor bitcoins die als input worden gebruikt, maar niet nodig zijn als output, een extra transactie worden aangemaakt waarin de resterende bitcoins worden teruggestuurd naar de verzender.

Bitcointransactie

Het bovenstaande verduidelijken we graag met een voorbeeld. Stel Peter ontvangt een transactie met een waarde van 2 bitcoins (tx1) en een transactie van 4 bitcoins (tx2) op zijn wallet. Vervolgens wil hij Vincent 5 bitcoins versturen naar zijn wallet. Hiervoor worden tx1 en tx2 als input gebruikt. De totale input van de nieuwe transactie is dus 6 bitcoins. Van deze 6 bitcoins worden 5 bitcoins verstuurd naar Vincent (tx3) en 0.999 bitcoins gaan terug naar Peter (tx4). De resterende 0.001 bitcoin worden door de vinder van het blok waar de transactie in wordt vastgelegd gebruikt als fee. In een volgende transactie vanaf Peter kan tx4 weer gebruikt worden als input.

10. Privacy

In het traditionele bankenmodel wordt de privacy gewaarborgd doordat de bank niet alle informatie verstrekt aan de kopende en de verkopende partij. Een verkoper weet bijvoorbeeld niet hoeveel euro’s de koper op zijn bankrekening heeft staan. Binnen het Bitcoinnetwerk zijn alle transacties openbaar en kan daardoor ook precies achterhaald worden hoeveel geld er op een adres staat. Iedereen kan zien dat iemand geld stuurt naar iemand anders, echter zijn de publieke key’s anoniem. Deze pseudo-anonimiteit is vergelijkbaar met wat er gebeurt binnen bijvoorbeeld de AEX: iedereen kan zien welke transacties er plaatsvinden, maar men weet niet welke partijen er bij betrokken zijn. De verandering in het privacy model is te zien in de onderstaande afbeelding uit het originele Bitcoinpaper: transacties zijn publiekelijk bekend, maar er is geen derde partij meer nodig voor de transacties.

Privacy Bitcoin

Als een extra bescherming kan iemand die bitcoins ontvangt elke keer een andere publieke key gebruiken. Hierdoor wordt voorkomen dat direct te zien is hoeveel bitcoins er in totaal ontvangen zijn. Het is echter wel mogelijk om bepaalde publieke keys aan elkaar te linken op het moment dat deze keys als input worden gebruikt voor dezelfde transactie, dit betekend namelijk dat beide keys dezelfde eigenaar hebben.

11. Berekeningen

In dit hoofdstuk wordt het scenario besproken dat iemand het Bitcoin-netwerk probeert aan te vallen door een blockchain te genereren die langer is dan de eerlijke block chain. Mocht een aanvaller het lukken om een langere blockchain te generen, dan betekend dat niet dat hij uit het niets bitcoins kan creëren. Andere nodes in het netwerk zullen namelijk niet een transactie met een ongeldige input accepteren, en daarnaast zal een blok met valse transacties ook geweigerd worden. Het enige wat een aanvaller kan proberen is om zijn eigen transacties aan te passen.

Het bovenstaande scenario willen we graag illustreren met een kort voorbeeld. Een aanvaller begint door bijvoorbeeld een duur artikel te bestellen bij een winkel. Op het moment dat hij dit artikel ontvangt, of dat het artikel naar hem toe is gestuurd, kan hij proberen een aanval uit te voeren. Hiervoor moet hij nieuwe blokken voor de blockchain genereren vanaf het blok voor het blok waar zijn transactie in is opgenomen. In deze nieuwe blockchain plaatst hij dezelfde transactie, echter vervangt hij het ontvangstadres van de winkel, voor een adres dat hij zelf bezit. Indien de aanvaller voor deze nieuwe block chain meer blokken genereert dan dat er door de rest van het netwerk voor de eerlijke block chain worden genereert, zullen de nodes in het netwerk de langere nieuwe block chain accepteren. De originele ontvanger van de bitcoins zal in de nieuwe block chain zijn transactie niet meer zien, echter heeft hij het product al aan de aanvaller gegeven.

Voor de statistische analyse van de kans dat een aanvaller er in slaagt om een langere block chain te genereren verwijzen we graag naar het originele paper. We bespreken hier wel enkele conclusies van de analyse van Satoshi die gelden bij de aanname dat de aanvaller over minder rekenkracht beschikt dan de rest van het netwerk:

  • De kans dat het een aanvaller lukt om een langere block chain te genereren daalt exponentieel met elk nieuwe blok dat na het blok met de transactie is toegevoegd aan de block chain. Een nieuwe blok dat wordt toegevoegd aan de block chain wordt ook wel een bevestiging genoemd.
  • Als de aanvaller beschikt over 30% van de rekenkracht van het gehele netwerk is de kans dat hij een langere block chain kan publiceren 4,2% als er al 10 bevestigingen zijn geweest.
  • Als de aanvaller beschikt over 10% van de rekenkracht van het gehele netwerk is de kans dat hij een langere block chain kan publiceren 1,3% als er al 3 bevestigingen zijn geweest.

Zoals eerder gezegd is het voor iemand met een grote hoeveelheid aan rekenkracht vaak voordeliger om gewoon bitcoins te minen en het netwerk in stand te houden, dan om een aanval op het netwerk uit te voeren en enkele transacties te wijzigen. Bitcoins die ontvangen zijn kunnen na 6 bevestigingen worden weer gebruikt worden als input voor een nieuwe transactie.

12. Conclusie

Het laatste hoofdstuk van het Bitcoinpaper is vanzelfsprekend de conclusie. In het paper is een voorstel gedaan voor een systeem dat elektronische transacties mogelijk maakt zonder afhankelijk te zijn van vertrouwen (in bijvoorbeeld een derde partij). Het artikel begon met het beschrijven van een transactiesysteem op basis van digitale handtekeningen. Dit systeem zou echter niet compleet zijn zonder het voorkomen van dubbele uitgaves. Hiervoor wordt een peer-to-peernetwerk voorgesteld waarbij gebruik wordt gemaakt van proof-of-work om de volgorde van transacties vast te leggen. De kans om een geslaagde aanval uit te voeren op dit systeem wordt kleiner naarmate de eerlijke nodes meer rekenkracht gaan bezitten.

Het netwerk is robuust, maar simpel tegelijk. Alle nodes werken samen, maar er is niet veel coördinatie nodig. Daarnaast hoeven nodes niet continu verbonden te zijn met het netwerk, als ze na een tijd van afwezigheid weer worden verbonden met het netwerk kunnen ze gewoon de langste block chain downloaden. Alle transacties die daar in zijn opgenomen worden voor waarheid aangenomen.