哈希树简介

文章目录

  • 1.简介
  • 2.概览
  • 3.使用场景
  • 4.性质
  • 5.用途
    • 证明某个集合中存在或不存在某个元素
    • 快速比较大量数据
    • 快速定位修改
    • 零知识证明
  • 参考文献

1.简介

哈希树(Hash Tree),在密码学及计算机科学中是一种树形数据结构,每个叶节点均以数据块的哈希作为标签,而除了叶节点以外的节点则以其子节点标签的加密哈希作为标签 。哈希树能够高效、安全地验证大型数据结构的内容,是哈希链的推广形式。

哈希树的概念由瑞夫·墨克于 1979 年申请专利,故亦称墨克树(Merkle tree)。

2.概览

哈希树的叶结点是一个文件或一组文件中的数据块的哈希。 树中更靠上的节点是它们各自子节点的哈希值。 例如下图中,哈希 0 是哈希 0-0 和哈希 0-1 串联的哈希结果。 即 hash 0 = hash( hash 0-0 + hash 0-1 ),其中“+”表示串联。
在这里插入图片描述
哈希 0-0 和 0-1 分别是数据块 L1 和 L2 的哈希值。哈希 0 是将哈希 0-0 和 0-1 连接后所获取的哈希值。顶部哈希(top hash)是将哈希 0 和 1 连接后所获取的哈希值

大多数哈希树实现都是二叉树(每个节点下有两个子结点),但它们也可以在每个结点下用更多的子结点。

哈希树中,哈希值的求取通常使用诸如 SHA-2 的加密哈希函数,但如果只是用于防止非故意的数据破坏,也可以使用不安全的校验和,比如 CRC。

哈希树的顶部为顶部哈希(top hash),亦称根哈希(root hash)或主哈希(master hash)。以从 P2P 网络下载文件为例:通常先从可信的来源获取顶部哈希,如朋友告知、网站分享等。得到顶部哈希后,则整棵哈希树就可以通过 P2P 网络中的非受信来源获取。下载得到哈希树后,即可根据可信的顶部哈希对其进行校验,验证哈希树是否完整未遭破坏。如果哈希树损坏或伪造,则将尝试来自另一个来源的另一棵哈希树,直到程序找到与顶部哈希匹配的哈希树。

与哈希列表的主要区别在于,一次可以下载哈希树的一个分支,并且可以立即检查每个分支的完整性,即使整个树还不可用。 例如,在上图中,如果树已经包含哈希 0-0 和哈希 1,则可以立即验证数据块 L2 的完整性,方法是对数据块进行散列,然后将结果与哈希 0-0 和哈希 1 迭代组合,最后将结果与顶部哈希进行比较。 类似地,如果树已经具有散列 1-1 和散列 0,则可以验证数据块 L3 的完整性。这可能是一个优势,因为将文件分割成非常小的数据块是有效的,因此只需要小块如果损坏,则需要重新下载。 如果哈希文件很大,这样的哈希列表或哈希链就会变得相当大。 但如果是树,可以快速下载一个小分支,检查哈希树分支的完整性,然后开始下载数据块。

3.使用场景

哈希树可用于验证在计算机内部和计算机之间存储、处理和传输的任何类型的数据。 它们可以帮助确保从 P2P 网络中的其他节点接收到的数据块未损坏且未更改,甚至可以检查其他节点是否撒谎和发送假块。

哈希树用于基于哈希的密码学场景。此外还有很多应用场景,如:

  • 文件系统,如星际文件系统 (IPFS)、Btrfs 和 ZFS 文件系统,可对抗数据退化。
  • Dat protocol。
  • Apache Wave protocol。
  • Git 和 Mercurial 分布式版本控制系统。
  • Tahoe-LAFS 备份系统。
  • Zeronet。
  • 比特币和以太坊对等网络。
  • 证书透明度框架。
  • Nix 包管理器以及其后代如 GNU Guix。
  • 许多 NoSQL 系统,如 Apache Cassandra、Riak 和 Dynamo。

有人建议在可信计算系统中使用散列树。

中本聪 (Satoshi Nakamoto) 最初的比特币 Merkle 树实现过度应用了哈希函数的压缩步骤,使用 Fast Merkle Trees 可以缓解这种情况。

4.性质

