← 返回 PaperDaily
大模型与智能体
371ms vs 2.1s!凭证撤销隐私协议实测:Merkle效果亮眼Verkle
可验证凭证的撤销检查,正在悄悄泄露你的“稳定句柄”?柏林工大ShadowPath把状态查询藏进持有者本地的零知识证明,首次系统对比SMT与Verkle:路径短10倍,证明反而慢5.68倍,移动端Groth16约3秒出结果——这波反转,值得细品。
龙哥读论文
发布于 2026-08-24 00:20:30
阅读 2
查看原文
原论文信息如下:
好的,龙哥已收到论文材料,马上按照要求生成公众号文章主体HTML内容(不含引言和基本信息部分),严格遵循所有格式与内容规范。
凭证撤销的隐私困境:ShadowPath如何破解稳定句柄难题
想象一个场景:你出差住酒店,在前台出示了一次数字身份证;第二天去高铁站刷票,又出示了一次。按理说,这是两次独立的出示,酒店和铁路公司不该知道你是同一个人。但如果每次出示凭证时,验证方都要去后台查一下“这个凭证是不是被撤销了”,而查询过程暴露了凭证的某种固定标识——那这两次出示就被悄悄关联起来了。
论文把这种会反复出现的关联信息叫做稳定句柄(stable handle) 。它可能是一个凭证ID、一个注册表中的固定位置、一条请求路径,甚至是一段固定的时间特征。只要验证方、发证机构或网络观察者拿到这个句柄,就能把分散在不同场景下的出示行为串成一条线,用户的隐私也就成了摆设。
柏林工业大学(Technische Universität Berlin)和柏林洪堡大学(Humboldt-Universität zu Berlin)的研究者提出了一个叫ShadowPath 的协议,把凭证状态查询从验证方手里挪到持有者本地,再用零知识证明(Zero-Knowledge Proof, ZKP)把状态结果绑定到当次出示上。验证方最终只能看到“这个凭证没被撤销”这一个结论,至于查了哪个位置、走了哪条路径、用到了哪些认证数据,一概无法得知。
核心机制:将查找移到持有者本地,用零知识证明守护隐私
ShadowPath的协议设计并不复杂,但思路很巧。在传统方案里,凭证撤销检查是一个“验证方主动查询”的过程:验证方拿到你的凭证后,拿着凭证相关信息去状态服务器或注册表中确认有没有被撤销。这一步一旦发生,验证方就接触到了凭证的固定信息,隐私就崩了。
ShadowPath的做法是把查询动作整体打包,扔给持有者自己去做。在每次出示之前,持有者先从公开的状态分发层同步一份纪元状态(epoch state) 。这份状态是发证机构(issuer)定期发布的,比如每小时一个版本,每个版本对应一个唯一的状态根 ∥R∥∥e∥ 。持有者拿到这个状态之后,在本地计算自己的凭证是否在撤销列表里。然后,持有者生成一个零知识证明,证明的内容是:“我查过了,在选定的纪元状态根 ∥R∥∥e∥ 下,我的这个凭证没有被撤销”,同时这个证明要和当前正在出示的凭证绑定在一起。
为了让状态查询在证明里可以被“验证”,ShadowPath用了一个关键技巧:会话绑定值(session-binding value)β 。这个值把“验证方本次给出的随机挑战c”、“当前纪元e”、“隐藏的凭证标识符 ∥V∥C∥∥{∥i∥d∥}∥ ”以及“持有者自己的随机数r”全部绑在一起。公式长这样:
这里的逻辑是:如果两次出示用的是同一个凭证,但每次的挑战c和随机数r都不同,那么β也会不同。验证方即使把两次出示的记录放在一起对比,也看不出它们指向同一个凭证。这就在机制上保证了出示不可关联性(presentation unlinkability) :同一凭证的两次出示,在验证方看来就像两个无关的匿名事件。
ShadowPath的协议流程分为四步:状态获取、见证重构、证明生成、证明验证 。状态获取是凭证无关的,所有持有者同步同一份公开状态;见证重构是持有者在本地区块链中找回自己凭证对应的注册位置;证明生成在持有者设备上完成;证明验证在验证方设备上完成。整个过程中,没有任何一条“凭证特定”的查询离开持有者设备。
论文用了一段很严谨的逻辑来描述这个关系。完整的状态关系 ∥R∥∥D∥(∥x∥,∥w∥)∥=∥1∥ 需要同时满足两个谓词:绑定谓词 ∥B∥∥I∥ 和状态谓词 ∥A∥∥D∥ 。绑定谓词负责验证凭证标识符是从链路密钥(link secret)和发证机构域正确派生的,并且β与当前会话绑定;状态谓词负责在选定的根 ∥R∥∥e∥ 下认证该凭证未被撤销。两部分在同一个零知识电路里完成,任何一部分不过关,整个证明就是无效的。
这里有一个容易被忽视的设计细节:查找路径是在证明内部 完成认证的。也就是说,即使在持有者自己的设备上,路径认证过程也是在一个封闭的零知识电路里跑的,路径本身不会以明文形式暴露给任何外部实体。如果路径认证放在证明外部,就需要一个“可信钱包”假设,恶意持有者可以伪造路径;如果放在验证方那边,路径又会被验证方看到。ShadowPath把路径认证焊死在电路内部,既堵住了伪造,又保住了隐私。
SMT与Verkle的较量:更短路径未必更高效
ShadowPath协议本身并不绑定某一种具体的树结构。论文实现了两个后端:稀疏Merkle树(Sparse Merkle Tree, SMT) 和Verkle树(Vector Commitment Tree) ,并对它们做了同基准的公平对比。这个对比是论文的一大亮点,因为结果非常反直觉。
先说说SMT。它是一种二叉树,每个父节点都是两个子节点的哈希。要证明某一个叶子位置上的值,需要提供从叶子到根路径上所有的兄弟哈希,一共 ∥O∥(∥∥l∥o∥g∥∥2∥ ∥N∥)∥ 个。如果注册表地址空间是 ∥2∥∥{∥5∥0∥}∥ ,那一条认证路径就包含50个哈希值。哈希计算非常便宜,但在零知识电路里,每多一个哈希就要多一组约束,电路规模会变大。
再说Verkle树。它的核心思想是把分支因子从2拉大到k(论文使用了 ∥k∥=∥1∥0∥2∥4∥ )。因为分支变宽了,树的深度从 ∥O∥(∥∥l∥o∥g∥∥2∥ ∥N∥)∥ 降到了 ∥O∥(∥∥l∥o∥g∥∥k∥ ∥N∥)∥ 。在 ∥2∥∥{∥5∥0∥}∥ 地址空间下,Verkle树只需要5层,每层用一个 KZG多项式承诺 (Kate–Zaverucha–Goldberg polynomial commitment)来认证子节点的值。KZG承诺的好处是:承诺大小恒定,打开(opening)的大小也恒定,不随多项式次数增长。
从认证路径的数据量来看,Verkle树完胜:5个KZG opening对比50个哈希值。论文里那句话说得很直白:“路径短10倍”。但路径短,真的意味着证明更快吗?
实测结果完全出乎意料:在Groth16证明系统下,SMT后端的中位证明时间是371.6毫秒 ,而Verkle后端是2.11秒 ——路径短了10倍,证明反而慢了5.68倍。为什么?
问题出在“每一层的认证成本”上。SMT每层只做一次哈希运算,在零知识电路里哈希的实现虽然占约束,但现代哈希(如Poseidon)的约束效率已经很高。Verkle的每层要做一次KZG opening,而KZG opening要在电路内部做椭圆曲线运算。论文采用的是BLS12-377曲线,在电路里做一次椭圆曲线标量乘法的约束数,远超做一次Poseidon哈希的约束数。于是5层KZG的总约束数竟然压过了50层哈希的总约束数。
Verkle树在验证阶段扳回一城:验证时间从SMT的3.70毫秒降到7.55毫秒?等等,实际上是反的——SMT验证3.70毫秒,Verkle验证7.55毫秒。Verkle的验证反而也更慢!这是因为KZG验证需要做椭圆曲线配对(pairing)运算,而配对运算在计算上远贵于哈希。
这组数据给行业提了个醒:Verkle树在区块链轻客户端中证明“状态不存在”确实高效,但把它搬进零知识电路里,KZG的密码学开销可能会吃掉路径变短的全部收益,甚至倒亏 。路径深度不是唯一决定因素,每一层的认证机制才是。
移动端实测:Groth16可行,PLONK仍需优化
桌面端的性能差距已经很明显了,但数字身份真正的主战场在手机。论文在10款主流移动设备上做了实测,覆盖iOS和Android两大平台,测试了Groth16和PLONK两种证明系统。结果又是意料之外、情理之中。
先解读一下两个证明系统的差异。Groth16是目前零知识证明里证明最小、验证最快的方案之一,但它有一个众所周知的限制:每证明一个不同的电路,都需要一次可信设置(trusted setup)来生成结构化参考字符串(Structured Reference String, SRS)。PLONK则不需要针对每个电路做可信设置,通用设置即可覆盖所有电路,灵活度更高,但证明时间和验证开销都比Groth16大。
在Groth16上,两款主力移动设备(分别对应iOS和Android旗舰)的证明时长都在3秒左右;在PLONK上则是另一番景象:延迟直接飙到30秒到60秒以上。论文给出的原因是PLONK在电路内需要额外的多项式承诺和线性化步骤,而移动端CPU的并行能力又远弱于桌面处理器,导致差距被进一步放大。
这里需要强调一个容易被误读的点:表格V中的PLONK数据是完整的证明延迟,不是端到端延迟。也就是说,这还只是“证明生成”这一步的时间,不包括状态同步和Witness重构。Groth16在3秒左右证明,整个出示流程可以控制在5秒以内,基本可以用;PLONK在多数手机上超过30秒,已经超出了用户在酒店前台排队时能接受的等待时间。
状态同步开销也是一个关键指标。论文引入了完整摘要(complete summary) 和认证增量(authenticated delta) 两个概念。完整摘要包含所有当前被撤销条目在树中的存储叶子以及必要的内部结构信息;认证增量是自上一个纪元以来变更的部分。图7显示,完整摘要的大小随撤销数量线性增长:假设撤销100万个凭证,摘要约16MB;撤销1000万个,摘要就要约160MB。这个量级对于手机端定时的后台同步来说还能接受,但如果撤销规模继续膨胀,会成为一个实际瓶颈。
隐私与实用的平衡:ShadowPath的边界与未来
ShadowPath把凭证撤销查询的隐私边界向前推了一大步:凭证特定的查找不再对验证方可见,也不再需要向发证机构发起在线查询。但论文在威胁模型里明确划了几条线,这些边界对落地非常重要。
第一,状态同步并不匿名 。持有者从公共分发层拉取状态时,网络观察者可以知道你的IP地址、请求时间、请求大小。ShadowPath能隐藏的是“查询了哪个凭证”,但隐藏不了“你在查状态”这个行为本身。如果观察者发现某个人在每次出示前都会准时同步一次状态,这个时间特征仍然可能成为关联线索。论文建议结合匿名传输或预取策略来缓解,但这些超出了协议本身的保证范围。
第二,发证机构与验证方共谋不在保护范围内 。如果发证机构把某个凭证的隐藏标识符告诉验证方,验证方就可以拿这个标识符去测试公开的会话绑定值β,确认是不是同一个凭证。论文对此没有回避,明确把“issuer–verifier collusion”列在了保护范围之外。
第三,恶意发行行为不在考虑范围内 。如果发证机构故意漏发撤销更新、在同一个纪元里对不同人发布不同的根,或者干脆不承认某个根的有效性,ShadowPath的保证就失效了。这套协议假设的是“诚实但好奇”的发证机构:它正确地发布状态,但会记录交互并尝试推断凭证使用情况。
从未来展望来看,ShadowPath的协议框架是通用的:状态树可以用SMT、Verkle或其他结构;证明系统可以用Groth16、PLONK或更高效的方案;状态分发层可以用IPFS、区块链或传统的HTTP服务器。论文真正提供的不是一个具体的“产品”,而是一个“把凭证特定查找从验证方手里夺回来”的架构范式 。这种范式对未来的可验证凭证生态、去中心化身份(Decentralized Identifier, DID)和自主权身份(Self-Sovereign Identity, SSI)系统都有直接参考价值。
从工程落地角度看,SMT后端在Groth16下371.6毫秒的证明时间意味着:中端手机也能在1秒左右完成证明,验证方只需要几毫秒就能验完,这个性能已经可以支撑真实场景。Verkle后端虽然证明慢,但它的完整摘要存储效率更高、增量更新更紧凑,在撤销数量极大的场景下仍有一席之地。论文的价值不在于告诉我们“谁赢了”,而在于给出了第一份可复现的、覆盖桌面与移动两端、两种证明系统与两种树结构的系统化基准。
龙迷三问
这篇论文到底在解决什么问题? 可验证凭证的撤销检查可能泄露隐私,形成“稳定句柄”。
这篇工作最值得看的点是什么? ShadowPath-SMT在Groth16下证明时间为371.6ms,优于zk-creds的419ms,证明大小388B优于zk-creds的744B;ShadowPath-Verkle在Groth16下证明时间为2109.5ms,在移动设备上Groth16证明时间约3秒,PLONK超过10秒
这篇工作的边界或风险在哪里? 优点:(1)提出了完整的查找隐私凭证状态验证协议,解决了凭证撤销检查中的隐私泄露问题;(2)系统性地分析了稳定句柄问题,并提出了三个明确的隐私目标;(3)提供了SMT和Verkle两种后端的全面评估,包括桌面和移动设备性能。缺点:(1)Verkle后端的证明时间过长,在移动设备上PLONK超过10秒,实用性受限;(2)状态同步元数据仍可被网络观察者获取,隐私保护不完整;(3)排除了发行者-验证者共谋的情况,限制了安全模型的适用范围。
如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~
龙哥点评 论文创新性分数: ★★★★☆
ShadowPath将凭证状态查找从验证者转移到持有者本地,持有者基于公开的认证注册表状态,在零知识证明中隐藏凭证特定查找信息,证明凭证未被撤销,同时通过会话绑定值将状态结果与当前凭证展示绑定。
实验合理度: ★★★★☆
证明时间、验证时间、证明大小、状态传输大小、重建时间
学术研究价值: ★★★★☆
ShadowPath将凭证状态查找从验证者转移到持有者本地,持有者基于公开的认证注册表状态,在零知识证明中隐藏凭证特定查找信息,证明凭证未被撤销,同时通过会话绑定值将状态结果与当前凭证展示绑定;更关键的是问题定义是否可复用到同类任务。
稳定性: ★★★☆☆
现有材料未提供充分的极端条件、重复运行或扰动测试,稳定性暂按中性评价。
适应性以及泛化能力: ★★★☆☆
现有材料未完整展示跨数据集、跨场景或分布外实验,泛化能力仍需进一步验证。
硬件需求及成本: ★★★☆☆
Groth16证明时间:SMT为371.6ms,Verkle为2109.5ms;验证时间分别为3.70ms和7.55ms;PLONK Verkle证明时间为25619.8ms
复现难度: ★★★☆☆
现有材料未确认完整代码、配置、数据处理脚本和权重是否齐备,复现难度暂按中性评价。
产品化成熟度: ★★★☆☆
论文验证以研究实验为主,真实部署中的时延、成本、维护和异常场景仍需补充验证。
可能的问题: ;(2)系统性地分析了稳定句柄问题,并提出了三个明确的隐私目标;(3)提供了SMT和Verkle两种后端的全面评估,包括桌面和移动设备性能。缺点:(1)Verkle后端的证明时间过长,在移动设备上PLONK超过10秒,实用性受限;
主要参考文献
[1] Patrick Herbke, Wolf Rieder, Christian Rene Sechting, Huaning Yang, Sid Lamichhane, Philip Raschke, Axel Küpper. ShadowPath: Lookup-Private Credential Status Verification over Authenticated State. Technische Universität Berlin, Humboldt-Universität zu Berlin. arXiv:2608.19937v1, 2026.
[2] K. Nayak et al. Verkle Trees. Verkle.dev, 2021.
[3] A. Kate, G. M. Zaverucha, I. Goldberg. Constant-Size Commitments to Polynomials and Their Applications. ASIACRYPT 2010.
*本文仅代表个人理解及观点,不构成任何论文审核或者项目落地推荐意见,具体以相关组织评审结果为准。欢迎就论文内容交流探讨,理性发言哦~ 想了解更多原文细节的小伙伴,可以点击 "阅读原文", 查看更多原论文细节哦!
数字身份时代,凭证撤销也可能泄露隐私!ShadowPath把状态查询藏进零知识证明,让每次出示都“查了等于没查”🔐 想读懂更多硬核论文,扫码或加龙哥助手微信
kangjinlonghelper ,备注:隐私/密码学/数字身份+城市+单位+昵称,邀你进龙哥读论文讨论群,和同好一起解密~