• No results found

1.4 Aanpak

2.3.3 Werking achter blockchain

Omdat blockchain een ingewikkeld onderwerp kan zijn, zullen de fundamentele principes steeds op basis van Bitcoin worden uitgelegd [20] [23]. Bitcoin is niet meer dan een openbaar grootboek van transacties, een public ledger in het Engels. Dit bevat transacties die zowel inkomend als uitgaand kunnen zijn. Een transactie is een aantal Bitcoins, de valuta van Bitcoin, die aan een adres wordt toegewezen. Dit adres is vergelijkbaar met een bankrekening en is steeds eigendom van ´e´en persoon of groep van personen. Deze transacties kunnen zowel inkomend zijn, een positief bedrag die aan een adres wordt toegewezen, als uitgaand zijn,

een negatief bedrag die aan een adres wordt toegewezen. Bitcoin is een publieke blockchain en volledig toegankelijk voor iedereen. Elke persoon kan elke transactie van de blockchain bekijken en zien van welk adres naar welk ander adres het verstuurd werd. Andere blockchains zijn dan weer privaat. Daar kunnen enkel de transacties worden gezien als de persoon toegang heeft tot de blockchain en niet iedereen heeft die toegang.

Het is niet nodig dat iemand het geld echt bezit zoals in het echte leven. Het is voldoende dat een persoon volgens het grootboek, meer inkomsten als uitgaven heeft om een transactie te kunnen uitvoeren. Stel dat Alice en Bob volgens de ledger elk ooit 100 BTC (Bitcoins) hebben ontvangen. Alice wil 10 BTC aan Bob betalen. Dan volstaat het om op de ledger een transactie toe te voegen met een waarde 10 BTC die van Alice naar Bob gaat. Die zal ook lukken omdat Alice nog genoeg balans heeft volgens haar vorige transacties. Als alle transacties steeds in hun geheel worden bekeken, dan zal Bob na de transactie over 110 BTC beschikken en Alice over 90 BTC. Door alle transacties in hun geheel te bekijken, wordt er vermeden dat er dubbel kan gespendeerd worden. In andere woorden, er wordt vermeden dat dezelfde Bitcoin meerdere keren kan worden uitgegeven. Zou Alice immers niet genoeg geld hebben, dan zou de transactie niet geldig zijn omdat op basis van de vorige transacties te zien zou zijn dat Alice niet genoeg saldo heeft. Echter blijken er nog meerdere technieken nodig om ervoor te zorgen dat dit alles veilig kan gebeuren.

Een eerste belangrijk onderdeel van een blockchain is authenticiteit. Zo mogen de Bitcoins enkel gespendeerd worden door de persoon zelf en niet door een andere persoon. Om dit te kunnen waarmaken, wordt er gebruik gemaakt van digitale handtekeningen [24]. Zo een digitale handtekening kan dezelfde vorm hebben als de hash die wordt getoond op de eerder getoonde figuur 2.7. Elke gebruiker van Bitcoin kan een private en een publieke sleutel combinatie genereren die bij elkaar horen. De private sleutel dient als extra invoer voor een hashfunctie zodat een unieke uitvoer kan worden gegenereerd. Samen met de private sleutel zou voor eenzelfde invoer steeds een andere uitvoer worden gegenereerd voor verschillende private sleutels met een identieke hashfunctie. Met de publieke sleutel kan dan geverifieerd worden dat de handtekening correct is en werd gegenereerd door de eigenaar van de private sleutel die bij de publieke sleutel hoort. De private sleutel moet steeds, zoals de naam aangeeft, privaat worden gehouden. Zou iemand toegang hebben tot deze private sleutel, dan zou deze sleutel kunnen worden gebruikt om transacties uit te voeren die niet werden geautoriseerd door de werkelijke eigenaar. Het veiligheidsmechanisme aan deze digitale handtekeningen is dat ze praktisch onmogelijk te vervalsen zijn. Een handtekening kan eenvoudig worden gemaakt met een private sleutel, maar een private sleutel kan niet binnen een realistische tijd worden afgeleid vanuit een digitale handtekening. Dit fenomeen wordt ook wel het discreet logaritme probleem genoemd [25]. Bij Bitcoin wordt de publieke sleutel van een gebruiker gebruikt om Bitcoins te associ¨eren aan een adres. De private sleutel dient dan om met de Bitcoins geassocieerd aan dit publiek adres transacties te kunnen uitvoeren.

