区块链学习1:Merkle树(默克尔树)和Merkle根
☞ ░ 前往老猿Python博文目录 ░
一、简介
默克尔树(Merkle tree,MT)又翻译为梅克尔树,是一种哈希二叉树,树的根就是Merkle根。
关于Merkle树老猿推荐大家阅读《Merkle树》这篇文章。
Merkle树和Merkle根在区块链中用于维护账本校验数据的完整性和不可篡改,并在变动时快速定位变化的交易数据。在区块链中常用的hash算法为SHA256,关于SHA算法请参考《深入理解SHA系列加密算法》。
二、思考
为什么说在比较两组相同数据量的数据时,将其构建Merkle树后,两个树的根相同就数据相同呢?
理论上说,每个散列算法,包括安全算法,都会发生碰撞,好的算法是散列尽可能均匀,降低碰撞概率,如果这个概率非常非常小,就可以认为不同的数据散列的结果基本不同。区块链中构建Merkle树时采用的哈希方法是SHA256来,一个哈希位有0和1两个可能值。则每一个独立的哈希值通过位的可能值的数量对于SHA-256,有2的256次方种组合,这是一个庞大的数值。因此在数据一致性处理时就认为根相同的树其对应的数据相同。
三、要点
- Merkle树构建过程,是从输入数据开始进行hash,hash的结果作为树的叶子节点,然后相邻两个节点值两两配对作为输入再hash散列得到上层节点,如此一直往上,如果某层的结点数为奇数时,则最后一个节点与自己配对进行散列;
- 任何叶子节点数据变动都会逐层传递,导致根数据发生变化,根结果的比对可以作为构建树的数据的比对;
- 反过来,根节点变化,可以根据逐层往下查找变动的节点,直到找到最终的叶子节点;
- SHA-256散列函数算法总体比较简单高效,可以保证处理过程的高效性。
正是由于这些特点,Merkle树有多种用途:
- 可以用于确保数据完整性的校验
- 可以快速比较大量数据(将两组相同数据量的数据排序后,构建Merkle树,如果两个树的根相同,则两组数据是相同的)
- 散列计算非常快速,可以带来完整性保障校验和数据比对计算性能的优势
- 可以快速定位修改
- 可以作为零知识证明 (zero-knowledge proof)使用来证明交易发生过但无需提供交易数据,具体请参考《Merkle树与SPV验证》、《Merkle树和SPV机制》)。
因此Merkle树和Merkle根才被区块链用于保障交易的完整性和防篡改。
更多关于区块链的内容请见老猿专栏《零基础学区块链》或《零基础学区块链专栏文章目录》。
跟老猿学Python、学5G!
☞ ░ 前往老猿Python博文目录 ░
区块链学习1:Merkle树(默克尔树)和Merkle根的更多相关文章
- 区块链~Merkle Tree(默克尔树)算法解析~转载
转载~Merkle Tree(默克尔树)算法解析 /*最近在看Ethereum,其中一个重要的概念是Merkle Tree,以前从来没有听说过,所以查了些资料,学习了Merkle Tree的知识,因为 ...
- 区块链 - 默克尔树(Merkle Tree)
章节 区块链 – 介绍 区块链 – 发展历史 区块链 – 比特币 区块链 – 应用发展阶段 区块链 – 非对称加密 区块链 – 哈希(Hash) 区块链 – 挖矿 区块链 – 链接区块 区块链 – 工 ...
- 区块链入门到实战(12)之区块链 – 默克尔树(Merkle Tree)
目的:解决由于区块链过长,导致节点硬盘存不下的问题. 方法:只需保留交易的哈希值. 区块链作为分布式账本,原则上网络中的每个节点都应包含整个区块链中全部区块,随着区块链越来越长,节点的硬盘有可能放不下 ...
- Merkle Tree(默克尔树)算法解析
Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶节点 ...
- 转 Merkle Tree(默克尔树)算法解析
Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶节 ...
- Merkle Patricia Tree (MPT) 以太坊中的默克尔树
本篇博文是自己学习mpt的过程,边学边记录,很多原理性内容非自己原创,好的博文将会以链接形式进行共享. 一.什么是mpt MPT是以太坊中的merkle改进树,基于基数树,即前缀树改进而来,大大提高了 ...
- 014-数据结构-树形结构-基数树、Patricia树、默克尔树、梅克尔帕特里夏树( Merkle Patricia Tree, MPT)
一.基数树 Radix树,即基数树,也称压缩前缀树,是一种提供key-value存储查找的数据结构.与Trie不同的是,它对Trie树进行了空间优化,只有一个子节点的中间节点将被压缩.同样的,Radi ...
- [转帖]MerkleDAG全面解析 一文读懂什么是默克尔有向无环图
MerkleDAG全面解析 一文读懂什么是默克尔有向无环图 2018-08-16 15:58区块链/技术 MerkleDAG作为IPFS的核心数据结构,它融合了Merkle Tree和DAG的优点,今 ...
- 区块链学习笔记:D03 区块链在各行业领域的应用(一)
今天主要是学习了区块链在金融和供应链领域的应用,重点体现了区块链多方参与.透明可信.防篡改防抵赖的技术优势 区块链的应用场景最早是在金融行业应用较多,后续逐步扩展到传统行业,如:供应链.政务服务.物联 ...
随机推荐
- 洛谷日报 & 原来博客(转载)
震惊,新的功能:可以按Ctrl + F 进行关键字查询. \(update\) on 10.26:把这两个月的日报也加入进去了,并且修复了几个错误. 本文会把小编用过的博客和比较好的博客放在这里. 可 ...
- C#使用浏览器打开网址
使用指定浏览器打开网址: System.Diagnostics.Process.Start("360chrome.exe", "http://converter.tele ...
- tcp 客户端 发送syn
简介 sys_connect->inet_stream_connect->inet_stream_connect->tcp_v4_connect->tcp_connect对于t ...
- python + appium 执行报错整理
1.driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys("adidas" ...
- flink1.10版local模式提交job流程分析
1.WordCount程序实例 2.本地监听9000端口后测试结果 3.job提交流程 4.local模式执行StreamGraph任务 5.流程分析 flink job提交流程个人理解可以大致分为定 ...
- flink1.10版本StreamGraph生成过程分析
1.StreamGraph本质 本质就是按照用程序代码的执行顺序构建出来的用于向执行环境传输的流式图,并且可以支持可视化展示给用户的一种数据结构. 2.StreamGraph.StreamNode和S ...
- Java项目读取resources资源文件路径那点事
今天在Java程序中读取resources资源下的文件,由于对Java结构了解不透彻,遇到很多坑.正常在Java工程中读取某路径下的文件时,可以采用绝对路径和相对路径,绝对路径没什么好说的,相对路径, ...
- 在 macOS 中使用 Podman
原文链接:https://fuckcloudnative.io/posts/use-podman-in-macos/ Podman 是一个无守护程序与 Docker 命令兼容的下一代 Linux 容器 ...
- CTF-WEB-HCTF 2018 Warmup
题目链接 攻防世界-Warmup 解题思路 [原题复现]HCTF 2018 Warmup(文件包含)
- Java的BigDecimal,对运算封装
添加maven依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava ...

