Hvad er et Merkle Tree? Begyndervejledning til denne Blockchain-komponent

Merkle Tree

Merkle Trees er en grundlæggende komponent i blockchains, der understøtter deres funktionalitet. De giver mulighed for effektiv og sikker verifikation af store datastrukturer, og i tilfælde af blokeringer, potentielt ubegrænsede datasæt.

Implementeringen af ​​Merkle-træer i blokkæder har flere effekter. Det giver dem mulighed for at skalere, samtidig med at de giver den hash-baserede arkitektur for dem at opretholde dataintegritet og en triviel måde at verificere dataintegriteten på.

Kryptografiske hashfunktioner er den underliggende teknologi, der gør det muligt for Merkle-træer at arbejde, så først er det vigtigt at forstå, hvad kryptografiske hashfunktioner er.

Kryptografiske Hash-funktioner

Kort sagt, en hash-funktion er en hvilken som helst funktion, der bruges til at kortlægge data med en vilkårlig størrelse (input) til en fast størrelse output. En hashingalgoritme anvendes til dataindgangen, og den resulterende faste længdeoutput kaldes hash.

Mange hashingalgoritmer er almindeligt tilgængelige og kan vælges ud fra dine behov.

Den resulterende hash fra den vilkårlige input er ikke kun fast i længden, den er også helt unik for input, og selve funktionen er deterministisk. Uanset hvor mange gange du kører funktionen på den samme indgang, vil output altid være den samme.

For eksempel, hvis du har følgende datasæt nedenfor som input, er de resulterende output unikke for hver input. Bemærk hvordan i det andet og tredje eksempel, selvom forskellen mellem input kun er et ord, er de resulterende output helt forskellige.

Dette er meget vigtigt, da det giver mulighed for “fingeraftryk” af data.

En kryptografisk hash-funktion, Billede fra Wikipedia

Da længden på output (hashsum i eksemplet) altid er den samme som bestemt af den anvendte hashingalgoritme, kan enorme mængder data identificeres udelukkende gennem deres resulterende hash.

Med systemer, der indeholder enorme datamængder, kan fordelene ved at kunne lagre og identificere data med en fast længdeoutput skabe store lagringsbesparelser og bidrage til at øge effektiviteten.

Inden for blockchains bruges hashingalgoritmer til at bestemme blockchain-tilstanden.

Blockchains er sammenkædede lister, der indeholder data og en hash-markør, der peger på den forrige blok, hvilket skaber en kæde af forbundne blokke, deraf navnet “blockchain”.

Hver blok er forbundet til hinanden via en hash-markør, som er hash af dataene i den forrige blok sammen med adressen på den forrige blok. Ved at forbinde datablokke i dette format repræsenterer hver resulterende hash af den foregående blok hele tilstanden af ​​blockchain, da alle hashdata fra de tidligere blokke er hash i en hash.

Dette er repræsenteret (i tilfælde af SHA-256-algoritmen) af en output (hash) som denne.

b09a57d476ea01c7f91756adff1d560e579057ac99a28d3f30e259b30ecc9dc7

Hashet ovenfor er fingeraftrykket af hele blockchain-tilstanden før det. Blockchain-tilstanden før den nye blok (som hashdata) er input, og den resulterende hash er output.

Selvom det er muligt at bruge kryptografiske hashes uden Merkle-træer, er det ekstremt ineffektivt og ikke skalerbart. Brug af hashes til at gemme data i en blok i serieformat er tidskrævende og besværligt.

Som du vil se, tillader Merkle-træer triviel opløsning af dataintegritet samt kortlægning af disse data gennem hele træet ved hjælp af Merkle-proofs.

Merkle træer og Merkle bevis

Opkaldt efter Ralph Merkle, der patenterede konceptet i 1979, er Merkle-træer fundamentalt datastrukturstræer, hvor hver ikke-bladknude er en hash af sine respektive underknudepunkter.

Bladknudepunkterne er det laveste lag af knuder i træet. Først lyder det måske svært at forstå, men hvis du ser på den almindeligt anvendte figur nedenfor, bliver det meget lettere at forstå.

Hash træ

Et eksempel på et binært hash-træ, Billede fra Wikipedia

Det er vigtigt at bemærke, hvordan de ikke-blade knuder eller “grene” (repræsenteret af Hash 0-0 og Hash 0-1) på venstre side er hashes af deres respektive børn L1 og L2. Yderligere bemærkes, hvordan gren Hash 0 er hash af sine sammenkædede børn, grene Hash 0-0 og Hash 0-1.

Eksemplet ovenfor er den mest almindelige og enkle form for et Merkle-træ kendt som et binært Merkle-træ. Som du kan se, er der en top hash, der er hash af hele træet, kendt som rod hash. I det væsentlige er Merkle-træer en datastruktur, der kan tage “n” antal hashes og repræsentere det med en enkelt hash.

Træets struktur muliggør effektiv kortlægning af vilkårligt store mængder data og muliggør let identifikation af, hvor ændringer i disse data forekommer. Dette koncept muliggør Merkle-bevis, hvormed nogen kan kontrollere, at hashing af data er konsistent hele vejen op i træet og i den korrekte position uden faktisk at skulle se på hele sæt hashes.

