世人皆知区块链,却不知梅克尔树呀
最近,研究中本聪大神的论文,他提到了梅克尔树让我很好奇, 打算研究一下,谁知道网上各种乱天飞的文章几乎都定义成:
[java] view plain copy
梅克尔树(Merkle trees)是区块链的基本组成部分。
好吧,这样说不是不对,可是明明先有的梅克尔树,后有的区块链,难道当时定义它的人有预测的功能,知道此结构必将应用于区块链。
所以我觉得当时梅克尔树结构才出来的时候应该和区块链一毛钱关系也没有。
梅克尔树,最早叫做哈希树,在1979年的时候,Ralph Merkle 这个哥们为它申请的专利, 因此从那时候名字改作梅克尔树Merkle trees。 看到这里,我只想说,我X, 原来软件数据结构还能申请专利。也不知道专利有什么意义,别人不能用吗,还是用要给他使用费?
好了,还是言归正传,说说这种数据结构,首先它是一种树状的数据结构, 可以是二叉也可以是多叉,只不过二叉应用的非常广泛。树的所有叶节点存储的是数据块的哈希值, 所有非叶节点存储的是它自己所有子节点的哈希值, 然后一路哈希上去。
这就是梅克尔树Merkle trees。它实际是哈希列表和哈希链表的衍生物品。
使用
梅克尔树可以非常高效的验证计算机之间任何数据的存储、处理和传输。特别是在点对点网络里,能够确认你收到的数据没有被破坏或者篡改, 也能验证其它节点没有恶意向你发虚假的数据 (是不是开始有点接近区块链的优点?)。
在梅克尔树的顶端,这是一个顶部哈希(或者叫作根哈希、主哈希)。 在一个点对点网络里,下载文件之前,你通常可以先从朋友或者信任的第三方(证书中心)获取这个顶部哈希。 一旦拥有了顶部哈希, 你简直可以随便来了, 能从任意不信任的节点去下载整个梅克尔树, 比如在点对点网络里其它任意节点上。这是因为你只要检查下载的树的根节点哈希值是不是和你之前获取的那个一致,不一致,就放弃,找另外一个节点去下载,直到找到和你的哈希一致的。
参考:
梅克尔树的Java实现:https://github.com/richpl/merkletree
Ralph_Merkle https://en.wikipedia.org/wiki/Ralph_Merkle
共同学习,写下你的评论
评论加载中...
作者其他优质文章