区块链 -- Merkle Tree

我们地球上大部分人应该连它的名字都没有听过,而且说实话它也是个比较传统的概念了。Merkle Tree 是由计算机科学家 Ralph Merkle 在很多年前提出的,并以他本人的名字来命名。不过,Merkle Tree 确实涉及到了很多有意思的实际应用。最近几年才有的一个例子是,比特币钱包服务用 Merkle Tree 的机制来作”百分百准备金证明“ ( http://blog.bifubao.com/2014/03/16/proof-of-reserves/ )。不过今天,我们还是从数据的“完整性校验”这个角度来聊 Merkle Tree。 Git 版本控制系统,ZFS 文件系统以及我们自己下载电影常用的点对点网络 BT 下载,都是通过 Merkle Tree 来进行完整性校验的。顺便说一句,所谓的完整性校验,就是检查一下数据有没有损坏。

先说哈希( Hash )

其实要实现完整性校验,最简单的方法就是对要校验的整个的数据文件做个哈希运算,把得到的哈希值公布在网上,这样我们把数据下载到手之后,再次运算一下哈希值,如果运算结果相等,就表示我们下载过程中文件没有任何的损坏。因为哈希的最大特点是,如果你的输入数据,稍微变了一点点,那么经过哈希运算,你得到的哈希值将会变得面目全非。这样做的一个目的是可以防止有人根据哈希值反推出原始输入数据的一些特征。前面我录了一期视频专门关于哈希的,大家可以看看。

如果我们从一个稳定的服务器上进行下载,那么采用单个哈希来进行校验的形式是可以接受的。

再说哈希列表( Hash List )

但是在点对点网络中作数据传输的时候,我们会从同时从多个机器上下载数据,而且其中很多机器可以认为是不稳定或者是不可信的,这时需要有更加巧妙的做法。实际中,点对点网络在传输数据的时候,其实都是把比较大的一个文件,切成小的数据块。这样的好处是,如果有一个小块数据在传输过程中损坏了,那我只要重新下载这一个数据块就行了,不用重新下载整个文件。当然这就要求每个数据块都拥有自己的哈希值。BT 下载的时候,在下载真正的数据之前,我们会先下载一个哈希列表的。这时有一个问题就出现了,那么多的哈希,我们怎么保证它们本身都是正确地呢?

答案是我们需要一个根哈希。把每个小块的哈希值拼到一起,然后对整个这个长长的字符串再做一次哈希运算,最终的结果就是哈希列表的根哈希。于是,如果我们能够保证从一个绝对可信的网站,或者从我们的朋友手里拿到一个正确的根哈希,就可以用它来校验哈希列表中的每一
个哈希都是正确的,进而可以保证下载的每一个数据块的正确性了。

这种方式挺好,但是实际的应用中,其实还是有着它的不足之处的,这就是为什么 Merkle 教授要发明 Merkle Tree 了。

最后是 Merkle Tree

先看它的结构。

在最底层,和哈希列表一样,我们把数据分成小的数据块,有相应地哈希和它对应。但是往上走,并不是直接去运算根哈希,而是把相邻的两个哈希合并成一个字符串,然后运算这个字符串的哈希,这样每两个哈希就结婚生子,得到了一个”子哈希“。如果最底层的哈希总数是单数,那到最后必然出现一个单身哈希,这种情况就直接对它进行哈希运算,所以也能得到它的子哈希。于是往上推,依然是一样的方式,可以得到数目更少的新一级哈希,最终必然形成一棵倒挂的树,到了树根的这个位置,这一代就剩下一个根哈希了,我们把它叫做 Merkle root.

再说它的优点。

相对于 Hash List,Merkle Tree 的明显的一个好处是可以单独拿出一个分支来(作为一个小树)对部分数据进行校验,这个很多使用场合就带来了哈希列表所不能比拟的方便和高效。

好,这一期就说这么多,大家现在概念上有个认识,后面我们会有专门的文章讲 Merkle Tree 实用的例子。

参考资料

原文地址:https://www.cnblogs.com/mafeng/p/8391363.html

时间: 2024-08-29 17:08:47

区块链 -- Merkle Tree的相关文章

区块链~Merkle Tree(默克尔树)算法解析~转载

转载~Merkle Tree(默克尔树)算法解析 /*最近在看Ethereum,其中一个重要的概念是Merkle Tree,以前从来没有听说过,所以查了些资料,学习了Merkle Tree的知识,因为接触时间不长,对Merkle Tree的理解也不是很深入,如果有不对的地方,希望各位大神指正*/ Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶节点是

1.3.2 区块链中的密码学——Merkle 树

在计算机领域,Merkle树大多用来进行完整性验证处理.在处理完整性验证的应用场景中,特别是在分布式环境下进行这样的验证时,Merkle树会大大减少数据的传输量以及计算的复杂度. Merkle哈希树是一类基于哈希值的二叉树或多叉树,其叶子节点上的值通常为数据块的哈希值,而非叶子节点上的值是将该节点的所有子节点的组合结果的哈希值. 如下图所示为一个Merkle哈希树,节点A的值必须通过节点C.D上的值计算而得到.叶子节点C.D分别存储数据块001和002的哈希值,而非叶子节点A存储的是其子节点C.

cpp 区块链模拟示例(七) 补充 Merkle树

Merkle 树 完整的比特币数据库(也就是区块链)需要超过 140 Gb 的磁盘空间.因为比特币的去中心化特性,网络中的每个节点必须是独立,自给自足的,也就是每个节点必须存储一个区块链的完整副本.随着越来越多的人使用比特币,这条规则变得越来越难以遵守:因为不太可能每个人都去运行一个全节点.并且,由于节点是网络中的完全参与者,它们负有相关责任:节点必须验证交易和区块.另外,要想与其他节点交互和下载新块,也有一定的网络流量需求. 在中本聪的 比特币原始论文 中,对这个问题也有一个解决方案:简易支付

清华大学iCenter区块链公开课 第二节

1.比特币区块的结构 比特币区块结构: 区块大小 区块头 辕老师简版区块: 2.比特币交易结构 输入(可以有多个):比特币来源的UTXO 输出(可以有多个):手续费.接收比特币的地址 总量.锁定脚本尺寸.锁定脚本(锁定接收比特币的公钥地址,当其想使用这个比特币的时候,需要拿私钥解锁) UTXO:未花费交易 3.Merkle数 判断一笔交易是否在一个区块里面,通过计算hash,在Merkle中进行查找,有查找算法(需要提供相邻节点的hash值向上层计算...) https://www.youtub

从实现的角度解读区块链

前言 随着比特币的起起伏伏,区块链技术越来越受到关注.区块链和比特币是当下和人工智能一样风靡的领域.人们开始寻找区块链技术的用武之地,已经有了不少的尝试.但是区块链的价值所在众说纷纭,特别是一些媒体胡乱吹嘘或者是故意贬低,给大家都带来了不小的困惑.其实作为一名技术人员只需要理解其底层实现原理和运行机制,之后其应用场景和发展前景相信都会有自己的见解. 在阅读完本篇文章对区块链有了一定的了解后可以参考区块链的一个简单的模拟实现来加深自己的理解:(toychain) 欢迎star :) 区块链和比特币

