Skip to content

算法Algorithm

Merkle多重证明

Merkle multiproof · 批量Merkle认证路径

把多个叶到根的认证路径合成共享前沿,只传计算中真正缺失的兄弟摘要,并逐层验证坐标、完整性和无多余输入。

形式陈述 ​

一组目标,共用一个可信根 ​

固定Merkle认证树的高度h、根r、叶编码和节点编码。目标为非空的互异索引集合S,证明者给出每个 i∈S 的值。验证者必须知道自己期望验证哪些索引;证明者擅自删去一个目标,即使剩余目标都正确,也未完成原请求。

令 A0=S,逐层定义活跃坐标与缺失兄弟:

Bj={ixor1:i∈Aj}∖Aj,Aj+1={⌊i/2⌋:i∈Aj},0≤j<h.

证明只需包含每个坐标 (j,b),b∈Bj 的摘要。这里“活跃”仅表示验证器已能计算该节点,不涉及区块链、网络在线状态或概率。本文显式发送坐标;更紧凑的格式可以由目标索引推导坐标,但必须固定相同顺序。

验证算法先从给定值计算 A0 的叶摘要。在第j层,对每个将要生成的父坐标p,取得孩子2p和2p+1:若它已在 Aj 就使用已算值,否则必须取证明中准确的(j,孩子索引)条目。按左右顺序计算父摘要,构成下一层。最后应只剩根,且所有证明条目恰好用过一次。

输入检查拒绝重复目标、越界目标、重复证明坐标、摘要长度错误、缺失兄弟及未消费的额外证明条目。空S在本文接口中被拒绝;“没有声明”不作为一份成功的批量认证。h=0、S={0}则是合法边界,证明为空,仍计算唯一叶。

直觉

两份单叶证明可能各自携带对方已经给出的节点。一起验证时,某个兄弟能从另一目标算出来,就不该再传。只有目标路径并集外、紧贴这片路径边界的子树,需要提供根摘要。

因此缩短证明不是删除校验。验证者仍恢复同一个根,只是让几个目标共同贡献中间结果。把三个独立路径拼接后简单去掉重复字节并不稳妥:两个不同坐标可能恰好有相同摘要,证明的身份应按树中位置判断,而不是按字节值去重。

例子与边界

三个位置从九项降到四项 ​

继续取A至H的8叶树,目标 S={1,2,6},即B、C、G。逐层账本为:

层j 已知索引 Aj 需提供 Bj 下一层
0
1
2 ∅

要传的四个摘要对应A、D、H以及EF子树。B加A恢复AB,C加D恢复CD,G加H恢复GH;再由EF恢复EFGH,两边相合得到根。三份独立路径各含3项,共9项;共享证明只含4项,即128字节摘要。索引、值、坐标编码另计,不能把“少5个摘要”直接当作总网络包大小。

验证器计算3次叶哈希、第一层3次父哈希、第二层2次、第三层1次,共9次。三个完全独立的验证各算4次,共12次。传输量与计算量同时减少,但它们减少的数量不相同。

接收重复、额外或漏掉的内容会怎样 ​

若删除(1,2)即EF摘要,算法无法生成右半根,必须失败,不能拿全零默认值填补普通树。若多带一个已经计算出的目标叶摘要,应拒绝,而不是允许另一份同坐标数据覆盖本地计算。重复目标也不能被字典的后写覆盖静默吞掉。

这里要求全部证明条目被消费,是规范输入合同。它避免一份签名或缓存键对应多种无意义尾随表示;但不能反过来说每种接受额外字节的实现都已经产生密码伪造。有效根的可靠性与编码唯一性是相关但不同的目标。

推论与应用

层不变量与碰撞提取 ​

对诚实证明,第j层活跃表每一项都等于真实树的同坐标摘要。初始叶按规范编码计算;每次父节点的两孩子分别来自已证正确的活跃表或真实兄弟,所以归纳继续成立,最终得到r。

若某个目标值错误而整体通过,可沿该目标到根的重算链比较真实树。错误叶输入不同;若叶摘要已相同,得到叶碰撞,否则沿路径找到首次相同父摘要,得到内部碰撞。中间有些兄弟来自另一目标,只改变它的来源,不改变这条逐层比较。因此共享计算不会削弱抗碰撞归约。

按前沿计成本 ​

令k=|S|,B为全部缺失兄弟数,v为真正重算的内部节点数。目标叶与边界兄弟恰构成一棵压缩展开树的叶边界;每个被展开内部节点有两个孩子,故 v=k+B−1。验证哈希数为 k+v=2k+B−1,不含传输前验证者可能缓存的其他信息。本例k=3、B=4,得到v=6、总数9。所有叶都打开时B=0,仍需重建N−1个内部节点,不能说证明为空便无需计算。

有 B≤kh 且 ∑j|Aj|≤k(h+1)。哈希表查找按期望常数计、每层无需排序时,坐标工作为O(k(h+1)+B),存储为O(k+B)。下载实现为了确定输出顺序逐层排序,另有 O(∑j|Aj|log⁡(|Aj|+1)) 比较成本;不把哈希调用界冒称整个Python运行时间。

终点任务:改成S={2,3},第一层互为兄弟,不需各传对方;只需(1,0)与(2,1),B=2,总哈希数5。改成全部8叶,B=0、总哈希数15。再说明为什么“稀疏多重证明”中的少数目标,不等于稀疏Merkle树中的多数空键位置。检查器枚举8叶全部255个非空目标集合,同时检查漏项、重复项与多余项。

参考资料
  • Lum Ramabaja、Arber Avdullahu,Compact Merkle Multiproofs,v2,2020-02-24,§II.B与§III:共享路径与自底向上的紧凑格式。本文保留显式坐标方便检查,并未冒称实现论文的最紧凑编码。
  • Dan Boneh、Victor Shoup,作者教材v0.6,§8.9中“Proving membership of multiple elements”。本文的前沿公式、实际哈希数与全部非空子集测试使用独立实例。
关系图谱3 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组