本文介绍了 GKR(Goldwasser–Kalai–Rothblum)协议的结构与原理,说明其如何通过多变量 Sumcheck 协议递归验证分层电路的计算正确性。详细阐述了电路层级关系、约束构造及验证流程,展示了 GKR 在零知识证明中的高效性与可扩展性。
在零知识证明(Zero-Knowledge Proof, ZKP)中,GKR 协议(Goldwasser–Kalai–Rothblum protocol)是一种用于验证算术电路(Arithmetic Circuit)计算正确性的高效交互式证明系统。它通过多变量 Sumcheck 协议(Multivariate Sumcheck Protocol)递归地验证分层电路的输出与输入之间的关系,实现了在通信复杂度对数级、验证复杂度低于线性的前提下,对任意多层电路的正确性证明。
设有一个算术电路:
$$ C: \mathbb{F}^{s_n} \to \mathbb{F} $$
该电路由 $n$ 层构成,从输入层 $n$ 到输出层 $0$,层与层之间通过有向边连接:
Layered Arithmetic Circuit:
  Layer 0   <- Output layer
  Layer 1
  ...
  Layer n-1
  Layer n   <- Input layer
定义如下符号:
$$ \text{add}^{(i)}(p,u,v) = \begin{cases} 1, & \text{若 } p = u + v \text{ 且 } p \text{ 为加法门} \ 0, & \text{否则} \end{cases} $$
$$ \text{mult}^{(i)}(p,u,v) = \begin{cases} 1, & \text{若 } p = u \times v \text{ 且 } p \text{ 为乘法门} \ 0, & \text{否则} \end{cases} $$
为了在域 $\mathbb{F}$ 上进行代数化验证,我们将这些布尔函数进行多线性延拓(Multilinear Extension, MLE):
$$ \widetilde{\text{add}}^{(i)}, \widetilde{\text{mult}}^{(i)}: \mathbb{F}^{si + 2s{i+1}} \to \mathbb{F} $$
它们在 ${0,1}$ 上保持布尔函数的一致性,同时在 $\mathbb{F}$ 上可作为多项式计算。
GKR 协议的核心任务是验证每一层的输出是否与下层输入一致。 设 $\widetilde{w}_i: \mathbb{F}^{s_i} \to \mathbb{F}$ 表示第 $i$ 层门输出值的多线性延拓函数,则对于任意 $p \in G_i$,应满足:
$$ \widetilde{w}i(p) = \sum{u,v \in {0,1}^{s{i+1}}} \left[ \widetilde{\text{add}}^{(i)}(p,u,v) \big(\widetilde{w}{i+1}(u) + \widetilde{w}{i+1}(v)\big) + \widetilde{\text{mult}}^{(i)}(p,u,v) \big(\widetilde{w}{i+1}(u) \cdot \widetilde{w}_{i+1}(v)\big) \right] $$ 这表明每个门的输出值等于其输入门的加法或乘法计算结果的组合。
Verifier 在协议开始时,从 $\mathbb{F}$ 中选择随机挑战点 $Z \in \mathbb{F}^{s_i}$,并要求 Prover 证明:
$$ \widetilde{w}i(Z) = \sum{u,v \in {0,1}^{s_{i+1}}} g^{(i)}(Z, u, v) $$
其中:
$$ g^{(i)}(Z,u,v) = \widetilde{\text{add}}^{(i)}(Z,u,v) \big(\widetilde{w}{i+1}(u) + \widetilde{w}{i+1}(v)\big) + \widetilde{\text{mult}}^{(i)}(Z,u,v) \big(\widetilde{w}{i+1}(u)\cdot \widetilde{w}{i+1}(v)\big) $$
该恒等式是一个多变量多项式恒等式,其变量集合为 $(u, v) \in \mathbb{F}^{2s_{i+1}}$。\ Prover 与 Verifier 可通过 Multivariate Sumcheck Protocol 来验证此求和是否成立。
定义总变量 $X = (u, v) \in \mathbb{F}^{2s_{i+1}}$,我们要验证:
$$ \sum{X \in {0,1}^{2s{i+1}}} g^{(i)}(Z, X) = \widetilde{w}_i(Z) $$
Sumcheck 协议允许 Prover 按变量顺序依次提交多项式 $G_1, G2, \ldots, G{2s_{i+1}}$,每个多项式表示在剩余变量固定时的部分求和。
Verifier 每轮发送随机挑战 $r_j$,更新目标函数的部分求值,直到最后一轮仅剩下对单点 $g^{(i)}(Z, r)$ 的验证。
在 Sumcheck 结束后,Verifier 得到需要验证的点值:
$$ \widetilde{w}{i+1}(u), \quad \widetilde{w}{i+1}(v) $$
这两个点成为下一层递归验证的输入。 Verifier 再次随机选择挑战点 $Z' \in \mathbb{F}^{s_{i+1}}$,并构造新的等式:
$$ \widetilde{w}{i+1}(Z') =\ \sum{x,y \in {0,1}^{s_{i+2}}} g^{(i+1)}(Z', x, y) $$
重复 Sumcheck 验证过程。
当递归到最底层(输入层 $n$)时,$\widetilde{w}_n(x)$ 对应于电路的输入值,这些值是公开的或可直接验证的:
$$ \widetilde{w}_n(x) = \text{Input}(x) $$
Verifier 可直接检查该恒等式是否成立,从而结束整个验证过程。
输入:
输出:
交互流程:
| 指标 | 复杂度 | 说明 | 
|---|---|---|
| 通信复杂度 | $O(n \log S)$ | Sumcheck 每轮通信对数级;n 为电路层数 | 
| Prover 时间复杂度 | $O(C log S) | C | 
| Verifier 时间复杂度 | $O(\log S)$ | 仅进行多项式评估与随机取样 | 
| 完备性(Completeness) | 若 Prover 诚实,则 Verifier 总是接受 | |
| 可靠性(Soundness) | 若 Prover 欺骗,Verifier 以高概率拒绝(基于 Schwartz–Zippel 引理) | 
GKR 协议通过多变量 Sumcheck 递归验证层间一致性,实现了对算术电路的高效代数化验证。其核心特征为:
这种设计使得 GKR 协议成为现代零知识证明体系(如 Spartan、Halo、Nova、Lasso、Sumcheck-based zkVM)中的核心代数基础,被广泛应用于 高效电路验证、可扩展证明系统、以及递归证明构造 等场景。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!