2008 markeerde de start van de financiële crisis waarbij financiële instellingen en verzekeringsmaatschappijen op de rand van faillissement stonden, failliet gingen of met veel publiek geld overeind moesten worden gehouden. De omstandigheden riepen op tot onmiddellijke interventie van overheid om een complete, mogelijk wereldwijde, financiële inzinking tegen te houden. Deze belangrijke gebeurtenis voedde het wantrouwen van de bevolking tegen gecentraliseerde banken en legde het gevaar bloot dat financiële gegevens gesloten zijn voor het publieke. In december 2008 zorgde een datalek van RBS WorldPay ervoor dat zo’n 1,5 miljoen creditcardnummers bekend werden, waarvan er veel later werden gebruikt om frauduleuze aankopen te doen. Bank of New York Mellon verloor in 2008 gegevens van zo’n 4,5 miljoen klanten. Sony Online Entertainment Service werd in 2011 gehackt waarbij onder meer creditcard gegevens van 24,6 miljoen accounts werden buit gemaakt. Dat het risico nog steeds reëel is bewijst een recent lek bij Marriott hotels waar gegevens van een half miljard hotelgasten is buitgemaakt, waaronder ook creditcardinformatie, en de precieze omvang nog niet eens goed bekend is.

Deze gebeurtenissen illustreren de gevaren van ons leven in een digitale en verbonden wereld die afhankelijk is van tussenpersonen die transacties genereren en die mensen kwetsbaar maken voor digitale exploits, hebzucht en criminaliteit.

Er is daarom een uitdaging ontstaan hoe een continu beschikbare digitale infrastructuur te creëren waarop een digitale asset open en betrouwbaar kan worden overgedragen (in plaats van gekopieerd en gedeeld) van eigenaar naar eigenaar, zonder een centrale autoriteit die kan omvallen of gehackt worden, dus veilig is en tegelijkertijd te vertrouwen.

De start van de Bitcoin-blockchain

Waarschijnlijk in reactie op de historische context waarin het gebeurde, is op 3 januari 2009 een nieuw soort infrastructuur gecreëerd waarbij 50 digitale munten gewonnen en vastgelegd werden op een fraudebestendig grootboek dat is gerepliceerd op een gedecentraliseerd peer-to-peernetwerk van op internet aangesloten computers. Die 50 cryptocurrency-eenheden, bitcoins genaamd, werden geregistreerd als het genesisblok – de eerste link op wat bekend zou worden als de Bitcoin-blockchain.

Het opmerkelijke aan deze cryptocurrency op basis van een blockchain is dat een soort trustautoriteit of bestuur (zoals een bank of overheid) ontbreekt om elke transactie te valideren. Bovendien zijn er geen tussenpersonen nodig voor deze transacties, waardoor het mogelijk wordt om internationale transacties uit te voeren via een wereldwijd netwerk zonder intermediairs, zoals een makelaar of agentschap. Door het gebruikt van moderne cryptografie zijn de gegevens in de blockchain fraudebestendig en pseudoniem. En omdat een gegeven blockchain wordt gerepliceerd op elke node in het peer-to-peer-netwerk, is er geen single point of failure, waardoor de technologie beschikbaar en betrouwbaar is.

Sinds de lancering van Bitcoin ontwikkelen blockchain-technologieën zich snel. Bitcoin is inmiddels al lang niet meer de enige blockchain-toepassing. Er zijn intussen enkele duizenden cryptocurrencies die voortbouwen op Bitcoin of met de zelfde principes een compleet nieuwe blockchain-implementatie zijn gestart. Op platformen zoals Ethereum, NEO en EOSIO zijn nieuwe toepassingen ontstaan voor transacties van compleet andere aard. Hun implementatiedetails variëren enorm, waardoor de studie van blockchains dynamisch, uitgebreid en complex is. Inderdaad, de term “blockchain” is niet langer alleen van toepassing op Bitcoin in het bijzonder of op cryptocurrencies in het algemeen. Blockchains worden verfijnd en geperfectioneerd, zodat ze sneller en slimmer werken. Sommige blockchain-technologieën maken het via scripting mogelijk om slimme contracten te ondersteunen, waardoor aangepaste regels op transacties kunnen worden toegepast. Op deze manier zijn blockchains veranderd in een nieuw soort programmeerbare, hacker-proof opslagtechnologie. Dat is een reden is waarom IT-professionals, bedrijven, financiële instellingen en anderen erop aandringen om het potentieel ervan te benutten.

