Hoe werkt Bitcoin?

· 10 min read

Bitcoin is een concept voor digitaal geld dat de legendarische en raadselachtige Satoshi Nakamoto in 2009 presenteerde. Het gebruikt blockchaintechnologie als infrastructuur en werkt gedecentraliseerd, rechtstreeks van persoon tot persoon. De whitepaper waarin Nakamoto dit concept uitlegt, is verplichte kost voor iedereen die bitcoin en cryptovaluta in het algemeen wil begrijpen. Hij legt niet alleen bitcoin als idee uit, maar laat ook zien hoe een systeem met Byzantijnse fouttolerantie kan werken in een gedecentraliseerde omgeving.

Wie zich in Bitcoin verdiept, moet vooral weten dat blockchaintechnologie de belangrijkste factor is waardoor het idee van bitcoin werkelijkheid kon worden – en moet begrijpen hoe die technologie werkt.

Wat is blockchain?

Een blockchain is een keten van blokken die elk data bevatten en die door geen enkele centrale autoriteit wordt gecontroleerd of beheerd. Deze informatieketens zijn cryptografisch beveiligd en kunnen dankzij hun gedecentraliseerde structuur niet het zwijgen worden opgelegd. Blockchain gebruikt in de kern twee datastructuren: pointers en gelinkte lijsten.

Pointers

Pointers zijn variabelen die aangeven waar een andere variabele zich bevindt. Normaal gesproken bevatten variabelen in programmeertaal data. (In het voorbeeld int a = 10 heeft de integervariabele a de waarde 10.) Pointers slaan daarentegen geen waarde op als data, maar verwijzen naar het adres van de variabele die die data bevat.

Gelinkte lijsten

Gelinkte lijsten zijn een van de belangrijkste bouwstenen binnen datastructuren en zien er ruwweg zo uit.

Een reeks blokken die elk bepaalde data bevatten en via een pointer met het volgende blok verbonden zijn. De pointervariabele bevat het adres van de volgende node en zorgt zo voor de verbinding. Zoals we bij de laatste node zagen, bevat de laatste pointer geen data.

Het belangrijke punt hier is dat elke pointer het adres van het volgende blok bevat. Waar is dan de pointer naar het eerste blok? Het eerste blok heet het genesisblok en de pointer ervan zit in het systeem zelf.

Een hash-pointer is een pointer die de hash van het voorgaande blok bevat.

Hashen is een proces dat data van willekeurige lengte neemt en er met een bepaalde functie altijd een resultaat van dezelfde lengte van maakt, ongeacht de inhoud van de data. Bij Bitcoin wordt de overboekingstransactie als data genomen en door het SHA-256-algoritme gehaald, dat een resultaat met vaste lengte oplevert. Hoe lang de ingevoerde data ook is, het SHA-256-algoritme geeft altijd een resultaat van 256 bits.

In zijn eenvoudigste vorm is een blockchain een gelinkte lijst, zoals hieronder te zien is.

Een blockchain is een gelinkte lijst waarin elk blok data bevat plus een hash-pointer die naar het voorgaande blok verwijst. Wat is dan een hash-pointer? Hash-pointers lijken sterk op gewone pointers, maar naast het adres van het vorige blok bevatten ze ook de hash van de data in dat blok. Precies dat kleine verschil in opzet maakt blockchaintechnologie zo veilig.

Stel je even voor dat een aanvaller blok 3 wil aanvallen en de data erin wil wijzigen. Door de hashfunctie leidt de kleinste verandering in de data tot een enorm verschil in de uitkomst. De kleinste wijziging in de data van blok 3 verandert de hash die in blok 2 is opgeslagen, de verandering in blok 2 werkt door in de hash in blok 1, en dus zou de hele keten moeten worden aangepast – wat onmogelijk is. Dat is de methode die blockchains onmogelijk het zwijgen laat opleggen.

Wat is mining?

Mining is het proces dat nodig is om nieuwe bitcoins te creëren. Bitcoin-mining werkt volgens het principe van Proof of Work (POW). Simpel gezegd: een probleem oplossen moet heel moeilijk zijn, maar zodra je het hebt opgelost, moet heel eenvoudig te bewijzen zijn dat je oplossing klopt.

Voordat we toekomen aan hoe Bitcoin POW als concept inzet, laten we eerst proberen te begrijpen waarom cryptovaluta zo'n systeem nodig hebben.