区块链的前生今世

今晚九点公开课直播为大家讲解区块链的前生今世,参与方式在文章底部. 目录 历史与现状 比特币与区块链 智能合约与以太坊 币圈与链圈 主讲师:PC 2012年接触比特币,炒币.挖矿.量化.做市场 豆瓣.百度.360.第四范式 知乎<面向工资编程> 投身区块链基础设施创业 历史与现状 比特币和区块链出现的历史,就好比是人类在集齐龙珠的过程 龙珠一共有七颗 <货币的非国家化> Merkle Tree 椭圆曲线加密算法 Proof of Work P2P 技术 SHA-256 中本聪 19

以数据库思维理解区块链

作为一个数据库行业的老兵,我看到在区块链技术的热潮下,传统的IT技术同学们保持了十分理性,甚至是排斥的态度.其实不管是热捧还是排斥,两极观点之下,我认为我们应该从IT人比较能够理解的角度探讨一下区块链技术.因为区块链这个东西的本质和数据库技术非常相像,很多机制使用数据库的理念去理解会非常直观准确. 对于区块链和传统数据技术,我认为区块链技术的未来发展,主题是"融合".我们就从数据库这个角度来解读区块链技术体系中各个技术点,以及通过"去中心化数据库"这个概念,把区块链

什么是区块链

1.区块链的诞生 互联网上的贸易,几乎都需要借助可资信赖的第三方信用机构来处理电子支付信息.这类系统仍然内生性地受制于"基于信用的模式".区块链技术是构建比特币区块链网络与交易信息加密传输的基础技术.它基于密码学原理而不基于信用,使得任何达成一致的双方直接支付,从而不需要第三方中介的参与. 定义: 区块链是一个分布式账本,一种通过去中心化.去信任的方式集体维护一个可靠数据库的技术方案. 从数据的角度来看:区块链是一种几乎不可能被更改的分布式数据库.这里的"分布式"不

什么是区块链?

一.什么是区块链? 说到区块链,就不得不说比特币. 2008年底,比特币之父中本聪发表了一个关于他研究的电子现金系统的九页白皮书,2009年初,中本聪在位于芬兰赫尔辛基的一个小型服务器上挖出了比特币的第一个区块——创世区块,并将当天泰晤士报头版一则关于救助银行的新闻标题写入创世区块,这也代表着比特币诞生了. 区块链是比特币的底层技术,它可以理解为一种公共记账的机制(技术方案),它并不是一款具体的产品.其基本思想是:通过建立一组互联网上的公共账本,由网络中所有的用户共同在账本上记账与核账,来保证信