目录

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↩︎