Strona główna Kryptografia Drzewo Merkle'a — drzewa haszy i dowody

🌳 Drzewo Merkle'a — drzewa haszy i dowody

Zbuduj drzewo Merkle'a, haszując bloki danych parami aż do jednego korzenia. Zmień liść i zobacz, jak zmienia się korzeń; zweryfikuj blok logarytmicznym dowodem Merkle'a — fundamentem blockchainów.

Kryptografia2DŚredni60 FPS
merkle-tree ↗ Otwórz osobno
Interfejs samej symulacji jest w języku angielskim.

O tej symulacji

Ta symulacja buduje drzewo Merkle'a na żywo w Twojej przeglądarce: każdy blok danych staje się haszem liścia, sąsiednie hasze są parowane i haszowane ponownie poziom po poziomie, a proces powtarza się, aż pozostanie jeden korzeń Merkle'a. Edytuj dowolny blok i obserwuj, jak zmiana rozchodzi się w górę wzdłuż ścieżki do korzenia, lub poproś o dowód Merkle'a, aby zweryfikować, że jeden liść należy pod tym korzeniem, wykorzystując tylko O(log n) sąsiadujących haszy.

🔬 Co pokazuje

Płótno rysuje każdy poziom drzewa, od liści na dole po pojedynczy korzeń na górze, łącząc każdą parę dzieci z ich rodzicem. Edytowanie pola bloku danych przelicza hasz jego liścia i podświetla zmienioną ścieżkę do korzenia na czerwono, pokazując, że drzewo Merkle'a jest odporne na manipulacje: żaden liść nie może się zmienić bez zmiany korzenia.

🎮 Jak korzystać

Wpisz tekst w dowolne pole Bloki danych, aby zmienić zawartość tego liścia, i obserwuj aktualizację hasza korzenia. Przeciągnij suwak Liście (2–16), aby zmienić rozmiar drzewa, następnie wybierz Indeks liścia i kliknij Zweryfikuj liść, aby zbudować i podświetlić dowód Merkle'a: hasz sąsiada na każdym poziomie (bursztynowy) oraz ścieżkę do korzenia (fioletowa), z rozmiarem dowodu pokazanym w panelu statystyk. Wyczyść podświetlenie resetuje widok.

💡 Czy wiesz, że?

Bitcoin i Ethereum przechowują korzeń Merkle'a w każdym nagłówku bloku, dzięki czemu lekki klient może zweryfikować, że pojedyncza transakcja znajduje się w bloku liczącym kilka tysięcy transakcji, wykorzystując zaledwie około dwudziestu haszy sąsiadujących — rozmiar dowodu ledwo rośnie, nawet gdyby blok zawierał milion transakcji, ponieważ długość dowodu skaluje się jako O(log n).

Więcej pytań o drzewa Merkle'a

Dlaczego ta symulacja używa krótkiego hasza FNV-1a zamiast SHA-256?

Symulacja wykorzystuje małą, szybką funkcję mieszającą w stylu FNV-1a, która generuje 4-cyfrowy identyfikator szesnastkowy zamiast pełnego 256-bitowego skrótu SHA-256, wyłącznie po to, by hasze były czytelne na ekranie i przeliczały się natychmiast podczas pisania. Algorytm budowania drzewa, właściwość odporności na manipulacje i logika dowodu O(log n) są identyczne jak w systemach produkcyjnych; różni się tylko funkcja skrótu.

Co dzieje się z drzewem, gdy liczba liści nie jest potęgą dwójki?

Na dowolnym poziomie z nieparzystą liczbą węzłów funkcja budująca drzewo paruje ostatni węzeł z jego kopią przed haszowaniem, co jest dokładnie regułą duplikowania ostatniego węzła stosowaną w rzeczywistych implementacjach drzew Merkle'a, takich jak Bitcoin. Utrzymuje to każdy poziom binarnym, więc drzewo zawsze zredukuje się do jednego korzenia, niezależnie od tego, czy liczba liści (2 do 16 w tej demonstracji) jest potęgą dwójki.

Czym różni się zmieniona ścieżka od ścieżki dowodu w wizualizacji?

Edycja liścia uruchamia funkcję oznaczania zmienionej ścieżki, która idzie od tego liścia do korzenia, oznaczając każdego przodka na czerwono, by pokazać, które hasze zostały przeliczone. Kliknięcie Zweryfikuj liść zamiast tego buduje dowód, oznaczając ścieżkę do korzenia na fioletowo i oznaczając potrzebny na każdym poziomie hasz sąsiada na bursztynowo — minimalny zestaw dodatkowych haszy potrzebnych weryfikującemu do przeliczenia korzenia z tego jednego liścia, bez oglądania jakiegokolwiek innego bloku.

Dlaczego dowód Merkle'a ma tylko O(log n) haszy?

Każdy poziom drzewa zmniejsza liczbę węzłów o połowę, więc drzewo o n liściach ma około log2(n) poziomów. Dowód potrzebuje dokładnie jednego hasza sąsiada na poziom na ścieżce od liścia do korzenia, więc jego rozmiar rośnie logarytmicznie, a nie liniowo wraz z liczbą liści — dla miliona liści to około 20 haszy, co pozwala lekkiemu klientowi zweryfikować przynależność bez pobierania pozostałych 999 999 bloków.

Czy dwa różne liście mogłyby kiedykolwiek dać ten sam korzeń drzewa?

W zasadzie kolizja hasza mogłaby sprawić, że dwa różne zestawy danych dadzą ten sam korzeń, ale przy kryptograficznie bezpiecznym haszu, takim jak SHA-256, jest to obliczeniowo niewykonalne — uproszczona funkcja FNV-1a w tej symulacji nie jest odporna na kolizje i służy tutaj wyłącznie dla szybkości i czytelności, nigdy do prawdziwych gwarancji integralności.

Podobne symulacje