Dowód Merkle’a
Dowód Merkle’a, po angielsku Merkle proof, to krótki dowód pokazujący, że konkretny element znajduje się w zbiorze reprezentowanym przez root hash drzewa Merkle’a.
Czym jest dowód Merkle’a
Dowód Merkle’a pozwala sprawdzić przynależność jednego elementu do większego zbioru bez przesyłania całego zbioru.
Zamiast pokazywać wszystkie transakcje z bloku, wystarczy pokazać wybraną transakcję oraz zestaw sąsiednich hashy potrzebnych do odtworzenia drogi do root hasha.
Jeśli po ponownym hashowaniu wynik zgadza się ze znanym root hashem, weryfikator wie, że dany element należy do zbioru zapisanego przez ten root.
Z czego składa się dowód
- Element
- Transakcja, liść drzewa albo inny fragment danych, którego obecność jest sprawdzana.
- Sibling hashes
- Hashe sąsiednich elementów potrzebne do odtworzenia ścieżki w drzewie.
- Root hash
- Końcowy hash reprezentujący cały zbiór danych.
- Weryfikacja
- Ponowne hashowanie elementu i ścieżki aż do otrzymania root hasha.
- Wynik
- Dowód potwierdza przynależność elementu do konkretnego root hasha.
Gdzie używa się dowodów Merkle’a
Bitcoin używa drzew Merkle’a do zapisywania zestawu transakcji w nagłówku bloku. Dowód Merkle’a może pokazać, że dana transakcja należy do konkretnego bloku.
Podobny mechanizm pojawia się w light clientach, bridge’ach i systemach, które muszą sprawdzać wybrane dane bez pobierania całego łańcucha.
Dowody Merkle’a są też częste w systemach ZK, airdropach i listach uprawnionych adresów, gdzie trzeba sprawdzić przynależność do dużego zbioru.
Najczęstsze błędne założenia
- Dowód Merkle’a potwierdza przynależność do konkretnego root hasha, a nie prawdziwość całego łańcucha.
- Dowód jest ważny tylko względem root hasha, dla którego został przygotowany.
- Jeśli root hash pochodzi z niezaufanego źródła, sam dowód nie rozwiązuje problemu zaufania.
- Dowód Merkle’a nie ujawnia automatycznie całego zbioru danych.
- Błędny albo nieaktualny root hash może prowadzić do błędnej interpretacji poprawnego technicznie dowodu.
Dowód Merkle’a sprawdza przynależność
Taki dowód odpowiada na konkretne pytanie: czy ten element znajduje się w zbiorze reprezentowanym przez dany root hash. Nie zastępuje pełnej weryfikacji źródła root hasha.
