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 pontok | Leírás |
---|---|
Kriptográfiai hash függvények | Hash 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 szerkezete | Fa 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 hash | Hash 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ítja | Engedé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 Bitcoinban | A 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ások | Számos blokkláncban használják, mint például az Ethereum, amely összetettebb Merkle Patricia fákat használ. |
Elosztott rendszerek | A 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.
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.
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/