09-01-2018 Door: Arjan Hummel

Wat is een blockchain?

Deel dit bericht

Nu de waarde van bitcoin blijft stijgen, kom je de digitale munt ook steeds vaker tegen in de media. Daarbij valt ook vaak een andere term: de blockchain. De reden? bitcoin heeft een blockchain nodig om te bestaan. Andersom is dat niet zo: de bitcoin is namelijk slechts een toepassing van de blockchain. En naast bitcoin bestaan er nog vele andere cryptovaluta. Je kunt de blockchain vergelijken met het besturingssysteem van je smartphone en bitcoin met een app die daarop draait. In mijn blog ga ik dieper in op wat een blockchain nu precies is en hoe het werkt. Daarbij ga ik uit van de blockchain zoals die door bitcoin wordt gebruikt.

De blockchain kun je zien als een digitaal grootboek, waarin transacties worden vastgelegd. Dit grootboek bevat alle transacties die ooit gedaan zijn. Het grootboek heeft een open karakter, niemand is de ‘baas’. Dit is handig, want het betekent dat iedereen een transactie kan toevoegen, net zoals iedereen dat met reguliere valuta via een bankoverschrijving kan doen. Maar aan de andere kant is het misschien ook onhandig. Want als iedereen transacties mag plaatsen, hoe kunnen we dan zeker weten dat deze daadwerkelijk hebben plaatsgevonden en (dus) te vertrouwen zijn?

Cryptografie

Iedere transactie wordt door de eigenaar ondertekend. In de digitale wereld kennen we al langer de mogelijkheid om gegevens te ondertekenen. Denk aan het concept van public en private keys. Deze digitale ondertekening is veiliger dan een analoge handtekening, want een analoge handtekening kan makkelijk gekopieerd worden. En hoewel een digitale handtekening uiteindelijk ook maar een reeks nullen en enen is (en dus ook gekopieerd kan worden), heeft de digitale handtekening een belangrijke eigenschap die dat voorkomt.

De inhoud van de gegevens die ondertekend worden – de bitcoin-transactie – wordt samen met de private key van de gebruiker als input gebruikt om de digitale handtekening te genereren. Feitelijk bestaat de handtekening uit een serie van 256 enen en nullen. Wanneer de input verandert, al is het maar één bit, komt er een heel andere serie uit de functie. Omdat de transactiedata ook steeds een uniek ID kent, is het niet mogelijk om een ‘interessante’ transactie, waarin jij bijvoorbeeld bitcoins ontvangt, te kopiëren inclusief de handtekening. Het unieke ID is dan immers niet meer uniek.

Onderteken (transactiedata,private key)=handtekening

Naast een functie voor het signeren, bestaat er ook een functie waarmee een gesigneerd bericht gecontroleerd kan worden. Deze functie gebruikt de transactiedata als input, de al aanwezige handtekening bij die transactie en de public key van degene die de transactie heeft ondertekend. De uitkomst van deze formule wordt weergegeven als waar of niet waar. Bij waar kun je er zeker van zijn dat de handtekening gemaakt is door iemand die de private key bezit, behorende bij de public key. Door de enorme hoeveelheid van 2 tot de macht 256 mogelijke handtekeningen is het ondenkbaar dat iemand deze op goed geluk verzonnen heeft.

Omdat de functie die de handtekening genereert ook de transactiedata met een uniek ID als input gebruikt, kun je er bovendien zeker van zijn dat deze transactiedata origineel en ongewijzigd is en maar één keer heeft plaatsgevonden. Bij het wijzigen van deze data zou namelijk een heel andere handtekening als resultaat verschijnen en zou de controlefunctie dus een niet waar-resultaat geven.

Controleer (transactiedata,handtekening,public key)=waar of niet waar

Blokken met transacties

De blockchain werkt met blokken gegevens, waarbij het grootste gedeelte van die gegevens de ondertekende transacties zijn, zoals zojuist beschreven. Elk blok heeft een volgnummer. Het eerste blok kent volgnummer 0 en tijdens het schrijven van deze blog is bloknummer 497931 ontstaan. Daarnaast kent een blok een speciaal getal, dat nonce wordt genoemd. De nonce heeft een speciaal doel, waarover later in deze blog meer. Verder zijn er in een blok twee hashes te vinden.


afb1.png


