什麼是默克爾樹? 該區塊鏈組件的初學者指南

梅克爾樹是區塊鏈的基本組成部分,支撐其功能。 它們允許對大型資料結構進行高效、安全的驗證,對於區塊鏈來說,還可以驗證潛在的無限資料集。

梅克爾樹在區塊鏈中的實施具有多重效果。 它允許它們擴展,同時也為它們提供基於雜湊的架構來維護資料完整性以及驗證資料完整性的簡單方法。

加密雜湊函數是默克爾樹發揮作用的基礎技術,因此首先了解什麼是加密雜湊函數非常重要。

快速判決: Merkle 樹是由加密雜湊組成的資料結構,允許高效的完整性驗證和大型資料集的映射,使它們成為區塊鏈和分散式版本控制等系統的組成部分。


快覽

要點產品描述
加密哈希函數雜湊函數接受任意大小的輸入並輸出固定長度的雜湊值。 用於 Merkle 樹。
梅克爾樹結構樹資料結構,其中每個非葉節點都是其子節點的哈希。 實現大型資料集的高效映射和驗證。
根哈希Merkle 樹頂部的雜湊值代表整棵樹的雜湊值。 充當完整資料集的指紋。
梅克爾證明允許驗證資料完整性和在樹中的位置,而不需要完整的資料集,只需要根雜湊。
在比特幣中的實現梅克爾樹將交易儲存在區塊中。 儲存在區塊頭中的根哈希允許 SPV 節點驗證交易。
其他區塊鏈實施用於許多區塊鏈,例如以太坊,它使用更複雜的 Merkle Patricia 樹。
分散式系統允許 Git 和 IPFS 等版本控制系統輕鬆驗證同儕之間共享的資料。

加密哈希函數

簡而言之,雜湊函數是用於將任意大小(輸入)的資料映射到固定大小輸出的任何函數。 雜湊演算法應用於資料輸入,所得的固定長度輸出稱為雜湊。

許多哈希演算法已廣泛公開提供,可以根據您的需求進行選擇。

任意輸入產生的雜湊不僅長度固定,而且對於輸入來說也是完全唯一的,並且函數本身是確定性的。 也就是說,無論對同一輸入運行該函數多少次,輸出始終是相同的。

例如,如果您有以下資料集作為輸入,則每個輸入的結果輸出都是唯一的。 請注意,在第二個和第三個範例中,即使輸入的差異只有一個單詞,但產生的輸出卻完全不同。

這非常重要,因為它允許對資料進行「指紋識別」。

加密雜湊函數,圖片來自維基百科

由於輸出(範例中的雜湊和)長度始終與所使用的雜湊演算法確定的長度相同,因此可以僅透過生成的雜湊來識別大量資料。

對於包含大量資料的系統,能夠儲存和識別具有固定長度輸出的資料的好處可以節省大量儲存空間並有助於提高效率。

在區塊鏈中,哈希演算法用於確定區塊鏈的狀態。

區塊鏈是包含資料和指向前一個區塊的雜湊指標的鍊錶,創建了連接區塊的鏈,因此稱為「區塊鏈」。

每個區塊透過哈希指標相互連接,該指標是前一個區塊內的資料的雜湊值以及前一個區塊的位址。 透過以這種格式連結資料區塊,前一個區塊的每個結果雜湊代表了區塊鏈的整個狀態,因為前一個區塊的所有雜湊資料都被哈希為一個哈希。

這由以下輸出(哈希)表示(在 SHA-256 演算法的情況下):

b09a57d476ea01c7f91756adff1d560e579057ac99a28d3f30e259b30ecc9dc7

上面的哈希是之前區塊鏈整個狀態的指紋。 新區塊之前的區塊鏈狀態(作為雜湊資料)是輸入,產生的雜湊是輸出。

儘管可以在沒有 Merkle 樹的情況下使用加密哈希,但它效率極低且不可擴展。 使用雜湊值以系列格式將資料儲存在區塊中既耗時又麻煩。

正如您將看到的,Merkle 樹允許對資料完整性進行簡單的解析,並使用 Merkle 證明在整個樹中映射該資料。


Merkle 樹和 Merkle 證明

Merkle 樹以 Ralph Merkle 的名字命名,他於 1979 年獲得了該概念的專利,Merkle 樹本質上是一種資料結構樹,其中每個非葉節點都是其各自子節點的雜湊。

葉節點是樹中最低層的節點。 乍聽之下可能很難理解,但是看看下面常用的圖,就會變得容易理解多了。

哈希樹

二元哈希樹的範例,圖片來自維基百科

重要的是,請注意左側的非葉節點或「分支」(由哈希 0-0 和哈希 0-1 表示)是其各自子節點 L1 和 L2 的哈希值。 此外,請注意分支 Hash 0 是其串聯子分支、分支 Hash 0-0 和 Hash 0-1 的雜湊。

