在讨论区块链技术时,您是否听说过Merkle树?那是因为默克尔树是技术本身的核心.
那到底是什么?
在本文中,我们将深入研究Merkle树,并了解其在使区块链技术取得成功方面的作用。.
让我们开始吧.
什么是默克尔树?
Merkle树是一种数据结构,用于对大型内容池中的数据进行安全验证。在验证数据方面,它也是高效且一致的.
以太坊和比特币都利用Merkle树.
问题: 在集中式网络的核心,可以从一个副本访问数据。这意味着他们不必做太多的事情来存储或访问数据。但是,当涉及到去中心化的区块链网络时,由于每个数据都在节点之间复制,事情变得一团糟。因此,有效访问数据是一个挑战。挑战还在于复制数据并在节点之间共享。最重要的是,需要为每个接收节点验证共享数据.
解决方案: 默克尔树使分散的区块链能够共享数据,对其进行验证并使其可信赖。它以不需要太多处理能力来共享和验证数据的方式来组织数据。由于使用了哈希函数和加密技术,它还促进了安全交易.
中本聪(Satoshi Nakamoto)是第一位通过比特币在区块链技术中实现Merkle树的人。他的用法开辟了计算机科学的一个新分支,不需要集中的权限。他还过度使用了Merkle树,并使用了Fast Merkle树.
但是,该概念由Ralph Merkle首次提出,他于1979年申请了专利。它以他的名字命名。.
另请阅读Hyperledger Cactus:新的Hyperledger框架
加密哈希函数
在讨论Merkle树之前,我们需要更好地了解加密哈希函数.
哈希函数负责将任意长度的任意形式的任意数据映射到固定大小的输出。它是一种密码功能,因此在密码学中被广泛使用.
散列函数是高效的,并且以其一个属性而闻名,即该函数不能逆转。它是一种单向功能,旨在仅以这种方式工作.
散列具有多种用途,包括
- 密码保护
- 文件完整性检查和验证
- 加密货币
那里有多个哈希家族,包括Message Direct(MD),Secure Hash Function(SHF)和RIPE Message Direct(RIPEMD).
如果使用SHA256哈希算法并传递101Blockchains作为输入,则将获得以下输出
fbffd63a60374a31aa9811cbc80b577e23925a5874e86a17f712bab874f33ac9
综上所述,哈希函数的关键属性包括:
- 确定性
- 防前像
- 计算有效
- 不可逆向工程
- 防碰撞
如果您想了解有关加密哈希函数的更多信息,请在此处查看详细的文章:
默克尔树如何工作?
既然我们对散列函数有了一定的了解,那么现在是时候进一步了解Merkle Trees了.
因此,从技术上讲,默克尔树是数据结构树,其中非叶节点被定义为其相应子节点的哈希值.
这也意味着默克尔树向下倒置,其中叶节点是最低节点.
为了更好地理解我要传达的内容,让我们看一下Merkle树示例:
资料来源:维基百科
在默克尔树的核心,我们需要学习三个重要术语。它们如下:
- 默克尔根
- 叶节点
- 非叶节点
如果您从整体上看Merkle树,那是一棵倒置的树。该树本身能够汇总一整套交易。这意味着用户可以验证交易是否是该区块的一部分.
为了使Merkle树起作用,使用了哈希。它只是简单地重复对节点进行哈希处理,直到仅剩下一个哈希值为止。左哈希值称为 默克尔根或根哈希. 该树是使用各个交易哈希从下至上创建的。各个交易哈希也称为交易ID.
叶节点是包含事务数据哈希的节点。对于非叶节点,它们存储前两个哈希的哈希.
Merkle树的另一个重要特性是它本质上是二元的。这意味着它要求叶节点保持一致才能正常工作。如果叶子节点的数量奇数,它将简单地复制最后一个哈希并将其设为偶数.
一个例子
让我们通过举例来理解它.
默克尔树示例
在这里,我们看到该区块中发生了四笔交易。这些事务分别命名为X,Y,Z和W。然后对这些事务进行哈希处理,然后存储在叶节点中,我们将其命名为Hash X,Hash Y,Hash Z和HashW。.
完成后,哈希H,X,Y,Z和W的叶节点再次被哈希并创建为XY和ZW的组合哈希。最后,这两个哈希值用于创建Merkle Root或Root Hash.
散列的整个过程可以在非常大的数据集上完成,这使得Merkle Trees数据结构在分散网络的情况下很有用.
如前所述,哈希算法的使用取决于实现。但是,使用的最常见的哈希函数之一包括SHA-2加密哈希函数.
因此,由于哈希值的存在,可以验证先前的交易是否可验证的交易.
数据完整性如何?
Merkle树是数据完整性的理想选择。同样,无需遍历整个交易即可查看其可验证性。可以使用存储在块头中的信息来验证交易。 Merkle根值也会根据之前的交易而更改.
这也意味着根值经常更改,并且可以几乎立即用于验证交易.
所有这些听起来都有点像哈希表,但是,事实并非如此。对于哈希列表,您需要下载完整列表以验证交易或数据.
对于Merkle树,您可以下载分支,然后使用它来验证交易.
无需下载整个树即可验证交易。这也意味着可以将整个树划分为小的数据块,这些数据块可用于验证整个网络中的事务。这个概念被称为 默克尔证明.
您还可以签出Merkle tree python-Python中的Merkle树实现 文章.
Merkle树如何在比特币中工作
比特币是第一个有效利用默克尔树的加密货币。为了确保哈希值受到保护并且不容易逆转,它使用了著名的安全哈希算法SHA-256。这也意味着散列值输出为256位长。核心是Merkle树用于存储数据以及修剪交易.
另请阅读《如何开始使用区块链》
在比特币中,每个块都使用哈希值连接到先前的块。这就是整个区块链的创建方式。在一个块中,有一些块头,其中包含重要信息,例如:
- 默克尔根哈希
- 块版本号
- 时间戳记
- 随机数
- 开采难度指标
- 上一个区块哈希
为了更好地理解,让我们看一下下面的图。它取自 比特币白皮书 本身.
标题:比特币中的默克尔树
如您所见,它要求矿工将交易包括在区块中。完成后,将其散列并成为Merkle树的一部分.
这样,使用默克尔树可以带来多种好处。这包括一个显着的好处,即简单付款验证(SPV)。这些SVP是可以称为轻量级客户端的节点。那么,他们做什么呢?他们只是下载最长的链块头,因此不必下载整个区块链。要完成所有这些操作,他们需要验证它是否具有存储的最长链的块头。这就是在比特币中完成Merkle树实现的方式.
最后,SPV然后可以使用Merkle Map证明,并使用Merkle树的根哈希来验证交易.
以太坊如何使用Merkle树
以太坊区块链也利用Merkle树。但是,这里的方法与比特币的利用方法不同。在以太坊中,使用了Merkle Patricia树,它是Merkle树的复杂版本。这是可能的,因为以太坊是图灵完备的.
如果您想了解有关Merkle树在以太坊中如何工作的更多信息,请查看详细的帖子。 这里.
其他Merkle树实现:用例
当然,还有其他Merkle树实现。最受欢迎的软件之一是Git-分布式版本控制系统。全世界的程序员都使用它来管理他们的项目.
在中可以看到另一个有用的实现 行星际文件系统 —对等分布式协议。它也是开源的,使计算设备可以加入并使用无处不在的文件系统.
甚至证书颁发机构也利用Merkle树来发挥自己的优势。他们在机制中使用它来创建可验证的证书透明性日志。由于日志很大,因此默克尔树使计算机可以对其进行验证,而不会浪费太多时间和精力.
我们将讨论的最后一个用例是数据库系统,例如Amazon DynamoDB和Apache Cassandra。这些No-SQL分布式数据库在数据复制过程中使用Merkle树来控制不一致之处。如果有任何问题,它可以使用反熵修复过程来更新或修复数据.
简而言之,使用默克尔树的案例包括
- 数据同步
- 资料验证
- 一致性验证
默克尔树的好处
在本节中,我们将快速了解默克尔树的好处.
- 验证数据的完整性: 它可以有效地用于验证数据的完整性.
- 占用很少的磁盘空间: 与其他数据结构相比,默克尔树仅占用很少的磁盘空间.
- 跨网络的微小信息: 默克尔树可以分为少量信息进行验证.
- 高效验证: 数据结构高效,只需花费一点时间即可验证数据的完整性.
结论
默克尔树是计算机科学中的重要概念之一。它被广泛用于许多用例中,并且在加密货币中的使用引发了革命性的技术—区块链.
那么,您对默克尔树了解多少?在下面发表评论,让我们知道.