您现在的位置是: 网站首页 > 程序设计  > 数据结构 

梅克尔树(Merkle Tree)

2020年2月18日 08:00 1031人围观

简介梅克尔树或称墨克树就是哈希树(hash tree),哈希树是一种树形数据结构,树的每个叶节点存储了数据块的哈希值,而除了叶节点以外的节点则是存储自己的子节点的哈希值

    梅克尔树或称墨克树就是哈希树,哈希数的概念由瑞夫·墨克于 1979 年申请专利,故有了别名的由来。 在密码学和计算机科学中,哈希树(hash tree)是一种树形数据结构,树的每个叶节点存储了数据块的哈希值,而除了叶节点以外的节点则是存储自己的子节点的哈希值 。

    一般意义上来讲,它是哈希大量聚集数据“块”(chunk)的一种方式,它依赖于将这些数据“块”分裂成较小单位(bucket)的数据块,每一个bucket块仅包含几个数据“块”,然后取每个bucket单位数据块再次进行哈希,重复同样的过程,直至剩余的哈希总数仅变为1:即根哈希(root hash)

    这是一种二叉树(其实也可以多叉,只是二叉应用很广泛),是一种高效和安全的组织数据的方法,在区块链中被用来快速查询验证特定交易是否存在,由一个根节点、一组中间节点和一组叶节点组成。

    它使用哈希算法将大量的书面信息转换成一串独立的字母或数字。最底层的叶节点包含存储数据或其哈希值,每个中间节点是它的两个子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。

    是不是很晕?如下图为二叉哈希树示例:

    哈希 0-0 和 0-1 分别是数据块 L1 和 L2 的哈希值。哈希 0 是将哈希 0-0 和 0-1 连接后所取得的哈希值。

    是不是一下子就清楚了~ 哈希树的顶部为顶部哈希(top hash),亦称根哈希(root hash)或主哈希(master hash)。以从 P2P 网络下载文件为例:通常先从可信的来源获取顶部哈希,如朋友告知、网站分享等。得到顶部哈希后,则整棵哈希树就可以通过 P2P 网络中的非受信来源获取。下载得到哈希树后,即可根据可信的顶部哈希对其进行校验,验证数据是否完整、是否遭受破坏。