目录

KZG 多项式承诺的曲线基础及其协议应用

从 BLS12-381 到 EIP-4844 blob workflow 的最小推导

Reading: KZG turns polynomial objects into deployable commitments.

到 ECC 子系列的最后一篇,问题已经收缩得很具体了。前面几篇分别回答了 why not one curve、账户层为什么停在 secp256k1、pairing-friendly curves 为什么进入 verifier、以及 Ethereum 为什么在 BN254 与 BLS12-381 之间形成长期工程张力。到了 EIP-4844,pairing-friendly curve 不再只是 verifier 的数学背景,而是直接进入 data-availability commitment workflow。

这里真正要理解的,不是“BLS12-381 为什么常出现”,而是“KZG commitments 为什么会自然进入 blob workflow”。如果一个协议只需要对数据做普通哈希承诺,那么 pairing-friendly curve 完全可以不出现;但如果协议既想对多项式对象做常数大小承诺,又想对某个 evaluation claim 给出紧凑 opening proof,那么 verifier 最终就会落到 pairing equation 上,而这也是 KZG commitments and opening proofs rely on pairing-friendly curves 的根本原因。1 2

所以这一篇的顺序会比“直接讲 blob”更慢半步:先定义 polynomial commitment object,再写 minimal KZG opening verification equation,随后把这个对象映射到 EIP-4844 blobs 的 commitment / proof / verification workflow,最后把 trusted setup 从尾注抬成 first-class protocol constraint,并在文末给出工程实现对接。

Quick Note. This article explains why KZG commitments and opening proofs rely on pairing-friendly curves. It also gives the minimal KZG opening verification equation, shows the role of BLS12-381 in modern Ethereum data-availability commitments, maps the polynomial commitment object to the blob-commitment workflow in EIP-4844, and makes trusted setup a first-class protocol constraint rather than an afterthought.

为什么 KZG 会进入 EIP-4844

如果把 EIP-4844 blobs 理解成“链上多了一种大数据对象”,会漏掉关键点。EIP-4844 真正要解决的不是把字节串丢进链里,而是让协议能够围绕这些数据对象建立可验证、可传递、可压缩的承诺接口。

这就是为什么 blob 不是普通哈希承诺。哈希可以证明“这个字节串对应这个 digest”,但它不直接提供多项式 evaluation claim 的紧凑 opening structure。KZG 则不同:它把一个多项式对象压成常数大小 commitment,同时允许 prover 对“在点 $z$ 处,值是否为 $y$”这类 claim 给出紧凑证明。

于是 BLS12-381 在 modern Ethereum data-availability commitments 里的角色就变得具体了:它不是“某条大家现在更喜欢的曲线”,而是 KZG verifier 需要的 pairing-friendly setting 的工作曲线。

Formal Object:KZG commitments

structured reference string

KZG 的起点不是消息,而是多项式 $f(X)$。为了对它做 commitment,协议首先需要一个 structured reference string。最小语境下,可以把它理解成某个隐藏标量 $\tau$ 诱导出来的一组群元素,例如

$$ g_1, g_1^{\tau}, g_1^{\tau^2}, \ldots $$

以及配套的目标群侧对象。这里已经出现了本文必须单独抬出来的约束:trusted setup。因为 commitment object 不是从空气中长出来的,它依赖一个结构化参考字符串,而这正是 KZG 和普通无结构承诺的根本区别。

多项式承诺与 opening claim

对多项式 $f(X)$,KZG commitment 可以压成

$$ C = g_1^{f(\tau)}. $$

这就是 KZG commitments 的最小对象。接下来,如果 prover 想证明

$$ f(z) = y, $$

那么它需要给出一个 opening proof $\pi$,使 verifier 不必知道整个 $f(X)$,也不必看到 $f(\tau)$ 的秘密结构,就能检查这个 claim 是否成立。

minimal KZG opening verification equation

商多项式视角

KZG opening proof 的关键在于商多项式

$$ q(X)=\frac{f(X)-y}{X-z}. $$

这个对象存在的前提正是 $f(z)=y$。如果 claim 为真,那么 $f(X)-y$ 可以被 $(X-z)$ 整除,于是 prover 可以围绕 $q(X)$ 构造证明对象。

pairing verification 形状

This section gives the minimal KZG opening verification equation.

在最小形状下,verifier 要检查的是

$$ e(C / g_1^y, g_2) \stackrel{?}= e(\pi, g_2^{\tau-z}). $$

这就是 minimal KZG opening verification equation

一旦这条式子出现,为什么 KZG commitments and opening proofs rely on pairing-friendly curves 就已经不需要再靠口号解释了。左边编码的是 commitment 与 claimed value 的差,右边编码的是商多项式与结构化参考字符串的关系。verifier 真正比较的,不再是普通群里的签名等式,而是 pairing equation。

从 polynomial commitment object 到 blob workflow

blob commitment、proof 与 verifier

