什麼是默克爾樹(Merkle Tree)
默克爾樹(Merkle Tree),又叫做哈希樹(Hash Tree),是一種在密碼學和電腦科學中典型的二叉樹結構。默克爾樹由一個根節點、一組中間節點和一組子節點組成。默克爾樹通過零知識證明的方法,讓任意一個節點都可以驗證一個數據庫的所有數據是否正確,同時又能在一定程度上保障數據的隱私。
默克爾樹的概念最早由 Merkle Ralf 在 1979 年提出,且被用於分布式文件系統和P2P系統中,來驗證數據的完整性和正確性。
默克爾樹的原理
-
哈希算法
哈希算法是一種允許將任意長度的數據輸出為固定長度的算法。它的優勢是單向加密,即沒有辦法把計算出來的值反推出原始的數據。比如通過哈希算法對數據A加密輸出為B後,無法從B反向推出數據A的值,起到了保護的作用。哈希算法的一個經典應用就是在比特幣中,通過私鑰可以生成比特幣的地址,但無法從比特幣的地址反向推出私鑰。當需要加密的數據發生改變時,加密輸出生成的數據也自然會改變。
-
構建默克爾樹
構建默克爾樹需要從底部開始。
首先,通過用戶在某一個時間點的唯一ID和資產數據創建一個「葉子」,隨後將這個葉子里的數據,通過哈希算法計算出一個哈希值,以此類推⋯⋯每一個用戶都擁有了一個獨一無二的哈希值(如Hash1、Hash2、Hash3…),也就有了第一層的樹枝。
將第一層的樹枝兩兩組合,將用戶1和用戶2的哈希值計算為一個新的哈希值Hash12,用戶3和用戶4的哈希值計算為一個新的哈希值Hash34,依次類推。這樣就生成第二層的樹枝。
這一過程重複進行,直到所有的哈希值被匯總到一個單一的頂層哈希值,也就是根哈希,此時,一棵從葉子到根的完整的默克爾樹就已經構成。在根節點和子節點的樹狀數據結構中,所有的數據處理流程層級化,所有的節點劃分層級。而在自下而上傳輸數據結果的過程中,需要前後節點的不斷驗證,驗證失敗則無法繼續下一步,保證了在數據計算過程中不會發生錯漏或誤差。
資產證明中的默克爾樹
由於默克爾樹數據的完整性和統一性等特性,默克爾樹開始被應用於加密貨幣交易所的資產證明中。用戶通過自己的UID和餘額信息生成屬於該時刻的哈希值,並通過系統來匹配默克爾樹中是否存在一致的數據,若存在,則證明當前平台的帳目為精準可靠的。