梅克爾樹簡介
梅克爾樹(Merkle trees)是區塊鏈的基本組成部分。梅克爾樹,又叫雜湊樹,顧名思義,就是儲存hash值的一棵樹。是一種二叉樹,由一個根節點、一組中間節點和一組葉節點組成。最下面的葉節點包含儲存資料或其雜湊值,每個中間節點是它的兩個子節點內容的雜湊值,根節點也是由它的兩個子節點內容的雜湊值組成。
梅克爾樹有父節點,子節點,兄弟節點之分。
根據梅克爾樹的資料結構,我們可以清楚的瞭解到,只要我們記住最前面的根節點的雜湊值,我們就可以根據雜湊值回溯到表中的任意位置,這讓我們能保證表中的資料儲存不被篡改。
如果有人篡改了梅克爾樹底部的一些資料區塊,會導致其父節點的雜湊值改變,這一篡改也將引起更上一層的雜湊值的改變,直到引起根節點雜湊值的改變,而此時,資料篡改已經暴露,因為我們儲存了根節點的雜湊值。
因此,只要我們記住根節點的雜湊值,任何企圖篡改資料的行為都會被檢測到,這讓資料篡改變得不可能實現。
梅克爾樹的特點
1、防止資料區塊篡改
由於梅克爾樹的結構特點,對於資料的修改,會造成父節點雜湊值的改變,而這一改變最終體現在根節點的雜湊值改變上,根節點的不同則直接暴露了資料的篡改。
2、快速查詢或驗證
如下圖所示,分別是12、5、18、2、9、15、19、17、16一列資料。
此時的規則是,子節點比父節點大,則放在樹的右邊,子節點比父節點小,則放在樹的左邊,我們若想找到9的位置,只需要驗證三次即可。
第一步,9與根節點12對比,9<12,則我們去樹的左邊去找
第二步,9與5對比,9>5,我們則去5的右邊去找,
第三步,找到最終的資料
實踐證明,這樣可以大大提高查詢的效率。
3、節點儲存雜湊值
4、從葉子節點開始造樹
梅克爾證明
從上面的簡介中我們可以看到,整個梅克爾樹,只要掌握了根節點,其他裡面的子節點所儲存的等於是一手掌握。因為,任何一個子節點的絲毫變動都會引起根節點的變動,這就引出了基於梅克爾樹的證明:梅克爾證明。
一顆梅克爾樹包含了根節點雜湊,以及所有沿資料塊到根路徑雜湊的“分支”資料,而這裡面最重要的無疑就是根節點雜湊,在根節點公開並且可信的情況下, 我們要驗證梅克爾樹裡任一個資料的完整性和正確性,只要驗證根節點雜湊值即可,這就使梅克爾樹形成了一種機制,透過驗證很小的的資料(例如跟節點雜湊),即可以驗證一個大型資料庫的完整性與正確性。
市值排名前兩位的BTC/" target="_blank"">比特幣系統和以太坊系統都採用了梅克爾證明。當然,它們使用也是有所區別的。
這將牽扯到系統區塊的組成等內容,在之後的知識學習與分享中,我們再來探討。