Als je de blockchain hype aan je voorbij hebt laten gaan of van de zijlijn (misschien met verbazing) hebt gadegeslagen, is het tijd om bij te praten. In dit artikel is het niet mogelijk om de alle technische details van een bepaalde blockchaintechnologie te bespreken – elke implementatie heeft haar eigen regels, functies en aanpassingen – maar de ideeën die we hier bespreken geven je inzicht in de technische basis waarop vele moderne blockchain-technologieën zijn gebaseerd.

Hoe werkt een blockchain?

De Bitcoin-blockchain is ’s werelds eerste praktische voorbeeld van blockchain-technologie. En vanwege dat onderscheid wordt “blockchain” vaak verkeerd begrepen als zijnde synoniem met Bitcoin. Het moderne aanbod van blockchaintechnologie houdt echter digitale assets bij, anders dan een digitale valuta, en die blockchains werken anders dan de manier waarop de blockchain van Bitcoin werkt. Daarnaast populariseerde de Bitcoin-blockchain het idee dat een blockchain een datastructuur is die een grootboek virtualiseert door transacties bij te houden en tegelijkertijd een creatieve, cryptografische oplossing biedt die de dubbele besteding van cryptocurrency-eenheden effectief blokkeert. Om deze reden raakten de termen “digitaal grootboek” (in het Engels: “digital ledger”) en “dubbele uitgaven” (ook wel “double spending”) geassocieerd met cryptocurrency-blockchains. Toch zijn deze voorwaarden grotendeels van toepassing op het volgen van het eigendom én het afdwingen van een enkele overdracht van digitale activa. Als je deze eigenschappen ziet, ga er dan niet van uit dat ze alleen verwijzen naar cryptocurrency-georiënteerde blockchain-technologieën.

In wezen is een blockchain een fraudebestendige gegevensstructuur die iets van waarde of interesse bijhoudt wanneer deze van eigenaar naar eigenaar wordt doorgegeven. Dat “iets” kan elke vorm van digitaal bezit zijn, zoals een digitale munt, een Word-document of het IMEI nummer van een mobiele telefoon. In feite kan elk item dat kan worden geassocieerd met een unieke digitale vingerafdruk worden bijgehouden op een blockchain. Blockchains lossen het zogenaamde ‘double-spend’-probleem op door te eisen dat het eigendom van een digitale asset wordt overgedragen in plaats van gekopieerd of gedeeld. Maar wat een blockchain-technologie interessant maakt, is dat het een protocol vaststelt, transactieregels afdwingt en in staat is om de knooppunten – de nodes – op zijn gedistribueerde netwerk van computers de hele operatie zelf te laten controleren. En dat werkt zelfs zonder centrale server of trustautoriteit, snel (nou ja, betrekkelijk snel) én wereldwijd (dat wil zeggen: internationaal). Deze belofte prikkelt diegenen die het zien als een manier om tussenpersonen te elimineren en transactiekosten te verlagen of op te heffen, waardoor handel efficiënter wordt voor zowel bedrijven als consumenten.

De belangrijkste componenten van een blockchain

