Mi az a Merkle-fa? Útmutató kezdőknek ehhez a blokklánc-komponenshez

A Merkle fák a blokkláncok alapvető alkotóelemei, amelyek alátámasztják funkcionalitásukat. Lehetővé teszik nagy adatstruktúrák hatékony és biztonságos ellenőrzését, blokkláncok esetén pedig potenciálisan határtalan adatkészletek ellenőrzését.

A Merkle-fák blokkláncokban való megvalósítása többféle hatással jár. Lehetővé teszi számukra a méretezést, miközben egy hash-alapú architektúrát is biztosít számukra az adatok integritásának megőrzéséhez, és egy triviális módszert az adatok integritásának ellenőrzésére.

A kriptográfiai hash függvények a mögöttes technológia, amely lehetővé teszi a Merkle fák működését, ezért először is fontos megérteni, hogy mik a kriptográfiai hash függvények.

Gyors döntés: A Merkle fák olyan kriptográfiai kivonatokból álló adatstruktúrák, amelyek lehetővé teszik a nagy adathalmazok integritásának hatékony ellenőrzését és leképezését, így olyan rendszerek szerves összetevőjévé teszik őket, mint a blokkláncok és az elosztott verziókezelés.


Gyors tények

Főbb pontokLeírás
Kriptográfiai hash függvényekHash függvények, amelyek bármilyen méretű bemenetet fogadnak, és rögzített hosszúságú hash értéket adnak ki. Merkle fákban használják.
Merkle fa szerkezeteFa adatstruktúra, amelyben minden nem levél csomópont a gyermek csomópontjainak hash-e. Lehetővé teszi nagy adathalmazok hatékony leképezését és ellenőrzését.
Root hashHash a Merkle-fa tetején, amely az egész fa hash-jét képviseli. Ujjlenyomatként működik a teljes adatkészlethez.
Merkle bizonyítjaEngedélyezze az adatok integritásának és pozíciójának ellenőrzését a fában anélkül, hogy a teljes adatkészletre, csak a gyökér hashre lenne szüksége.
Megvalósítás BitcoinbanA Merkle fák blokkokban tárolják a tranzakciókat. A blokkfejlécben tárolt gyökérkivonat lehetővé teszi az SPV-csomópontok számára a tranzakciók ellenőrzését.
Egyéb blokklánc-megvalósításokSzámos blokkláncban használják, mint például az Ethereum, amely összetettebb Merkle Patricia fákat használ.
Elosztott rendszerekA verziókezelő rendszerek, például a Git és az IPFS, könnyen ellenőrizhetik a társak között megosztott adatokat.

Kriptográfiai hash-függvények

Egyszerűen fogalmazva, a hash függvény bármely olyan függvény, amely tetszőleges méretű (bemeneti) adatok fix méretű kimenetre való leképezésére szolgál. Kivonatolási algoritmust alkalmaznak az adatbevitelre, és az eredményül kapott rögzített hosszúságú kimenetet hash-nek nevezik.

Számos kivonatolási algoritmus széles körben elérhető nyilvánosan, és az Ön igényei alapján kiválasztható.

A tetszőleges bemenetből származó hash nem csak fix hosszúságú, hanem teljesen egyedi a bemenetre, és maga a függvény is determinisztikus. Vagyis akárhányszor futtatod a függvényt ugyanazon a bemeneten, a kimenet mindig ugyanaz lesz.

Ha például az alábbi adatkészleteket használja bemenetként, az eredményül kapott kimenetek minden bemenet esetében egyediek. Figyeljük meg, hogy a második és harmadik példában, bár a bemenetek különbsége csak egy szó, a kapott kimenetek teljesen eltérőek.

Ez nagyon fontos, mivel lehetővé teszi az adatok „ujjlenyomatát”.

Egy kriptográfiai hash függvény, kép a Wikipédiából

Mivel a kimenet (a példában hash összege) hossza mindig megegyezik a használt hash algoritmus által meghatározott hosszúsággal, hatalmas mennyiségű adat azonosítható kizárólag a kapott hash alapján.

A hatalmas mennyiségű adatot tartalmazó rendszerekben az adatok rögzített hosszúságú kimenettel történő tárolásának és azonosításának előnyei jelentős tárolási megtakarításokat eredményezhetnek, és hozzájárulhatnak a hatékonyság növeléséhez.

A blokkláncokon belül hash algoritmusokat használnak a blokklánc állapotának meghatározására.

A blokkláncok olyan linkelt listák, amelyek adatokat és egy hash-mutatót tartalmaznak, amely az előző blokkra mutat, összekapcsolt blokkokból álló láncot hozva létre, innen ered a „blokklánc” elnevezés.