哈希树是一种典型的二叉树结构,由一个根节点、一组中间节点和一组叶节点组成。默克尔树最早由 Ralph Merkle 在 1980 年提出,曾广泛用于文件系统和 P2P 系统中。

其主要特点为:

  • 最下面的叶节点包含存储数据或其哈希值;
  • 非叶子节点(包括中间节点和根节点)都是它的两个孩子节点内容的哈希值。

进一步地,默克尔树可以推广到多叉树的情形,此时非叶子节点的内容为它所有的孩子节点的内容的哈希值。

哈希树逐层记录哈希值的特点,让它具有了一些独特的性质。例如,底层数据的任何变动,都会传递到其父节点,一层层沿着路径一直到树根。这意味树根的值实际上代表了对底层所有数据的“数字摘要”。

5.用途

证明某个集合中存在或不存在某个元素

通过构建集合的默克尔树,并提供该元素各级兄弟节点中的 Hash 值,可以不暴露集合完整内容而证明某元素存在。

另外,对于可以进行排序的集合,可以将不存在元素的位置用空值代替,以此构建稀疏默克尔树(Sparse Merkle Tree)。该结构可以证明某个集合中不包括指定元素。

快速比较大量数据

对每组数据排序后构建默克尔树结构。当两个默克尔树根相同时,则意味着所代表的两组数据必然相同。否则,必然不同。

由于 Hash 计算的过程可以十分快速,预处理可以在短时间内完成。利用默克尔树结构能带来巨大的比较性能优势。

快速定位修改

以下图为例,基于数据 D0……D3 构造哈希树,如果 D1 中数据被修改,会影响到 N1,N4 和 Root。

在这里插入图片描述
因此,一旦发现某个节点如 Root 的数值发生变化,沿着 Root --> N4 --> N1,最多通过 O(lgN) 时间即可快速定位到实际发生改变的数据块 D1。

零知识证明

仍以上图为例,如何向他人证明拥有某个数据 D0 而不暴露其它信息。挑战者提供随机数据 D1,D2 和 D3,或由证明人生成(需要加入特定信息避免被人复用证明过程)。

证明人构造如图所示的默克尔树,公布 N1,N5,Root。验证者自行计算 Root 值,验证是否跟提供值一致,即可很容易检测 D0 存在。整个过程中验证者无法获知与 D0 相关的额外信息。


参考文献

OpenAI ChatGPT
Merkle tree - Wikipedia
Merkle 树结构 - 区块链技术指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29825.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NLP相关】GPT-X合集:GPT类模型介绍(附相关论文和Github项目地址)

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

Safari高级使用

Safari是苹果公司为旗下设备开发的一款强大的浏览器不论是iPhone还是iPad亦或是MAC OS上都能使用。但是针对不同的系统,Safari也有一定的改动。那么在MacOS中如何使用Safari呢? 1.全新的标签管理界面 Safari 8 的感觉和 iOS 系统里的移动端越来越接近&am…

手机safari导入html书签,iPhone手机Safari浏览器书签如何同步至电脑?

如果在 Safari 中添加了很多书签,想要把它们全部同步到电脑浏览器上,逐一手动添加并不是什么好方法。对于 Mac 电脑,登录同一 Apple ID 并开启同步,就可以实现自动同步 Safari 书签,不过这仅限于 Safari 浏览器&#x…

实用的Safari浏览器扩展工具——浏览标签太多?来一键保存!

Tab Space 是一款为提升网络浏览效率而生的 Safari 浏览器扩展。灵感来自于 Chrome 插件 OneTab 的快速保存当前所有的标签页和一键恢复功能,Tab Space 最初只是为此而开发。此扩展需要 macOS 10.13 Safari 12.1 及更高版本才能正常使用。 功能介绍 1、可以一键恢…

Alfred 搜索不到 Safari 浏览器的书签

Mac 的版本是 macOS Mojave 10.14.1,使用 Alfred 的搜索书签功能,发现不能搜索 Safari 的书签,但可以搜 Chrome 的书签。 重启 Safari,重启 Alfred 都尝试过,但还是不行。 最后在Alfred 的论坛里面找到了原因。 在安…

Safari导入书签

1、打开Safari 这边safari会自动带出一些关联的浏览器,但如果你要导入的浏览器不在这里的话,就需要看第二步。 2、比如,这里我要从QQ浏览器导入,先打开QQ浏览器。 其他浏览器都类似,找到书签管理,都能找到一…