上面的例子是最常見和最簡單的 Merkle 樹形式,稱為二元 Merkle 樹。 正如你所看到的,有一個頂部哈希,它是整個樹的哈希,稱為根哈希。 本質上,默克爾樹是一種資料結構,可以採用“n”個雜湊值並以單一雜湊值表示。

樹的結構允許有效地映射任意大量的數據,並能夠輕鬆識別數據發生變化的位置。 這個概念使得 Merkle 證明成為可能,透過該證明,人們可以驗證資料的雜湊值在樹上一直一致並且處於正確的位置,而無需實際查看整個雜湊集。

相反,他們可以通過僅檢查哈希的一小部分而不是整個數據集來驗證數據塊與根哈希是否一致。

只要根雜湊是公開已知且可信賴的,任何想要在資料庫上進行鍵值查找的人都可以使用 Merkle 證明來驗證資料庫中某條資料的位置和完整性。一個特定的根。

當根雜湊可用時,可以從任何不可信來源接收雜湊樹,並且可以一次下載樹的一個分支,並立即驗證資料完整性,即使整棵樹尚不可用。

Merkle 樹結構最重要的好處之一是能夠透過類似的雜湊機制來驗證任意大的資料集,該機制用於驗證較少量的資料。

該樹有利於將大量資料分佈到可管理的較小部分中,儘管整體資料大小較大,但完整性驗證的障礙卻大大減少。

根哈希可以用作整個資料集的指紋,包括整個資料庫或代表區塊鏈的整個狀態。 在下面的部分中,我們將討論比特幣和其他系統如何實現 Merkle 樹。


比特幣中的梅克爾樹

比特幣採用的加密雜湊函數是 SHA-256 演算法。 這代表“安全哈希演算法”,其輸出長度固定為 256 位元。 比特幣中默克爾樹的基本功能是儲存並最終修剪每個區塊中的交易。

如前所述,區塊鏈中的區塊透過前一個區塊的哈希值連接。 在比特幣中,每個區塊包含該區塊內的所有交易以及區塊頭,區塊頭包括:

  • 區塊版本號
  • 前一個區塊哈希
  • 時間戳
  • 挖礦難度目標
  • 杜撰
  • 梅克爾根哈希

下圖來自比特幣白皮書,說明了 Merkle 樹如何融入每個區塊。

Merkle樹

礦工將交易包含到區塊中,並作為 Merkle 樹的一部分進行哈希處理,從而得出儲存在區塊頭中的 Merkle 根。 這種設計有許多獨特的優點。

最值得注意的是,如白皮書中所述,這允許存在簡單支付驗證(SPV)節點,也稱為「輕量級客戶端」。 這些節點不必下載整個比特幣區塊鏈,只需下載最長鏈的區塊頭。

SPV 節點可以透過查詢其對等節點直到確信它們正在操作的儲存區塊頭是最長鏈的一部分來實現此目的。 然後,SPV 節點能夠使用 Merkle 證明將交易對應到特定 Merkle 樹,並在作為最長鏈一部分的區塊頭中使用對應 Merkle 樹的根雜湊來確定交易的狀態。

此外,比特幣的 Merkle 樹實作允許對區塊鏈進行修剪以節省空間。 這是因為僅將根雜湊儲存在區塊頭中的結果,因此,可以透過刪除 Merkle 樹的不必要分支來修剪舊區塊,同時僅保留 Merkle 證明所需的分支。


Merkle Tree 在其他區塊鏈和系統中的實現

儘管比特幣是第一個實現 Merkle 樹的區塊鏈,但許多其他區塊鏈也實現了類似的 Merkle 樹結構甚至更複雜的版本。

此外,梅克爾樹的實現不僅限於區塊鏈,還應用於各種其他系統。

以太幣是另一種最知名的加密貨幣,也是不同 Merkle 樹實現的一個很好的例子。 由於以太坊是圖靈完整的平台,可用於構建更複雜的應用程序,因此它使用更複雜版本的Merkle 樹,稱為Merkle Patricia 樹,它實際上是用於三種對象的3 個獨立的Merkle樹。 您可以在這裡了解有關這些樹木的更多資訊。

最後,Merkle 樹是 Git 和 IPFS 等分散式版本控制系統的重要組成部分。 它們能夠輕鬆確保和驗證電腦之間以 P2P 格式共享的資料的完整性,這使得它們對於這些系統來說非常寶貴。


結論

梅克爾樹是區塊鏈不可或缺的組成部分,有效地允許它們以可證明的不變性和交易完整性來運作。

隨著加密貨幣不斷發展成為更大、更複雜的系統,了解它們在分散式網路中所扮演的角色及其加密雜湊函數的底層技術對於掌握加密貨幣的基本概念至關重要。

來源:https://blockonomi.com/merkle-tree/