Een Merkle Tree staat toe computers op een netwerk om individuele records te verifiëren zonder de versies van de volledige database te hoeven bekijken en vergelijken. Ze doen dit door cryptografie te gebruiken die een individueel record onthult en tegelijkertijd garandeert dat alle andere records in de database niet zijn gewijzigd. Merkle-bomen, voor het eerst gepatenteerd in 1979 door Ralph Merkle, zijn door de geschiedenis van computers een belangrijke sleutel geweest voor database-verificatie.

Merkle Trees zijn vooral handig voor gedistribueerde netwerken waar meerdere computers kopieën van dezelfde database of grootboek bewaren. Toen Satoshi Bitcoin creëerde, was het gebruik van een Merkle-boom voor transactieverificatie een goed idee. Vanwege het gedistribueerde karakter van de blockchain, hebben we een veilige en snelle manier nodig om ervoor te zorgen dat iedereen op het netwerk hetzelfde grootboek heeft.

Als je blockchain hebt bestudeerd, heb je waarschijnlijk wel eens gehoord van Merkle-bomen en Merkle-wortels. Veel investeerders en enthousiastelingen weten echter niet hoe ze werken. Aangezien ze een belangrijk onderdeel zijn van blockchain-beveiliging en vertrouwen, is het de moeite waard om de basisprincipes te begrijpen. Dit ingenieuze mechanisme maakt het mogelijk om miljoenen blockchain-transacties op te slaan en op te halen.

De noodzaak van efficiënte verificatie

Laten we beginnen met de basis. Waarom hebben we Merkle-bomen nodig en wat maakt ze nuttig in de blockchain-context?

Om die vraag te beantwoorden, moet u ter verificatie een wereld zonder Merkle-bomen overwegen. Als Bitcoin geen Merkle-bomen had, zou elk knooppunt op het netwerk een volledige kopie moeten bewaren van elke afzonderlijke transactie die ooit op Bitcoin heeft plaatsgevonden. Bij het bevestigen van een eerdere transactie zou een knooppunt vervolgens contact moeten opnemen met het netwerk en kopieën van het grootboek moeten krijgen van zijn collega’s. Regel voor regel zou het knooppunt elk item met zijn eigen records moeten vergelijken om er zeker van te zijn dat de netwerkgrootboeken exact overeenkomen. Als er wijzigingen doorkomen, zou dit de beveiliging van het netwerk in gevaar brengen.

Omdat voor het valideren van de gegevens de gegevens zelf nodig zijn, zou voor elk verificatieverzoek op Bitcoin enorme pakketjes informatie over het netwerk moeten worden verzonden. Vervolgens zou de validerende computer verwerkingskracht moeten besteden aan het vergelijken van de grootboeken om er zeker van te zijn dat er geen wijzigingen zijn.

Merkle-bomen lossen dit probleem op door de records in een grootboek te hashen. Dit ontkoppelt effectief het bewijs van de gegevens van de gegevens zelf. Deze hashes zijn ordes van grootte kleiner dan het grootboek zelf, dus het bewijzen van de geldigheid van een transactie omvat alleen het verzenden van kleine pakketjes over het netwerk. Hiermee kunt u bewijzen dat twee versies van een grootboek consistent zijn met minimale rekenkracht en netwerkbandbreedte.

Als dat geweldig klinkt, is dat omdat het zo is. Merkle-bomen zijn echt een coole cryptografische uitvinding. Dus nu is de vraag hoe ze werken?

Een snelle opfriscursus over hasj

Voordat we ingaan op de details van Merkle-bomen, hebben we cryptografische grondslagen nodig in hashing. Blockchains gebruiken overal hashing, van proof of work-algoritmen tot bestandsverificatie. Hashing is de hoeksteen van moderne cryptografie.

Zonder al te ver in het onkruid te raken, is een hash een type algoritme dat elke invoer, ongeacht de lengte, aanneemt en een willekeurige uitvoer van standaardlengte uitvoert. In Bitcoin ziet de transactie ‘Alice stuurt Bob 1 BTC’ er bijvoorbeeld uit als een reeks willekeurige tekens:

