java merkle树,梅克尔树Merkle trees

梅克尔树,源于1979年Ralph Merkle的专利,是一种哈希树数据结构,常用于高效验证数据的完整性和一致性。在点对点网络中,它确保数据未被篡改。区块链利用了梅克尔树的特性来验证交易和维护账本的完整性。通过顶部哈希,用户可以验证从不信任节点下载的数据是否正确。梅克尔树的运用预示了其在区块链领域的核心作用。
摘要由CSDN通过智能技术生成

世人皆知区块链,却不知梅克尔树呀

最近,研究中本聪大神的论文,他提到了梅克尔树让我很好奇, 打算研究一下,谁知道网上各种乱天飞的文章几乎都定义成:梅克尔树(Merkle trees)是区块链的基本组成部分。

好吧,这样说不是不对,可是明明先有的梅克尔树,后有的区块链,难道当时定义它的人有预测的功能,知道此结构必将应用于区块链。

所以我觉得当时梅克尔树结构才出来的时候应该和区块链一毛钱关系也没有。

梅克尔树,最早叫做哈希树,在1979年的时候,Ralph Merkle 这个哥们为它申请的专利, 因此从那时候名字改作梅克尔树Merkle trees。 看到这里,我只想说,我X, 原来软件数据结构还能申请专利。也不知道专利有什么意义,别人不能用吗,还是用要给他使用费?

好了,还是言归正传,说说这种数据结构,首先它是一种树状的数据结构, 可以是二叉也可以是多叉,只不过二叉应用的非常广泛。树的所有叶节点存储的是数据块的哈希值, 所有非叶节点存储的是它自己所有子节点的哈希值, 然后一路哈希上去。

AAffA0nNPuCLAAAAAElFTkSuQmCC

这就是梅克尔树Merkle trees。它实际是哈希列表和哈希链表的衍生物品。

使用

梅克尔树可以非常高效的验证计算机之间任何数据的存储、处理和传输。特别是在点对点网络里,能够确认你收到的数据没有被破坏或者篡改, 也能验证其它节点没有恶意向你发虚假的数据 (是不是开始有点接近区块链的优点?)。

在梅克尔树的顶端,这是一个顶部哈希(或者叫作根哈希、主哈希)。 在一个点对点网络里,下载文件之前,你通常可以先从朋友或者信任的第三方(证书中心)获取这个顶部哈希。 一旦拥有了顶部哈希, 你简直可以随便来了, 能从任意不信任的节点去下载整个梅克尔树, 比如在点对点网络里其它任意节点上。这是因为你只要检查下载的树的根节点哈希值是不是和你之前获取的那个一致,不一致,就放弃,找另外一个节点去下载,直到找到和你的哈希一致的。

参考:

梅克尔树的Java实现:https://github.com/richpl/merkletree

Ralph_Merkle https://en.wikipedia.org/wiki/Ralph_Merkle

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值