默克尔树

Merkle树是支撑其功能的区块链的基本组成部分。它们允许对大型数据结构进行有效且安全的验证,对于区块链,则可能是无限的数据集.

Merkle树在区块链中的实施具有多种效果。它使他们可以扩展,同时还为他们提供了基于哈希的体系结构,以保持数据完整性和验证数据完整性的简单方法.

加密散列函数是允许Merkle树工作的基础技术,因此,首先,重要的是要了解什么是加密散列函数.

加密哈希函数

简而言之,散列函数是用于将任意大小(输入)的数据映射到固定大小的输出的任何函数。将哈希算法应用于数据输入,并将所得的固定长度输出称为哈希.

许多哈希算法广泛公开可用,可以根据您的需要进行选择.

任意输入产生的哈希不仅长度固定,而且对于输入也是完全唯一的,并且函数本身是确定性的。也就是说,无论您在同一输入上运行该函数多少次,输出都将始终相同.

例如,如果您将以下数据集作为输入,则每个输入的结果输出都是唯一的。请注意,在第二个和第三个示例中,即使输入的差异只有一个字,结果输出却完全不同.

这非常重要,因为它允许“指纹”化数据.

加密散列函数Image from 维基百科

由于输出(示例中的哈希总和)长度始终与所使用的哈希算法确定的长度相同,因此仅通过它们产生的哈希可以识别大量数据.

对于包含海量数据的系统,能够以固定长度的输出存储和识别数据的好处可以节省大量存储空间并有助于提高效率.

在区块链中,使用哈希算法确定区块链的状态.

区块链是包含数据和指向上一个区块的哈希指针的链表,从而创建了一个连接区块链,因此名称为“区块链”.

每个块都通过哈希指针相互连接,哈希指针是前一个块内部数据的哈希值以及前一个块的地址。通过以这种格式链接数据块,由于前一个块的所有散列数据都被哈希成一个哈希,因此前一个块的每个结果散列都代表了区块链的整个状态。.

(在SHA-256算法的情况下)由这样的输出(哈希)表示.

b09a57d476ea01c7f91756adff1d560e579057ac99a28d3f30e259b30ecc9dc7

上面的哈希是区块链之前整个状态的指纹。输入新块之前的区块链状态(作为散列数据),并生成散列结果作为输出.

尽管可以在不使用Merkle树的情况下使用加密哈希,但它效率极低且不可扩展。使用散列以系列格式将数据存储在块中既费时又麻烦.

如您所见,Merkle树允许对数据完整性进行微不足道的解析,并使用Merkle证明在整个树中映射该数据.

默克尔树和默克尔证明

Merkle树以1979年获得该概念的专利的Ralph Merkle的名字命名,从根本上讲是数据结构树,其中每个非叶节点都是其各自子节点的哈希值.

叶节点是树中最低的节点层。起初,听起来似乎很难理解,但是如果您看下面的常用图,它将变得更容易理解。.

哈希树

二进制哈希树的一个示例,Image from 维基百科

重要的是,请注意左侧的非叶节点或“分支”(由哈希0-0和哈希0-1表示)如何是其各自子级L1和L2的哈希。此外,请注意分支哈希0是其串联子级的哈希,分支哈希0-0和哈希0-1如何.

上面的示例是Merkle树的最常见和最简单的形式,称为Binary Merkle树。如您所见,有一个顶部哈希,它是整个树的哈希,称为根哈希。本质上,默克尔树是一种数据结构,可以接受“ n”个散列并用单个散列表示.

树的结构允许有效映射任意数量的数据,并可以轻松识别该数据发生更改的位置。这个概念使Merkle证明成为可能,利用它,有人可以验证数据散列在树上一直到正确位置都是一致的,而不必实际查看整个散列集。.

相反,他们可以通过仅检查哈希的一小部分而不是整个数据集来验证数据块与根哈希是否一致.

只要根哈希是众所周知的和受信任的,任何想要在数据库上执行键值查找的人都可以使用Merkle证明来验证具有以下特征的数据库中数据片段的位置和完整性:特定的根.

如果根哈希可用,则可以从任何不受信任的源接收哈希树,并且即使整个树尚不可用,也可以一次下载树的一个分支,并立即验证数据完整性。.

Merkle树结构最重要的好处之一就是能够通过类似的散列机制对任意大的数据集进行身份验证,该散列机制用于验证数量较少的数据.

该树有利于将大量数据分配到可管理的较小部分中,尽管整体上数据量较大,但完整性检查的障碍已大大减少.

根哈希可以用作整个数据集的指纹,包括整个数据库或代表区块链的整个状态。在以下各节中,我们将讨论比特币和其他系统如何实现Merkle树.

比特币中的默克尔树

比特币采用的加密哈希函数是SHA-256算法。这代表“安全哈希算法”,其输出是固定的256位长度。 Merkle树在比特币中的基本功能是存储,并最终在每个区块中修剪交易.

如前所述,区块链中的区块通过前一个区块的哈希值进行连接。在比特币中,每个区块包含该区块内的所有交易以及包含以下内容的区块头:

  • 块版本号
  • 上一个区块哈希
  • 时间戳记
  • 开采难度指标
  • 随机数
  • 默克尔根哈希

下图来自比特币 白皮书 并说明Merkle树如何适合每个块.

默克尔树

矿工将交易包含在区块中,并作为Merkle树的一部分进行哈希处理,从而导致将Merkle根存储在区块头中。这种设计有许多明显的好处.

最值得注意的是,如白皮书中所述,这允许存在简单付款验证(SPV)节点,也称为“轻量级客户端”。这些节点不必下载整个比特币区块链,而只需下载最长链的块头.

SPV节点可以通过查询其对等节点来达到此目的,直到他们确信他们正在操作的存储的块头是最长链的一部分。然后,SPV节点能够通过使用Merkle证明将交易映射到特定Merkle树(具有最长链的一部分的块头中的相应Merkle树的根哈希)来确定交易的状态.

此外,比特币的Merkle树实现允许修剪区块链以节省空间。这是因为仅根哈希存储在块头中,因此,可以通过删除不必要的Merkle树分支来修剪旧块,而仅保留Merkle证明所需的分支.

Merkle树在其他区块链和系统中的实现

尽管比特币是第一个实现Merkle树的区块链,但许多其他区块链实现了类似的Merkle树结构甚至更复杂的版本.

此外,默克尔树的实现不仅限于区块链,而且还应用于各种其他系统.

以太坊是另一种最知名的加密货币,也是不同的Merkle树实现的一个很好的例子。因为以太坊作为构建更复杂的应用程序的平台是不折不扣的,所以它使用了更复杂的Merkle树版本,称为Merkle Patricia树,它实际上是用于三种对象的3个独立的Merkle树。您可以了解有关这些树的更多信息 这里.

最后,Merkle树是分布式版本控制系统(例如Git和IPFS)的重要组成部分。它们以P2P格式轻松确保和验证计算机之间共享的数据完整性的能力,使它们对于这些系统而言无价之宝.

结论

默克尔树是区块链不可或缺的组成部分,可有效地使其具有可证明的不变性和交易完整性.

随着它们不断发展成更大,更复杂的系统,了解它们在分布式网络中的作用及其加密散列函数的基础技术对于掌握加密货币中的基本概念至关重要。.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me