Hash
為什麼默克爾樹的非葉子節點需要散列?
給定標準的 Merkle 樹,如Wikipedia所示。我很難理解為什麼
Hash(Hash(Leaf A)|| Hash(Leaf B))
在 A 和 B 的父母處比在Hash(Leaf A) || Hash(Leaf B)
. 我知道雜湊不能比它的輸入更耐碰撞,那麼為什麼我們不能只返回串聯而不是再次進行雙重雜湊呢?是否只是讓結果再次成為固定大小?
Merkle Tree 的好處是您只儲存一個元素,即頂部雜湊。您不需要儲存任何其他元素來驗證數據。每個元素的散列在鏈中到頂部散列。
在您的建議中,如果需要獲得 A,那麼您返回
Hash(Leaf A) || Hash(Leaf B)
。可是等等; 如何通過頂部雜湊驗證它。為了驗證我們需要儲存Hash(Leaf A) || Hash(Leaf B)
. 所以會有很多元素需要儲存。因此,如果您堅持默克爾的想法,您將受益匪淺。對於評論;
- 散列層是必要的,因為我們只能儲存頂部散列的一個元素,並且我們只能返回預期的元素,因為元素位於葉級別,我們只需要傳輸請求的葉和根散列的路徑。
- 一些用途: 針對故障攻擊的記憶體驗證。此外,將文件儲存在雲上。這將防止回滾攻擊,即攻擊者替換舊版本的文件。Merkle Tree 能夠以可忽略的錯誤接受進行檢測。