Vóór Bitcoin werden er verschillende digitale munten gemaakt, maar als je in een digitale omgeving een gedecentraliseerd netwerk van persoon tot persoon opzet, is het grootste struikelblok het logische probleem dat bekendstaat als het probleem van de Byzantijnse generaals. Doordat Nakamoto dit probleem in bitcoin met POW wist te overwinnen, kon bitcoin tot leven komen en gaat het nog altijd sterk door.

Het probleem van de Byzantijnse generaals

Laten we verdergaan met het probleem van de Byzantijnse generaals, dat ook in wetenschappelijk werk vaak wordt aangehaald. De Byzantijnse generaals die een aanval op de vijandelijke stad plannen, hebben twee problemen:

De generaals bevinden zich heel ver van elkaar, waardoor het onmogelijk is dat één centrale autoriteit het beleg aanstuurt.

De vijand heeft ook een sterk leger, dus de aanval moet door alle generaals tegelijk worden uitgevoerd, wil hij slagen.

Terwijl de belegerende legers de stad omsingelen, geeft elk leger het bevel door van het leger rechts van zich aan het leger links van zich, en zo blijft de communicatie in stand. Het probleem is alleen: als het bevel binnenkomt dat er op woensdag wordt aangevallen, is een leger misschien niet klaar en stuurt het een bericht terug: nee, aanvallen op vrijdag. Of de soldaat met de boodschap wordt door de vijand gevangengenomen, of de inhoud van zijn boodschap wordt gewijzigd. In zo'n onveilige omgeving mislukt elke aanval als er geen volledige coördinatie is.

Hetzelfde logische probleem geldt voor blockchainnetwerken, de infrastructuur van cryptovaluta zoals bitcoin. Dat zijn ongelooflijk grote netwerken – hoe kunnen we iedere afzonderlijke persoon daarin vertrouwen? We willen iemand 4 ether sturen, maar hoe weten we zeker dat iemand met kwade bedoelingen daar geen 40 ether van maakt?

Satoshi Nakamoto wist dit logische probleem te overwinnen door het proof-of-work-protocol te introduceren. Laten we kijken hoe dat werkt:

Wanneer het belegerende leger de boodschap "we vallen maandag aan" wil doorgeven aan het leger links van zich, moet het deze stappen doorlopen;

Eerst krijgt de oorspronkelijke boodschap een willekeurige, eenmalig gegenereerde waarde toegewezen die "nonce" heet. Een nonce kan elke waarde in het hexadecimale stelsel zijn.

Vervolgens wordt de tekst van de boodschap met de toegewezen nonce door de hashfunctie gehaald, wat een resultaat oplevert. In deze denkbeeldige aanval gaan we ervan uit dat de commandanten hebben afgesproken alleen die hashresultaten met elkaar te delen waarvan de eerste 5 tekens nullen zijn.

Levert de hashfunctie het gewenste resultaat op, dan sturen ze de boodschap door naar de volgende generaal. Komt het resultaat niet overeen, dan moet de toegewezen nonce willekeurig worden gewijzigd en het proces worden herhaald tot er een resultaat met vijf nullen vooraan uit komt. Zo'n systeem vergt ongelooflijk veel tijd en rekenkracht.

Wordt de soldaat met de boodschap gevangengenomen of wordt de inhoud gewijzigd, dan valt het hashresultaat door de eigenschappen van de hashfunctie totaal anders uit. Bij het nakijken van de boodschap zien de generaals dat de eerste vijf tekens van de hash geen nullen zijn en blazen ze de aanval af.

Hoe onwaarschijnlijk ook, elke hashfunctie kan botsende resultaten opleveren. In theorie zou er voor twee verschillende invoerwaarden A en B geen enkele kans mogen zijn dat H(A) = H(B), maar in de praktijk is geen enkele hashfunctie volledig botsingsbestendig.

Wat gebeurt er dan in dat kleine kansgeval waarin de soldaat met de boodschap wordt gevangengenomen, de boodschap wordt gewijzigd en de hash er tóch uitkomt zoals de generaals hem verwachten? Dat zou natuurlijk een tijdrovend proces zijn, maar onmogelijk is het niet. Daartegenover zetten de generaals hun numerieke overwicht in.

