Merkle树

2021-06-06 23:50:18

跳转到导航跳转以搜索加密和计算机科学,哈希树或Merkle树是一个树,每个叶子节点都标有数据块的加密哈希,并且每个非叶节点都标有加密散列其子节点的标签。哈希树允许高效并确保验证大数据结构的内容。哈希树是哈希清单和哈希链的概括。

展示叶节点是给定二进制哈希树的一部分,需要计算与树的叶节点数量的对数成比例的哈希值; [1]这种对比与散列列表,其中数字与叶节点的数量成比例。

哈希树的概念是在1979年获得专利的Ralph Merkle的命名。[2] [3]

哈希树可用于验证存储,处理和传输的任何类型的数据。它们可以帮助确保从对等网络中接收的其他对等体接收的数据块被接收到未损坏和不置换,甚至检查其他对等体不会撒谎并发送假块。

哈希树用于基于哈希的密码学。哈希树也用于IPF,BTRF和ZFS文件系统[4](计数数据劣化[5]); DAT协议; apache波协议; [6] GIT和Mercurial分布式修订版控制系统; Tahoe-Lafs备份系统; ZERONET;比特币和Ethereum peer-to-peer网络; [7]证书透明度框架;以及许多NoSQL系统,如Apache Cassandra,Riak和Dynamo。 [8]已经提出了在可信计算系统中使用哈希树的建议。 [9]

Satoshi Nakamoto的Merkle Tree的初始比特币实现将哈希函数的压缩步骤应用于过多程度,通过使用快速Merkle树来减轻。 [10]

哈希树是哈希树,其中叶子是数据块中的哈希,例如文件或文件集。在树中进一步的节点是他们各自的儿童的哈希。例如,在图像散列0中是散列散列0-0和散列0-1的级联的结果。也就是说,Hash 0 =散列(散列(0-0)+哈希(0-1)),其中+表示连接。

大多数哈希树实现是二进制(每个节点下的两个子节点),但它们可以在每个节点下使用更多的子节点。

通常,诸如SHA-2之类的加密散列函数用于散列。如果哈希树仅需要防止无意的损坏,可以使用诸如CRC等不安全的校验和。

在哈希树的顶部有一个顶部哈希(或root哈希或主哈希)。在下载P2P网络上的文件之前,在大多数情况下,顶部哈希从可信源获取,例如已知有良好的文件推荐将下载文件或网站。当顶部哈希可用时,可以从任何不可信任的源接收哈希树,如P2P网络中的任何对等体。然后,将收到的哈希树检查受到可信赖的顶部哈希,如果哈希树损坏或假的,则将尝试从另一个源的另一个哈希树,直到程序找到与顶部哈希相匹配的另一个源。 [11]

与哈希列表的主要区别在于,可以一次下载哈希树的一个分支,即使整个树尚未使用,也可以立即检查每个分支的完整性。例如,在图像中,如果树已经包含HASH 0-0和HASH 1,可以立即验证数据块L2的完整性,并且通过散列数据块并迭代地将结果与HASH 0-0播放,然后哈希1将结果与顶部哈希进行比较。类似地,如果树已经具有哈希1-1和哈希,则可以验证数据块L3的完整性。这可能是一个优势,因为它有效地在非常小的数据块中拆分文件,因此只有小块如果他们损坏,请重新下载。如果哈希文件非常大,这样的哈希树或哈希列表变得相当大。但是,如果它是一棵树,可以快速下载一个小分支,可以检查分支的完整性,然后可以开始下载数据块。 [所需的引用]

Merkle Hash Root并不指示树深度,从而启用第二种前攻击,其中攻击者创建除具有相同Merkle Hash Root的原件之外的文件。对于上面的示例,攻击者可以创建包含两个数据块的新文档,其中第一个是Hash 0-0 + Hash 0-1,第二个是Hash 1-0 + Hash 1-1。 [12] [13]

