De techniek achter de blockchain

Jeroen 16 augustus 2018
Door Jeroen

De techniek achter de blockchain

In dit artikel leg ik de basis uit van de blockchain, hoe de techniek werkt, en wat de blockchain uniek maakt vanuit een technisch perspectief. Er bestaan vele implementaties van een blockchain, ik zal dit artikel baseren op de meest bekende implementatie; de bitcoin.

Cryptografie

Om een goede uitleg te geven over de blockchain is het goed om wat basisbegrippen van cryptografie te kennen:
Hash: Een hash is een gegenereerde code die uniek is voor een tekst/bestand. Wanneer de bron wordt aangepast zal de hash compleet wijzigen. Het is (praktisch) onmogelijk om een hash om te keren. Hashes worden vaak gebruikt om wachtwoorden op te slaan. 
Symmetrische encryptie: Het versleutelen van een tekst/bestand met een sleutel, de versleutelde tekst is niet zonder deze sleutel te lezen.
Asymmetrische encryptie: Deze vorm van encryptie heeft 2 sleutels, één publieke sleutel en één privé sleutel. Wanneer tekst versleuteld is met de privé sleutel kan deze gelezen worden met de publieke sleutel. Tekst versleuteld met de publieke sleutel kan enkel met de privé sleutel gelezen worden, de bekendste toepassing hiervan is SSL.

Een transactie

De bekendste functionaliteit van een blockchain is het betalen met bitcoin, dit wordt gedaan door middel van transacties. De blockchain wordt ook wel eens een gedistribueerde transactie-database genoemd.

Iedereen die een transactie wil maken heeft een privé sleutel (reeks van 64 tekens) en een bitcoin-adres (reeks van 32 tekens). Wanneer ik een transactie wil doen naar een ander bitcoin-adres wordt deze ondertekend/encrypted met mijn privé sleutel, dit zorgt ervoor dat de transactie alléén met mijn adres (=publieke sleutel) ontsleuteld kan worden. De transactie wordt naar het bitcoin-netwerk gestuurd en zal gevalideerd worden. Wanneer de transactie gevalideerd is door het netwerk zal deze in het block geplaatst worden.

Een block

De blockchain bestaat (zoals de naam al zegt) uit blokken data, alle blokken zijn aan elkaar gekoppeld als de schakels van een ketting. 

Bitcoin Blockchain (Bron: bitcoin.org)

Ieder block bestaat uit een blockheader en een lijst met transacties.

De blockheader

De blockheader bevat informatie over het block en zijn plaats in de blockchain, de blockheader van een bitcoin-block heeft de volgende velden:

Version: versienummer van het protocol
HashPrevBlock: hash van de header van het vorige block
HashMerkleRoot: hash op basis van alle transacties in het block
Time: timestamp op het moment dat het block gegenereerd werd
Bits: het huidige doel voor een "miner"
Nonce: getal dat de "miner" heeft gevonden

De velden HashPrevBlock en HashMerkleRoot zorgen ervoor dat de blockchain integer en onveranderlijk is; wanneer de data binnen een block wordt aangepast zal de "HashMerkleRoot" waarde niet meer geldig zijn omdat de hash van de data is veranderd. Wanneer de header van het block gewijzigd wordt (om bijvoorbeeld de waarde van "HashMerkleRoot" te wijzigen) zal de "HashPrevBlock" in het volgende block niet meer kloppen en is de Nonce niet meer juist (daarover meer onder het kopje mining). 

Dit zorgt ervoor dat de data in de blockchain niet gewijzigd kan worden, er kunnen nieuwe transacties/data toegevoegd worden, maar historische data zal altijd integer, onveranderlijk en te valideren zijn.

Transacties

Een block bevat een lijst met transacties en per bitcoin-transactie worden de volgende velden bijgehouden:

Input: Adres(sen) van de verzendende partij(en) met een waarde in bitcoin.
Output: Adres(sen) van de geadresseerde(n) met een waarde in bitcoin. 

Per block bestaat er een transactie zonder Input adres, deze transactie bevat de beloning voor de miner. Het adres van de miner zal in de output komen van deze transactie. 
Het totaalbedrag van de input moet gelijk of groter zijn dan het bedrag van de output, wanneer dit bedrag groter is zal het restant naar de miner gaan, dit wordt ook wel "fee" (fooi) genoemd.

