译自 halo2 book:https://zcash.github.io/halo2/design/proving-system.html
证明系统(Proving system)
Halo 2 的证明系统可以分解为五个阶段:
- 对编码电路主要组成部分的多项式做承诺(commit):
- 单元格赋值(cell assignment)。
- 每个查表论证(lookup argument)的置换值(permuted value)与乘积(product)。
- 等式约束置换(equality constraint permutation)。
- 构造消失论证(vanishing argument),以将所有电路关系约束为零:
- 标准门(standard gate)与自定义门(custom gate)。
- 查表论证规则。
- 等式约束置换规则。
- 在所有必要的点上对上述多项式求值:
- 所有列上、所有自定义门所用的相对旋转(relative rotation)。
- 消失论证的各个分片。
- 构造多点打开论证(multipoint opening argument),以检查所有求值与各自的承诺保持一致。
- 运行内积论证(inner product argument),为多点打开论证的多项式创建一个多项式承诺打开证明(polynomial commitment opening proof)。
本章接下来将依次介绍这些阶段。
示例
为了便于讲解,我们有时会引用如下示例约束系统(constraint system):
- 四个建议列(advice column)。
- 一个固定列(fixed column)。
- 三个自定义门:
tl;dr(太长不看)
下表对 Halo 2 协议给出一个(可能过于)简洁的描述。这一描述很可能会被 Halo 2 论文及其安全性证明所取代,但目前可作为接下来各小节内容的摘要。
| Prover(证明者) | Verifier(验证者) | |
|---|---|---|
| 检查 | ||
| 构造多点打开多项式 | ||
然后证明者与验证者:
- 使用 的幂次,将 构造为 与 的线性组合;
- 将 构造为 与 的等价线性组合;并
- 执行
TODO:撰写提供零知识(zero-knowledge)的协议组件。