本文介绍 KZG 多项式承诺。
前置知识
简介
KZG 多项式承诺(KZG Polynomial Commitment)源自于 Aniket Kate, Gregory M. Zaverucha 和 Ian Goldberg 在 2010 年发表了多项式承诺方案论文 Constant-Size Commitments to Polynomials and Their Applications,也被称为卡特多项式承诺方案,该方案在 plonk-style 的 zk-snark 协议中有很广泛的应用。主要特性:
- 承诺是一个支持配对的椭圆曲线的群元素。比如说对于 BLS12_381 曲线,大小应是 48 字节。
- 证明大小独立于多项式大小,永远是一个群元素。验证,同样独立于多项式大小,无论多项式次数为多少都只要两次群乘法和两次配对。
- 大多数时候该方案隐藏多项式 - 事实上,无限多的多项式将会拥有完全一样的卡特承诺。但是这并不是完美隐藏:如果你能猜多项式(比如说该多项式过于简单,或者它存在于一个很小的多项式集合中),你就可以找到这个被承诺的多项式。
- 在一个承诺中合并任意数量的取值证明是可行的。这些性质使得卡特方案对于零知识证明系统来说非常具有吸引力,例如 PLONK 和 SONIC。同时对于一些更日常的目的,或者简单的作为一个矢量承诺来使用也是非常有趣的场景,接下来的文章中我们就会看到。
数学原理
可参考 Qi Zhou 博士关于 kzg 的讲解:
可信设置
EIP-4844 中采用了一种常见的 multi-participant trust setup,即 powers-of-tau;
遵循 1-of-N 可信模型,不管多少人参与 generating setup 的过程,只要有一个人不泄漏自己的生成方式,可信初始化就是有效的;
必要性
- KZG commitment 的 trust setup 可以简单理解为:生成一个在每次执行 cryptographic protocol 时需要依赖的一个参数,类似于 zk-snark 需要可信初始化;
- Prover 在提供证明时,KZG commitment C = f(s)g1。其中 f 是评估函数,s 就是 KZG trusted setup 最终获得的 final secret;
- 可以看出 final secret 是生成多项式承诺的核心参数,而作为获取这个核心参数的可信流程,这次 KZG Ceremony 对于整个 sharding 的实现非常重要。
评论