证书透明度中定义了一个简单的修复:当计算叶节点哈希时,将0x00字节添加到散列数据,而在计算内部节点哈希时,则为0x01。 [11]限制散列树大小是一些正式安全证明的先决条件,并有助于使某些证明更紧密。一些实现限制了使用哈希树深度前缀的树深,因此才定义任何提取的哈希链,只有在每个步骤下的前缀减小时才有效,并且当达到叶片时仍然是正的。

老虎树哈希是一种广泛使用的哈希树。它使用二进制哈希树(每个节点下的两个子节点),通常具有1024字节的数据块大小,并使用Tiger哈希。 [14]

虎树散列用于GNUTELLA,[15] GNUTELLA2,直接连接P2P文件共享协议[16]和文件共享应用程序,如PHEX,[17] BEARSHARE,LIMEWIRE,SHAREAZA,DC ++ [18]和Valknut。 [19]

^ Becker,Georg(2008-07-18)。 " Merkle签名方案,Merkle树和他们的密码分析" (PDF)。 Ruhr-Universität波鸿。 p。 16。

^ Merkle,R. C.(1988)。 "基于传统加密功能的数字签名"密码学前进 - 加密' 87。计算机科学的讲座。 293.第369-378页。 DOI:10.1007 / 3-540-48184-2_32。 ISBN 978-3-540-18796-7。

^美国专利4309569,Ralph Merkle,"提供数字签名的方法,1982年1月5日发布,分配给Leland Stanford初学者的受托人董事会

^ Koblitz,Neal; Menezes,Alfred J.(2016年1月)。 " Cryptocash,Cryptocurrencies和Cryptocontracts"设计,代码和密码学。 78(1):87-102。 CITESEERX 10.1.1.701.8721。 DOI:10.1007 / S10623-015-0148-5。 S2CID 16594958。

^亚当马库斯。 " NoSQL Ecosystem" aosabook.org。当副本延长一段时间后,或者为不可用的副本存储暗示的切换时,副本必须彼此同步。在这种情况下,Cassandra和Riak实施了一个名为抗熵的发电机启发过程。在反熵中,副本Exchange Merkle树以识别其超出同步的复制密钥范围的部分。 Merkle树是一个层次散列验证:如果两个副本之间整个keyspace上的哈希不相同,则它们将交换较小的复制keyspace部分的较小部分,直到识别出异步键。此方法可减少包含大多数类似数据的副本之间的不必要数据传输。

^ a b laurie,b .;兰利,一个。 Kasper,E。(2013年6月)。 "证书透明度" IETF:RFC6962。 DOI:10.17487 / RFC6962。

^ Elena Andreeva;查尔斯·布利加苏; ORR Dunkelman; John Kelsey(2009年1月)。 "放牧,第二次前奇和木马留言攻击超越Merkle-damgård"密码学中的选定区域。计算机科学的讲座。 5867。囊。第393-414页。 DOI:10.1007 / 978-3-642-05445-7_25。 ISBN 978-3-642-05443-3。

^ Elena Andreeva;查尔斯·布利加苏;皮埃尔alain fouque;乔纳森J. Hooch;约翰凯尔西; Adi Shamir; Sebastien Zimmer(2008)。 "抖动哈希函数的第二次前奇攻击"在智能,奈杰尔(ed。)。密码学研究 - Eurocrypt 2008.计算机科学的讲义。 4965.伊斯坦布尔,土耳其。第270-288页。 DOI:10.1007 / 978-3-540-78967-3_16。 ISBN 978-3-540-78966-6。

^ chapweske,j ;; Mohr,G.(2003年3月4日)。 "树哈希交换格式(thex)"从2009-08-03归档原件。

Merkle树专利4,309,569 - 解释了哈希树结构和使用它来处理许多一次性签名

此音频文件是从本文2013年9月17日()的修订版创建的,并且不反映后续编辑。