Robert Steinadler, 6 maanden geleden
Hash trees zijn van vitaal belang voor blockchaintechnologie en Bitcoin, omdat ze het mogelijk maken op een veilige en efficiënte manier gegevens te valideren. De naam Merkle tree is afgeleid van de wetenschappelijke uitvinder Ralph Merkle die zijn uitvinding in 1979 patenteerde. Tegenwoordig komen hash trees zowel in de cryptografie als in de informatica veel voor.
Wat is een hash tree, hoe werkt het en waarom is het zo belangrijk voor Bitcoin en blockchain technologie in het algemeen?
Een Merkle tree of hash tree is een wiskundige datastructuur die veel wordt gebruikt in toepassingen in de computerwetenschap om gegevens te organiseren. Blockchaintechnologie is er slechts één van. Hash trees worden gebruikt om blockchaingegevens efficiënt en veilig te coderen. Andere applicaties die hash trees gebruiken zijn Git, de IPFS of databasesystemen zoals bijvoorbeeld Amazon DynamoDB of Cassandra.
Hash trees worden gebruikt om transacties op de blockchain samen te vatten door een hash te maken van verschillende data blocks van transacties die in het verleden zijn uitgevoerd. De gehashte gegevens gebruiken niet veel ruimte en de verificatie ervan is snel en veilig, aangezien de hashfuncties die worden gebruikt als zeer betrouwbaar worden beschouwd.
De Merkle root is een wiskundige methode om alle feiten te bevestigen die gerelateerd zijn aan de hash tree. In blockchain wordt de Merkle root gebruikt om ervoor te zorgen dat alle blocks die via een peer-to-peer netwerk worden verzonden veilig zijn. Dit betekent ook het controleren van de consistentie van de gegevens van elk block om aan te tonen dat het niet is gewijzigd.
Dit wordt bereikt door het gebruik van hashfuncties. Dit zijn éénrichtingsfuncties, wat betekent dat ze deterministisch, botsingbestendig en niet omkeerbaar zijn. Een specifieke input komt altijd overeen met dezelfde output. Deze output is de hashwaarde. Laten we een voorbeeld bekijken. Bij het uitvoeren van de zin "LiteBit is de beste exchange." via het SHA256 hash-algoritme, is de volgende output altijd hetzelfde:
1abe7feee5daba070aa7673651ab9d407af23277387198d3da938c388bb2d295
Het wijzigen van een letter of het toevoegen van meer informatie aan de zin zou de output onmiddellijk veranderen.
Een Merkle tree wordt gebruikt om een digitale vingerafdruk te maken die alle transacties in een block optelt door een verifieerbare hashwaarde te creëren. Op deze manier kan een gebruiker controleren of een transactie al dan niet in een block is opgenomen. Transacties worden gehasht met behulp van hun transactie-ID als input totdat er slechts één hashwaarde overblijft. Die specifieke waarde is de Merkle root.
Kijk eens naar het diagram hierboven. De hash tree groeit van onder naar boven. De transactie-ID's van transactie A, B, C en D zijn gehasht. De resulterende hashwaarden worden beschouwd als de zogenaamde bladeren van de boom (hash A, hash, B, hash C en hash D). Een paar leaf nodes worden gebruikt om een hashwaarde van een niet-leaf node te creëren. In ons voorbeeld hierboven wordt een hashwaarde gecreëerd die de hashes van transactie-ID A en B combineert, evenals een andere die de twee hashes van transactie-ID C en D combineert. De Merkle root wordt gemaakt door hash AB en hash CD te combineren. In feite is de Merkle root in ons voorbeeld een hashwaarde die is gebaseerd op vier transactie-ID's.
Aangezien de meeste hash tree implementaties binair zijn worden ze ook wel binaire hash trees genoemd, omdat elke node twee onderliggende nodes heeft. Het is belangrijk dat alleen de gehashte gegevens worden beschouwd als onderdeel van de hash tree, niet de gegevens zelf. Ook is dit voorbeeld erg simplistisch. Een Merkle tree die in het wild groeit is meestal veel complexer en hoeft ook niet per se binair te zijn.
Een hash kan een enorme hoeveelheid gegevens vertegenwoordigen terwijl het super klein is. Uiteindelijk is het maar een relatief korte string. Daarom bieden hash trees verschillende voordelen:
Bitcoin is de eerste cryptocurrency die werd uitgevonden en het introduceerde ook de blockchain. Stel dat Bitcoin geen Merkle tree zou gebruiken. Om transactiegegevens op integriteit te controleren, zou elke node in het netwerk niet kunnen vertrouwen op de Merkle root die meestal deel uitmaakt van elk block. In feite zou elke node een volledige kopie van de Bitcoin-blockchain moeten bevatten en die kopie tegen elk nieuw block moeten houden dat door het netwerk wordt gepropageerd.
Je zou kunnen stellen dat dit al het geval is. Elke volledige node bevat een kopie van de Bitcoin-blockchain en kan het hele grootboek controleren. Hoewel dit waar is, zou de rekenkracht enorm zijn, omdat elke node bezig zou zijn met het controleren van gegevens in plaats van hashes.
Een Merkle tree speelt een belangrijke rol in de boekhouding door het bewijs van een transactie te scheiden van de gegevens van de transactie. Het afgeven van het bewijs dat een transactie heeft plaatsgevonden is sneller, efficiënter en eerlijk gezegd betrouwbaarder dan het steeds opnieuw controleren van alle gegevens.