Op deze manier is iedere transactie die ooit gedaan is met de blockchain in te zien en kan er geen censuur worden toegepast of fraude worden gepleegd. Er zijn verschillende websites om de bitcoin blockchain te doorzoeken, hier zie je bijvoorbeeld de blocks die laatst gemijnd zijn en kan je inzien welke transacties zijn gedaan.

Mining

Mining is het proces wat gebruikt wordt bij bitcoin om transacties te persisteren en nieuwe bitcoins te genereren. Om bitcoin te verdienen moet er wat intensief rekenwerk gedaan worden, dit wordt "Proof of work" genoemd. Mining is optioneel voor een blockchain en wordt eigenlijk alleen door "cryptocurrency" toegepast. De velden "Bits" en "Nonce" in de blockheader worden hier voor gebruikt.

Het veld "Bits" geeft een waarde aan waar de hash van het block onder moet komen te liggen. De miner kan door het "Nonce" veld aan te passen iedere keer een nieuwe hash krijgen. De miner heeft een block gewonnen wanneer het een "Nonce" heeft gevonden die zorgt voor een hash met een waarde lager dan het "Bits" veld.

Wanneer een block gewonnen is staan alle transacties hierin voor altijd vast, de ontvanger van mijn transactie zal de ontvangen bitcoin weer kunnen gebruiken voor een nieuwe transactie.

Waarom de blockchain?

Na deze uitleg vraag je je misschien af waarom het zo moeilijk moet zijn; met een centrale server zou het implementeren van betalingen en transacties een stuk eenvoudiger zijn. De blockchain heeft een aantal voordelen die essentieel zijn voor bitcoin en ook voor andere toepassingen nuttig kunnen zijn;

  • Altijd bereikbaar: Door het decentrale karakter van de blockchain is er geen centrale server die het hele netwerk offline kan halen.
  • Fraude en censuur onmogelijk: Omdat er geen centrale autoriteit is en de blockchain onveranderlijk is, kan niemand frauduleuze transacties doen of censuur toepassen.
  • Vertrouwen:  Het enige vertrouwen dat een gebruiker hoeft te hebben is het vertrouwen in de techniek, geen partij (ook niet de miner!) kan invloed uitoefenen op de transacties.

Naast deze voordelen zijn er ook een aantal nadelen die ervoor zorgen dat de blockchain geen oplossing voor alle is;

  • Correcties of wijzigingen zijn onmogelijk: Wanneer een transactie in de blockchain staat, zal deze nooit meer gewijzigd kunnen worden. De enige oplossing is het toevoegen van een correctie-transactie.
  • Verbruik elektriciteit en bandbreedte: Vergeleken met het client-server model heeft de blockchain meer complexe taken uit te voeren en wordt dit gedaan over verschillende miners, hierdoor wordt het totale energie- en netwerk-verbruik van het netwerk een stuk groter.
  • Snelheid: Op dit moment duurt het valideren en persisteren van een bitcoin transactie zo'n 10 minuten, op pieken kan dit uren duren.
  • Ontwikkeling en updates: Het ontwikkelen aan een blockchain applicatie is lastig, er zijn weinig ontwikkelaars die ervaring hebben met de blockchain, er moet uitgebreid getest worden, het maken van een fout kan grote gevolgen hebben en het vertrouwen van de gebruiker schaden. Het uitbrengen van een update moet over het gehele netwerk gebeuren en kan daardoor erg lang duren.
  • Alles inzichtelijk: De data op de blockchain is voor iedere node/miner in te zien, dit zorgt ervoor dat er niet zomaar vertrouwelijke of privary-gevoelige informatie op de blockchain geplaatst kan worden.

Toepassingen blockchain

De bitcoin is de eerste en meest bekende use case van de blockchain. Mede door het succes van de bitcoin en de unieke eigenschappen van de blockchain wordt er veel onderzoek gedaan naar toepassingen waarvoor de blockchain nog meer geschikt kan zijn.

Een aantal voorbeelden van (mogelijke) toepassingen zijn:

Bronnen