Het Bitcoin blockchain-netwerk is openbaar: iedereen kan overal ter wereld deelnemen. Nieuwere blockchain-aanbiedingen, zoals de door Microsoft Azure gehoste blockchain, kunnen worden geconfigureerd als publieke, private of geautoriseerde netwerken. Blockchains worden als gedecentraliseerd beschouwd, maar die term moet worden verduidelijkt: zoals Vitalik Buterin uitlegt (https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274), betekent “gedecentraliseerde blockchains” dat ze “politiek gedecentraliseerd zijn (niemand controleert ze) en qua architectuur gedecentraliseerd zijn (geen “single point of failure” infrastructureel gebied). Maar ze zijn wel logisch gecentraliseerd. Er is één gemeenschappelijk overeengekomen status en het systeem gedraagt zich als een enkele computer.” Decentralisatie biedt fouttolerantie en weerstand tegen aanvallen. Hoe dat komt lees je later bij het punt van “proof-of-work”.

Om een openbare blockchain te ontwikkelen, is kennis nodig van cryptografische hashes, PKC (Public Key Cryptografie), binaire hash-ketens en consensusalgoritmen. Wat elk van deze termen betekent wordt hieronder kort uitgelegd. Daarna gaan we dieper in op de manier waarop een blockchain een hash-keten is die transacties bevat. Als je eenmaal dit concept van de hash-ketens hebt begrepen, zul je het fundamentele ontwerp van blockchain-technologie ook begrijpen.

Cryptografische hashes

