In de weekendbijlage van een gemiddelde krant staat bijna wekelijks een artikel over bitcoin en blockchain. Vooral door de flinke waardestijging van de bitcoin, de digitale munt die sinds 2009 bestaat. Inmiddels meer dan zesduizend euro waard, ruim vijf keer zo hoog als op 1 januari 2017. Maar achter de bitcoin schuilt technologie genaamd blockchain. En hierin zit pas echt de vernieuwing. Een introductie op bitcoin en blockchain.
In 2008 verscheen een paper van Satoshi Nakamoto (een pseudoniem) genaamd ‘Bitcoin: A Peer-to-Peer Electronic Cash System’, waarin een platform werd beschreven waarmee veilig elektronische betalingen kunnen worden uitgevoerd, rechtstreeks tussen 2 partijen. In 2009 is dit platform live gegaan en daarmee was de bitcoin geboren. Acht jaar later is bitcoin verreweg de grootste (in marktkapitalisatie) digitale munt: meer dan 60 miljard euro. Dat Bitcoin tot deze omvang is gekomen, heeft alles te maken met de onderliggende technologie blockchain. En blockchain biedt veel meer mogelijkheden dan digitale munten, zoals smart contracts en Dapps.
Bij het creëren van een digitale munt spelen een aantal uitdagingen:
- hoe voorkom je ‘double spending’: iemand probeert dezelfde ‘munt’ twee keer uit te geven;
- hoe voorkom je de noodzaak van vertrouwen hebben in een andere partij (de bank);
- hoe voorkom je dat iemand kan frauderen met transacties;
- hoe voorkom je dat iemand het netwerk ter gronde kan brengen.
Door een ingenious decentraal, open platform te ontwikkelen, gebruikmakend van cryptografie, zijn al deze uitdagingen ondervangen. Maar hoe dan?
Blockchain
Zoals het woord al doet vermoeden is de blockchain een ketting van blokken. Blokken van transacties. Het kan het best beschreven worden als een decentraal, open, niet wijzigbaar grootboek. Een grootboek is niets meer dan een lijst met transacties die uitgevoerd zijn. Nieuwe transacties worden onderaan toegevoegd en wijzigen van eerdere regels is niet toegestaan. En waarom biedt een dergelijk grootboek dan een oplossing voor eerder genoemde uitdagingen?
Allereerst is er gekozen voor een decentrale opzet, waarin alle partijen die meedoen aan de blockchain een letterlijke kopie van dit grootboek hebben. Van de allereerste transactie tot de meest recente. Al deze partijen, nodes genaamd, distribueren alle toevoegingen (nieuwe transacties) naar elkaar. Er is dus geen centrale partij die de waarheid beheert. Iedereen heeft de waarheid en heeft daardoor ook inzicht in frauduleuze activiteiten van een andere partij, doordat wijzigingen van een ander niet meer corresponderen met het eigen grootboek. Er is dus geen vertrouwen in een centrale partij nodig, en het platform is vrijwel niet plat te leggen (dit lukt alleen als alle nodes zijn platgelegd). Naast de decentrale opzet gebeurt dit door de inzet van cryptografie en een consensus-aanpak. Laten we eens inzoomen hoe dit werkt.
Cryptografie
Om deel te kunnen nemen aan een blockchain platform is een wallet nodig. De digitale vorm van een portemonnee, waarmee je transacties kunt uitvoeren en munten (cryptocurrencies) kunt bewaren. Een wallet werkt met een combinatie van een public en private key. Op basis van je public key wordt een address gemaakt. Dit adres (vergelijkbaar met een e-mailadres) gebruik je voor betalingen. Iedereen kan bijvoorbeeld bitcoins naar je overmaken door simpelweg dit adres te gebruiken. Je private key wordt (door je wallet) gebruikt om transacties uit te voeren. Beschouw je private key als je pincode. Wanneer je deze kwijt bent, kun je onmogelijk meer bij de inhoud van je wallet. En indien iemand de beschikking heeft gekregen over je private key, kun je je wallet als gestolen beschouwen.
Door elke transactie te ‘signeren’ met een private key, kunnen de nodes deze transactie controleren met de bijbehorende public key. Alleen deze combinatie van keys ‘passen’ op elkaar. Hierdoor wordt gegarandeerd dat de transactie alleen kan worden ingegeven door de eigenaar van de private key: de bezitter van de betreffende bitcoins. En door niemand anders. Maar hoe voorkomen we nu dat er met de inhoud van de transactie wordt gesjoemeld? Door gebruik te maken hashing.
Hashing en blocks
Een hash is een deterministische functie die een ongelimiteerde invoer kent, en altijd een uitvoer kent van een vast aantal cijfers en letters. Bied je twee keer een identieke tekst als invoer aan, dan is de uitvoer exact gelijk. Verander je één letter, dan is de uitvoer totaal verschillend. Probeer het hier. En hoe komen deze transacties nu terecht in een block?
Alle transactieverzoeken worden in een blockchain doorgegeven naar alle nodes. In plaats van het verwerken van transacties bij binnenkomst, worden vele transacties verzameld in een block. Dit block wordt als geheel toegevoegd aan de blockchain. Er is slechts één node die het eerstvolgende block mag toevoegen aan de blockchain. En om te bepalen wie dat is, moeten de nodes een ingewikkelde puzzel oplossen. Degene die als eerste deze puzzel oplost, mag het volgende block toevoegen en krijgt een beloning: 12,5 bitcoin (op dit moment). Dit is tevens de enige manier waarop nieuwe bitcoins in omloop komen. Naast de beloning stuurt men ook een fee mee met een transactieverzoek. Op basis van deze fees wordt bepaald welke transacties prioriteit krijgen (de hoogste fees). Deze fees zijn ook voor de node die het block mag toevoegen. Dit oplossen van een puzzel wordt mining genoemd.
Consensus door proof of Wwork
De puzzel die opgelost moet worden is weer een hash, maar dan zodanig dat er gezocht moet worden naar een hash met een specifieke uitkomst. Namelijk een hash-uitkomst van de inhoud van het block, die moet beginnen met een x-aantal nullen. Doordat op voorhand de uitkomst van een hash-functie niet is te bepalen, kan een node (een miner) de puzzel alleen oplossen door zoveel mogelijk keren te proberen. Dit doen de miners door de waarde van een speciaal veld nonce steeds met één te verhogen. Doordat daarmee de invoer van de hash verandert, is de uitkomst ook elke keer anders.
Omdat er een enorme hoeveelheid pogingen gedaan moet worden om een geldige uitkomst (startende met een x aantal nullen) te vinden, wordt dit ‘proof of work’ genoemd. De miner heeft er enorm veel werk (en dus elektriciteit) in moeten steken om de uitkomst te vinden. Als beloning ontvangt deze miner de nieuwe bitcoins en kan het block worden toegevoegd aan de keten. Alle andere miners controleren de uitkomst door de hash van het block te controleren, alvorens deze zelf ook toe te voegen.
Ongeldige blocken worden door de andere miners niet geaccepteerd (en daarmee de beloning ook niet). Het aantal gezochte nullen bepaalt de moeilijkheid. Deze wordt dynamisch bepaald om de toenemende rekenkracht te compenseren. Gemiddeld wordt een block in tien minuten ge-mine-d, waardoor afgedwongen wordt dat de miner er flink energie in heeft gestoken.
Indien twee miners vrijwel gelijktijdig een oplossing vinden, ontstaat er een afsplitsing. In het netwerk zijn nodes die oplossing één als eerstvolgend block hebben opgevoerd, en er zijn nodes die oplossing twee als eerstvolgend block hebben opgevoerd. Doordat er een verschil zit in oplossingsnelheid van de puzzels, zal een van beiden op een gegeven moment meer blokken bevatten dan de andere. Hier geldt dat de langste ketting (longest chain) wint. De kortere rij blokken verdwijnt en de transacties in deze blokken worden aan nieuwe blokken toegevoegd. Ook de beloningen voor deze blokken vervallen, wat ervoor zorgt dat er een incentive is voor miners die altijd kiezen voor de longest chain.
Veiligheid
De inzet van cryptografie, decentralisatie en proof of work heeft een aantal belangrijke functies:
- Vooraf is niet te bepalen wie de proof of work wint. Dus wil je een frauduleuze transactie doorvoeren kun je je niet richten op een specifieke miner.
- Alle andere miners controleren het toegevoegde block. En alleen wanneer de meerderheid het block overneemt, is het een geldig block. Een kwaadwillende zal dus minimaal 51 procent van de nodes moeten bezitten (wat vrijwel onmogelijk is).
- Een fraudeleuze transactie kan worden doorgevoerd door te proberen zelf de longest chain te bemachtigen. Hiervoor is minimaal 51 procent van de rekencapaciteit nodig. Dit vergt een enorme investering in hardware en elektriciteit. Met de huidige omvang lijkt dit vrijwel onmogelijk.
- Het aanpassen van een transactie in een eerder goedgekeurd block is niet mogelijk, omdat daarmee de hash van het block verandert. En deze hash wordt weer als input meegenomen in de hash van het volgende block. Het wordt duidelijk dat het aanpassen van een transactie achteraf direct opvalt in het netwerk.
Sinds de start is de veiligheid gebleken. Het is vrijwel onmogelijk om 51 procent van de rekencapaciteit te controleren. Nog nooit is Bitcoin gehackt of uitgevallen. Wel zijn er hacks geweest, echter altijd in de software bovenop de Bitcoin: vaak wallets en exchanges. Deze werden gehackt waardoor private keys gestolen werden, en daarmee bitcoins. Het is zaak de private key dusdanig te bewaren dat deze ongevoelig is voor hacks!
Nadelen
Bitcoin en blockchain zijn platformen die geweldige mogelijkheden (gaan) bieden, vergelijkbaar met de opkomst van internet rond 1994.
Wel zijn er ook een aantal nadelen aan de werking van Bitcoin, zoals we die nu kennen:
- De proof of work kost enorm veel energie. Er zijn schattingen dat in 2020 het Bitcoin-netwerk net zoveel energie verbruikt als heel Denemarken. Er wordt dan ook gekeken naar een alternatieve manier: de proof of stake.
- De gebruiksvriendelijkheid valt nog tegen. Enerzijds erg technisch (keys, wallets en adressen) en anderzijds valt er bijna nergens te betalen met bitcoin.
- Ook wordt de schaalbaarheid bediscussieerd. Een block kan maximaal 1MB groot zijn. Dit houdt in dat er maximaal zo’n 7 transacties per seconden kunnen worden uitgevoerd. Veel te weinig voor grootschalig gebruikt.