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:https://zcash.github.io/halo2/design/proving-system/vanishing.html

消失论证(Vanishing argument)

在对电路赋值完成承诺后,证明者(prover)现在需要证明各种电路关系都被满足:

  • 自定义门(custom gate),由多项式 表示。
  • 查找论证(lookup argument)的规则。
  • 等式约束置换(equality constraint permutation)的规则。

这些关系中的每一个都被表示为一个关于电路列的、度数为 (任意关系的最大度数)的多项式。鉴于每一列的赋值多项式度数为 ,这些关系多项式关于 的度数为

在我们的示例中,这些就是门多项式,度数为 :

如果一个关系的多项式等于零,则该关系被满足。证明这一点的一种方式是把每个关系多项式除以消失多项式(vanishing polynomial),它是在每个 处都有根的最低度数多项式。如果某个关系的多项式能被 整除,那么它在整个域(domain)上等于零(正如所期望的)。

这个简单的构造将需要对每个关系做一次多项式承诺(polynomial commitment)。我们改为同时对所有电路关系做承诺:验证者(verifier)采样 ,然后证明者构造商多项式(quotient polynomial)

其中分子是各电路关系的一个随机(证明者在验证者采样 之前已对单元格赋值做出承诺)线性组合。

  • 如果分子多项式(以形式不定元 表示)能被 完美整除,那么以高概率所有关系都被满足。
  • 反之,如果至少有一个关系不被满足,那么以高概率 将不等于分子在 处的求值。在这种情况下,分子多项式将不能被 完美整除。

做承诺

的度数为 (因为除数 的度数为 )。然而,我们在 Halo 2 中使用的多项式承诺方案只支持对度数为 的多项式做承诺(这是协议其余部分需要承诺的最大度数)。为了不增加多项式承诺方案的成本,证明者把 拆分成多个度数为 的片段

并对每个片段生成盲化承诺(blinding commitment)

对多项式求值

到此为止,我们已经对电路的所有性质做出了承诺。验证者现在想要查看证明者是否承诺了正确的 多项式。验证者采样 ,证明者生成各个多项式在 处的声称求值,涵盖电路中使用的所有相对偏移,以及

在我们的示例中,这将是:

  • ,
  • ,
  • , ...,

验证者检查这些求值是否满足 的形式:

现在确信这些求值整体上满足门约束后,验证者需要检查这些求值本身与原始的电路承诺以及 是一致的。为了高效地实现这一点,我们使用多点打开论证(multipoint opening argument)