I stedet kan de verificere, at en dataklump er i overensstemmelse med rod hash ved kun at kontrollere et lille delsæt af hash snarere end hele datasættet.

Så længe rod hash er offentligt kendt og betroet, er det muligt for enhver, der ønsker at foretage en nøgleværdisøgning i en database, til at bruge et Merkle-bevis til at verificere placeringen og integriteten af ​​et stykke data i en database, der har en bestemt rod.

Når rod-hash er tilgængeligt, kan hash-træet modtages fra enhver kilde, der ikke er tillid til, og en gren af ​​træet kan downloades ad gangen med øjeblikkelig verifikation af dataintegriteten, selvom hele træet endnu ikke er tilgængeligt.

En af de vigtigste fordele ved Merkle-træstrukturen er evnen til at godkende vilkårligt store datasæt gennem en lignende hashing-mekanisme, der bruges til at verificere meget mindre datamængder.

Træet er fordelagtigt til at distribuere store datasæt i håndterbare mindre dele, hvor barrieren til verifikation af integritet er væsentligt reduceret på trods af den samlede større datastørrelse.

Roten hash kan bruges som fingeraftryk til et helt datasæt, inklusive en hel database eller repræsenterer hele tilstanden af ​​en blockchain. I de følgende afsnit vil vi diskutere, hvordan Bitcoin og andre systemer implementerer Merkle-træer.

Merkle træer i Bitcoin

Den kryptografiske hash-funktion, der anvendes af Bitcoin, er SHA-256-algoritmen. Dette står for “Secure Hashing Algorithm”, hvis output har en fast 256 bit længde. Den grundlæggende funktion af Merkle-træer i Bitcoin er at gemme og til sidst beskære transaktioner i hver blok.

Som tidligere nævnt er blokke i en blockchain forbundet via hashes fra den forrige blok. I Bitcoin indeholder hver blok alle transaktionerne inden for den blok samt blokoverskriften, der består af:

  • Bloker versionsnummer
  • Forrige Block Hash
  • Tidsstempel
  • Minedrift vanskelighedsmål
  • Nonce
  • Merkle Root Hash

Billedet nedenfor er fra Bitcoin hvidt papir og illustrerer, hvordan Merkle-træet passer ind i hver blok.

Merkle Tree

Transaktionerne indgår i blokke af minearbejdere og hashes som en del af et Merkle-træ, hvilket fører til Merkle-roden, der er gemt i blokoverskriften. Dette design har en række forskellige fordele.

Som det fremgår af hvidbogen muliggør dette især eksistensen af ​​Simple Payment Verification (SPV) noder, også kendt som “letvægtsklienter”. Disse knudepunkter behøver ikke at downloade hele Bitcoin blockchain, kun blokoverskrifterne i den længste kæde.

SPV-noder kan opnå dette ved at forespørge deres peer-noder, indtil de er overbeviste om, at de lagrede blokoverskrifter, de arbejder på, er en del af den længste kæde. En SPV-knude er i stand til derefter at bestemme status for en transaktion ved hjælp af Merkle-beviset til at kortlægge transaktionen til et specifikt Merkle-træ med det pågældende Merkle-træets rod-hash i en blokoverskrift, der er en del af den længste kæde.

Derudover muliggør Bitcoins implementering af Merkle-træer beskæring af blockchain for at spare plads. Dette er et resultat af, at kun rodhashen er gemt i blokoverskriften, derfor kan gamle blokke beskæres ved at fjerne unødvendige grene af Merkle-træet, mens de kun bevares, der er nødvendige for Merkle-beviset.

Implementering af Merkle-træer i andre blokkæder og systemer

Selvom Bitcoin var den første blockchain til at implementere Merkle-træer, implementerer mange andre blockchains lignende Merkle-træstrukturer eller endnu mere komplekse versioner.

Yderligere er implementering af Merkle-træ ikke kun begrænset til blokkæder og anvendes på en række andre systemer.

Ethereum, der er den anden mest genkendelige kryptokurrency, er også et godt eksempel på en anden implementering af Merkle-træet. Fordi Ethereum er turing komplet som en platform til opbygning af meget mere komplekse applikationer, bruger den en mere kompleks version af Merkle-træet kaldet et Merkle Patricia Tree, der faktisk er 3 separate Merkle-træer, der bruges til tre slags objekter. Du kan lære mere om disse træer her.

Endelig er Merkle-træer en vigtig komponent i distribuerede versionskontrolsystemer som Git og IPFS. Deres evne til let at sikre og kontrollere integriteten af ​​data, der deles mellem computere i et P2P-format, gør dem uvurderlige for disse systemer.

Konklusion

Merkle træer er en integreret komponent i blockchains og giver dem effektivt mulighed for at fungere med påviselig uforanderlighed og transaktionsintegritet.

At forstå den rolle, de spiller i distribuerede netværk og deres underliggende teknologi til kryptografiske hashfunktioner, er afgørende for at forstå de grundlæggende koncepter inden for kryptovalutaer, da de fortsætter med at udvikle sig til større og mere komplekse systemer.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me