windows下Edge浏览器Google Chrome与Safari双向同步书签

最近刚入手了 iPad,在上面装了edge浏览器后实现了收藏夹,浏览记录同步的问题,可是Safari浏览器也同样好用,于是想体验一下不同系统之间的协同 1 下载iCloud应用并登录自己的Apple ID 设置和使用 Windows 版 iCloud 2 修改导入注…

Safari书签同步

无论是手机同步到电脑,或者电脑同步到手机都可以,并且Apple会帮你自动合并。 打开 “系统偏好设置”-iCloud- 如果已经勾选Safari前面已经勾选了,先取消,再勾选,这时会提示是否合并,选“好”就可以了。前提…

ios跳转到safari_如何在iOS上将书签从Safari传输到Chrome

ios跳转到safari Chrome for iOS may never outperform Safari, but it has still become a solid browser alternative with some nice extra features all its own. The trouble is, when you install Chrome for iOS, there’s no way to directly import bookmarks from Sa…

将Windows电脑上的浏览器书签同步至iPad中的Safari

Windows电脑上的浏览器书签同步至iPad中的Safari 当我们的电脑用的是Windows系统,同时有iPad时,有时会希望能够将电脑浏览器中的书签同步到iPad上,这样就会比较方便,那么接下来我将介绍如何进行同步: 首先打开Micros…

通过iMazing将Safari浏览器的书签导出至电脑

我们的iOS设备在Safari浏览器中存储了多种类型的数据,包括历史记录、书签、阅读清单。而书签就相当于电脑浏览器中的收藏夹,方便我们再次访问保存的网站。那我们想要将这些书签信息导出至电脑又该如何操作呢? 我们都知道想在iTunes中导出Saf…

如何在safari浏览器中添加书签

鼠标拖放置顶端 书签->添加书签 点击添加即可

Edge与Safari双向同步书签

Edge与Safari双向同步书签 目标:将Windows上的edge浏览器(或chrome浏览器)和iOS、iPad OS、Mac OS上的Safari浏览器双向同步书签。 背景:我之前成功过,但是换了新电脑忘记了,又摸索了好久,为防…

使用iCloud让Safari与Chrome/FireFox/IE的书签保持同步

随着现在Mac电脑的普及程度越来越高,很多人都会像笔者一样,在公司和家里用着不同种类的操作系统。 而浏览器又是一个不可或缺的存在,根据笔者的使用习惯,在Mac上会使用Safari浏览器,而在Windows上会使用Chrome。 就这…

如何同步Safari和Chrome中的书签与密码

如何同步Safari和Chrome中的书签与密码 微软商店下载ICloud Chroome中安装相应插件 多点几遍插件,出现 先取消勾选书签,再选上书签,再点击应用就行

safari浏览器怎么导入书签

导入html文件书签 打开safari浏览器,点击文件-》导入自-》书签html文件…,即可

如何把谷歌浏览器的书签导入safari浏览器

1 打开safari浏览器 2 文件--导入--谷歌浏览器 3 退出谷歌浏览器,并点导入 第一步:打开safari浏览器,一般情况下刚安装的safari浏览器默认是没有显示菜单栏的如图: 2 第二步点击右边的箭头选择显示菜单如图: 3 第三…

GPT-4内幕大泄露!1.8万亿巨量参数,13万亿token训练,斥资6300万美元

来源 | 量子位 作者 | 金磊 Complete bullshit. 完全胡扯。这么一句简短犀利评论,竟是出自深度学习三巨头之一的Yann LeCun之口。 而让他如此怒怼的事情,则是在日内瓦召开的世界首场人机新闻发布会。 顾名思义,在这场新闻发布会中&#xff0…

LeCun爆粗口、马斯克哭笑不得,只因9个人形机器人开了场新闻发布会

来源 | 量子位 | 公众号 QbitAI Complete bullshit. 完全胡扯。 这么一句简短犀利评论,竟是出自深度学习三巨头之一的Yann LeCun之口。 ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 而让他如此怒怼的事情&#xff0c…

今年这个情况,我劝你多留一手准备...

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 老读者应该还有印象,一年以前K哥在文章里就做过预判:往后几年,大环境不容乐观,因为已经进入新一轮的经济周期,职场人要开展“ABZ计划”来应对…