Dit probleem is te ondervangen door drie generaals tegelijk boodschappen naar links te laten sturen, in plaats van één generaal die de boodschap om beurten van rechts naar links doorgeeft. Als de generaals uit hun eigen boodschappen één cumulatieve boodschap samenstellen, die door de hashfunctie halen, aan het resultaat een nonce toewijzen en het opnieuw in de hashfunctie stoppen, moeten dit keer de eerste zes tekens van het resultaat nullen zijn.

In dat stadium is het vinden van de nonce van die boodschap en het wijzigen van de inhoud ervan een serieuze verspilling van tijd.

De taak van de generaals die de boodschap ontvangen is daarentegen simpel: ze hoeven alleen de nonce die ze hebben gekregen bij het hashresultaat op te tellen en de uitkomsten te vergelijken. Die stap is een heel snelle en eenvoudige handeling. Dat idee is het werkingsmechanisme van het proof-of-work-principe.

De nonce vinden die de juiste hash oplevert, vergt enorme rekenkracht en tijd

De resultaten nakijken en vaststellen of er kwade opzet in het spel is, kost daarentegen bijzonder weinig tijd.

Zo passen miners het proof-of-work-protocol toe bij Bitcoin-mining. Ze gebruiken hun rekenkracht om het cryptografische probleem voor hen op te lossen en het volgende blok te maken. In de Bitcoin-blockchain wordt elke 10 minuten een blok gemaakt.

Hoe verlopen overboekingen op het Bitcoin-netwerk?

Stel dat John wat bitcoin naar Dave wil sturen. Hoe verloopt die overboeking? Bitcoin-overboekingen werken heel anders dan overboekingen van fiatgeld. Wilde John Dave 10 USD geven, dan zou hij het biljet van 10 USD fysiek uit zijn portemonnee halen, het aan Dave geven en de overdracht was rond. Bij bitcoin ligt dat anders: het is niets wat we fysiek bezitten. Wat we hebben, is het bewijs dat we bitcoin bezitten.

Er zijn twee dingen die we moeten weten en in de gaten moeten houden;

Miners bevestigen en beveiligen overboekingstransacties met de data die ze in het blok zetten dat ze aanmaken. Voor die dienst rekenen ze ook een vergoeding.

Bij fiatvaluta kennen en volgen we de geschiedenis van geen enkel biljet dat we in handen hebben. Daar is geen praktische manier voor. Bij bitcoin daarentegen wordt elke overboeking op het netwerk vastgelegd.

Laten we in dat licht de bitcoin-overboeking tussen John en Dave bekijken. Die overboeking bestaat uit twee delen: input en output.

Om de overboeking te kunnen uitvoeren, moet John bitcoin uit eerdere overboekingen bezitten. Zoals gezegd worden alle overboekingen vastgelegd in het bitcoin-netwerk.

John moet de bitcoins uit de eerder ontvangen overboekingen met de namen TR(0), TR(1) en TR(2) verzamelen, daarvan een nieuwe overboeking met de naam TR(INPUT) maken en die naar Dave sturen. TR(INPUT) wordt hier de inputdata voor de nieuwe overboeking.

Zo ziet een bitcoin-overboeking er vanuit de input ruwweg uit.

De outputdata bevatten simpelweg de hoeveelheid bitcoins die Dave na de nieuwe overboeking moet hebben, plus het resterende wisselgeld, dat teruggaat naar John als de TR(INPUT)-waarde in zijn volgende overboeking.

Laten we het wisselgeld buiten beschouwing, dan kent dit proces één enkel outputresultaat, maar overboekingen met meerdere outputs zijn ook mogelijk. Deze uitleg laat eenvoudig zien hoe een overboeking op het bitcoin-netwerk verloopt. Om dit alles te laten slagen, moet echter aan bepaalde voorwaarden zijn voldaan.

Voorwaarden waaraan overboekingen moeten voldoen:

TR(INPUT) > TR(OUTPUT). De inputoverboeking moet altijd groter zijn dan de outputoverboeking. Bij elke overboeking wordt het verschil tussen input en output (output + wisselgeld) als vergoeding aan de miners betaald. Dus: Miningvergoeding = TR(INPUT) - (TR(OUTPUT) + WISSELGELD)

Aan de inputkant moet gelden: TR(0)+TR(1)+TR(2)=TR(INPUT). Met andere woorden, John moet genoeg bitcoin hebben om naar Dave te sturen. Heeft hij niet genoeg bitcoin om de transactie uit te voeren, dan wordt de overboeking door de miners afgewezen.

