Cuprins

  • Ce este un copac Merkle?

  • Cum funcționează arborii Merkle?

  • De ce sunt folosite rădăcinile Merkle în Bitcoin?

    • Minerit

    • Verificare

  • Gânduri de încheiere


Ce este un copac Merkle?

Ideea unui arbore Merkle a venit la începutul anilor 1980 de Ralph Merkle - un informatician cel mai cunoscut pentru munca sa în domeniul criptografiei cu cheie publică.

Un arbore Merkle este o structură utilizată pentru a verifica în mod eficient integritatea datelor dintr-un anumit set de date și este deosebit de important în contextul rețelelor peer-to-peer în care participanții trebuie să partajeze și să verifice informații în mod independent.

Funcțiile hash sunt o parte esențială a structurilor arborelui Merkle, așa că vă recomandăm să citiți articolul intitulat Ce este Hash? Înainte de a continua citirea acestui articol.


Cum funcționează arborii Merkle?

Să presupunem că doriți să descărcați un fișier mare. În cazul software-ului open source, de obicei, veți dori să verificați dacă valoarea hash a fișierului pe care l-ați descărcat se potrivește cu valoarea pe care dezvoltatorii au pus-o la dispoziție publică. Dacă sunt, atunci știți că fișierul pe care îl aveți pe computer se potrivește cu al lor.

Dacă valorile hash nu se potrivesc, atunci aveți o problemă. Fie ați descărcat un fișier malware care uzurpa identitatea programului, fie descărcarea nu a reușit, așa că nu funcționează. Dacă descărcarea nu are succes, probabil că nu veți fi mulțumit dacă va trebui să așteptați un timp pentru descărcarea fișierului. Va trebui apoi să începeți procesul din nou și să sperați că de data aceasta va merge bine.

S-ar putea să vă gândiți în acest caz dacă ar exista o modalitate mai ușoară de a face acest lucru.  Din fericire, aici intervine arborele Merkle. Folosind acest arbore, fișierul este împărțit în părți. Dacă dimensiunea fișierului este de 50 GB, este posibil să îl puteți împărți în 100 de bucăți, fiecare cu dimensiunea de 0,5 GB, și să îl descărcați bucată cu bucată. Practic, asta este ceea ce faci când folosești fișiere torrent. 

În acest caz, sursa fișierului vă va oferi o valoare hash cunoscută sub numele de rădăcină Merkle. Această valoare unică este o reprezentare a fiecărei date care alcătuiește fișierul dvs., dar rădăcina Merkle face mult mai ușoară verificarea datelor. 

Pentru a rămâne simplu, ne vom uita la acest exemplu în care folosim un fișier de 8 GB care este împărțit în 8 părți și vom eticheta aceste părți diferite cu literele de la A la H. Apoi, fiecare parte va trece printr-o funcție hash, rezultând 8 valori hash diferite.


سنمرر كل جزء من الأجزاء الثمانية من خلال دالة تجزئة للحصول على قيم التجزئة الخاصة بها.

Vom trece fiecare dintre cele opt părți printr-o funcție hash pentru a obține valorile lor hash.


Ei bine, acum avem ceva care are puțin mai mult sens. Avem valorile hash ale tuturor părților, așa că dacă una dintre ele este greșită, veți ști că comparând-o cu valoarea hash sursă, nu? Poate, dar acest lucru este, de asemenea, extrem de ineficient. Dacă fișierul constă din mii de părți, chiar ai de gând să le partiți pe toate și apoi să comparați rezultatele atât de atent?

Nu, în schimb, vom lua fiecare pereche de valori hash, le vom aduna împreună și apoi le vom combina. Deci, hașăm hA + hB,  hC + hD,  hE + hF și  hG + hH astfel încât să ajungem la 4 valori hash, apoi facem o altă rundă de hash pentru aceste valori, ajungând în cele din urmă la 2 valori hash. În cele din urmă, indexăm celelalte două valori pentru a obține valoarea hash principală - rădăcina Merkle (sau valoarea hash rădăcină).


يبدو الهيكل مثل شجرة مقلوبة، حيث في الصف الأخير تكون لدينا الأوراق التي تجتمع معاً لإنتاج العقد وفي النهاية الجذر.

Structura arată ca un copac cu susul în jos, unde în ultimul rând avem frunzele care se unesc pentru a produce nodurile și eventual rădăcina.


Acum avem rădăcina Merkle care reprezintă fișierul pe care l-am descărcat. Această valoare hash rădăcină poate fi comparată cu cea furnizată de sursă și, dacă se potrivesc, grozav! Dar dacă valorile hash sunt diferite, acest lucru ne asigură că datele au fost modificate, adică una sau mai multe părți au produs o valoare hash diferită, astfel încât orice modificare simplă a datelor ne va oferi o rădăcină Merkle complet diferită. . 

Din fericire, există o modalitate ușoară pentru noi toți de a verifica care parte este greșită. În acest caz, să presupunem că această parte este hE. Mai întâi, cereți unui coleg cele două valori hash care au produs rădăcina Merkle (hABCD și hEFGH). Valoarea dvs. hABCD ar trebui să se potrivească cu a lui, deoarece nu există nicio eroare în acest subarboresc. Dar acest lucru nu se aplică valorii  hEFGH, de aceea ar trebui să verificați această valoare. Apoi solicitați valorile hEF și hGH și le comparați cu propriile valori. Veți descoperi că valoarea hGH este în regulă și apoi vă dați seama că valoarea hEF este motivul din spatele problemei. În cele din urmă, veți compara valorile hash ale hE și hF, iar acum știți că hE este incorect, așa că puteți descărca din nou acest fragment.

