首页 > 其他分享 >Merkle 树——看来要求数据不重复

Merkle 树——看来要求数据不重复

时间:2023-08-02 21:34:37浏览次数:35  
标签:看来 重复 数据 哈希 Merkle Root 节点 默克尔

Merkle 树结构

 

 

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

其主要特点为:

  •  


    最下面的叶节点包含存储数据或其哈希值。



  •  


    非叶子节点(包括中间节点和根节点)都是它的两个孩子节点内容的哈希值。



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

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

目前,默克尔树的典型应用场景包括如下几种。

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

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

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

快速比较大量数据

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

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

快速定位修改

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

 

Merkle 树示例

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

零知识证明

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

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

标签:看来,重复,数据,哈希,Merkle,Root,节点,默克尔
From: https://blog.51cto.com/u_11908275/6943257

相关文章

  • 剑指 Offer 03. 数组中重复的数字(简单)
    题目;classSolution{public:intfindRepeatNumber(vector<int>&nums){intresult;unordered_set<int>set;//利用集合寻找重复的数字for(auton:nums){if(set.find(n)==set.end()){//如果set里没找到就加入set......
  • 解决 Vue 重复点击相同路由,出现 Uncaught (in promise) NavigationDuplicated: Avoide
    解决Vue重复点击相同路由,出现Uncaught(inpromise)NavigationDuplicated:Avoidedredundantnavigation问题问题问题描述:重复点击导航时,控制台出现报错,虽然不影响功能使用,但也不能视而不见。解决方案方案一:只需在router文件夹下,添加如下代码。constrouter=new......
  • SQL统计重复的方法
     用一道力扣简单题为例,看完题目就知道它要我们输出的的重复的email,那我们就要知道SQL中的查询重复的信息有哪些方法,下面是讨论区大佬的方法 第一个是运用having和groupby的方法,是一种常用的,简单高效的方法,第二种相比第一种就复杂很多,先创建两个临时表,Personp1表示从Person......
  • 这些年写过的花式sql - 第一句 删除重复无效的记录
    这些年写过的花式sql-第一句删除重复无效的记录写好复杂sql可以减少代码量,经过写这些年的后台统计,我学着像写代码一样的设计和尝试sql。现整理如下:本来想一次性写完的,不过那写起来和看起来都太累了。还是分解一下吧。如果有不对的或者可以优化的地方,欢迎指正。第一句需求......
  • 脏读不可重复读幻读;qps、tps、并发量、pv、uv;接口幂等性问题如何解决
    脏读不可重复读幻读;qps、tps、并发量、pv、uv;接口幂等性问题如何解决脏读不可重复读幻读脏读脏读指的是一个事务在读取了另一个事务未提交的数据后,后续操作中,另一个事务发生了回滚(Rollback),导致读取到的数据实际上是无效的。这就像读取了一份尚未确认是否有效的数据,如果最终该事......
  • 48. 最长不含重复字符的子字符串
    #例如对于arabcacfr,最长不含重复字符的子字符串为acfr,长度为4。deflengthOfLongestSubstring(s="arabcacfr"):defdfs(s,dp):iflen(s)==0:print(dp)returnlen(dp)ifs[:1]indp:print(dp)......
  • android重复点击问题
    openclassSingleClickListener(privatevalintervalMils:Long=1000):OnClickListener{privatevalTAG=this.javaClass.nameprivatevarmLastClickTime=0LoverridefunonClick(p0:View?){Logger.logger(TAG,"onClick")......
  • 随机不重复数组
    创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,且是随机赋值。同时,要求元素的值各不相同。 /***各个位置数字不同*一直随机即可*思路:*若某个位置数字相同eg:位置1和位置2数字相同*arr[1]=arr[2]需重新随机数字但重新随......
  • 接口幂等性,qps,tps,并发量,pv,uv,脏读,不可重复读,幻读
    1脏读,不可重复读,幻读,mysql5.7以后默认隔离级别是什么?脏读:'当一个事务读取了另一个未提交事务的数据时,称为脏读。当事务A读取到事务B尚未提交的数据时,如果事务B回滚,那么事务A读取的数据就是无效的或者不一致的,导致脏读的结果是不可靠的。'不可重复读:'在同一个事务中,对于相同的......
  • 脏读,不可重复读,幻读 ,mysql5.7以后默认隔离级别是什么?什么是qps,tps,并发量,pv,uv、什么是
    目录一、脏读,不可重复读,幻读,mysql5.7以后默认隔离级别是什么?脏读,不可重复读,幻读脏读不可重复读幻读mysql5.7以后默认隔离级别是什么二、什么是qps,tps,并发量,pv,uv三、什么是接口幂等性问题,如何解决?一、脏读,不可重复读,幻读,mysql5.7以后默认隔离级别是什么?程序访问数据库,往往是多......