Blockchain, het kloppend hart van Bitcoin

Bitcoin is de eerste gedistribueerde cryptocurrency, of anders gezegd, de eerste munteenheid die voor financiële transacties dankzij cryptografie geen nood heeft aan centrale partijen, zoals traditioneel de banken. Het kloppend hart van het in 2009 gelanceerde Bitcoin is de blockchain, zeg maar een gedistribueerde database waarin alle financiële Bitcoin-transacties geregistreerd worden.

Werking

Het Bitcoin systeem laat toe om waarde (uitgedrukt in bitcoins) te transfereren van één partij naar een andere. Al deze transacties worden geregistreerd in de blockchain. Dit is een sequentie van blokken, waarbij elk blok een aantal transacties bevat, zoals geïllustreerd in figuur 1. Vooraleer we hier dieper op ingaan, leggen we eerst de hashfunctie uit, wat noodzakelijk is om de werking van de blockchain te kunnen begrijpen.

Figuur 1: Drie blokken met transacties in de Bitcoin blockchain
Veilige hashfunctie
Een belangrijk concept in blockchains is de secure hashfunctie. Het genereert voor data met een willekeurige lengte een unieke fingerprint met een vaste lengte, de hashwaarde. Dus van zodra de data die als input aan de hashfunctie gegeven wordt ook maar één bit verandert, zal de hashwaarde er totaal anders uitzien. Het is ondoenbaar om twee verschillende inputs te vinden waarbij de hashfunctie dezelfde hashwaarde genereert (botsbestendig) of om uit de hashwaarde opnieuw een geldige input af te leiden (éénwegs). Elk blok heeft zo zijn unieke hashwaarde.

Gemiddeld wordt elke 10 minuten een nieuw blok aan het einde van de blockchain toegevoegd. Dit gebeurt door het zogenaamde minen (ontginnen). Verschillende deelnemers in het bitcoin netwerk zijn miners (ontginners) en gaan met elkaar in competitie om een rekenintensieve cryptografische puzzel op te lossen, wat nodig is om een geldig blok te creëren. De uitdaging is daarbij om een nonce-waarde te vinden in de block header (zie figuur 1) zodat de hashwaarde van het block inclusief de nonce, kleiner is dan de maximum door Bitcoin toegelaten waarde. Hoe kleiner deze waarde, hoe moeilijker de puzzel.

Wanneer één van de deelnemers zo een nonce-waarde gevonden heeft en daarmee de cryptografische puzzel opgelost heeft, stuurt hij het correct gevormde blok naar zijn buren, die het op hun beurt verder over het netwerk verspreiden. Voor de andere deelnemers is het nu zeer eenvoudig om na te gaan of het hashen van het blok inderdaad resulteert in een hashwaarde die voldoende klein is. Het berekenen van een hashwaarde kan immers bijzonder efficiënt. Het is een soort bewijs voor het geleverde werk en wordt daarom proof-of-work genoemd. Ter illustratie werd voor blok 398837 de nonce-waarde 425462554 gevonden wat resulteerde in de hashwaarde 000000000000000002ed91269a2b5f53cc0e68289f8327f272f6f40ac7c19a96 die voldoende klein is.

De miner krijgt een compensatie voor het geleverde werk: nieuw gecreëerde bitcoins voor het vinden van de puzzel, wat een vast bedrag is, plus de transaction fees, wat variabel is. Het aantal nieuw gecreëerde Bitcoins bedraagt momenteel 25 en wordt geregistreerd in de eerste transactie in het block, de generation transaction (zie figuur 1), waarin 25 nieuwe bitcoins gecreëerd worden. Deze beloning halveert elke 4 jaar, waardoor dit vanaf midden 2016 zal verminderen tot 12,5 bitcoins. In elke transactie is er een bedrag dat uitgegeven wordt en een bedrag dat ontvangen wordt. Het verschil tussen de twee is de transaction fee voor de miner. We zien in figuur 1 dat er honderden transacties zijn per block. Alle transaction fees zijn voor de winnende miner. Momenteel zijn de transaction fees vrij laag (meestal het minimum) en bestaat de voornaamste inkomstenbron van miners uit de nieuwe bitcoins in de generation transaction. De verwachting is dat mettertijd de inkomstenbron meer zal verschuiven naar transaction fees.

Gemiddeld wordt elke 10 minuten een nieuw blok gecreëerd. De totale rekenkracht van alle miners samen verandert natuurlijk voortdurend. Meer rekenkracht betekent dat de puzzels sneller opgelost zullen worden. Daarom wordt om de twee weken de moeilijkheid van de cryptografische puzzel aangepast, waarbij gekeken wordt naar het gemiddelde van de voorbije twee weken.

Terwijl alle miners de cryptografische puzzel proberen op te lossen, verzamelen ze alle nieuwe transacties. Wanneer een miner de cryptografische puzzel oplost, eindigt de competitie voor dit blok, maar start tegelijkertijd een nieuwe competitie om de ondertussen verzamelde transacties in een nieuw blok te steken. Dit principe is het kloppend hart van Bitcoin.

Is dit wel veilig?

Elke deelnemer (node) in het Bitcoin netwerk heeft een kopie van ofwel de volledige blockchain, ofwel van op zijn minst alle block headers. Dit alleen maakt het bijzonder lastig om een transactie die reeds in de blockchain zit te wijzigen of te verwijderen of om een nieuwe transactie toe te voegen. Alle deelnemers moeten immers akkoord gaan met deze wijziging in de write-only blockchain.