Zonder uitgebreid in te gaan op de achterliggende wiskunde bestaan er in de cryptografie zogenaamde hash-functies die op basis van bepaalde input een hash kunnen genereren, soms ook digest genoemd. De input is over het algemeen een stuk tekst of een bestand. De hash lijkt willekeurig, maar is het niet. In geval van de bitcoin blockchain wordt de SHA256-functie gebruikt, waarbij het getal slaat op het aantal bits in het resultaat van de functie. Als de input hetzelfde is, komt altijd hetzelfde resultaat uit de hash-functie. Verandert de input, al is het maar één bit die van 0 naar 1 wordt gewijzigd, dan zal het resultaat compleet anders zijn. Andersom is het niet mogelijk om op basis van een bekende hash te bepalen wat de input is geweest. Dat wil zeggen: de enige methode die je hebt, is een input proberen en dan kijken of je tot de juiste hash komt.

afb2.png

Eén letter verschil geeft een compleet ander resultaat

De gehele inhoud van een blok wordt als input aan de SHA256-functie gegeven. Het hash-resultaat wordt toegevoegd aan het blok en is dus door iedereen te zien. Iedereen kan nagaan of de hash klopt door zelf de inhoud van het blok als input aan de SHA256-functie aan te bieden. Krijg je dezelfde hash als resultaat? Dan is de inhoud van het blok correct. Zo niet, dan is deze, al dan niet opzettelijk, gewijzigd en dus ongeldig.


afb3.png

De hash van een blok moet echter nog aan een speciale voorwaarde voldoen, voordat het blok écht als een valide blok wordt beschouwd door het bitcoin-netwerk. De hash moet beginnen met een bepaald aantal nullen wanneer we de hash als binair getal uitschrijven. Het aantal nullen is op moment van schrijven 72. Dit betekent feitelijk dat de inhoud van het blok zodanig moet zijn, dat wanneer deze als input voor de hash-functie wordt gebruikt, het resultaat begint met 72 nullen. De kans hierop is bij een willekeurig blok 1/(2 tot de macht 72). De eerder genoemde nonce in het blok is bedoeld om de hash te laten voldoen aan de genoemde voorwaarde. De nonce is feitelijk een getal en deze moet dus zo gekozen worden, dat de hash van het gehele blok, inclusief die nonce, begint met 72 nullen. Het kost heel wat rekenwerk om de juiste nonce te vinden, want de enige methode is een voor een proberen. Dit is opzettelijk zo ontworpen. Je kunt dus niet ‘even snel’ een blok verzinnen met een valide hash. In de blockchain-wereld wordt het vinden van een valide hash Proof-of-Work genoemd. Het kan niet anders dan dat er heel wat rekenwerk is verricht om een blok te genereren dat een hash heeft die begint met 72 nullen. Aan de andere kant is voor iedereen wel snel te controleren of de inhoud van het blok tot de aanwezige hash leidt en dus dat het blok valide is.

Ketting van blokken

Omdat een blok in de blockchain niet oneindig veel transacties kan bevatten, moeten er continu nieuwe blokken gegenereerd worden. Zoals eerder genoemd bevat een blok twee hashes, maar we hebben er tot nu toe nog maar één gebruikt. De tweede hash is de hash van het vorige blok. Elk blok bevat dus ook de hash van het vorige blok. Hierdoor wordt een blok dus feitelijk gekoppeld aan het vorige blok. En dat vorige blok is op dezelfde manier gekoppeld aan het blok dat daar weer voor komt. Hier ontstaat dus een ketting van blokken: de blockchain!


afb4.png



Omdat de hash van het vorige blok een stukje inhoud is van het huidige blok, telt deze ook mee bij de berekening van de hash van het huidige blok. Hierdoor is het eigenlijk onmogelijk om ergens in de blockchain een wijziging aan te brengen. Ten eerste moet voor het gewijzigde blok opnieuw een hash berekend worden die aan de voorwaarden voldoet (72 nullen). Die nieuwe hash moet worden opgenomen in het volgende blok. Dat betekent dat de inhoud van dat blok is gewijzigd, dus ook voor dat blok moet opnieuw een hash berekend worden en die nieuwe hash moet weer worden opgenomen in het volgende blok et cetera, et cetera.

Het is hierdoor rekenkundig gezien niet te doen om een wijziging in de blockchain ‘valide’ te maken. En zelfs al zou je genoeg rekenkracht hebben om dit te realiseren, dan zijn er nog andere ‘obstakels’ die overwonnen moeten worden.

Gedistribueerde blockchain

De blockchain wordt gedistribueerd. Dit betekent dat er niet één exemplaar van de blockchain is, maar vele identieke kopieën. Elk kopie wordt door een groep servers onderhouden. Deze servers worden miners genoemd. Een miner doet eigenlijk het volgende:
• luisteren naar nieuwe transacties en deze in een blok verzamelen
• de juiste nonce/hash berekenen voor dit blok (Proof-of-Work)
• dit blok kenbaar maken op het bitcoin-netwerk voor de andere miners