Minden blokk egy hash-mutatón keresztül kapcsolódik egymáshoz, amely az előző blokkon belüli adatok kivonata az előző blokk címével együtt. Az adatblokkok ebben a formátumban való összekapcsolásával az előző blokk minden eredményül kapott kivonata a blokklánc teljes állapotát reprezentálja, mivel az előző blokkok összes kivonatolt adata egy hash-be kerül kivonatolásra.

Ezt (az SHA-256 algoritmus esetében) egy kimenet (hash) képviseli, például:

b09a57d476ea01c7f91756adff1d560e579057ac99a28d3f30e259b30ecc9dc7

A fenti hash az előtte lévő blokklánc teljes állapotának ujjlenyomata. A blokklánc új blokk előtti állapota (kivonatolt adatként) a bemenet, a kapott hash pedig a kimenet.

Bár lehetséges a kriptográfiai hashek használata Merkle-fák nélkül, ez rendkívül nem hatékony és nem skálázható. A hashek használata az adatok blokkban, sorozatformátumban történő tárolására időigényes és nehézkes.

Amint látni fogja, a Merkle-fák lehetővé teszik az adatok integritásának triviális feloldását, valamint az adatok leképezését a teljes fán keresztül Merkle-bizonyítékok segítségével.


Merkle-fák és Merkle-bizonyítékok

A koncepciót 1979-ben szabadalmaztató Ralph Merkle után elnevezett Merkle fák alapvetően olyan adatszerkezeti fák, amelyekben minden nem levél csomópont a megfelelő gyermekcsomópontok hash-e.

A levél csomópontjai a fa legalacsonyabb csomópontjai. Elsőre talán nehezen érthetőnek hangzik, de ha megnézzük az alábbi, gyakran használt ábrát, sokkal könnyebben érthető lesz.

Hash fa

Példa egy bináris hash fára, Kép a Wikipédiából

Fontos, hogy figyelje meg, hogy a bal oldalon lévő nem levél csomópontok vagy „ágak” (amelyeket a 0-0 és a 0-1 hash) a megfelelő L1 és L2 gyermekeik hash-ei. Figyeljük meg továbbá, hogy a Hash 0 ág az összefűzött gyermekeinek, a Hash 0-0 és a Hash 0-1 ágainak kivonata.

A fenti példa egy bináris Merkle-faként ismert Merkle-fa leggyakoribb és legegyszerűbb formája. Amint látja, van egy felső hash, amely az egész fa hash-je, amelyet gyökérkivonatként ismerünk. Lényegében a Merkle-fák egy olyan adatstruktúra, amely „n” számú hash-t tud felvenni, és egyetlen hash-sel reprezentálja.

A fa szerkezete lehetővé teszi tetszőlegesen nagy mennyiségű adat hatékony leképezését, és lehetővé teszi annak könnyű azonosítását, hogy az adatokban hol történik változás. Ez a koncepció lehetővé teszi a Merkle-bizonyítást, amellyel valaki ellenőrizheti, hogy az adatok kivonatolása konzisztens-e a fán végig, és a megfelelő pozícióban van-e anélkül, hogy ténylegesen meg kellene néznie a hashek teljes halmazát.

Ehelyett úgy ellenőrizhetik, hogy egy adatcsonk konzisztens-e a gyökérkivonattal, ha a teljes adatkészlet helyett csak a kivonatok egy kis részét ellenőrzik.

Mindaddig, amíg a gyökérkivonat nyilvánosan ismert és megbízható, bárki, aki kulcsérték-keresést szeretne végezni egy adatbázisban, Merkle-bizonyítékot használva ellenőrizheti egy olyan adatrész helyzetét és integritását az adatbázisban, amely rendelkezik egy adott gyökér.

Ha a gyökérkivonat elérhető, a hash-fa bármely nem megbízható forrásból fogadható, és a fa egy ága egyszerre letölthető az adatok integritásának azonnali ellenőrzésével, még akkor is, ha a teljes fa még nem elérhető.

A Merkle-fastruktúra egyik legfontosabb előnye, hogy tetszőlegesen nagy adathalmazokat hitelesíthet egy hasonló hash-mechanizmuson keresztül, amelyet sokkal kisebb adatmennyiségek ellenőrzésére használnak.

A fa előnyös nagy adathalmazok kezelhető kisebb részekre való szétosztására, ahol az integritás ellenőrzésének akadálya a nagyobb adatméret ellenére jelentősen csökken.

