零知识证明系统大多有个开机仪式:生成公共参数,由一场多方计算完成——参与者们各自注入随机数,只要一人诚实,陷阱就废了。Groth16 的那场 Powers of Tau 仪式甚至做成了网页直播。但『总得有人点一次火』这件事让密码学家如鲠在喉:仪式代码有 bug 就全盘皆输,参数体积随电路大小膨胀,新应用来了还得再办一场。Halo(IACR ePrint 2019/1021,2019 年发表)给出目前最干净的拆炉方案:让证明自己验证自己——递归地证明『我内部这个证明有效』,烧掉炉子的不是更好的燃料,而是把点火动作变成了无穷递归里的一步。
递归压缩:证明链条的套娃结构
递归证明的想法可以一层层讲。假设有一种证明系统 P:证明者给声明 π 附一个证据,验证者花小代价检查。现在造一个『电路版验证者』:写一个电路 V,输入是声明和证据,输出『证据有效』的位——因为证明验证本身就是算术运算,写成电路是机械工作。有了 V,就能让 P 去证明『我知道一个证据 π₀,使得 V(声明₀, π₀) = 真』——这条新证明 π₁ 声称的是『第 0 步证明有效』。再来一遍:π₂ 证明 π₁ 有效,π₃ 证明 π₂ 有效……链条可以无限加长,而验证者永远只需要检查最后一环。这就是压缩:把一万次计算的置信度折叠进一条证明的体积里。区块链场景的即时回报是『验证者只需验一笔证明,就能相信一万批交易的正确性』,扩容梦想里它是理论基石。
死循环在哪:递归里必须住一个 SNARK
递归听起来免费,其实有个硬约束:第 k 环的证明要验证第 k-1 环,第 k-1 环的验证算法必须能被第 k 环的电路高效表达。如果验证本身就是椭圆曲线配对运算,把它塞进另一条曲线上的电路,成本会爆炸到不可用——SNARK 自己验自己最现实。于是形成怪圈:Groth16/PLONK 这类 SNARK 的验证器(群元素上的多指数运算)可以在自己的电路里以可接受的代价运行,代价是它们全部依赖可信设置生成的公共参数。递归路线走到这里会撞墙:你为了甩掉可信设置选了『验证便宜到能进电路』的系统(比如 STARK/FRI 系),那它内部的『便宜验证』在另一层里就不再便宜(哈希成本在 SNARK 电路里以千倍计);选 SNARK 递归 SNARK,成本顺了,可信设置又跟着递归传染回来了——第 1024 环参数还是当初那场仪式点的火。
Halo 的杠杆:累加器把信任外包给数学
Halo 的破局思路是把『验证内部证明』拆成两件事:不是完整重验,而是维护一个累加器。方案的内核来自 Bulletproofs 一脉的内部积论证(IPA):证明的核心对象是一个向量承诺,承诺本身可以线性累加——把外部声明『累加』进系统状态,累加值的数学性质保证每个分量都来自诚实承诺。Halo 的递归证明不验证前序证明的全部内容,它验证的是:前序声明的累加值与我这层的承诺相容。每一环传递的不再是完整历史,而是一小群累加标量——这正是可递归性最好的宿主:累加运算简单到任何电路都跑得动,安全性又不依赖任何仪式参数。当然诚实前提没消失,是换了形态:IPA 的承诺以离散对数假设做抵押,公共参数里只有一个需要全链可信生成的群元素(生成元),而它可以从确定性哈希派生出来——把『一场多方仪式』降维成『一段公开可复算的比特串』。炉子拆了,信任从『参与者名单』挪进了『数学难题的难度』。
代价清单:体积、成本与内 SNARK 补丁
免设置不是白拿。纯 IPA 的验证者成本随证明规模线性增长,链上直接验不划算;Halo 的实践折中是内外双系统——证明内部嵌一个轻量 SNARK 处理大额计算,外层用累加器维持递归与免设置性质,链上验的只是外层累加步骤,代价是内层 SNARK 的『验证器电路』本身成了性能瓶颈,每层递归都在电路上做椭圆曲线运算,证明时间显著拉长。另一条代价线在递归深度:证明体积只随步数对数增长,听着便宜,但每多一层压缩,证明者的计算量就要再套一圈完整电路。工业系统(比如基于 Halo2 的多个 L2)在参数曲线上反复做工程:证明时间、内存曲线、递归层数的三角权衡,比『有没有可信设置』这个问题本身更决定成本。读 zk 系统白皮书时值得问的三个问题因此是:递归里嵌的是什么、累加器用什么承诺、公共参数从哪来——三问对完,炉子烧没烧、柴火藏在哪个房间,一目了然。
快速问答
Halo 完全不需要任何参数吗?不需要多方仪式,但需要一组确定性的群参数,通常从公开哈希派生——信任来源从『仪式诚实一人』换成了『离散对数难题』。
为什么不用 STARK 直接递归?可以,但哈希在另一层电路里重跑成本高;递归哈希的成本曲线决定了 STARK 系在以太坊内验证的性价比不如带累加器的设计。
免设置等于没有信任假设吗?不。它只是把假设搬到了另一张账上:可量化难度的数学难题,取代了『某场仪式没人留后门』。
风险提示:本文仅作零知识密码学机制科普,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。