Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

译自 halo2 book:background/pc-ipa.md

使用内积论证(inner product argument)的多项式承诺(polynomial commitment)

我们想要承诺(commit)某个多项式 ,并能够可证明地在任意点处对所承诺的多项式求值。朴素的方案是让证明者(prover)直接把多项式的系数发给验证者(verifier):然而,这需要 的通信量。我们的多项式承诺方案则用 的通信量完成这件事。

Setup

给定参数 我们生成公共参考串(common reference string) ,它为本方案定义了若干常数:

  • 是一个素数阶 的群;
  • 是一个由 个随机群元素组成的向量;
  • 是一个随机群元素;以及
  • 是阶为 的有限域。

Commit

Pedersen 向量承诺 定义为

其中 是某个多项式, 是某个盲化因子(blinding factor)。这里,向量的每个元素 次项的系数,而 的最高次数为

Open(证明者)与 OpenVerify(验证者)

改进版的内积论证是关于如下关系的知识论证(argument of knowledge)

其中 由求值点 的递增幂次组成。这使得证明者能向验证者证明:承诺 "内部"所含的多项式在 处求值为 而且,所承诺的多项式具有最高次数

内积论证进行 轮。就我们的目的而言,只需了解它的最终输出即可,对于中间各轮我们仅提供直觉。(完整解释请参阅 Halo 论文第 3 节。)

在开始论证之前,验证者选取一个随机群元素 并把它发给证明者。我们在第 轮初始化论证,使用向量 在每一轮 中:

  • 证明者通过取 的某个内积来计算两个值 。注意它们在某种意义上是"交叉项(cross-terms)": 的下半部分与 的上半部分一起使用,反之亦然:

  • 验证者发出一个随机挑战
  • 证明者使用 来压缩 的下半部分和上半部分,从而产生一个长度为原来一半的新向量 向量 被类似地压缩以给出 (使用 而不是 )。
  • 被输入到下一轮

注意在最后一轮 结束时,我们剩下 它们各自的长度都为 1。其直觉是,这些最终的标量,连同每一轮的挑战 和"交叉项" ,编码了每一轮中的压缩。由于证明者事先并不知道挑战 ,他们将无法操纵各轮的压缩。因此,对这些最终项检查一个约束,应当能强制保证压缩是正确执行的,并且原始的 在经历压缩之前满足该关系。

注意 只是公开已知的 的重新排列,其中混入了各轮挑战 :这意味着验证者可以独立地计算 ,并验证证明者提供的是同样的值。