Bij een nieuwe transactie wordt op basis van ´e´en of meerdere vorige transacties en de publieke sleutel van de nieuwe eigenaar van de valuta, een hash gegenereerd. Deze hash kan dan gezien worden als de ID van de nieuwe transactie. De hash wordt vervolgens met behulp van de private sleutel van de oude eigenaar van de Bitcoins ondertekend. Dit geeft dan een digitale handtekening die gebaseerd is op de hash van ´e´en of meerdere vorige transacties en de publieke sleutel van de nieuwe eigenaar. Deze handtekening wordt dan toegevoegd aan de nieuwe transactie. Door dit proces is het niet mogelijk dat gebruikers van het netwerk een transactie uitvoeren onder de naam van een andere gebruiker. Authenticiteit is daarom verzekerd.

Hoewel er voornamelijk werd besproken hoe geldtransacties werken. Is het belangrijk te weten dat er verder in ons onderzoek transacties met data gebeuren. Deze hebben uiteraard niet het probleem van valuta die dubbel kan gespendeerd worden. Daarnaast ook niet het probleem dat er geen valuta kan worden uitgegeven van andere gebruikers. Toch kunnen veel van deze principes ook gebruikt worden bij een blockchain met data transacties. Zo kan elke transactie ook steeds ondersteund worden door digitale handtekeningen. Op die manier is geweten dat de verstuurde data afkomstig is van die specifieke publieke-private sleutel combinatie. Daarnaast worden transacties (en ruimer bekeken, de blokken) ook nog steeds op mekaar gebaseerd omdat dit immers de fundamentele werking van een blockchain is.

Een volgend onderdeel van een blockchain is een consensus protocol of algoritme [24] tussen de knopen van het netwerk. Een goed consensus protocol is cruciaal voor een foutloze werking van de blockchain. Bij Bitcoin wordt gebruik gemaakt van het consensus algoritme Proof-of- Work. In dit onderzoek komen nog andere consensus algoritmes aanbod, echter is Proof-of- Work eenvoudig te begrijpen en daarom werd het gebruikt om een eerste voorbeeld van een consensus algoritme te geven. Bij Proof-of-Work wordt er een complexiteit toegevoegd aan het maken van geldige blokken. Zo een blok bestaat uit een blok hoofding (block header) en een blok kern (blok body). De blok hoofding bij Bitcoin bestaat uit volgende onderdelen [24]: ˆ Een blok versie, zodat een knoop weet welke regels hij moet volgen. Andere versies van

de blockchain implementatie kunnen immers andere regels hebben.

ˆ Een Merkle boom wortel hash. Dit is een hash waarde die alle transacties vertegenwoor- digd. De berekening hiervan is gebaseerd op de individuele hashes van elke transactie die in de blok is opgenomen.

ˆ Een tijdstempel of timestamp, de tijd toen de blok werd aangemaakt. ˆ Een getal nBits, het aantal nul bits van de hash.

ˆ Een nonce. Dat is een getal dat bij elke iteratie van de uitvoering van de hash functie aangepast wordt. Hetgeen dat zich in de blok bevindt, is hetgeen dat gebruikt werd bij de berekening van de hash van deze blok.

ˆ De hash van de voorgaande blok. Zo is de hash van elke blok steeds gebaseerd op de voorgaande blok(ken).

De blok kern bezit een transactie teller die het aantal transacties van een blok bevat en elke transactie zelf met hun corresponderende hash waardes. Een visuele voorstelling van blokken die aan mekaar gekoppeld zijn waarmee een blockchain wordt gevormd, wordt getoond op figuur 2.8.

Figuur 2.8: Een blockchain met in elke blok transacties