Pe scurt, un arbore Merkle este creat prin împărțirea datelor în mai multe părți, care sunt apoi hashing iterativ pentru a forma o rădăcină Merkle. Apoi puteți verifica în mod eficient dacă a apărut o eroare cu o bucată de date. După cum vom vedea în secțiunea următoare, există și alte aplicații interesante.



Vrei să începi să tranzacționezi în monede digitale? Cumpărați Bitcoin (BTC) pe Binance acum!



De ce sunt folosite rădăcinile Merkle în Bitcoin?

Există câteva cazuri de utilizare pentru arborii Merkle, dar aici ne vom concentra asupra importanței acestora în  blockchain-uri. Arborii Merkle sunt de mare importanță pentru  Bitcoin și alte criptomonede. Reprezintă o componentă majoră a fiecărui bloc, deoarece este situat în partițiile de stocare a blocurilor. Pentru a accesa frunzele arborelui, folosim hash-ul tranzacției ( ID-ul tranzacției) al fiecărei tranzacții din bloc. 

În acest caz, rădăcina Merkle servește câteva scopuri, iar mai jos îi vom revizui aplicațiile în minarea criptomonedelor și verificarea tranzacțiilor.


Minerit

Un bloc Bitcoin este format din două părți, prima parte este partiția de stocare a blocurilor, care este o parte de dimensiuni fixe care conține  metadate pentru bloc. A doua parte este o listă de tranzacții de dimensiuni variabile, dar de obicei este mult mai mare ca dimensiune decât partiția de stocare bloc.

Minerii trebuie să trimită datele în mod repetat pentru a produce rezultate care să corespundă condițiilor specifice pentru extragerea unui bloc valid. Ei pot face trilioane de încercări înainte de a găsi un bloc corect. La fiecare încercare, schimbă un număr aleatoriu în secțiunea de stocare a blocului (codul privat) pentru a produce o ieșire diferită. Cu toate acestea, o mare parte a masei rămâne aceeași. Numărul de tranzacții poate fi de mii de tranzacții și va trebui să le trimiți de fiecare dată.

Rădăcina Merkle ușurează mult procesul, deoarece atunci când începeți să minați, puneți într-un rând toate tranzacțiile pe care doriți să le includeți și creați un arbore Merkle. Apoi plasați valoarea hash rădăcină rezultată (32 de octeți) în partiția de stocare bloc. Apoi, atunci când minați, tot ce trebuie să faceți este hash partiția de stocare a blocurilor în loc de întregul bloc.

Această metodă funcționează deoarece nu poate fi modificată, rezumând efectiv toate tranzacțiile bloc într-un format compact. Și nu puteți găsi o partiție de stocare bloc validă și apoi modifica lista de tranzacții mai târziu, deoarece asta ar schimba rădăcina Merkle. Când blocul este trimis la alte noduri, calculează rădăcina din lista de tranzacții, iar dacă nu se potrivește cu ceea ce este menționat în secțiunea de stocare a blocurilor, blocul este respins.


Verificare

Există o altă proprietate interesantă a rădăcinilor Merkle de care putem profita. Această caracteristică este importantă pentru software-ul de noduri simple (nodurile care nu poartă copia completă a lanțului blockchain). Dacă rulați un nod pe o mașină cu resurse limitate, nu doriți să descărcați și să ștergeți toate tranzacțiile blocului, în schimb, puteți solicita o dovadă Merkle - o dovadă furnizată de întregul nod care demonstrează că o tranzacție există într-un anumit bloc. Aceasta este adesea denumită verificare simplificată a plății (SPV) și a fost explicată în detaliu de Satoshi Nakamoto în raportul tehnic Bitcoin.


للتحقق من hD، نحتاج فقط إلى قيم التجزئة الموضحة باللون الأحمر.

Pentru a verifica hD, avem nevoie doar de valorile hash afișate în roșu.


Să luăm în considerare, de exemplu, un scenariu în care dorim să cunoaștem informații despre o tranzacție cu ID tranzacție hD. Dacă valoarea hC este disponibilă pentru noi, putem găsi hCD. Apoi avem nevoie de  hAB pentru a calcula hABCD. În cele din urmă, în cazul  hEFGH, putem verifica dacă rădăcina Merkle rezultată se potrivește cu cea din partiția de stocare bloc. Dacă se potrivește, aceasta este o dovadă că tranzacția a existat în bloc - deoarece ar fi aproape imposibil să generezi aceeași valoare hash cu date diferite.

În exemplul anterior, a trebuit să executăm hash-ul doar de trei ori, iar fără dovada lui Merkle, ar fi trebuit să-l executăm de 7 ori. Deoarece blocurile de astăzi conțin mii de tranzacții, utilizarea dovezii Merkle economisește mult timp și resurse de calcul.


Gânduri de încheiere

Arborii Merkle s-au dovedit a fi extrem de utili într-o serie de aplicații informatice și, după cum am văzut, au o importanță enormă pentru blockchain-uri. În sistemele distribuite, arborii Merkle facilitează verificarea informațiilor fără a inunda rețeaua cu un torent de date inutile.

Fără arborii Merkle (și rădăcinile Merkle), blocurile Bitcoin și alte criptomonede nu ar fi atât de mici precum sunt astăzi. În timp ce software-ul contractual simplu nu are confidențialitate și securitate, dovada lui Merkle permite utilizatorilor să verifice dacă tranzacțiile lor s-au alăturat unui bloc la costuri minime.