Merkle树是计算机科学应用程序中使用的数据结构。 在比特币和其他加密货币中,默克尔树用于更有效和安全地编码区块链数据。
它们也称为“二进制哈希树”。
打破默克尔树
在比特币的区块链中,交易的一部分通过算法运行以生成哈希,哈希是一串数字和字母,可用于验证给定的数据集与原始交易集相同,但是不获取原始交易集。 但是,比特币的软件无法一次通过哈希函数运行整个交易数据块(平均代表10分钟的交易时间)。 而是对每个事务进行哈希处理,然后将每一对事务连接在一起并哈希在一起,依此类推,直到整个块存在一个哈希。 (如果事务数量奇数,则将一个事务加倍,并将其哈希值与自身连接在一起。)
可视化地,此结构类似于一棵树。 在下图中,“ T”表示事务,“ H”表示哈希。 请注意,图像高度简化。 平均每个区块包含500笔交易,而不是八笔。
最底行的哈希称为“叶”,中间的哈希称为“分支”,顶部的哈希称为“根”。 给定块的Merkle根存储在标头中:例如,块#482819的Merkle根为e045b18e7a3d708d686717b4f44db2099aabcad9bebf968de5f7271b458f71c8。 根与其他信息(软件版本,上一个块的哈希,时间戳,难度目标和随机数)组合在一起,然后通过哈希函数运行以生成该块的唯一哈希:000000000000000000bfc767ef8bf28c42cbd4bdbafd9aa1b5c3c33c2b089594 。 该哈希实际上并不包含在相关的块中,而是下一个。 它与Merkle的根不同。
Merkle树很有用,因为它允许用户验证特定交易而无需下载整个区块链(2017年8月末超过130 GB)。 例如,假设您要验证上图中的块中包含事务T D。 如果您有根哈希(H ABCDEFGH ),则该过程类似于数独游戏:您在网络上查询H D ,并返回H C ,H AB和H EFGH 。 默克尔树使您可以验证是否用三个散列说明了所有问题:给定H AB ,H C ,H EFGH,并且根H ABCDEFGH ,H D (唯一丢失的散列)必须存在于数据中。
默克尔树以拉尔夫·默克尔(Ralph Merkle)的名字命名,拉尔夫·默克尔(Ralph Merkle)在1987年的论文《基于传统加密函数的数字签名》中提出了它们。 默克尔还发明了加密哈希。