Dit weekend heb ik me eindelijk verdiept in de Bitcoin, door het lezen van de early release versie van het boek Mastering Bitcoin van Andreas M. Antonopoulos dat in december van dit jaar verschijnt. Het is technisch georiënteerd en naarmate de tekst vordert komen er steeds meer code snippets in naar voren die programmeerkennis in python of c++ veronderstellen. Als je, zoals ik, in geen tien jaar hebt geprogrammeerd, is dat een uitdaging, maar je leest er snel doorheen.
Het Bitcoin netwerk
Het principe van de Bitcoin is vervat in het slechts negen pagina’s tellende artikel van de mysterieuze Satoshi Nakamoto. Een wonder van elegantie en beknoptheid, en het lezen meer dan waard. Nakamoto ontwikkelde ook de eerste software ervoor en startte daarmee het Bitcoin netwerk. Op basis van hiervan is inmiddels een grootschalige industrie ontstaan van software ontwikkelaars, goudzoekers, ondernemers, criminelen en geïnteresseerden.
De Bitcoin is bedoeld als munteenheid voor het internettijdperk. Anders dan bij de bestaande geldsystemen is er geen centrale instantie (bijvoorbeeld een bank) die transacties controleert. Het bestaat uit een netwerk van computerprogramma’s die via het internet met elkaar in verbinding staan. Waarde gaat tegen een kleine vergoeding rechtstreeks van de ene naar de andere rekening over, zonder tussenpersonen en zonder gebruik te maken van beveiligde verbindingen. Er is geen koppeling tussen bankrekeningen en personen, en geen limiet aan het aantal rekeningen dat je kunt openen. Tenslotte is de totale hoeveelheid bitcoins begrensd, waarmee er, zo zegt men, geen inflatie zal optreden – for better or for worse.
Publieke en private sleutels
Bitcoin maakt gebruik van twee soorten sleutels (“keys”) die met elkaar zijn verbonden: publieke en private. De publieke sleutels kunnen worden gedeeld met anderen en zijn te vergelijken met bankrekeningnummers waar je geld naartoe kunt sturen. De ermee corresponderende private sleutel moet geheim blijven en wordt gebruikt om geld op te nemen (ofwel: door te sturen naar een andere rekening).
De Bitcoin kan niet kan bestaan zonder cryptografie, en in het bijzonder de hashfunctie: "Een hashfunctie [..] is een functie in de informatica die invoer uit een breed domein van waarden omzet in een (meestal) kleiner bereik, meestal een deelverzameling van de gehele getallen. [..] Een goede hashfunctie is er een die weinig botsingen veroorzaakt in het domein waarmee ze werkt, dit wil zeggen dat er weinig kans is dat twee verschillende invoerwaarden dezelfde uitvoer geven."
Door het gebruik van cryptografie kunnen uit een willekeurig, geheim getal (de private sleutel of private key) publieke sleutels (public keys) worden afgeleid die kunnen worden gedeeld, zonder dat je daaruit de corresponderende private key kunt afleiden. Uit de publieke sleutels worden vervolgens bitcoin adressen afgeleid, die je kunt vergelijken met bankrekeningnummers. De private sleutels worden opgeslagen in versleutelde digitale portemonnees (wallets), maar omdat het (lange) getallen zijn, kunnen ze ook worden geprint of zelfs in DNA worden gecodeerd.
Transacties
Een andere basis van de Bitcoin is de transactie. Alle waarde in het bitcoin-netwerk is vervat in transacties die bitcoins van het ene naar het andere adres sturen. De kleinste eenheid bitcoins die kan worden verzonden is 0.00000001 BTC (de Satoshi). Iedereen kan een transactie maken, die door de Bitcoin software automatisch wordt getoetst aan formele regels en aan de eerdere transacties. Daardoor kun je slechts geld overmaken dat je ook bezit. Elke valide transactie wordt automatisch en ogenblikkelijk door het gehele netwerk verspreid.
De digitale portemonnees hebben ingebouwde functies om valide transacties te maken. Ze bevatten, anders dan ik voor het lezen van dit boek dacht, géén bitcoins, maar slechts de geheime sleutels waarmee je transacties kunt autoriseren. Door middel van een digitale handtekening, gemaakt met je geheime sleutel, geef je ondubbelzinnig te kennen dat bitcoins van jou zijn. Zonder deze geheime sleutels heb je geen toegang meer tot je bitcoins – goed, maar ook veilig bewaren is het devies.
Het grootboek
Alle valide transacties worden na verloop van tijd opgetekend in een publiek toegankelijk grootboek, de blockchain; een bestand dat inmiddels meer dan 20Gb groot is en dagelijks groeit. Iedere deelnemer aan het Bitcoin netwerk kan de beschikking krijgen over de lijst met alle transacties die er sinds de uitvinding van de Bitcoin in 2009 zijn gedaan. Je wordt deelnemer (node) in het netwerk door software te installeren die in verbinding staat met andere nodes (zoals bij Napster of Bittorrent).
Ingenieus is het systeem om te voorkomen dat er transacties in het grootboek worden opgetekend die niet kunnen, zoals het uitgeven van bitcoins die er niet zijn of die niet van jou zijn, of het meermaals uitgeven ervan. Het netwerk vormt automatisch een consensus over de juiste versie van het grootboek, zonder externe autoriteit of controle. Dat gebeurt als volgt. Elke tien minuten wordt het grootboek uitgebreid met een aantal nieuwe transacties (een block) die allemaal worden gecontroleerd. Elk nieuw block verwijst naar het vorige, en bevestigt daarmee opnieuw alle eerder gedane uitbereidingen. Uitbereiden kost zoveel kostbare (computer)tijd dat het in de praktijk onmogelijk is eerdere transacties terug te draaien, zeker als die meer dan een uur geleden zijn opgetekend. Is het werk eenmaal geschied, dan kunnen alle nodes eenvoudig controleren dat het goed gedaan is, en wordt de uitbereiding geaccepteerd.
Proof-of-Work
Het uitbreiden van het grootboek gebeurt door zogenaamde miners. Dat zijn nodes in het netwerk die razendsnel zoeken naar een nog onbekend getal dat, via een cryptografische hashfunctie, een bepaald resultaat geeft. Het is van tevoren niet te voorspellen welk getal dat is en het enige dat erop zit is zo snel mogelijk willekeurige getallen te proberen. Dat is dan ook wat miners doen, met gespecialiseerde (dure) hardware en vaak in groepsverband. Het vinden van een oplossing houdt in dat er een bepaalde hoeveelheid computerkracht is ingezet, en wordt de ‘Proof of Work’ genoemd. Eén (groep van) miner(s) vindt als eerste een oplossing en ‘wint’ daarmee deze ronde, en krijgt als prijs een aantal bitcoins (momenteel 25), en daarnaast een transactievergoeding voor elke transactie die hij meeneemt naar het grootboek. Deze oplossing wordt onderdeel van het grootboek, en dan start er weer een nieuwe ronde. De moeilijkheid van de opgave (het vinden van het getal) wordt telkens zo aangepast dat het gemiddeld tien minuten duurt voordat een miner ergens ter wereld een oplossing vindt.
Alternatieven
Bij het maken van Bitcoin zijn een aantal bepalende keuzes gemaakt. Het feit dat er gemiddeld elke tien minuten nieuwe transacties worden opgeslagen in de blockchain is een keuze, evenals dat het aantal bitcoins dat daarbij vrijkomt elke vier jaar halveert, tot er rond 2140 geen nieuwe meer bij zullen komen. De eigenschappen van de ‘Proof of Work’ zorgen ervoor dat er alleen met zeer speciale hardware nieuwe blocks kunnen worden gemaakt. Door andere keuzes te maken krijg je systemen met andere eigenschappen, wat weer andere munteenheden oplevert als de Litecoin, de Bytecoin en de Darkcoin. Er zijn inmiddels meer dan 500 van deze alt.coins op de markt en het einde is niet in zicht.
Mastering Bitcoin besteedt geen aandacht aan de politieke en economische consequenties van de Bitcoin; daar is elders al veel over geschreven. Het raakt even aan de vele andere mogelijkheden die de Bitcoin en de daarvan afgeleide systemen hebben, onder meer voor het aangaan van contracten en het registeren van eigenaarschap. Niettemin geeft het de geïnteresseerde leek een goede indruk van wat hier is uitgevonden en hoe bijzonder dat is. De code in het boek ging voor mij hier en daar te ver, maar wat blijft hangen is dat de principes van Bitcoin nog zullen blijven bestaan, lang nadat de laatste Bitcoin uitgegeven is.