A gyökérkivonat használható ujjlenyomatként egy teljes adatkészlethez, beleértve egy teljes adatbázist, vagy egy blokklánc teljes állapotát reprezentálja. A következő szakaszokban megvitatjuk, hogyan valósítják meg a Bitcoin és más rendszerek a Merkle fákat.


Merkle fák Bitcoinban

A Bitcoin által használt kriptográfiai hash függvény az SHA-256 algoritmus. Ez a „Secure Hashing Algorithm” rövidítése, amelynek kimenete fix 256 bit hosszú. A Merkle fák alapvető funkciója a Bitcoinban, hogy minden blokkban tárolja és végül levágja a tranzakciókat.

Mint korábban említettük, a blokklánc blokkjai az előző blokk hash-ei révén kapcsolódnak össze. A Bitcoinban minden blokk tartalmazza az adott blokkon belüli összes tranzakciót, valamint a blokkfejlécet, amely a következőkből áll:

  • Verziószám blokkolása
  • Előző blokk hash
  • Timestamp
  • Bányászati ​​nehézségi cél
  • nonce
  • Merkle Root Hash

Az alábbi kép a Bitcoin fehér könyvéből származik, és bemutatja, hogyan illeszkedik a Merkle fa az egyes blokkokhoz.

Merkle fa

A tranzakciókat a bányászok blokkokba foglalják, és egy Merkle-fa részeként kivonatolja őket, ami a blokkfejlécben tárolt Merkle gyökérhez vezet. Ennek a kialakításnak számos külön előnye van.

A legjelentősebb, amint az a tanulmányban is szerepel, ez lehetővé teszi az egyszerű fizetés-ellenőrzési (SPV) csomópontok, más néven „könnyű ügyfelek” létezését. Ezeknek a csomópontoknak nem kell letölteniük a teljes Bitcoin blokkláncot, csak a leghosszabb lánc blokkfejléceit.

Az SPV-csomópontok ezt úgy érhetik el, hogy lekérdezik a társcsomópontjaikat, amíg meg nem győződnek arról, hogy a tárolt blokkfejlécek, amelyeken működnek, a leghosszabb lánc részét képezik. Az SPV-csomópont ezután képes meghatározni egy tranzakció állapotát a Merkle-bizonyíték segítségével, hogy a tranzakciót leképezze egy adott Merkle-fára a megfelelő Merkle-fa gyökérkivonatával egy blokkfejlécben, amely a leghosszabb lánc része.

Ezenkívül a Merkle fák Bitcoin általi megvalósítása lehetővé teszi a blokklánc metszését a helytakarékosság érdekében. Ez annak az eredménye, hogy a blokkfejlécben csak a gyökérkivonat van tárolva, ezért a régi blokkokat le lehet metszeni a Merkle-fa felesleges ágainak eltávolításával, miközben csak a Merkle-bizonyításhoz szükségeseket őrizzük meg.


Merkle-fák megvalósítása más blokkláncokban és rendszerekben

Bár a Bitcoin volt az első blokklánc, amely Merkle fákat valósított meg, sok más blokklánc valósít meg hasonló Merkle fastruktúrákat vagy még bonyolultabb változatokat.

Ezenkívül a Merkle-fa megvalósítása nem csak a blokkláncokra korlátozódik, hanem számos más rendszerre is alkalmazható.

Az Ethereum, mint a másik legismertebb kriptovaluta, szintén nagyszerű példa a Merkle-fa eltérő megvalósítására. Mivel az Ethereum sokkal összetettebb alkalmazások építésének platformja, a Merkle-fa egy összetettebb változatát használja, amelyet Merkle Patricia Tree-nek neveznek, ami valójában 3 külön Merkle-fa, amelyet háromféle objektumhoz használnak. Itt többet megtudhat ezekről a fákról.

Végül a Merkle fák fontos összetevői az elosztott verziókezelő rendszereknek, mint például a Git és az IPFS. A számítógépek között P2P formátumban megosztott adatok sértetlenségének egyszerű biztosítására és ellenőrzésére való képességük felbecsülhetetlen értékűvé teszi ezeket a rendszereket.


Következtetés

A Merkle fák a blokkláncok szerves részét képezik, és hatékonyan lehetővé teszik számukra, hogy bizonyítható változatlansággal és tranzakciós integritással működjenek.

Az elosztott hálózatokban játszott szerepük és a kriptográfiai hash-funkciók mögöttes technológiájuk megértése kulcsfontosságú a kriptovaluták alapfogalmainak megértéséhez, miközben egyre nagyobb és összetettebb rendszerekké fejlődnek.

Forrás: https://blockonomi.com/merkle-tree/