“3cbcf3e1075b0b3357140de438336733bd6927cd1e78d36cc278324fcce932ad”

Deze reeks tekens is de hash en is deterministisch. Dat betekent dat “A -> B 1BTC ”hashes altijd naar dezelfde output.

Hasj heeft echter nog een andere geweldige eigenschap. Zelfs een kleine verandering in de input lawines tot een drastische verandering in de output. Als we de transactie enigszins wijzigen in “A-> B 1.1BTC ”, dan wordt de hash compleet anders. Daarom is het meteen duidelijk of een record zelfs maar met één teken is gewijzigd.

Hashes zijn ook om andere redenen geweldig, maar begrijpen dat hashes deterministisch zijn en dat veranderingen een waterval produceren, is voldoende om te begrijpen hoe een Merkle-boom werkt.

Hoe je een Merkle Tree maakt

merkle boom eenvoudig

Een Merkle-boom. Blockchain Merkle-bomen bevatten duizenden hashes. Slechts 8 zijn hier afgebeeld.

Nu is het tijd om onze Merkle-boom te bouwen. We noemen onze Allice / Bob-transactie hierboven ‘Transactie A.’ Wanneer die transactie aan de blockchain wordt toegevoegd, wordt deze onderdeel van een blok met andere transacties. Voor de eenvoud noemen we die transacties gewoon B, C en D.

Elk van deze transacties wordt gehasht, dus we hoeven niet vast te houden aan wie en hoeveel de transactie was. Maar we kunnen nog steeds bewijzen dat er niet met de transactie is geknoeid, omdat we alle hashes hebben. Nu hebben we H (A), H (B), H (C) en H (D).

Vier hashes vasthouden is niet zo’n groot probleem. Elk Bitcoin-blok bevat echter ongeveer 2.000 transacties, dus het vasthouden en verzenden van al die hashes is te veel opslagruimte en bandbreedte. Een Merkle-boom lost dat probleem op door transacties te koppelen en samen te hashen.

Nu, H (A) + H (B) = H (AB) en H (C) + H (D) = H (CD). Door de transacties te combineren en te hashen, hebben we het aantal hashes dat we moeten opslaan met de helft verminderd. We kunnen hetzelfde opnieuw doen, dus H (AB) + H (CD) = H (ABCD). Door dit te doen, hebben we nu nog maar één hash om op te slaan die deterministisch is op basis van de hashes van alle onderliggende transacties. Deze enkele hash wordt de Merkle-wortel genoemd.

Transacties verifiëren met behulp van de Merkle Root

De root-hash van de Merkle-boom is een belangrijk onderdeel van elk Bitcoin-blok dat wordt gekoppeld aan het volgende blok in de keten.

Elk Bitcoin-blok heeft de Merkle-root in de blokheader. Het is hoe we de inhoud van het blok en de consistentie van meerdere grootboeken verifiëren. Als mijn kopie van de blockchain dezelfde Merkle-root voor een blok heeft als jouw kopie van de blockchain, dan weten we dat alle transacties in dat blok hetzelfde zijn en zijn we het eens over het grootboek. Zelfs een kleine inconsistentie zou leiden tot enorm verschillende Merkle-wortels vanwege de eigenschappen van een hasj.

merkle bevestigen tx

Om transactie D te bevestigen, hoeft men alleen H (AB), H (C), H (D) en H (EFGH) te kennen.

Als er een discrepantie is in de Merkle-root, kan ik de twee sub-hashes opvragen bij een vertrouwde autoriteit. Van daaruit kunnen we bepalen met welke record we het niet eens zijn door verdere sub-hashes aan te vragen. Als gevolg hiervan kunnen we discrepanties identificeren zonder dat we regel voor regel door het hele grootboek hoeven te gaan.

Conclusie

Blockchains, databases en netwerken over de hele wereld gebruiken Merkle-bomen om records op meerdere computers snel en efficiënt te coördineren. Nu je de basis begrijpt, is het gemakkelijk in te zien waarom deze manier van structureren van gegevens blockchain veilig en efficiënt maakt.