多项式承诺让证明者先承诺一个多项式 f,之后再令人信服地打开它在任意一点的取值。KZG 方案1的承诺和打开证明都只有一个群元素,这使它成为 PLONK 等证明系统的基础构件。实际系统里,验证者往往需要在同一个点 z 上同时打开 t 个多项式:逐个验证需要 2t 次配对,而一次随机线性组合可以把它降到 2 次。2 这篇笔记把其中用到的引理单独拿出来,完整地证明一遍。
设 G1,G2,GT 是阶为素数 p 的循环群,生成元分别为 g1,g2,gT;e:G1×G2→GT 是非退化的双线性映射,F=Fp。对 a∈F,记 [a]1=a⋅g1,[a]2=a⋅g2。
定义(KZG 多项式承诺)令 d 为次数上界。可信设置选取随机的 τ←F,输出
srs=([1]1,[τ]1,[τ2]1,…,[τd]1;[1]2,[τ]2)并销毁 τ。对任意 f∈F[X],degf≤d:
- 承诺:com(f)=[f(τ)]1,它可以由 srs 线性地算出;
- 打开:要证明 f(z)=v,令 q(X)=X−zf(X)−v,证明为 π=[q(τ)]1;
- 验证:接受当且仅当 e(C−[v]1,[1]2)=e(π,[τ]2−[z]2)。
验证等式之所以成立,是因为 q 是多项式当且仅当 (X−z)∣f(X)−v,也就是当且仅当 f(z)=v。
设证明者已经承诺了 f1,…,ft,承诺为 Ci=com(fi),并声称对所有 i 都有 fi(z)=vi。协议如下:
- 验证者发送随机挑战 γ←F(非交互的情形下,γ 由 Fiat–Shamir 变换得到);
- 证明者计算批量商多项式 h(X)=∑i=1tγi−1⋅X−zfi(X)−vi,发送 π=[h(τ)]1;
- 验证者计算 Cγ=∑i=1tγi−1Ci 与 vγ=∑i=1tγi−1vi,接受当且仅当
e(Cγ−[vγ]1,[1]2)=e(π,[τ]2−[z]2).
记 Fγ(X)=∑i=1tγi−1(fi(X)−vi)。诚实的证明者满足 Cγ−[vγ]1=[Fγ(τ)]1 以及 Fγ(X)=h(X)(X−z),于是完备性由双线性直接得到:
e(Cγ−[vγ]1,[1]2)=e([Fγ(τ)]1,[1]2)=e([h(τ)(τ−z)]1,[1]2)=e([h(τ)]1,[τ−z]2)=e(π,[τ]2−[z]2).
把 h 完全展开,就是下面这个很长的式子(它同时用来测试窄屏上的横向滚动):
h(X)=X−zf1(X)−v1+γ⋅X−zf2(X)−v2+γ2⋅X−zf3(X)−v3+γ3⋅X−zf4(X)−v4+⋯+γt−1⋅X−zft(X)−vt=X−z1i=1∑tγi−1(fi(X)−vi).
可靠性的核心是:只要有一个声称的取值是错的,做完随机线性组合之后它以压倒性的概率「仍然是错的」。
引理(随机线性组合)设 f1,…,ft∈F[X],z,v1,…,vt∈F,Fγ 如上定义。若存在 j 使得 fj(z)=vj,则
γ←FPr[(X−z)∣Fγ(X)]≤∣F∣t−1.
证明由余式定理,(X−z)∣Fγ(X) 当且仅当 Fγ(z)=0。把 Fγ(z) 看成关于 γ 的多项式:
P(γ)=i=1∑t(fi(z)−vi)γi−1∈F[γ].它的次数至多为 t−1,并且 γj−1 的系数 fj(z)−vj=0,所以 P 不是零多项式。域上非零多项式的根的个数不超过它的次数,因此使 P(γ)=0 的 γ 至多有 t−1 个;而 γ 在 F 上均匀分布,故所求概率不超过 (t−1)/∣F∣。
定理(批量打开的可靠性,非正式)假设单个多项式的 KZG 方案满足求值绑定性,并且从敌手输出的每个承诺 Ci 都能提取出对应的多项式 fi(例如在代数群模型中3)。那么对任何多项式时间的敌手,批量验证通过、同时又存在某个 j 使 fj(z)=vj 的概率至多为 (t−1)/∣F∣+negl(λ)。
证明(概要)设验证通过且某个 fj(z)=vj。由引理 1,除去至多 (t−1)/∣F∣ 的概率,有 Fγ(z)=0。此时 Cγ−[vγ]1 是多项式 Fγ 的承诺,而敌手的 π 把它在 z 处打开为 0;归约算法知道所有的 fi,可以自己诚实地算出把同一个承诺在 z 处打开为 Fγ(z)=0 的证明。同一个承诺在同一点有两个取值不同的合法打开,与求值绑定性矛盾。
| 逐个打开 | 批量打开 |
|---|
| 证明大小 | t 个 G1 元素 | 1 个 G1 元素 |
| 配对次数 | 2t | 2 |
| G1 上的标量乘 | 约 2t | 约 t+1 |
| 额外的可靠性损失 | 无 | (t−1)/∣F∣ |
对 ∣F∣≈2255 和实际中出现的 t≤210,这个损失完全可以忽略。
Comments