This section gives the mapping from polynomial commitment object to blob-commitment workflow in EIP-4844.

把抽象对象压到 blob-commitment workflow in EIP-4844,可以得到下面这张表:

KZG 对象 协议角色 EIP-4844 语境
多项式 $f(X)$ 被承诺的数据对象 blob 对应的数据多项式表示
commitment $C$ 常数大小承诺 blob commitment
evaluation claim $(z, y)$ 想验证的点值关系 某个 opening query
proof $\pi$ opening proof blob verification proof
pairing verifier 检查 claim 是否成立 共识/验证流程中的 KZG verification

这张表后面的关键结论是:EIP-4844 不是“先发明了 blob,再随手挑了 KZG”;而是 data-availability commitment workflow 需要一个既能紧凑承诺多项式对象、又能紧凑验证 opening claim 的接口,而 KZG 正好提供了这组对象。

BLS12-381 在工作流里的角色

BLS12-381 在这里的角色非常直接:它提供 KZG verifier 所依赖的 pairing-friendly setting。换句话说,curve choice 不是外围实现细节,而是 commitment object 能否被实际验证的一部分。

这也是为什么上一章的 Ethereum 曲线演化不能单独看。BLS12-381 在 modern Ethereum data-availability commitments 中的重要性,不是因为它“流行”,而是因为 blob commitment 和 opening proof 的 verifier 最终消费的就是这一类 pairing-friendly curve interface。

trusted setup 不是尾注

为什么 setup 在 KZG 里是结构性约束

很多工程叙事会把 trusted setup 写成“当然还有个 ceremony”。这种写法太轻。更准确的说法是:在 KZG 里,setup assumptions 是 commitment object 的一部分。如果结构化参考字符串的生成过程不可信,那么整个安全边界都会被污染。

This article makes trusted setup a first-class protocol constraint rather than an afterthought.

也就是说,trusted setup 不是 KZG 旁边的行政手续,而是协议本体的一部分。它和 pairing-friendly curve 一样,都是 verifier interface 的组成条件。

工程师该如何理解 toxic waste 风险

如果用工程语言重写这个问题,真正需要问的是:

  • setup ceremony 的假设是什么
  • 哪些对象必须被销毁或不可恢复
  • library 和 integration 是否默认了 setup 输入永远可信

只要这些前提没有被明确写进协议和实现边界里,KZG integration 就是不完整的。

工程实现对接

library boundary 与 serialization

现实系统里最先会出问题的,通常不是 pairing 公式写错,而是 object boundary 不清:

  • commitment、proof 和 evaluation input 的 serialization 是否一致
  • library 是否把 BLS12-381 群对象与 KZG object 清晰分开
  • verifier 调用方是否明确知道哪些输入已经做 subgroup checks

这些看起来像实现细节,但实际上直接决定 blob verification integration 是否可靠。

blob-verification integration

对协议工程师来说,blob-verification integration 真正要关心的是:在哪一层消费 commitment、在哪一层消费 opening proof、哪一段系统承担 verification,以及 setup assumptions 是否被正确继承到运行环境里。

如果这些接线位置不清,系统很容易退化成“数学对象是对的,部署对象是糊的”。这也是为什么 KZG 的工程实现对接必须同时包含:

  • 曲线与 pairing library 边界
  • setup ceremony 假设
  • serialization 与 proof object 约束
  • verifier workflow 的责任划分

作为 ECC 子系列的收尾

到这里,ECC 子系列实际上收束成了一条很稳定的判断线:

  • 账户层问题先问普通离散对数群接口
  • verifier compression 问 pairing-friendly curve
  • 进入 Ethereum 工程现实后,再问 precompile、gas、deployment friction
  • 进入 KZG / blob workflow 后,再把 trusted setup 和 object boundary 拉回主轴

也就是说,曲线从来不是孤立选型,而是协议接口、实现边界和部署现实的交点。

总结

KZG 之所以会成为 EIP-4844 blob workflow 的核心,不是因为它“先进”,而是因为它把 polynomial commitment object 和 opening proof 压成了实际可消费的 verifier interface。于是 pairing-friendly curve 在这里不再是背景知识,而是 commitment / proof / verification 整条链上的工作曲线。

因此这一篇最想固定下来的判断线是:如果协议要对多项式对象做紧凑承诺,并对 evaluation claim 做紧凑验证,那么 KZG 会自然进入画面;而一旦 KZG 进入画面,BLS12-381trusted setup 也就不再是可选注释,而是协议主轴本身。

作为 ECC 子系列收尾,这也把前面 6 篇连成了一条线:不同曲线不是被“偏好”出来的,而是被账户接口、verifier compression、Ethereum execution surface 和 deployment constraints 一起推出来的。


  1. Aniket Kate, Gregory M. Zaverucha, and Ian Goldberg, Constant-Size Commitments to Polynomials and Their Applications↩︎

  2. EIP-4844, Shard Blob Transactions↩︎