Een hash-functie is een algoritme dat een bepaalde (grote) tekenreeks kan omzetten naar een kleinere tekenreeks. Deze output van de functie wordt de hash(-waarde) van de input genoemd. Een goede hash-functie heeft als eigenschap dat het niet mogelijk is om meer dan één blok inputgegeven te vinden dat dezelfde hash-waarde oplevert. Hoewel er veel one-way cryptografische hash-algoritmevarianten zijn, is een populaire keuze om gebruik te maken van SHA-256 (https://en.wikipedia.org/wiki/SHA-256). Deze one-way hash-functie accepteert een bericht van maximaal (264-1) / 8 bytes en geeft een hash-waarde terug van 32 bytes (64 hexadecimale tekens) in het decimale bereik van 0 tot ongeveer 1,16 x 1077. Als je ook maar een enkel teken in het bericht aanpast en de SHA-256 hash-waarde opnieuw berekent, genereert dit een geheel nieuwe hash-waarde. Als je eens wilt experimenteren, ga naar https://www.xorbin.com/tools/sha256-hash-calculator.

Gegeven dezelfde invoer, produceert het SHA-256 algoritme altijd dezelfde uitvoer met een vaste lengte. Met betrekking tot blockchain-technologieën is de nut van SHA-256 cryptografische hashes dat ze uniek genoeg zijn om te dienen als een soort digitale vingerafdruk, terwijl ze ook fungeren als een checksum. Bovendien kunnen hash-functies niet worden gedecodeerd. Bekijk maar eens de SHA-256-waarde voor het woord “blockchain”: ef7797e13d3a75526946a3bcf00daec9fc9c9c4d51ddc7cc5df888f74dd434d1. Gezien de hash-waarde is er geen praktische manier om het algoritmisch terug te zetten naar het oorspronkelijke woord. Er is wel een hacktechniek die gebruik maakt van tabellen die reeds berekende hash-waarden voor gewone strings bevatten, zoals ‘wachtwoord’, maar dat is niet algoritmisch de hash omkeren. Zoek maar eens op de hash-waarde van het woord “blockchain” en je komt erachter wat het woord is. Om dergelijke exploits te dwarsbomen, is het gebruikelijk om de string bij het hashen ook te verbinden met een willekeurige tekenreeks, de zgn. “salt value”.

Public Key Cryptografie

Een van de primaire functies van een blockchain is het kunnen vaststellen van het eigendom van een digitale asset. Zo’n digitaal gegeven is misschien niets of misschien wel miljoenen euro’s waard. De eigendomstest moet ervoor zorgen dat de eigenaarschap niet kan worden nagemaakt. Die test kan in de digitale wereld makkelijk worden uitgevoerd via het mechanisme van public/private keys. Hiermee kan een eigenaar zijn asset digitaal ondertekenen om het eigendom te bewijzen en dat eigendom laten overdragen. In tegenstelling tot symmetrische versleuteling, waarbij een enkele (en dus geheime) sleutel wordt gebruikt voor zowel het versleutelen als ontsleutelen van het bericht gebruikt asymmetrische cryptografie een sleutelpaar met een publieke (dus bij iedereen bekende) en een private (dus geheime) sleutel.

Omdat een accuraat validatiealgoritme van eigendom van digitale assets van essentieel belang is voor blockchains, gebruiken ze een public/private sleutelpaargeneratiestrategie die gebaseerd is op het Elliptic Curve Digital Signature Algorithm of ECDSA. Dit algoritme maakt onderdeel uit van de blockchain-software van het betreffende platform (of dat nu Bitcoin of Ethereum of een ander platform is). Wanneer het nodig is zal via ECDSA een cryptografisch sleutelpaar gegenereerd worden. De gebruiker moet een back-up van de privésleutel bewaren, omdat die sleutel nodig is om de waarde in een digitale asset dat op een blockchain is opgeslagen, over te dragen of te gebruiken. Als u alleen toegang hebt tot de private sleutel in een public/private sleutelpaar, kunt u de openbare sleutel opnieuw genereren, omdat er een wiskundige relatie tussen de twee sleutels bestaat. Maar de private sleutel kan niet worden gegenereerd met de openbare sleutel. Wat betekent dat als je slechts één sleutel back-upt, wees er dan zeker van dat het de private sleutel is. Zie het artikel https://blog.devtips.net/2018/12/21/public-private-keys-en-digitale-handtekeningen/ voor meer informatie over deze vorm van versleuteling en ondertekening.

Deze sleutels worden meestal op een van de volgende twee manieren gebruikt. De eerste use-case (zie figuur 1) is wanneer je wilt dat iemand je een gecodeerd bericht stuurt dat alleen jij kunt openen. Hiertoe geef je de andere persoon je openbare sleutel en vraag je deze te gebruiken om een bericht te coderen met behulp van software die een coderingsalgoritme toepast en een versleutelde tekst produceert. De tegenpartij stuurt je dan alleen die versleutelde tekst. Omdat ze je openbare sleutel hebben gebruikt om het document te coderen, moet je de bijbehorende private sleutel gebruiken om deze te decoderen.

Figuur 1 Public/private sleutels gebruiken wanneer u wilt dat iemand u een gecodeerd document / bericht stuurt dat alleen u kunt openen

De tweede use-case (zie figuur 2) is wanneer je een bericht wil coderen en je wil aantonen dat het inderdaad van jouw afkomstig is. Om dat te doen, gebruik je je private sleutel om een versleutelde versie van je document te maken. Vervolgens stuur je die versie naar iemand anders. Dan gebruiken ze jouw openbare sleutel om het te ontcijferen. Omdat alleen jouw openbare sleutel dat document kan decoderen, kan de ontvanger aannemen dat het document is gecodeerd met jouw private sleutel. Als je private sleutel niet op straat ligt, is het document van jou afkomstig.


Figuur 2 public/private sleutels gebruiken wanneer je iemand een gecodeerd bericht wil sturen en bewijzen dat het inderdaad van jouw is gekomen

Een derde use-case gebruikt een public/private sleutelpaar om het eigendom van een digitale asset te bewijzen via een digitaal ondertekeningsproces. In deze use-case (zie figuur 3) kan je je voorstellen dat Anouk een Word-document heeft gemaakt van een juridisch bindend document en dat zij dit naar Bert moet mailen. Bert wil er zeker van zijn dat de kopie van het document dat hij van Anouk ontvangt echt van haar is en dat de tekst onderweg niet is gemanipuleerd. Anouk maakt dan eerst een SHA-256 hash van het Word-document en neemt de waarde op als H(T). Vervolgens gebruikt ze haar private sleutel om deze hash-waarde te versleutelen, dus Enc(H(T)). Vervolgens verstuurt ze het Word-document (al of niet versleuteld, dat maakt niet uit), de uitkomst van Enc(H(T)) en haar publieke sleutel. Zo krijgt Bert dus een digitale handtekening van Anouk voor het document.

Figuur 3 public/private sleutels samen met een cryptografische hash om een document / bericht digitaal te ondertekenen

Bert kan de hash-waarde van het Word-document dat hij ontvangen heeft zelf berekenen. Met behulp van de publieke sleutel van Anouk die hij heeft ontvangen kan hij de waarde van T(W) terughalen die Anouk had gegenereerd (zie figuur 4). Als de hash die Bert heeft berekend gelijk is aan de gedecodeerde H(T) -waarde van Anouk kan Bert concluderen dat Anouk het document heeft ondertekend en dat de kopie die hij heeft ontvangen precies dezelfde is als degene die Anouk heeft verstuurd.

Figuur 4 public/private sleutels samen met een cryptografische hash om te controleren of een document / bericht is ondertekend door de juiste partij

Met behulp van hashing en public/private sleutelparen onderhoudt een blockchain een geschiedenis van eigendom van digitale activa met behulp van transacties. Transactiegegevens zijn aan elkaar gekoppeld en vormen een gegevensstructuur die we een hash-keten noemen. De manier waarop dit werkt, is dat elk transactieoverzicht het bericht (m) is dat gehashed is met behulp van functie (H) en vervolgens ondertekend met behulp van de private sleutel (s) van de eigenaar. In een formule ziet dat er als volgt uit. Het is gebruikelijk om “s” voor “geheim” te gebruiken, zijnde de private sleutel, niet te verwarren met “p” voor de openbare sleutel. Dit produceert een handtekening (sig):


sig = signature(H(m), s)

Wanneer een digitale asset wordt overgedragen van de ene eigenaar naar een andere, wordt de digitale handtekening ervan gecontroleerd, geverifieerd en digitaal ondertekend door de nieuwe eigenaar en vervolgens geregistreerd als een nieuw knooppunt op de hash-keten. Hoewel de details van de implementatie enorm variëren tussen blockchain-technologieën en -versies, is het basisidee hetzelfde voor al deze technologieën. Zoals bijvoorbeeld in figuur 5 is te zien, is Anouk de eigenaar van een digitale asset en gebruikt zij haar private sleutel om een overdracht van dat digitale bezit naar Bert te initiëren. Het transactierecord van Bert gebruikt de openbare sleutel van Anouk om haar handtekening te verifiëren. Hierna wordt de openbare sleutel van Bert gebruikt om het digitale item te ondertekenen, waardoor Bert de nieuwe eigenaar wordt. Hiermee wordt een nieuw transactie-record gemaakt, een nieuwe link op de hash-keten van de transactie.

Afbeelding 5 De keten van transactie-hashes maakt gebruik van digitale handtekeningen om eigendom van een digitale asset over te dragen. Elk transactierecord bevat een cryptografische backlink naar de vorige transactie in de hash-keten.

Deze hash-keten van transacties is cryptografisch beveiligd en fraudebestendig. Elke wijziging in transactie 0 zou ervoor zorgen dat Sig0 verandert, en dat zou een update van de hash-waarde die is opgeslagen in transactie 1 en elke volgende transactie op de hash-keten vereisen. Bekijk deze Youtube video voor een demonstratie: https://youtu.be/_160oMzblY8.

De transactieobjecten hier zijn gevuld met gegevens. De gegevens van elke transactie verschillen voor elke blockchain-implementatie. Het gaat erom dat je begrijpt dat de hash-keten een cryptografisch gekoppelde reeks transacties is, gekoppeld door de hash-waarde van de vorige transactieoverzicht van de eigenaar. In cryptocurrency blockchains bevat elk transactieobject een lijst met input en output van digitale valuta, samen met metagegevens, zoals een tijdstempel en optionele transactiekosten. Deze input en output van cryptocurrency bieden het transactiedetail dat nodig is om een financieel grootboek nauwkeurig te modelleren.

NB: Sommige blockchains bundelen transacties met een ander soort hash-keten: de binaire hash-boom. De hash-boom is uitgevonden door Ralph Merkle in 1979 en daarom worden hash-bomen ook wel Merkle-bomen genoemd. Een volledige Merkle-boom wordt een binaire boomstructuur genoemd omdat deze twee keer vertakt op elk niveau beginnend bij de wortel. Meer informatie over Merkle-bomen vind je hier: https://nl.wikipedia.org/wiki/Hash-boom

Een blockchain bouwen

Om een ​​blockchain te bouwen (zie figuur 7), moeten de binaire hash-keten van gegevensobjecten met transacties op de een of andere manier worden vastgelegd in een fraudebestendige gegevensopslag die iedereen kan gebruiken. Zoals je weet zijn de meeste blockchains publiek toegankelijk en is elke node op het netwerk in staat om te lezen en de schrijven naar de blockchain. Een hash-keten bevat transacties en is in principe fraudebestendig omdat de hashes ondertekend zijn. Dus het lijkt erop dat zo’n hash-keten als blockchain kan dienen. Maar er zijn wat problemen. Om ervoor te zorgen dat Anouk haar digitale asset naar Bert stuurt, moet Anouk de service of website vertrouwen die als een interface optreedt om haar verzoek om overdracht van digitale activa te verwerken, en moet ze de server vertrouwen die de hash-structuur aanhoudt. Zonder een centraal punt of autoriteit om een ​​nieuwe transactie te verwerken of te delegeren voor verwerking, zou elk knooppunt de lopende transactie van Anouk kunnen verwerken. Een dominant knooppunt met een superieure verwerkingskracht kan ongeldige of frauduleuze transacties tot gevolg hebben en deze kunnen doorgeven aan eerlijke nodes. Om dat probleem op te lossen, zou het netwerk kunnen proberen om willekeurig een node toe te wijzen om de transactie van Anouk te verwerken. Maar dat centraliseert opnieuw de controle en vereist het vertrouwen dat de willekeurige nummergenerator inderdaad willekeur afdwingt. Daarom gebruiken blockchains consensusalgoritmen, die hierna worden beschreven.

Figuur 7 De Blockchain is samengesteld uit blokken die op hun beurt geketende transactie-hashes bevatten. Blokken op de Blockchain zijn gelinked naar vorige blokken en worden gevalideerd met behulp van een proof-of-work algoritme.

Consensus-algoritmen

Blockchain-technologieën vermijden gecentraliseerde gegevensopslag en vertrouwensautoriteiten door een protocol te gebruiken dat bepaalt hoe blokken worden toegevoegd en onderhouden. Ze doen dit door een consensusalgoritme voor de opbouw van de blockchain af te dwingen. Er zijn verschillende soorten consensusalgoritmen. De belangrijkste twee zijn Proof-of-Work (PoW) en Proof-of-Stake. PoW wordt vooralsnog het meest gebruikt (alhoewel de nadelen hiervan zullen zorgen voor vervanging).

PoW is gebaseerd op het idee dat een node op het netwerk zijn eervolle intenties moet bewijzen door kosten te maken en de tijd te verspillen die nodig is om een ​​rekenkundig ingewikkeld probleem op te lossen. Om een ​​node te laten deelnemen aan een dergelijk systeem en volgens de regels te laten meespelen, biedt het netwerk een stimulans – vaak cryptocurrency – dat wil zeggen dat de beheerder van een node worden betaald wanneer ze een blok toevoegen aan de blockchain. Om die cryptocurrency te verdienen, moeten nodes alle transacties valideren om ervoor te zorgen dat ze voldoen aan de specifieke regels van een blockchain en vervolgens een cryptografische puzzel oplossen. Wat voor puzzel dat is wordt verderop besproken.

Je zou kunnen bedenken dat er centrale autoriteit is die willekeurig een node zou kunnen aanwijzen om een ​​reeks nieuwe transacties te verwerken. Die benadering zou een centrale generator van willekeurige getallen vereisen. Zo’n centraal punt kan falen, uitgeschakeld worden of gehacked. Een wiskundige puzzel die de nodes moeten oplossen levert het gewenste effect op: de node die de puzzel het eerst oplost kan niet van tevoren worden bepaald. Zo ontstaat er een soort node-loterij op het netwerk. Hoe meer rekenkracht, hoe meer kans je hebt om te winnen. Er is geen centrale autoriteit nodig – en dat is een van de belangrijkste innovaties van blockchain-technologieën. Deze PoW techniek kost tijd en geld vanwege de benodigde rekenkracht. Daardoor is het praktisch onmogelijk voor een enkele node of een groep nodes om samen te werken op het netwerk en een transactie-voordeel te hebben ten opzichte van andere nodes. In theorie is het mogelijk om een zgn. 51% aanval te organiseren waarbij een groep nodes 51% of meer van de rekenkracht verzamelt en zo de meeste kans te hebben op het “winnen” van een block. In de praktijk blijkt dat evenwel lastig (overigens: niet onmogelijk).

Niet alle nodes in het netwerk doen mee in de race voor het volgende block. Voor de Bitcoin blockchain is inmiddels heel veel rekenkracht nodig om de puzzel op te lossen. Daarom zijn er gespecialiseerde apparaten op de markt verschenen die als enige taak hebben om berekeningen, voor Bitcoin zijn dit SHA-256 hashes, uit te voeren. Andere nodes zijn er alleen maar om een exemplaar van de blockchain database bij te houden en verzoeken voor transacties te verzamelen. De zogeheten mining nodes halen van deze nodes de transacties op om mee te gaan rekenen.

Om een ​​transactieblok te construeren, grijpt een node alle niet-verwerkte transacties die zijn opgeslagen op het netwerk tot de omvang van een block in de blockchain. De maximale omvang van een block verschilt per blockchain. Voor Bitcoin is het maximum 1MB, maar bij andere blockchain-platformen is 2MB of zelfs 32MB mogelijk. Hoe groter een block hoe meer transacties erin passen en hoe sneller een transactie verwerkt kan worden. Het kandidaat-block bevat een lijst met transacties samen met een blockheader waarin onder meer een tijdstempel, de hash-waarde van het vorige block en de PoW-moeilijkheidsgraad. De puzzel die moet worden opgelost is de berekening van een nieuwe hash-waarde voor de transacties plus deze header. De moeilijkheidsgraad bepaalt met hoeveel nullen (0) deze hash moet beginnen. Je kunt natuurlijk het block niet veranderen om die gewenste hash-waarde te vinden. Het enige dat een node mag veranderen is een los getal, de zgn. nonce-waarde (zie figuur 7). In plaats van te proberen de nonce te raden, is het normaal om te beginnen met nonce 0, de SHA-256 hash te genereren en te bepalen of het gewenste aantal voorloopnullen wordt gehaald. Als dat niet het geval is, verhoogt het knooppunt de nonce-waarde en probeert het opnieuw. Na verloop van tijd zal een node op het netwerk deze puzzel oplossen. Wanneer dit gebeurt, wordt het nieuwe blok toegevoegd aan het einde van de kopie van de blockchain en wordt vervolgens het nieuwe blok naar elk andere node in het netwerk verzonden, zodat ze hun blockchain-kopie kunnen bijwerken . Wanneer een node een nieuw blok uitzendt, vertrouwen andere nodes er niet simpelweg op dat een nieuw blok geldig is – ze bewijzen het voor zichzelf door het blok te valideren. Om te valideren, verifieert een node de PoW-puzzeloplossing door de SHA-256-hash van het blok te berekenen, gekoppeld met de nonce-waarde, en verifieert dat het antwoord een hash oplevert met het aantal voorloopnullen gespecificeerd door de PoW-moeilijkheidswaarde van dat blok.

Overigens wordt op blockchains meestal de PoW-moeilijkheidsgraad voortdurend aangepast door het protocol, zodat nieuwe blokken aan de blockchain worden toegevoegd met een voorgeschreven tijdsinterval. Deze voortdurende aanpassing is nodig omdat er voortdurend knooppunten verschijnen en verdwijnen uit het netwerk en dus het gemiddelde rekenvermogen van de knooppunten altijd verandert. Vergeet niet dat in PoW er een stimulans is om blokken toe te voegen aan de blockchain, dus beheerders van nodes investeren vaak in hardware om te strijden voor de prijs. Op de Bitcoin-blockchain wordt de moeilijkheidswaarde elke 2016 blokken aangepast, zodat blokken met een gemiddelde snelheid van 10 minuten per blok worden toegevoegd.

Soms treden aftakkingen op. Dat komt omdat in een groot netwerk de uitbreiding van nieuwe blokken tijd kost. Het is mogelijk dat tijdens de propagatie een andere node zijn PoW-puzzel oplost, een nieuw blok toevoegt aan zijn kopie van de blockchain en vervolgens die blockchain uitzendt op het netwerk. Het ontvangen van knooppunten voegt altijd een geldig blok toe aan hun kopie van de blockchain en omdat elk blok cryptografisch verbonden is met het vorige blok, zullen twee nieuwe blokken die door twee verschillende knooppunten zijn gepubliceerd resulteren in een vertakking die aan het einde van het blok aan hetzelfde blok is gekoppeld. keten. Maar dat is geen probleem. Na verloop van tijd zullen nodes nieuwe blokken toevoegen aan het einde van wat het protocol als de ‘langste keten’ beschouwt. Bijvoorbeeld, gegeven een bepaalde aftakking kan de langste keten worden gedefinieerd als die met de meest recente block-tijdstempel. In de loop van de tijd zal een enkele branche de overhand hebben en blokken van verlaten (kortere) branches worden verwijderd, waardoor hun transacties terugkeren naar de pool van onverwerkte transacties.

NB: Bij Proof of Work krijgt dus degene die het meeste werk verricht de grootste kans om het probleem op te lossen de beloning. Bij Proof of Stake geld dat de node met de grootste ‘stake’ (bestaand uit het bezit van cryptocurrency) de grootste kans krijgt om het nieuwe block te maken. Deze node ontvangt ook een vergoeding voor het verwerken van de transacties op de blockchain. 

Samengevat

In dit artikel heb je gezien hoe een openbare blockchain werkt die bestaat uit cryptografisch gekoppelde blokken – elk met een eigen hash-keten van cryptografisch gekoppelde transacties – op een gedecentraliseerd peer-to-peer-netwerk van nodes. Dit zijn de de basisprincipes van blockchain-technologieën en zijn dus niet specifiek voor een enkele implementatie. Het zijn de meer typische technische functies die ze allemaal delen. Als je het onderwerp verder wilt verkennen, raad ik aan om een specifieke blockchain-technologie te kiezen, zoals Bitcoin, Ethereum of Dash, en de details van de specifieke implementatie ervan onder de knie te krijgen. Als je alleen wilt experimenteren met blockchains, bekijk dan de door Azure gehoste blockchain-aanbiedingen op https://azure.microsoft.com/nl-nl/solutions/blockchain/.

Meer informatie

https://azure.microsoft.com/nl-nl/solutions/blockchain/

https://blog.devtips.net/2018/12/21/public-private-keys-en-digitale-handtekeningen/

https://blockgeeks.com/guides/blockchain-developer/

https://azure.microsoft.com/en-us/blog/introducing-the-azure-blockchain-development-kit/