Maar er is meer. Stel dat ik een wijziging aanbreng in een transactie die pakweg een dik uur oud is, dan verandert ook de hashwaarde van het blok waartoe de transactie behoort. De waarde in previous_block_hash in het daaropvolgende blok moet dus ook aangepast worden. Maar dan zal ook in dit blok een andere nonce waarde gevonden moeten worden om de cryptografische puzzel op te lossen. Stel dat we daarin slagen, dan moet ook het daaropvolgende blok aangepast worden, want ook daar verandert de waarde in het veld previous_block_hash. We moeten dus alle blokken aanpassen tot aan het einde van de blockchain, waarbij telkens voor elk blok de cryptografische puzzel opnieuw opgelost moet worden. In ons voorbeeld van een transactie die een dik uur oud is, zou het dus gaan om een zestal cryptografische puzzels. Gezien de beperkte rekenkracht van de de valsspeler is dit in de praktijk onmogelijk.
In het algemeen wordt aangenomen dat een transactie definitief goedgekeurd is wanneer het blok beschermd is door zes nieuwere blokken.

Een voordeel van een blockhain is het wegvallen van de centrale database die extreem goed beveiligd moest worden. Gezien iedereen een kopie heeft van dezelfde blockchain zijn er ook geen problemen meer wat betreft het consistent houden van verschillende gegevensbanken. Denk hierbij bijvoorbeeld aan transacties tussen een persoon met een rekening bij bank A en een persoon met een rekening bij bank B. Zowel bank A als bank B bewaren deze transactie in hun database.

Dit brengt ons direct bij een ander voordeel. We hoeven geen centrale autoriteiten meer te vertrouwen. Sterker nog, we kunnen het perfect zonder hen.

We vermelden ook dat elke transactie, met uitzondering van generation transactions, verwijzingen bevatten naar oudere transacties in andere blokken. Indien Bob 5 Bitcoins ontvangen heeft van Alice en indien Bob 25 Bitcoin in een generation block heeft, dan kan Bob daarmee 26 Bitcoins aan Charlie geven. Daarbij zal de nieuwe transactie verwijzingen bevatten naar de twee oudere transacties waaruit bleek dat Bob in totaal 30 Bitcoins bezat. De nieuwe transactie geeft nu aan dat Bob 4 Bitcoins heeft en Charlie 26. Doordat elke transactie bewaard wordt, is het niet mogelijk een Bitcoin twee maal uit te geven.

Beperkingen

Toch heeft de Bitcoin blockhain zijn beperkingen. Zo blijkt momenteel dat de limiet voor Bitcoin ongeveer 3 transacties per seconde is. Wanneer deze limiet overschreden wordt, wordt het netwerk instabiel en onbetrouwbaar en worden de transaction fees onredelijk hoog. Transacties met een hoge transaction fee krijgen immers voorrang op de andere transacties. Dit zou opgevangen kunnen worden door de maximumgrootte van een blok te vergroten. Die is momenteel 1 MB. Maar omwille van economische belangen besliste het core team van Bitcoin om dit niet te doen. De meeste mining gebeurt immers in grote Chinese mining farms en grotere blokken zouden moeilijker door de chinese firewall raken, gezien die maar een beperkte bandbreedte heeft. Bovendien dreigde een split in bitcoin, waarbij een deel zou overschakelen op grotere blokken (Bitcoin XT met blokken van 8 MB) en een ander deel niet. Dit zou uiteraard nefast zijn voor het beleggersvertrouwen.

Een andere beperking is dat het core Bitcoin team maar uit een tiental mensen bestaat. Hooguit tien (onverkozen) personen bepalen dus de toekomst van Bitcoin. Dit is een enorm sterke vorm van centralisatie. Was dit niet wat Bitcoin net wou tegengaan? Maar er is meer… Het minen van Bitcoins wordt gedomineerd door een klein aantal spelers met enorm veel rekenkracht. Ze bezitten hele datacenters met als enig doel het minen van Bitcoins. Als particulier kan je niet op tegen dergelijke schaalvoordelen.

De blockchain groeit elke 10 minuten met 1 blok (momenteel 1 MB). Wordt dit op termijn niet erg groot? Momenteel is de volledige blockchain zo’n 56 GB groot. In plaats van de volledige blockhain kan een deelnemer (node) enkel de block headers bijhouden, wat neerkomt op 80 KB per block, ofwel een dikke 30 MB in totaal. Bovendien is het (m.b.v. Merkle trees) mogelijk om een transactie in een blok te valideren zonder alle andere transacties in het blok te kennen. Enkele korte 256 bits hashwaarden volstaan.

Ten slotte vermelden we dat het minen van Bitcoins enorme hoeveelheden energie consumeert, wat uiteraard een impact heeft op het milieu.

Conclusies

Het belang van Bitcoin als eerste gedistribueerde blockchain is niet te onderschatten. Toch is voor velen Bitcoin op zich niet de belangrijkste uitvinding, maar wel de onderliggende blockchain technologie.

Bitcoin is een uit zijn voegen gebarsten experiment dat zijn beperkingen kent. Zelfs indien Bitcoin mislukt mogen we daaruit niet de conclusie trekken dat ook blockchain gefaald heeft. Bitcoin is slechts een toepassing van blockchains.

In een volgend artikel willen we dan ook dieper ingaan op de verschillende types blockhain en hun toepassingen, zowel in het algemeen als meer specifiek binnen een overheidscontext.

Tot slot is er nog de website https://blockchain.info/ met de laatste transacties, blokken en statistieken in de Bitcoin blockchain.

Leave a Reply

Your email address will not be published. Required fields are marked *