Bij Bitcoin moet voor elke blok een geldige hashwaarde worden gegenereerd met de SHA-256 hashfunctie. Deze hashfunctie genereert steeds een hash met een lengte van 256 bits. Een hashwaarde is geldig als het eerste aantal nBits (vermeldt in de header) uit allemaal nul bits bestaat. Dit is de eerder genoemde toegevoegde complexiteit. Deze hashwaarde wordt berekend op basis van de gehele blok en zal meerdere malen moeten uitgevoerd worden totdat een hash gevonden is met het benodigde aantal nul bits. Echter zal, zoals vermeldt in 2.3.2, een hash steeds dezelfde uitvoer genereren voor eenzelfde invoer. De inhoud van een blok zal niet zomaar veranderen. Om die reden wordt er een nonce toegevoegd. Die nonce wordt bij elke uitvoering van het algoritme aangepast waardoor er bij elke iteratie een nieuwe hashwaarde wordt verkregen, maar nog steeds gebaseerd op dezelfde blokinhoud. Wordt uiteindelijk een geldige hash gevonden (genoeg aantal nul bits), dan is dat een bewijs van rekenkracht die gespendeerd is aan het zoeken naar die hash (de proof van het geleverde work ).

Dit principe van een geldige hash zoeken bij Proof-of-Work wordt ook wel mijnen (mining) genoemd. Personen die zich actief bezighouden worden mijners (miners) genoemd en groe- peringen van mijners noemen mijners groepen (mining pools). De mijner of mijners groep die de eerste geldige hash vindt voor een nieuwe blok, kan dit uitzenden naar het blockchain netwerk. De andere knopen zullen dan valideren dat het inderdaad om een geldige blok gaat en deze toevoegen aan hun blockchain. Voor het vinden van een blok met een geldige hash wordt een beloning verkregen in de vorm van Bitcoins. Dit is ook de manier dat Bitcoins

initieel worden aangemaakt. Naast die beloning kunnen er ook aan transacties vergoedingen verbonden zijn. Deze kunnen toegevoegd worden door degene die de transactie verstuurd heeft. Een mijner krijgt dan een extra vergoeding als die transactie aan een blok werd toe- gevoegd waarvoor een goede hash gevonden werd. Door een extra vergoeding te geven is de kans groter dat een mijner de transactie in zijn blok opneemt. Zo kan een transactie sneller worden verwerkt. Gemiddeld wordt er bij Bitcoin elke 10 minuten een geldige hash gevonden. Stijgt het aantal mijners in het netwerk, dan stijgt ook de complexiteit. Het aantal nul bits dat moet gevonden worden stijgt samen met het aantal mijners in het netwerk. De kans om een geldige hash te vinden stijgt exponentieel volgens het aantal nul bits dat benodigd is. Op die manier blijft de gemiddelde verwerkingstijd van een transactie op 10 minuten ongeacht het aantal actieve knopen.

Tot slot wordt er besproken waarom een blockchain onveranderlijk is. Doordat elke blok de vorige hash bezit en daarop een nieuwe hash wordt berekend, blijkt het niet mogelijk om een blok in een blockchain aan te passen. Zou er zo een blok worden aangepast dan blijken alle daaropvolgende blokken niet meer geldig en moet voor elke blok de hash opnieuw worden berekend. Dit is een zeer tijdrovend proces en vereist daardoor ook een grote hoeveelheid rekenkracht. Stel dat het toch lukt voor een persoon om een blok te berekenen waarbij een valse transactie is ondergebracht, dan zou deze persoon dit moeten blijven doen om ervoor te zorgen dat andere knopen in het netwerk deze fork (= een ander pad in de blokketen) opnemen als de echte blockchain. Knopen volgen namelijk steeds de langste. Daarnaast is het bij Bitcoin ook zo dat er meestal wordt afgewacht tot er een zestal blokken geverifieerd zijn na een nieuwe blok, voordat de knopen die nieuwe blok als een geldige blok zien. Iemand zou zes keer na elkaar een hash met de juiste complexiteit moeten vinden en dat sneller dan het gehele netwerk. Volgens Satoshi Nakamoto [20] verlaagt die kans om een correcte hash te vinden exponentieel bij elke nieuwe blok. Zou deze persoon 51% van de rekenkracht van het netwerk bezitten, dan kan hij mogelijks een valse fork maken die langer wordt dan de echte blockchain [26]. Echter is de kans dat iemand zo een grote hoeveelheid rekenkracht bezit heel onwaarschijnlijk. Het zou voor een aanvaller weinig teruggeven voor de hoeveelheid dat er moet worden ge¨ınvesteerd in hardware om die hoeveelheid rekenkracht te bezitten.