Investeringsfonds opgelicht
Hoe kon een financieel volstrekt oninteressant investeringsfonds in de afgelopen week alle soorten media halen? Door simpelweg bestolen te worden. In normalemensengeld uitgedrukt ging het om een zeer groot bedrag; onbekenden wisten zo'n 50 miljoen van The DAO te stelen. Alleen ging het niet om een bekende munteenheid, zoals de euro, het ging om ether, de cryptomunt van een netwerk met de naam Ethereum en het fonds The DAO. Dat laatste bestaat bij de gratie van de blockchain van de eerste, een geavanceerdere versie van veel andere blockchains, zoals die van de bekendste cryptomunt: de bitcoin.
Waarschijnlijk zijn er nu al een of twee woorden langsgekomen waarvan velen nog nooit gehoord hebben of alleen vaag. Om door te dringen tot de reden waarom zo veel grote organisaties, van Microsoft en IBM tot ABN Amro en ING, geïnteresseerd zijn in de blockchain, is de 'diefstal' bij The DAO interessant, vooral omdat The DAO de eerste grote applicatie in de vorm van een 'smart contract' is die het grote publiek bereikte.
Voordat we kijken naar wat er bij The DAO gebeurde, is het goed om stil te staan bij wat zo'n blockchain of blokketen ook alweer is, waarom bitcoin voor sommigen een negatieve klank heeft en waarom al die instellingen er toch zo gretig op zijn gedoken en er intussen miljoenen in investeren.
Blockchains, hoe zit dat ook al weer?
Een blockchain is te vergelijken met een grootboek om transacties in vast te leggen. Het grote verschil is dat een blockchain over het algemeen niet centraal wordt aangestuurd. Dit betekent dat het zeer moeilijk is om informatie te vervalsen. Dat laatste klinkt natuurlijk als muziek in de oren van instellingen die met waardegegevens werken, zoals het kadaster, een notariskantoor of een bank.
De eerste blockchain was die van Bitcoin en deze zag eind 2008 het levenslicht in de vorm van een artikel. Niet lang daarna, op 3 januari 2009, kwam de software om bitcoins mee te maken, op te slaan en te distribueren naar buiten.
Die software fungeert als een wallet, een digitale portemonnee voor alle transacties van de gebruiker, en als node, om het bitcoinnetwerk in stand te houden. Binnen dat netwerk hebben alle nodes een volledige kopie van de blockchain, die bestaat uit blocks, blokken met transacties. Elke transactie draagt een timestamp met zich mee. Omdat elke node elke transactie moet doorrekenen en bekijken voordat hij een transactie aan een block toevoegt, is het systeem zeer veilig. Met andere woorden, het grootste deel van de rekenaars moet het met elkaar eens zijn en daarna wordt pas een transactie aan een nieuw block toegevoegd. Wil je stiekem een block met daarin malafide transacties toevoegen, dan gaat dat mis.
De goede oude bitcoin-blockchain is vrij rechttoe rechtaan. Er zijn de header van het block en de inhoud. In de header staan onder andere de timestamp en een verwijzing naar het vorige block. Door die verwijzing kan een transactie niet twee keer gedaan worden, want dat zou worden opgemerkt door de nodes die meehelpen aan het verwerken van de data.
Elke koppeling tussen de blocks bestaat uit een hash die maar één kant op te berekenen is. Daardoor kan niemand ergens een block tussenin wijzigen, omdat de rest van de keten dan niet meer klopt en er geen overeenstemming kan bestaan.
Om het netwerk zo veilig mogelijk te maken, is het belangrijk om zo veel mogelijk rekenkracht te gebruiken, want dan worden de berekening moeilijker en het aanpassen van een block lastiger. Bij bitcoins en de meeste andere cryptocurrencies kun je een full-node draaien en meerekenen, maar de echt grote rekenkracht komt van miners. Die krijgen voor hun inspanningen elke keer een klein beetje van de cryptomunt uitgekeerd.
Bron: Wikipedia
Transacties doen
Hoe krijgt je oma dan een bitcoin bij jou? Het gaat daarbij eigenlijk om de transactie die wordt vastgelegd. Je hebt dus geen kluis met digitale munten op je computer staan, maar het bewijs van de transactie en die duiden we aan als bitcoin. Elke gebruiker heeft daarvoor publieke en privésleutels. Door een publieke sleutel, of eigenlijk de sha256-hash, van je eigen wallet aan oma te geven, kan zij vanuit haar wallet een transactie in gang zetten vanaf een publieke sleutel van haar kant. Zij kan die transactie doen doordat zij die ondertekent met haar private sleutel. Gelukkig hoeft niemand daar verder zelf aan te zitten bij normaal gebruik. Je moet de sleutels vooral niet kwijtraken. Op die manier kan iedereen zonder tussenkomst van een derde partij een betrouwbare transactie doen.
Een andere eigenschap van bitcoins is dat de betaling naar een 'script' kan gaan. Een dergelijk script kan bijvoorbeeld gebruikt worden om voor betalingen te eisen dat verschillende mensen ze goedkeuren. In dat geval worden sleutels onder verscheidene partijen verdeeld. Een transactie wordt pas in gang gezet nadat twee van de drie partijen haar hebben goedgekeurd en zo kunnen er meer eigenschappen aan gekoppeld worden.
Dingen vastleggen
Veilig, betrouwbaar, zeer moeilijk om te wijzigen en openbaar inzichtelijk: ideaal voor het vastleggen van van alles en nog wat in transacties. Notarissen zouden overbodig worden, identiteiten hangen niet meer aan roze papiertjes en de veiligheid van gegevens van patiënten kan beter gewaarborgd worden. Zo zijn er al legio bedrijfjes bezig met het zoeken naar andere functies binnen blockchains, zoals Ascribe, dat probeert om het bezit van digitale kunst vast te leggen zodat je kunt zeggen: ik was de eerste die het kocht.
Langzaam wordt duidelijk waarom blockchains al snel mochten rekenen op de grote interesse van banken en andere instellingen die zich bezighouden met identiteiten, contracten en financiële transacties.
Ethereum
Er kan al heel wat meer met de betrekkelijk simpele bitcoin-blockchain dan alleen geld overmaken. Ethereum is net als veel alternatieve cryptovaluta gebaseerd op het blockchainconcept van Bitcoin, met één groot verschil, namelijk dat de scripts in de Ethereum-blockchain veel complexer kunnen zijn. De gebruikte scripttaal voor de Ethereum-blockchain is Turing complete. Dat betekent dat deze scripttaal werkt als een gewone computertaal. Talen als Java, Pascal, C++ en Prolog zijn Turing complete. Html, wat een mark-uptaal is, of json zijn dat bijvoorbeeld niet.
Bij Ethereum kunnen dus in principe echte programma's uitgevoerd worden, al zijn ze wel vergelijkbaar met hoe de scripts van Bitcoin werken; zonder vergoeding doen ze het niet. Dit is vergelijkbaar met de miner-vergoeding om de transactie van oma door te voeren. Als oma er zeker van wil zijn dat de transactie snel, zeg binnen 25 berekende blocks, wordt meegenomen, moet ze 0,00016702 bitcoin extra overmaken. Daarna is de transactie rond en is het verhaal klaar.
Ethereum kan in zijn blockchain daadwerkelijk een programma uitvoeren. Een rekenmachine kun je de opdracht geven om 1+1 uit te rekenen, maar in de 'wereldcomputer' moet daarvoor overeenstemming worden bereikt om op 2 uit te komen. Binnen de computerwetenschappen heet dit ook wel consensus computing. Bij een consensuscomputer hoeven niet alle nodes in een netwerk dezelfde uitkomst te hebben, maar wel het grootste deel. Hierin wijkt de betekenis van het woord af van het 'normale' woord consensus. Dit werkt zo, omdat sommige nodes in het netwerk de berekening niet zullen afmaken, bijvoorbeeld door een stroomstoring, of door een fout op een ander getal uitkomen. Dat is niet erg, want de consensus komt uit op 2. Met andere woorden, het is een deterministische computer.
Als deze berekening via een zwaarlijvig script loopt, moeten alle computers relatief hard rekenen en kost het dus veel rekentijd. Die rekentijd kost bij Ethereum ether, de munteenheid van het Ethereum-netwerk. Om die som uit te laten rekenen is dan ook ether nodig; in jargon heet dat 'gas'. Hoe langer er gerekend moet worden, hoe meer het kost. Als de aanvrager van de rekentijd te weinig gas levert, dan stopt de berekening op den duur.
Klassieke blockchain
|
Ethereum
|
Adressen
|
Adressen + dataopslag + code
|
Balans met 'eigen' coin
|
Balans met ether + applicatiespecifieke tokens met een specifiek gedrag
|
Transacties
|
Transacties + het creëren van contractcode + het ophalen van contractcode
|
Blocks: gebundelde transacties
|
Blocks: 'transacties' + 'nieuwe staat' van hele systeem
|
Huis huren
Een Ethereum-script kun je zo ingewikkeld maken als je zelf wil. Dat heet dan ook smart contract, al bestaat er discussie over die term. Met een slim contract leg je afspraken vast en via dat slimme contract is de uitvoering af te dwingen. Daarin kun je heel ver gaan en zelfs een hele organisatie maken die geheel en al functioneert vanuit de Ethereum-blockchain. Een dergelijke organisatie heet een decentrale autonome organisatie, of dao, en daar kun je theoretisch leuke dingen mee doen. Er is technisch geen verschil tussen een dao of een smart contract, al zal je de term sneller gebruiken voor een verzameling smart contracts.
Stel, je verhuurt huizen. Een huis heeft een slot dat geopend kan worden via een app op een smartphone. De hele wijze van transactie, borg, huur en verhuur is vastgelegd in een smart contract. Om het huis te huren, moet de huurder een bepaald bedrag plus de borg storten. Dat doet deze gebruiker via de digitale munteenheid van Ethereum: ether. Door het storten van ether verkrijgt de huurder een token. De huurder bewaart dat token in zijn eigen wallet op zijn smartphone.
Vervolgens komt de huurder bij het gehuurde huis aan en opent hij het elektronische slot via bluetooth, want in het slimme contract staat dat de deur bij een geaccepteerde transactie opengaat als een telefoon met dat token in de buurt is. Aan het eind van de huurperiode moet de huurder natuurlijk wel het huis uit, anders krijgt hij zijn borg niet terug. Door het terugsturen van het speciale token weet het contract dat de huurder in ieder geval het huis uit is en dat de deur niet meer door de huurder geopend kan worden. Vervolgens moet het appartement fysiek gecontroleerd worden en als alles goed bevonden is, stuurt de controleur een ander token op. Als de huurder binnen de tijd bleef, wordt de borg teruggestort. Is er een kopje stuk, dan worden de kosten daarvan van de borg ingehouden.
Het grote verschil met een bedrijf als Wimdu of Airbnb is dat iedereen gebruikmaakt van de gedeelde 'computer' op de Ethereum-blockchain en niet van een centrale server van een bedrijf. Die blockchain is van niemand en de applicatie waarmee zaken gedaan worden, wordt door niemand beheerd. De app, of de verzameling slimme contracten, is één keer aangemaakt in de blockchain en iedereen kan zien hoe de applicatie functioneert. Daardoor kunnen mensen rechtstreeks zakendoen in plaats van met een bemiddelende partij, die ook nog eens tussendoor voorwaarden kan wijzigen.
Dat laat meteen zien waarom sommigen vinden dat de naam 'smart contract' niet handig is gekozen. Het woord 'contract' geeft bij velen het gevoel dat er alleen iets wordt vastgelegd, maar er kan dus veel meer.
The DAO geplunderd
Experimenteel en nog niet bruikbaar voor de 'gewone' man, dat was internet ook niet in 1992, maar we weten allemaal waar dat naartoe ging. Dat blockchains in de toekomst een belangrijke rol gaan spelen, staat buiten kijf. Nu zijn er nog heel wat hordes te nemen, maar Ethereum probeert, net als andere blockchainbedrijven, de achterliggende magie van de blockchain naar een andere dimensie te tillen, zeg 'blockchain 2.0'.
Om het niet te verwarrend te maken blijven we bij de Ethereum-blockchain. Een mogelijkheid die de keten biedt, is het opzetten van dao's. Om dao's op te zetten, heb je ontwikkelaars nodig en om ontwikkelaars te laten eten is wat geld ook praktisch. Daarvoor richtte slock.it in de Ethereum-blockchain The DAO op. Het bedrijf schreef de onderliggende contracten om te laten zien dat het mogelijk is een decentraal investeringsfonds op te zetten, waarbij de aandeelhouders allemaal tokens in de vorm van dao's zouden krijgen. Die dao-tokens konden tijdens een crowdsale verkregen worden door ether te investeren, de digitale munt van Ethereum. Zo wilde het fonds voldoende geld, of ether, bij elkaar sprokkelen om start-ups die een dao of distributed application in de vorm van dapps wilden ontwikkelen, te ondersteunen. Bij succes moesten die dao’s of dapps wel weer inkomsten en/of dividend opleveren voor The DAO.
De regels die in de scripts van The DAO geprogrammeerd zijn, zorgen ervoor dat aandeelhouders voorstellen kunnen indienen waarop vervolgens gestemd kan worden. In die code zit alleen een bug, waardoor een aanvaller of aanvallers ether konden wegsluizen. Vervelend, maar het kreeg wereldwijd bekendheid doordat het fonds toen de laatste dag van de crowdsale - 28 mei - afliep, 12 miljoen ether wist op te halen, van zo'n 10.000 investeerders. Dat was op dat moment vergelijkbaar met zo'n 168 miljoen dollar of zo'n veertien procent van de totale hoeveelheid ether in omloop.
Wat ging er mis?
Al die ether die investeerders bij The DAO hadden gestald, kon alleen door de investeerders verdeeld worden. Daar zaten al wat haken en ogen aan; een onderzoeksgroep pleitte al voor een tijdelijke stop op voorstellen voor investeringen binnen The DAO.
Ethereum-wisselkoers met bitcoins en Amerikaanse dollars. Duidelijk is de daling direct na het nieuws over de 'diefstal' op 17 juni
De bug maakte het mogelijk dat een 'Dark Hat-hacker', een aanvaller of aanvallers, steeds kleine beetjes ether afroomde. Het probleem zat in de 'splitfunctie', die een 'dictatuur van de meerderheid' moet voorkomen. Stel, er is een kleine groep of een individu die het niet eens is met een gemaakte keuze, dan kan die zich afsplitsen van The DAO naar een zogenaamd kindcontract of child-DAO. In die kind-DAO wordt een proportionele hoeveelheid DAO-tokens gestort, afhankelijk van wat de afsplitsers bezitten. Die tokens moeten dan wel bij de afsplitsers verwijderd worden en daar zat de fout.
Door het aanroepen van de splitfunctie werd wel ether afgesplitst naar een kind-DAO, maar werden de oorspronkelijke tokens niet verwijderd. Zo kon de splitfunctie keer op keer uitgevoerd worden. De 'dief' kan de ether echter niet direct naar een eigen wallet sturen, omdat er een veiligheidsmechanisme is ingebouwd waardoor het 27 dagen duurt voordat een kindcontract in werking treedt.
Waarom veranderden ze de code dan niet?
Bij een normale computer met een normaal programma kun je de code achteraf veranderen, waarna een applicatie anders functioneert. In dit geval kan dat niet, tenzij er een zogenaamde hard-fork wordt uitgevoerd. De code van The DAO kan niet veranderd worden, doordat hij is vastgelegd in de blockchain en die kan alleen worden veranderd als alle miners akkoord gaan met het terugdraaien van alle transacties tot een bepaald punt, ofwel een hard-fork.
De onmogelijkheid om code te wijzigen of te deleten bij een machine die je niet kunt uitzetten, kan zowel gunstig als ongunstig zijn. Om met Gavin Wood, een van de bedenkers van Ethereum, te spreken: "Als er fouten in de code zitten, heb je een probleem."
Beeld uit de inleiding van Gavin Wood tijdens de Dutch Blockchain Conference
Drie dagen na de hack, op maandagmiddag 20 juni, stond diezelfde Gavin Wood op de Dutch Blockchain Conference in Amsterdam. Het was duidelijk, zijn initiële verhaal over hoe Ethereum werkt, moest gaan over de diefstal. In zijn ogen stak een groep investeerders te veel geld in The DAO. Tijdens zijn speech was er nog geen zicht op een oplossing en ook was er nog niemand bezig met het overzetten van de ether naar een andere kind-DAO. Hij laat in elk geval onomwonden weten er niets mee te maken te hebben.
De opties die hij doorneemt, zijn dezelfde als wat door andere ingewijden wordt geopperd. De eerste optie is nietsdoen. In dat geval zou waarschijnlijk alle ether van The DAO naar de aanvallers gaan en zou die volgens Wood waarschijnlijk ooit op de markt komen. Een tweede optie is het maken van een soft-fork. Bij de simpelste vorm van een soft-fork zou alle ether in The DAO, op dat moment dus zo'n veertien procent van alle ether, voor altijd bevriezen en was The DAO een dure grap geweest voor een paar mensen. Als laatste optie kan een hard-fork worden voorgesteld. Daarmee zou alle ether rigoureus terugkeren naar de originele eigenaars.
Eerste ideeën
Het initiële voorstel van de Ethereum-ontwikkelaars was dan ook eerst een soft-fork te doen, zodat de aanvaller er niet met de ether vandoor kon gaan en vervolgens nadenken over de precieze implementatie van een hard-fork of iets anders.
Om een soft-fork uit te voeren moet het gros van de miners van het netwerk akkoord gaan, want die moeten de update installeren waardoor de regels van het netwerk worden aangepast. Dan zouden de miners de regels beperken, in dit geval zo dat ether uit een transactie niet afkomstig mag zijn van een bepaald adres, namelijk dat van de aanvaller. Andere gebruikers, de gewone nodes en vaak dus ook wallet-eigenaren, hoeven niets te doen.
Dat is anders bij een hard-fork. Daarbij moeten ook de gewone gebruikers een upgrade doorvoeren. Als een gebruiker dat niet doet, kan het gevolg zijn dat op den duur veel transacties die hij ontvangt, volgens zijn clientsoftware niet geldig zijn. Bij een hard-fork zou de ether bij de originele eigenaars terugkomen. Dat lijkt misschien een goede oplossing, maar naast de technische implicaties betekent het ook dat de regels versoepeld moeten worden: niks 'onkrenkbare' blockchain, als het maar belangrijk genoeg is, is er een mogelijkheid om toch iets te doen. Een hard-fork laat zien dat niet-wisbare, niet-vervangbare en niet-veranderbare contracten tóch aan te passen zijn. In het geval van The DAO zou het contract van The DAO versimpeld worden en zo zouden alleen de investeerders zelf hun ether terug kunnen krijgen.
Soft-fork 'DAO Wars'
Op vrijdag 24 juni gaven de ontwikkelaars uiteindelijk de mining-software Geth met versienummer 1.4.8 uit. Die bevatte een soft-fork die extra tijd moest geven om tot een goede oplossing te komen. Met die soft-fork zou de community, ofwel de miners, een stem krijgen in wat te doen met The DAO en feitelijk alle dao's. Met de soft-fork zou The DAO v1.0 tijdelijk geen fondsen kunnen uitkeren. Als het grootste deel van de community daarmee in zou stemmen, zouden slechts enkele gewhiteliste accounts de geblokkeerde ether kunnen ophalen en ze aan de vorige eigenaars teruggeven, waarbij de 'gestolen' ether voor altijd bevroren zou blijven. Kort gezegd: elke geïnvesteerde ether zou 0,7 ether teruggeven.
De soft-fork had wel een addertje onder het gras, namelijk dat alle andere bestaande digitale autonome organisaties ook geen ether meer zouden kunnen verwerken. Dat probleem zou dan later met een nieuwe soft-fork opgelost moeten worden. Als voldoende miners het eens waren, zou de soft-fork na zo'n zes dagen actief worden.
Op 28 juni bleek dat die soft-fork nog een nadeel had. Hij zou het mogelijk maken om een DoS-aanval uit te voeren binnen het contract van het The DAO-netwerk. De fout zou een aanvaller de mogelijkheid gegeven hebben om een scripttransactie te versturen waar een heel zware berekening in zit. Na het vragen om uitvoering van die zware, en dus dure, berekening, roept het script de splitfunctie aan van de kind-DAO waar de TheDarkDAO-fondsen met de gestolen ether in zitten.
Al eerder legden we uit dat om een functie uit te voeren, brandstof nodig is. Die zware berekening kost veel brandstof, dus veel ether, en de aanvaller voegt voldoende ether toe om dat hele script uit te kunnen voeren. Het venijn zit in de staart; de laatste regel code in het script dat wordt uitgevoerd door de miner die meedoet aan de soft-fork, zal de transactie ongeldig verklaren. De TheDarkDAO was namelijk ongeldig en bevroren verklaard en daarom gooit de miner de transactie weg. Dat is toch goed, zou je zeggen. Helaas, de miner krijgt nu geen vergoeding voor de verbruikte rekentijd en daardoor loopt het netwerk spaak.
Op zich zou code uit scripts van tevoren gescand kunnen worden om te kijken of er geen verwijzingen naar TheDarkDAO in opgenomen zijn, maar ook dat is weer makkelijk te frustreren. Het resultaat is dat de meeste miners nu niet meer instemmen met een soft-fork, althans niet met deze. De oplossing moet in ieder geval voor 14 juli bedacht worden, anders kan de Dark Hat-hacker toch nog met de ether uit het TheDarkDAO-kindfonds wegglippen. Op dit moment is die oplossing er helaas nog niet.
Recht en aftermath
Niemand in dit vraagstuk heeft de wijsheid in pacht en het is dan ook direct al voer voor discussie. Er zijn argumenten voor en tegen interventie door de ontwikkelaars te bedenken. Dat het 'niet lief' is om de ether te stelen, staat buiten kijf, zeker als het om een bedrag met negen cijfers gaat. Als tegenargument zijn er mensen die zeggen dat het zonder een hack uit te voeren gewoon kón en dat er dus geen regels zijn overtreden.
Dan zijn er ook nog de algemene voorwaarden van The DAO, waarin staat dat de code zoals die in de blockchain staat, bindend is. Wijzigen van de code laat dus zien dat smart contracts niet zo onuitwisbaar zijn als sommigen willen doen geloven. Bovendien: hoe zit het met belangenverstrengeling?
Sinds de 'whitehats', de gewhiteliste accounts, het overgrote deel van de ether veilig gesteld lijken te hebben, neemt de roep om een hard-fork af. De gestolen ether moet volgens sommigen gezien worden als 'leergeld'.
Vrouwe Justitia, Brugge. Foto: Emmanuel Huybrechts
Dan is er nog een laatste zaak: hoe om te gaan met dit soort gebeurtenissen in een wereld die volgens sommigen losstaat van de 'normalemensenwereld', als er ouderwets recht bij komt kijken? Zo heeft professor Emin Gün Sirer van Cornell Unversity aangetoond dat de diefstal niet alleen mogelijk is geworden door fouten in het smart contract van The DAO, maar ook door fouten in Solidity, de programmeertaal waarmee in de Ethereum-blockchain wordt geprogrammeerd. Maakt dat de ontwikkelaars van Ethereum (deels) aansprakelijk? Met de hoeveelheid grote bedrijven en instanties die investeren in blockchain-technieken, zal het laatste woord hierover nog niet gezegd zijn.
Met dank aan tweaker Rannasha en Pascal Van Hecke van Innopay.