A Merkle fa egy adatszerkezet, amelyet a számítógépes alkalmazásokban használnak. A bitcoinban és más kriptovalutákban a Merkle fák hatékonyabban és biztonságosan kódolják a blockchain-adatokat.
Ezeket "bináris hash fáknak" is nevezik.
A Merkle-fa lebontása
A bitcoin blokkláncában a tranzakciók blokkját egy algoritmuson keresztül futtatják hash létrehozására, amely szám- és betűsorozatokból áll, amelyek segítségével ellenőrizhető, hogy egy adott adatkészlet megegyezik-e az eredeti tranzakciókészlettel, de hogy ne szerezze meg az eredeti tranzakciókészletet. A Bitcoin szoftvere azonban nem futtatja a tranzakciós adatok teljes blokkját - átlagosan 10 percnyi tranzakciót képviselő tranzakciót - a hash funkcióval egyszerre. Inkább az egyes tranzakciókat hash, majd az egyes tranzakciókat összekapcsolják és összekeverik egymással, és így tovább, amíg az összes blokkhoz nem tartozik egy hash. (Ha páratlan számú tranzakció létezik, akkor egy tranzakció megduplázódik, és hash-ja összekapcsolódik.)
Megjelenítve ez a struktúra egy fára hasonlít. Az alábbi ábrán a "T" tranzakciót, "H" kivonatot jelöl. Vegye figyelembe, hogy a kép erősen egyszerűsített; egy átlagos blokk több mint 500 tranzakciót tartalmaz, nem pedig nyolc.
Az alsó sorban található kivonatot "leveleknek", a közbenső kivonatot "ágaknak", a felső kivonatot "gyökérnek" nevezzük. Egy adott blokk Merkle gyökere a fejlécben található: például a # 482819 blokk Merkle gyökere e045b18e7a3d708d686717b4f44db2099aabcad9bebf968de5f7271b458f71c8. A gyökérkönyvtárat más információkkal (a szoftver verziója, az előző blokk hash, az időbélyeg, a nehézségi cél és a nonce) kombinálják, majd egy hash függvényen futtatják a blokk egyedi kivonatának előállításához: 000000000000000000bfc767ef8bf28c42cbd4bdbafd9aa1b5c3c33c2c2b08952. Ez a hash valójában nem szerepel a releváns blokkban, hanem a következő; ez különbözik a Merkle gyökérétől.
A Merkle fa hasznos, mivel lehetővé teszi a felhasználók számára, hogy egy adott tranzakciót ellenőrizjenek a teljes blokklánc letöltése nélkül (több mint 130 gigabájt 2017. augusztus végén). Tegyük fel például, hogy ellenőrizni akarta, hogy a tranzakció tranzakciója szerepel-e a fenti ábra blokkjában. Ha megvan a gyökér hash (H ABCDEFGH), akkor a folyamat olyan, mint egy sudoku játék: lekérdezi a hálózatot H D-ről, és visszatér H C, H AB és H EFGH. A Merkle fa lehetővé teszi annak ellenőrzését, hogy mindent három hash-mal számolnak el: adott H AB, H C, H EFGH és a H ABCDEFGH gyökér, H D (az egyetlen hiányzó hash) jelen kell lennie az adatokban.
A Merkle fákat Ralph Merkle elnevezése alapján nevezték el, aki egy 1987-es cikkben javasolta őket, amely a "Digitális aláírás egy hagyományos titkosítási funkción alapul" címet viseli. A Merkle kriptográfiai hashizálást is feltalált.