Merkle樹(默克爾樹)
默克爾樹是一類基于哈希值的二叉樹或多叉樹,其葉子節(jié)點上的值通常為數(shù)據(jù)塊的哈希值,而非葉子節(jié)點上的值,是將該節(jié)點的所有子節(jié)點的組合結果的哈希值。
默克爾樹一般用來進行完整性驗證處理,在處理完整性驗證的應用場景中,默克爾樹會大大減少數(shù)據(jù)的傳輸量及計算的復雜度。
通常,要確定一個數(shù)據(jù)塊是默克爾樹中的一員,只需要樹根及這個區(qū)塊和通向樹根沿途的中間哈希值,可以暫時忽略樹的其他部分,這些就已經(jīng)足以讓我們驗證了。
由此可見,哈希加密算法的驗證相比于正向求解要容易
1. 默克爾樹的意義:(節(jié)約硬盤空間,每個節(jié)點都可以存儲交易,每個節(jié)點都有權驗證交易)
為了同時確保不損害區(qū)塊的hash,交易被hash為一棵Merkle Tree,這個Merkel Tree只有root節(jié)點被包含進了這個區(qū)塊的hash。老的區(qū)塊能夠被壓縮通過將這個樹的分支進行拔除(stubbing off branches of thetree)。而內(nèi)部的hash是不必被保存的。個人并不需要這個區(qū)塊,只需要這個區(qū)塊的hash(索引)就可以,有ipfs,公共節(jié)點,高信任度節(jié)點幫忙存儲。
一個剔除交易的區(qū)塊頭大概會是80byte大小。如果我們假設區(qū)塊每10分鐘就生成一個,那么80bytes * 6 * 25 * 365 = 4.2MB 每年。2008 年PC系統(tǒng)通常的內(nèi)存容量為2GB,按照摩爾定理預言的每年增長1.2GB的大小,即使將全部的區(qū)塊頭存儲在內(nèi)存之中都不是問題。
2. 這里會有一個取舍,存儲空間與安全,假設因為默克爾數(shù),保留的節(jié)點(交易)太少,就可能造成安全問題,一個攻擊者擁有超過全網(wǎng)的算力的成本是相對較低的,當然這主要針對小區(qū)塊鏈系統(tǒng)。