常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」
免責(zé)聲明:本文旨在傳遞更多市場(chǎng)信息,不構(gòu)成任何投資建議。文章僅代表作者觀點(diǎn),不代表火星財(cái)經(jīng)官方立場(chǎng)。
小編:記得關(guān)注哦
來(lái)源:萬(wàn)向區(qū)塊鏈
原文標(biāo)題:三分鐘了解區(qū)塊鏈常用數(shù)據(jù)結(jié)構(gòu)「默克爾樹(shù)」
默克爾樹(shù)是由哈希值構(gòu)成的樹(shù)狀數(shù)據(jù)結(jié)構(gòu),封裝在區(qū)塊鏈數(shù)據(jù)層,用于驗(yàn)證區(qū)塊鏈數(shù)據(jù)的完整準(zhǔn)確性。
原文標(biāo)題:《默克爾樹(shù)究竟是棵什么樹(shù)?| 萬(wàn)向區(qū)塊鏈小課堂》 撰文:萬(wàn)向區(qū)塊鏈
本期萬(wàn)向區(qū)塊鏈小課堂將為大家講解區(qū)塊鏈中經(jīng)常提及的一棵樹(shù):默克爾樹(shù)(Merkle Tree)。
來(lái)回憶下我們之前小課堂解構(gòu)的區(qū)塊鏈六層模型,默克爾樹(shù)封裝在數(shù)據(jù)層,說(shuō)明它是一個(gè)密碼學(xué)技術(shù),用以保護(hù)區(qū)塊鏈的安全。
默克爾樹(shù)于 1979 年由美國(guó)計(jì)算機(jī)科學(xué)家拉爾夫·默克爾(Ralph Merkle)提出,本質(zhì)上是一種樹(shù)狀數(shù)據(jù)結(jié)構(gòu),由數(shù)據(jù)塊、葉子節(jié)點(diǎn)、中間節(jié)點(diǎn)和根節(jié)點(diǎn)組成。所以,一組合,就叫「Merkle Tree」。
默克爾樹(shù)各部分的構(gòu)成關(guān)系如下圖:
要得到這樣一棵默克爾樹(shù),首先要對(duì)底部數(shù)據(jù)塊進(jìn)行哈希運(yùn)算,用每個(gè)數(shù)據(jù)塊對(duì)應(yīng)的哈希值生成葉子節(jié)點(diǎn)。再對(duì)相鄰的 2 個(gè)葉子節(jié)點(diǎn)進(jìn)行哈希運(yùn)算,得到的哈希值生成中間節(jié)點(diǎn),最后對(duì)相鄰的 2 個(gè)中間節(jié)點(diǎn)進(jìn)行哈希運(yùn)算,得到的哈希值生成根節(jié)點(diǎn)。由于各類節(jié)點(diǎn)都是由哈希值構(gòu)成,因此默克爾樹(shù)又被稱為哈希樹(shù),即儲(chǔ)存哈希值的樹(shù)狀數(shù)據(jù)結(jié)構(gòu)。
看起來(lái)是不是很像一棵底下堆滿了禮物的圣誕樹(shù)?
哈希運(yùn)算和哈希值
生成默克爾樹(shù)用到的哈希運(yùn)算是區(qū)塊鏈中常用的加密函數(shù)。任意大小、長(zhǎng)度的數(shù)據(jù)經(jīng)過(guò)哈希運(yùn)算后都會(huì)得到一個(gè)固定大小和長(zhǎng)度的數(shù)值,即哈希值。就像我們的指紋或簽名能幫助鑒別我們的身份,哈希值也可以看成是數(shù)據(jù)的指紋或簽名,用于驗(yàn)證數(shù)據(jù)的真實(shí)準(zhǔn)確性,并具有以下特征:
確定性
數(shù)據(jù)和哈希值之間是確定的一一對(duì)應(yīng)關(guān)系,即相同數(shù)據(jù)經(jīng)過(guò)哈希運(yùn)算會(huì)得到相同的哈希值。
不可逆性
哈希運(yùn)算的過(guò)程是不可逆的,即數(shù)據(jù)經(jīng)過(guò)哈希運(yùn)算可以得到哈希值,但不可以通過(guò)哈希值推導(dǎo)出原始運(yùn)算數(shù)據(jù),由此保證數(shù)據(jù)的隱私和安全性。比如 Facebook 等網(wǎng)站會(huì)將用戶密碼計(jì)算成哈希值并儲(chǔ)存。用戶每次輸入密碼時(shí),密碼都會(huì)被轉(zhuǎn)換成哈希值與網(wǎng)站記錄的版本進(jìn)行對(duì)比,從而驗(yàn)證密碼是否正確。由于哈希運(yùn)算的不可逆性,網(wǎng)站無(wú)法從哈希值中推導(dǎo)出用戶密碼,從而保證用戶信息安全。
統(tǒng)一性
即上文提到的任意大小、長(zhǎng)度的數(shù)據(jù)經(jīng)過(guò)哈希運(yùn)算后會(huì)生成大小、長(zhǎng)度統(tǒng)一的哈希值,一方面起到壓縮數(shù)據(jù),減輕數(shù)據(jù)儲(chǔ)存壓力的作用,另一方面規(guī)整了雜亂無(wú)章的原數(shù)據(jù),方便后期比對(duì)驗(yàn)證。
為什么要用默克爾樹(shù)?
由于默克爾樹(shù)本質(zhì)上是由哈希值構(gòu)成的樹(shù)狀數(shù)據(jù)結(jié)構(gòu),因此也繼承了哈希值用于保證數(shù)據(jù)安全隱私和校驗(yàn)數(shù)據(jù)準(zhǔn)確和完整性的功能,主要應(yīng)用于點(diǎn)對(duì)點(diǎn)下載,例如 BT 下載、開(kāi)源分布式控制系統(tǒng) Git、比特幣和以太坊區(qū)塊鏈等場(chǎng)景中。因?yàn)槲覀冸y以保證這些去中心化系統(tǒng)中的每個(gè)節(jié)點(diǎn)都會(huì)提供真實(shí)可信的數(shù)據(jù),也難以避免數(shù)據(jù)在傳輸過(guò)程中出現(xiàn)丟失、損壞等情況,所以需要引入數(shù)據(jù)加密和校驗(yàn)機(jī)制。
看到這里,你可能已經(jīng)意識(shí)到了默克爾樹(shù)其實(shí)就是將數(shù)據(jù)分割成多個(gè)小塊,進(jìn)行多次哈希運(yùn)算,搭建出的一個(gè)樹(shù)狀數(shù)據(jù)結(jié)構(gòu)。那為什么要對(duì)數(shù)據(jù)進(jìn)行拆分,計(jì)算出多個(gè)哈希值用于校驗(yàn)?zāi)?#xff1f;這不是增加工作量了嗎?但其實(shí)這樣做是為了提高數(shù)據(jù)驗(yàn)證的靈活性,數(shù)據(jù)量越大,默克爾樹(shù)的這一優(yōu)勢(shì)會(huì)體現(xiàn)得越明顯。
試想一下,如果我們不對(duì)數(shù)據(jù)進(jìn)行拆分,而是將整體計(jì)算成一個(gè)哈希值,那當(dāng)數(shù)據(jù)校驗(yàn)出現(xiàn)問(wèn)題時(shí),我們很難分辨問(wèn)題出現(xiàn)在哪里,只能回過(guò)頭去對(duì)整個(gè)數(shù)據(jù)進(jìn)行排查,如果數(shù)據(jù)量特別大,那么這個(gè)錯(cuò)誤排查過(guò)程無(wú)異于海底撈針。
但在默克爾樹(shù)里,數(shù)據(jù)被拆分成多個(gè)小塊,形成了多個(gè)分支,可以根據(jù)具體情況對(duì)部分?jǐn)?shù)據(jù)進(jìn)行校驗(yàn),無(wú)需校驗(yàn)整個(gè)數(shù)據(jù),從而提高數(shù)據(jù)校驗(yàn)的靈活性和效率。
最后總結(jié)一下默克爾樹(shù)的知識(shí)要點(diǎn):
- 由哈希值構(gòu)成的樹(shù)狀數(shù)據(jù)結(jié)構(gòu)
- 用于驗(yàn)證驗(yàn)證區(qū)塊鏈等去中心化系統(tǒng)中的數(shù)據(jù)的完整準(zhǔn)確性
- 具有靈活高效驗(yàn)證數(shù)據(jù)的優(yōu)勢(shì)
來(lái)源鏈接:mp.weixin.qq.com
總結(jié)
以上是生活随笔為你收集整理的常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一百层电梯有哪些攻略
- 下一篇: 倒排索引原理_搜索引擎都在用的倒排索引—