KZG 承诺是什么?多项式承诺与 blob 验证 图 1
KZG 承诺是什么?多项式承诺与 blob 验证 · 图 1

结论先说

KZG 承诺是一种多项式承诺方案:把一批数据(编码为多项式系数)压缩成椭圆曲线上的一个点(48 字节),之后可以用一个”点评估证明”验证”这个多项式在某个位置的值等于某个值”。以太坊 EIP-4844 用 KZG 作为 blob 数据的承诺机制:每个 blob 有 KZG 承诺,blob 侧车(sidecar)的完整性、以及未来的数据可用性验证,都建立在这个承诺上。理解 KZG,是理解以太坊 blob 数据层安全机制的基础。

为什么需要”多项式承诺”而不是哈希

哈希承诺(如 Keccak)能锁定”这批字节是什么”,但回答不了结构化问题:“这些字节的第 i 个位置的值是多少”——要回答,得展示全部字节。KZG 承诺的数学结构(多项式)允许”部分查询”:承诺者锁定整个多项式后,任何人可以询问”位置 x 的值”,承诺者给出 (y, 证明) 三元组,验证者用承诺 + 点评估预编译在几步椭圆曲线运算内确认”y 确实是这个多项式在 x 的值”。blob 场景需要这种能力:数据是 4096 个字段的向量,验证者/未来机制要抽查”第 i 个字段”而不处理整个 blob——哈希做不到,KZG 可以。

机制骨架:结构简化版

KZG 基于椭圆曲线的”配对”(pairing)运算。结构直觉:存在一组秘密标量生成的”结构化参数”(结构化参数集,structured reference string,由可信初始化仪式生成——注意 KZG 需要 setup,这是它被选入以太坊时的明确信任假设之一),多项式的系数用这组参数线性组合出承诺点;点评估证明同样用参数集生成。验证 = 一次配对等式检查(“承诺点、评估点、证明点”的配对关系成立当且仅当评估正确)。参数集的可信初始化(多方仪式)是 KZG 的已知信任环节——以太坊的 KZG 参数由公开多方仪式生成,仪式记录公开可查(与 zk-SNARK 的可信初始化是同一类机制,见相关专题)。

在 blob 里的具体角色

EIP-4844 下:每个交易可附带若干 blob(每个 4096 个 32 字节字段),每个 blob 对应一个 KZG 承诺(48 字节,进入区块头/交易)+ blob 数据(侧车,在 P2P 网络传播,不进执行层状态)。执行层验证:交易规则检查 blob 数量上限、承诺格式;blob 数据与承诺的一致性由共识层/DA 机制处理(完整侧车的传播与验证,历史上有 EIP-6793 等改进调整侧车验证位置)。4844 预编译(KZG 点评估预编译):执行层合约可以验证”承诺在位置 x 的值是 y”——为链上应用(如 DA 验证合约、L2 数据证明)提供原语。对普通开发者,KZG 大部分是透明的(客户端处理),但”blob 数据不在执行状态里、靠承诺 + 侧车机制保证”这个结构直接影响 L2 的数据策略。

KZG 与替代方案的取舍

为什么选 KZG 而不是纯哈希:点查询能力(上面已述)+ 承诺极小(48 字节 vs 数据量)+ 验证极快(预编译几条指令)。代价:需要可信初始化(哈希方案不需要);依赖椭圆曲线配对运算(硬件支持、实现复杂度高);抗量子姿态弱于哈希类方案(椭圆曲线假设)。以太坊的取舍逻辑:blob 是短期机制(Danksharding 路线的过渡),KZG 的效率收益 > 其信任代价,且参数仪式按公开多方诚实多数标准执行——这是一个”明确的、可审计的信任假设”,不是隐藏依赖。

验证者与轻客户端的视角

验证者:处理 blob 交易时检查承诺数量/格式、侧车传播完整性(不同版本的验证位置不同,以当前规范为准)——blob 不影响状态转换(不进执行层),所以”blob 验证失败”的后果是拒块/罚没提议者,不是状态回滚。轻客户端:状态根不包含 blob 数据,轻客户端验证 L2 状态时不需要 blob(需要的是 L2 自己的数据层)——这解释了”blob 便宜但 L2 数据策略独立”:L2 把数据放进 blob 只是借用以太坊的 DA,L2 状态验证的信任链仍含”blob 数据可获取”这一环(由以太坊共识 + 侧车机制担保)。

常见误读

“KZG 是零知识证明”——不是,它是承诺方案(commitment scheme),没有”隐藏性”目标(数据本来就公开),只有”绑定性 + 可验证点查询”。“blob 在链上 = 数据永久可查”——blob 数据不在执行状态里,长期可查性依赖归档节点/DA 生态(与 calldata 的永久可查不同);“上链了”和”状态里”是两回事。“KZG 参数泄露 = blob 安全归零”——参数集风险主要影响”承诺的绑定性”(理论上可用毒参数构造不同多项式同承诺),以太坊的公开仪式按诚实多数标准执行,该风险与所有使用 KZG 的系统相同,属已知可审计假设。

风险提示

KZG 机制的细节(侧车验证位置、预编译行为、参数更新)随 EIP 演进调整,引用具体行为时以当前规范版本为准。可信初始化是 KZG 的结构性信任环节:评估任何使用 KZG 的系统(以太坊 blob、ZK 系统的 KZG 承诺),把”参数仪式记录 + 参与方独立性”纳入信任清单——这是机制的一部分,不是可忽略的细节。本文不构成对任何系统的安全性评级。

小结

一句话记忆:KZG 承诺 = 把数据多项式压缩成 48 字节承诺点,支持”点评估”抽查;它是以太坊 blob 的完整性骨架,需要可信初始化(公开仪式),是”可审计的明确信任假设”。理解”承诺小、点查询、setup 仪式”三件事,就理解了 blob 数据层的安全结构。