Zodra er een nieuw valide blok bekend is, gaan alle miners aan de slag om het volgende blok te genereren. De miners krijgen overigens iets terug voor al hun werk: bitcoins! In elk nieuw blok mag een miner namelijk een bepaalde hoeveelheid bitcoins aan zichzelf toekennen: de block reward. Dit is een speciale transactie die aan alle reguliere transacties wordt toegevoegd. Deze bitcoins ontstaan dus vanuit het niets en dit is waar ze überhaupt vandaan komen! Deze speciale transactie is echter pas geldig als het hele blok geldig is. Het is een miner er dus om te doen als eerste een nieuw valide blok te genereren. Overigens ontvangt een miner vaak ook een kleine transactievergoeding voor elke transactie in het blok. Deze vergoedingen worden door jou en mij betaald wanneer we een bitcoin-transactie het netwerk opsturen.

Het kenbaar maken van een nieuw blok op het netwerk kost enige tijd. Daardoor kan het gebeuren dat afzonderlijke miners min of meer gelijktijdig een nieuw blok berekend hebben. Je hebt dan tijdelijk een vertakking van de blockchain. Er zijn dan dus twee nieuwe en volgens de regels valide blokken die aan de blockchain toegevoegd kunnen worden. Welk blok moeten we nu zien als de waarheid? Het antwoord daarop is: de blockchain waar het meeste werk in zit. In de praktijk is dat de langste blockchain, degene met de meeste blokken. Door simpelweg een aantal blokken te wachten, ontstaat er vanzelf een langste blockchain en deze wordt door het wereldwijde netwerk dan automatisch als de geldige blockchain erkend. Daarom wordt er over het algemeen ook een aantal blokken gewacht, voordat een transactie als geldig wordt beschouwd. De kans dat het om een frauduleuze/verzonnen transactie gaat, wordt met elk nieuw blok een stuk kleiner.

Het feit dat de blockchain gedistribueerd is, maakt deze nog minder fraudegevoelig. Stel dat iemand het toch voor elkaar zou krijgen een wijziging in één van de blockchains aan te brengen of een nieuw blok te berekenen en dat deze persoon dus over voldoende processorkracht beschikt om alle benodigde hashes ‘goed’ te krijgen. Dan is het misschien nog reëel om één valide blok te kunnen presenteren aan het bitcoin-netwerk (zoals eerder genoemd), maar daarna wordt het opboksen tegen de gezamenlijke processorkracht van alle miners wereldwijd. De kans om continu als eerste een valide volgend blok te berekenen, is dus nagenoeg nihil.

Bijzonderheden

De 72 nullen voor een valide hash zijn niet statisch. Het aantal wordt zo gekozen, dat het met de op dat moment aanwezige rekenkracht in het bitcoin-netwerk gemiddeld zo’n 10 minuten duurt voordat een blok is berekend. Bij de start van de blockchain was het aantal benodigde nullen ‘slechts’ 32.

De block reward die miners ontvangen, bedraagt momenteel 12.5 BTC. En ja, dat is met de huidige koers meer dan 135.000 euro! Over het algemeen wordt voor het minen speciale (dure) hardware ingezet met zogenaamde ASICs (Application Specific Integrated Circuit), processoren die voor een speciaal doel zijn ontworpen. Deze hardware draait 24x7 en verbruikt dus even zo lang stroom die ook betaald moet worden. De block reward was in het begin 50 BTC en wordt om de 210.000 blokken gehalveerd. Door het proces van het halveren komen er uiteindelijk niet meer dan 21.000.000 bitcoins in omloop.

Het eerste blok in de bitcoin blockchain wordt ook wel het Genesis Block genoemd. Dit blok is ontstaan op 3 januari 2009 om 18.15 uur. Het blok is met de daarin aanwezige hashes de basis voor de rest van de blockchain. Het is een speciaal geval, want er is immers geen ‘vorig’ blok. Ook in dit blok is een block reward-transactie van 50 BTC opgenomen. Door de speciale manier waarop de bitcoin-software met dit blok omgaat, kunnen deze 50 bitcoins niet uitgegeven worden. Het is onduidelijk of de uitvinder van de bitcoin dit zo bedoeld heeft of dat het per ongeluk is gebeurd.

De uitvinder van de bitcoin blockchain is Satoshi Nakamoto. Dat is althans de naam waar hij zich onder bekend heeft gemaakt in de paper over bitcoin. Niemand weet eigenlijk wie daadwerkelijk achter deze naam schuilgaat.

Deze blog verscheen eerder op www.centric.eu/craft.

Company:

Centric

Arjan Hummel

Craft Expert Arjan Hummel is onderdeel van Team Cloud binnen Craft, hét groeiprogramma voor IT’ers (powered by Centric).

Alle blogs van deze auteur

Partners