区块链:Merkle Tree
1.Merkle Tree用途
在区块链中,每一个区块中都有一个Merkle Tree,用来储存交易信息,并对交易信息进行完整性验证。
2.Merkle Tree创建
假设一个区块中,加入最低层有4个数据块,每个交易数据两两配对进行Hash运算,构成Merkle Tree节点,以此推进,进而生成整个Merkle Tree,如下图:
Merkle Tree.png第1步:(红色线)对数据块做Hash运算;
第2步: (橙色线)相邻两个Hash值配对,做Hash运算;
第3步:(黄色线)重复第2步,生成Merkle Tree Root。
3.Merkle Tree完整性验证
从图中,可以看出构造Merkle Tree的所有节点,都是hash值。由于hash的碰撞性,可以用来验证信息的完整性,因此,Merkle Tree可以用来进行完整性验证。
Merkle Tree进行完整性验证有哪些优势呢?可以减少网络传输。
在网络中,B给A传文件,A需要确认文件是否有损坏,怎么做?B可以在传文件之前把文件的Hash值给A,A根据收到文件运算出的Hash值对比B给出的Hash值是否一致,来确定文件传输过程中没有损坏。
对于大文件的传输,往往把文件分解为一个小块,并对文件构建Merkle Tree,然后从一个可信的渠道获取文件正确的Merkle Tree根。假如A给B传输文件,B可以根据接收到的文件构建Merkle Tree根,然后对比A给的Merkle Tree根,可以验证文件是否被修改,如果有,只需重新传输被修改的数据块。
在对数据进行验证时,可以减少数据量的传输,假如要验证上图中003数据块,除了Merkle Tree根外,用户只需要知道节点A的Hash(C,D)、F点的Hash(004)、003数据块,不需要其他数据块对应的信息,经过3次Hash计算就可以确认003数据块是否被修改。
参考资料
[1].邹均,张海宁.区块链技术指南[M].北京:机械出版社,2016.11
[2].