Nu moet Dave bewijzen dat hij de eigenaar is van de bitcoins die naar hem zijn gestuurd. John heeft zijn bitcoin-overboeking versleuteld met Daves publieke sleutel. Dave kan die versleuteling alleen openen met zijn privésleutel.

Ondertussen moet John bewijzen dat hij genoeg bitcoin heeft om naar Dave te sturen. Dat doet hij door de overboeking die hij wil uitvoeren met zijn eigen privésleutel te ondertekenen. Iedereen kan die met Johns publieke sleutel openen en verifiëren dat hij inderdaad over de vereiste hoeveelheid bitcoins beschikt. Dat bewijs heet de handtekeningdata.

De inputdata (inclusief de handtekeningdata) en de outputdata worden bij elkaar gevoegd en door het SHA-256-hashalgoritme gehaald. De uitkomst van dat algoritme wordt de overboeking genoemd.

Eén ding is belangrijk om te onthouden: om een bitcoin-overboeking te laten plaatsvinden, moet de miner die het blok heeft gemined die overboeking fysiek in het blok zetten. De miner die het blok heeft gemined, kan de vergoeding ontvangen voor alle overboekingen die hij erin heeft opgenomen. Doordat de overboekingsvolumes in de loop van de tijd toenemen, moeten overboekingen wachten op een nieuw blok omdat de blokken helemaal vol raken. Wie niet wil wachten, betaalt een hogere miningvergoeding, waardoor zijn overboeking opvalt en aantrekkelijker wordt voor miners.

Zo ontstond het replace-by-fee-principe. Het werkt eenvoudig zo: ook al heeft John 5 BTC naar Dave gestuurd, de transactie komt nooit in een blok terecht en blijft in behandeling omdat de miningvergoeding laag is gehouden. Terugdraaien of annuleren kan niet, want uitgegeven bitcoin is niet terug te halen. Maar als John een overboeking naar hetzelfde adres doet voor hetzelfde bedrag aan BTC met een hogere miningvergoeding, wordt de oude overboeking ongeldig verklaard en wacht de nieuwe op verwerking.

De toekomst van Bitcoin en cryptovaluta in het algemeen zit vol met ontelbare mogelijkheden. Blockchaintoepassingen kennen geen grenzen, en projecten in dit veld worden met de dag succesvoller en veiliger.

Op de weg van ruilmiddelen via het gebruik van edelmetalen als goud en zilver naar papiergeld en nominale valuta is het idee van geld in een virtuele omgeving niet bijzonder nieuw – pas in de recente geschiedenis werd het toepasbaar.

Volgens sommigen is hij een groep binnen de CIA, volgens anderen een buitenaards wezen, en misschien is hij echt een cyberpunk genaamd Satoshi Nakamoto. Wie het ook is: hij liet het aan ons over om te bepalen wat we verder doen met zijn ideeën en de uitwerking daarvan, die onze kijk op onze bezittingen en de manier waarop we ze bewaren volledig veranderen. Hij effende het pad voor ideeën die verder gaan dan het zijne en overtuigde de wereld ervan een compleet ander perspectief aan te nemen.

Satoshi had niet nagelaten een boodschap te verstoppen in het genesisblok – het startblok – dat hij minede en als hard code vastlegde. Hij noteerde de datum 3 januari 2009 en voegde er een kop uit de Britse Times van die dag aan toe over de banken die verantwoordelijk waren voor de wereldwijde economische crisis: "Minister staat op het punt banken een tweede reddingspakket te geven". Waarschijnlijk drijft hij met die woorden de spot met het centrale bankwezen. Waarom Satoshi dit niet-uitgeefbare adres in het startblok aanmaakte, is onbekend. Tot nu toe is er anoniem 16 BTC naar dit adres gestuurd, en daardoor zal het totale aanbod van 21 miljoen bitcoins in werkelijkheid nooit worden bereikt.

Bitcoin had slechts 9 jaar nodig om niveaus te bereiken die de centrale banken van de wereld angst inboezemen – en het heeft nog een lange weg te gaan.

Bitcoin Hoe werkt Bitcoin Satoshi Satoshi Nakamoto Nakamoto cryptovaluta blockchain Wat is blockchain Mining Wat is mining Bitcoin-netwerk