1. 引言
GKR协议相关博客有:
- Delegating Computation: Interactive Proofs for Muggles 学习笔记
- sum-check protocol in zkproof
- sum-check protocol深入研究
- GKR协议小记
- GKR+Groth16:更快的MiMC证明
- Lasso、Jolt 以及 Lookup Singularity——Part 2
- ZKP历史总览
- 当今SNARKs全景
- Virgo:Transparent Polynomial Delegation and Its Applications to Zero Knowledge Proof学习笔记
- sum-check protocol合集
交互式证明是两方(证明者
P
\mathcal{P}
P 和验证者
V
\mathcal{V}
V 之间的协议,其中证明者试图说服验证者某声明的有效性。通过利用随机性和交互性,验证者可以比自己做所有事情更有效地检查该声明。
总是有一种简单的方法可以验证计算:
- 重新执行。
这就是区块链实现可验证性的方式:
- 每个节点重新执行交易,然后达成共识。
然而,这是低效的,因为每个节点都必须重复相同的计算,从而导致瓶颈。简洁的证明使人们能够更快地检查计算,避免重新执行并解决区块链可扩展性问题。有关交互式证明系统的介绍,请参看 Justin Thaler 2023年书本:Proofs, Arguments, and Zero-Knowledge。其中一种协议是sum-check协议,由 Lund、Fortnow、Karloff 和 Nisan 于 1992 年提出,它是多个证明系统使用的基础模块之一。
GKR(Goldwasser-Kalai-Rothblum)协议(参见微软2008年论文 Delegating Computation: Interactive Proofs for Muggles 扩展了 sum-check协议 用于高效验证算术电路。GKR协议允许验证者检查计算(表示为具有low-degree门的对数深度电路)是否已正确执行。只需 O ( log ( n ) ) O(\log(n)) O(log(n)) 轮交互和总共 O ( poly log ( n ) ) O(\text{poly} \log(n)) O(polylog(n)) 次操作即可实现此目的。
GKR 协议的关键思想是:
- 它不评估整个电路,而是使用 sum-check 递归地验证代表计算值的部分和。
- 这种方法使资源有限的验证者能够通过利用问题的底层代数结构来检查远远大于他们自己可以执行的计算量。
GKR 协议的优点是避免了必须承诺电路中的中间结果,这通常是许多证明系统中昂贵的部分。
本文将以示例的方式,展示GKR协议的工作原理。更多详情,可参看:
- 双效交互证明——MIT高级密码学课程之 Lecture 2: Doubly Efficient Interactive Proofs, Part 1 和 Lecture 2: Doubly Efficient Interactive Proofs, Part 2
- 2024年3月课件 The GKR Protocol
- Justin Thaler 2023年书本:Proofs, Arguments, and Zero-Knowledge
GKR协议已用于改进 LogUp lookup argument。可在STARKWare的stwo中查看相应实现。
2. GKR协议
本文的目的是详细解释GKR协议,为此,使用了一个简单示例,并逐步遵循证明者 ( P \mathcal{P} P) 和验证者 ( V \mathcal{V} V) 所做的一切。
注意:本文将考虑GKR协议的交互式版本。
可通过Fiat-Shamir transformation将其转变成非交互式协议。
首先描述想要证明的计算。必须将计算表示为有限域 F p \mathbb{F}_p Fp 上fan-in 2 的对数空间统一算术电路 C \mathcal{C} C。这意味着:
- 该电路只有两种类型的门:加法和乘法。
- 它是分层的,以便每个门仅连接到前一层中的两个门(可能是同一门)。
- 每层 i i i中,门的数量为 S i = 2 k i S_i = 2^{k_i} Si=2ki,其中 k i ∈ N k_i \in \mathbb{N} ki∈N
- 所有值都是 F p \mathbb{F_{p}} Fp 的元素
构建一个满足这些条件的电路:
图 1:本GKR 协议示例中所使用的算术电路图。该电路模拟了一个具有 2 个输入和两个输出的程序,基于
F
23
\mathbb{F_{23}}
F23 域中运算。
该协议的最终目标是证明者向验证者提供程序的输出,并让验证者相信这些输出是根据公共输入正确计算出来的。
注意,电路和输入都是public公共的。
2.1 第一部分:分享结果
可以将其分为几个步骤:
-
1)输出声明:
证明者 P \mathcal{P} P 向验证者 V \mathcal{V} V 发送声称是电路输出的值。 这些值以函数 D : { 0 , 1 } k 0 → F p D: \{0,1\}^{ k_0 } \to \mathbb{F_{p}} D:{0,1}k0→Fp 的形式发送 。在本示例中: k 0 = 1 k_0 = 1 k0=1,因此 P \mathcal{P} P 发送满足以下条件的线性多项式 D D D:
D ( 0 ) = 18 D(0) = 18 D(0)=18 D ( 1 ) = 7 D(1) = 7 D(1)=7 -
2)随机挑战:
在GKR协议中经常使用的一个关键资源是让验证者选择一个随机点并将其发送给证明者。然后证明者必须将这一点纳入他们的计算中。这可以防止证明者预先计算结果并试图欺骗验证者。
V \mathcal{V} V 随机选择 r 0 ∈ F p r_0\in \mathbb{F}_p r0∈Fp 并将其发送给 P \mathcal{P} P。在本示例中,选择 r 0 = 2 r_0 = 2 r0=2。
-
3)计算Multilinear Extension多线性扩展:
V \mathcal{V} V 和 P \mathcal{P} P 都计算 D ~ ( r 0 ) \tilde D(r_0) D~(r0),其中 D ~ ( x ) \tilde D({x}) D~(x) 是 D D D 的多线性扩展。这是 F p \mathbb{F_{p}} Fp 上唯一的多线性多项式,满足:
D ~ ( x ) = f ( x ) ∀ x ∈ { 0 , 1 } v \tilde D(x) = f(x) \ \forall x \in \{0, 1\}^v D~(x)=f(x) ∀x∈{0,1}v- 这是 F p \mathbb{F_{p}} Fp 上的 v − v- v−variate 多项式,其中 D ~ ( x ) \tilde D({x}) D~(x) 在所有布尔值(或给定长度的位串)输入结果与 D ( x ) D({x}) D(x) 一致。
-
D
~
(
x
)
\tilde D({x})
D~(x) 充当
D
(
x
)
D({x})
D(x) 的距离放大编码,因为如果另一个函数
D
′
(
x
)
D'({x})
D′(x) 在单个输入上不一致,则扩展
D
~
(
x
)
\tilde D({x})
D~(x) 将在原始域之外的几乎每个点与
D
~
′
(
x
)
\tilde D'({x})
D~′(x) 不同。
- 原因在于 Schwartz–Zippel lemma,其指出随机选择多项式结果为零的概率为 v / ∣ F p ∣ v / \lvert \mathbb{F_p} \rvert v/∣Fp∣ (对于足够大的域来说可以忽略不计)。
- 使用Lagrange拉格朗日插值,有:
f ~ ( x 1 , … , x v ) = ∑ w ∈ { 0 , 1 } v f ( w ) ⋅ χ w ( x 1 , … , x v ) \tilde f (x_1, \ldots, x_v) = \sum_{w \in \{0, 1\}^v} f(w) \cdot \chi_w(x_1, \ldots, x_v) f~(x1,…,xv)=w∈{0,1}v∑f(w)⋅χw(x1,…,xv)- 其中 χ w \chi_w χw 是(多线性)拉格朗日基多项式: χ w ( x 1 , … , x v ) = ∏ i = 1 v ( x i ⋅ w i + ( 1 − x i ) ( 1 − w i ) ) \chi_w(x_1, \ldots, x_v) = \prod_{i = 1}^{v} (x_i \cdot w_i + (1-x_i)(1-w_i)) χw(x1,…,xv)=i=1∏v(xi⋅wi+(1−xi)(1−wi))
在本例中( k 0 = 1 k_0=1 k0=1):
D ~ ( x ) = D ( 0 ) ⋅ ( x ⋅ 0 + ( 1 − x ) ( 1 − 0 ) ) + D ( 1 ) ⋅ ( x ⋅ 1 + ( 1 − x ) ( 1 − 1 ) ) = D ( 0 ) ⋅ ( 1 − x ) + D ( 1 ) ⋅ x = 18 ( 1 − x ) + 7 x \begin{align} \tilde D(x) &= D(0) \cdot (x \cdot 0 + (1-x)(1-0)) + D(1) \cdot (x \cdot 1 + (1 - x)(1 - 1)) \newline &= D(0)\cdot(1-x) + D(1) \cdot x= 18(1-x)+7x\end{align} D~(x)=D(0)⋅(x⋅0+(1−x)(1−0))+D(1)⋅(x⋅1+(1−x)(1−1))=D(0)⋅(1−x)+D(1)⋅x=18(1−x)+7x
因此:
D ~ ( r 0 ) = D ~ ( 2 ) = − 4 ≡ 19 mod ( 23 ) \tilde D(r_0) = \tilde D(2) = -4 \equiv 19 \text{ mod } (23) D~(r0)=D~(2)=−4≡19 mod (23)
用以下方式表示该值:
D ~ ( r 0 ) = 19 = m 0 . \tilde D(r_0) = 19 = m_0. D~(r0)=19=m0.
现在,可以看到验证程序的输出归结为检查:
m
0
=
W
~
0
(
r
0
)
m_0 = \tilde W_0(r_0)
m0=W~0(r0)
在继续之前,先介绍一个附加符号。对于电路的每一层
i
i
i,以:
W
i
:
{
0
,
1
}
k
i
→
F
p
W_i: \{0,1\}^{ k_i } \to \mathbb{F_{p}}
Wi:{0,1}ki→Fp
作为将节点位置映射到其实际值的函数,令
W
~
i
(
x
)
\tilde W_i(x)
W~i(x) 为其多线性扩展。
通过这种表示法,验证者的任务可以被视为检查:
D ( x ) = W 0 ( x ) D(x) = W_0(x) D(x)=W0(x)
因为 D ( x ) D(x) D(x) 代表声明的输出, W 0 ( x ) W_0(x) W0(x) 代表正确的值。因为多线性扩展是唯一的,所以这相当于验证:
D ~ ( x ) = W ~ 0 ( x ) \tilde D(x) = \tilde W_0(x) D~(x)=W~0(x)
最后,通过 Schwartz-Zippel 引理,足以检查
D ~ ( r 0 ) = W ~ 0 ( r 0 ) \tilde D(r_0) = \tilde W_0(r_0) D~(r0)=W~0(r0)
但是等等!验证者无法直接访问 W ( x ) W(x) W(x)。这正是GKR协议的要点!
2.2 第二部分:电路建模
在此阶段,目标是验证many terms多项项(对应于节点的计算值)的总和是否等于 m 0 m_0 m0。
为了有效地做到这一点,使用sum-check协议。
2.2.1 wiring函数介绍
定义了两个捕获电路接线的函数:
-
1)加法函数。
该函数标记 i i i层中的所有加法节点。以:
x ∈ { 0 , 1 } k i + 2 k i + 1 x \in \{0,1\}^{k_i + 2k_{i + 1}} x∈{0,1}ki+2ki+1
作为输入,其编码了当前层中位置 a a a 的加法节点以及与其连接的下一层中的两个节点的位置 b b b 和 c c c 。- 当 x = ( a , b , c ) x = (a,b,c) x=(a,b,c) 对应于具有正确输入的有效加法节点时,函数 Add i \text{Add}_i Addi 定义为 1,否则定义为零。
- 就像 D ~ ( x ) \tilde D(x) D~(x) 一样,需要创建多线性扩展: Add ~ i ( x ) \widetilde{\text{Add}}_i(x) Add i(x)。
在本示例电路中:
- 输出加法节点位于位置: a : ( 1 ) a : (1) a:(1)
- 并连接到节点: b : ( 1 , 0 ) c : ( 1 , 1 ) b:(1,0)\\c:(1,1) b:(1,0)c:(1,1)
- 由于这是唯一的加法节点,定义函数:
Add 0 ( x ) = { 1 如果 x = ( 1 , 1 , 0 , 1 , 1 ) 0 如果不是。 \text{Add}_0(x) = \begin{cases} 1 & \text{如果 } x = (1,1,0,1,1)\newline 0 & \text{如果不是}。 \end{cases} Add0(x)={10如果 x=(1,1,0,1,1)如果不是。 - 然后将此函数扩展到多线性多项式,表示为
Add
~
i
(
x
)
\widetilde{\text{Add}}_i(x)
Add
i(x):
Add ~ 0 ( x 1 , x 2 , x 3 , x 4 , x 5 ) = x 1 ⋅ x 2 ⋅ ( 1 − x 3 ) ⋅ x 4 ⋅ x 5 \widetilde{\text{Add}}_0 (x_1, x_2, x_3, x_4, x_5) = x_1 \cdot x_2 \cdot (1 - x_3) \cdot x_4 \cdot x_5 Add 0(x1,x2,x3,x4,x5)=x1⋅x2⋅(1−x3)⋅x4⋅x5
-
2)乘法函数。
类似地,为乘法节点及其多线性扩展定义函数 Mult i ( x ) \text{Mult}_i(x) Multi(x)。对于本例中第一层中的乘法节点:
Mult 0 ( x ) = { 1 如果 x = ( 0 , 0 , 0 , 0 , 1 ) 0 如果不是。 \text{Mult}_0(x) = \begin{cases} 1 & \text{如果 } x = (0,0,0,0,1)\newline 0 & \text{如果不是}。 \end{cases} Mult0(x)={10如果 x=(0,0,0,0,1)如果不是。- 其多线性扩展为:
Mult 0 ~ ( x 1 , x 2 , x 3 , x 4 , x 5 ) = ( 1 − x 1 ) ⋅ ( 1 − x 2 ) ⋅ ( 1 − x 3 ) ⋅ ( 1 − x 4 ) ⋅ x 5 \widetilde{\text{Mult}_0}(x_1, x_2, x_3, x_4, x_5) = (1 - x_1) \cdot (1-x_2) \cdot (1 - x_3) \cdot (1 - x_4) \cdot x_5 Mult0 (x1,x2,x3,x4,x5)=(1−x1)⋅(1−x2)⋅(1−x3)⋅(1−x4)⋅x5
- 其多线性扩展为:
最后,需要连接这两个新函数。为此,可以定义一个函数,在给定下一层中的值的情况下“计算”层 i i i 中节点的值:
f ~ ( i ) ( a , b , c ) : = Add i ~ ( a , b , c ) ⋅ ( W ~ i + 1 ( b ) + W ~ i + 1 ( c ) ) + Mult i ~ ( a , b , c ) ⋅ W ~ i + 1 ( b ) ⋅ W ~ i + 1 ( c ) \tilde f^{(i)}(a,b,c) := \widetilde{\text{Add}_i}(a,b,c)\cdot(\tilde W_{i + 1}(b) + \tilde W_{i + 1}(c)) + \widetilde{\text{Mult}_i}(a,b,c) \cdot \tilde W_{i + 1}(b) \cdot \tilde W_{i + 1}(c) f~(i)(a,b,c):=Addi (a,b,c)⋅(W~i+1(b)+W~i+1(c))+Multi (a,b,c)⋅W~i+1(b)⋅W~i+1(c)
当此函数根据与 i i i 层中的节点相对应的值 ( a , b , c ) (a,b,c) (a,b,c) 求值时,它会生成该节点的值。
在本示例的第一层:
f ~ ( 0 ) ( 0 , 0 , 0 , 0 , 1 ) = 18 \tilde f^{(0)}(0,0,0,0,1) = 18 f~(0)(0,0,0,0,1)=18 f ~ ( 0 ) ( 1 , 1 , 0 , 1 , 1 ) = 7 \tilde f^{(0)}(1,1,0,1,1) = 7 f~(0)(1,1,0,1,1)=7
该函数很方便,但可以更进一步,固定 a = r a = r a=r 并对 b b b 和 c c c 的所有可能的二进制赋值求和,得到:
∑ ( b , c ) ∈ { 0 , 1 } 2 k i + 1 f ~ ( i ) ( r , b , c ) = W ~ ( r ) \sum_{(b,c) \in \{0,1\}^{ 2k_{i+1} }} \tilde f^{(i)}(r,b,c) = \tilde W(r) (b,c)∈{0,1}2ki+1∑f~(i)(r,b,c)=W~(r)
这个新函数现在是一个单变量多项式!
将 a a a 固定在 r r r 的函数表示为 f ~ r ( b , c ) ( i ) \tilde f_r(b,c)^{(i)} f~r(b,c)(i)。
至此,回到之前所要检查的目标:
D
~
(
r
0
)
=
W
~
(
r
0
)
\tilde D(r_0) = \tilde W(r_0)
D~(r0)=W~(r0)
或同等地,
W ~ ( r 0 ) = m 0 \tilde W(r_0) = m_0 W~(r0)=m0
因此,使用新函数 f ~ \tilde f f~ 可以将其视为:
∑ ( b , c ) ∈ { 0 , 1 } 2 k i + 1 f ~ r 0 ( 0 ) ( b , c ) = m 0 \sum_{(b,c) \in \{0,1\}^{2k_{i+1}}} \tilde f_{r_0}^{(0)}(b,c) = m_0 (b,c)∈{0,1}2ki+1∑f~r0(0)(b,c)=m0
为了验证这种相等性,这意味着大量的加法(操作),将采用 Sum-Check 协议。
2.3 第三部分:sum-check
在此先逐步描述证明者和验证者在此阶段执行的所有操作,以更好地理解协议。
-
1)证明者 P \mathcal{P} P 构建一个新函数 g 1 ( z ) g_1(z) g1(z):
g 1 ( z ) : F p → F p g_1(z): \mathbb{F_{p}} \to \mathbb{F_{p}} g1(z):Fp→Fp
g 1 ( z ) : = ∑ ( x 2 , x 3 , . . . , x 2 k 1 ) ∈ { 0 , 1 } 2 k 1 − 1 f ~ r 0 ( 0 ) ( z , x 2 , . . . , x 2 k 1 − 1 ) g_1(z) := \sum_{ (x_2, x_3, ... , x_{ 2k_1 }) \in \{0,1\}^{2k_1 - 1} } \tilde f_{r_0}^{(0)} (z, x_2, ..., x_{2k_1 - 1}) g1(z):=(x2,x3,...,x2k1)∈{0,1}2k1−1∑f~r0(0)(z,x2,...,x2k1−1)
换句话说,将 f ~ r 0 ( 0 ) ( x ) \tilde f_{r_0}^{(0)} (x) f~r0(0)(x) 中 x x x 的第一个坐标保留为自由变量 z z z,并对剩余坐标的所有可能分配求和。- 观察该函数满足:
g 1 ( 0 ) + g 1 ( 1 ) = m 0 g_1(0) + g_1(1) = m_0 g1(0)+g1(1)=m0
因为 g 1 ( 0 ) g_1(0) g1(0) 对第一个坐标设置为 0 的所有组合求和,并且 g 1 ( 1 ) g_1(1) g1(1) 对第一个坐标等于 1 的情况进行求和。
在本示例中,由于 k 1 = 2 k_1 = 2 k1=2 (即第 2 层有 2 2 2^2 22 个节点),有:
g 1 ( z ) = ∑ ( x 2 , x 3 , x 4 ) ∈ { 0 , 1 } 3 f ~ r 0 ( 0 ) ( z , x 2 , x 3 , x 4 ) 。 g_1 (z) = \sum_{ (x_2, x_3, x_4) \in \{0, 1\}^3 } \tilde f_{r_0}^{(0)} (z, x_2, x_3, x_4)。 g1(z)=(x2,x3,x4)∈{0,1}3∑f~r0(0)(z,x2,x3,x4)。
f r 0 ( 0 ) ( b , c ) = f ( 0 ) ( r 0 , b 0 , b 1 , c 0 , c 1 ) = r 0 × b 1 ( 1 − b 2 ) c 1 c 2 [ ( 3 ( 1 − b 1 ) ( 1 − b 2 ) + 6 ( 1 − b 1 ) b 2 + 4 b 1 ( 1 − b 2 ) + 3 b 1 b 2 ) + ( 3 ( 1 − c 1 ) ( 1 − c 2 ) + 6 ( 1 − c 1 ) c 2 + 4 c 1 ( 1 − c 2 ) + 3 c 1 c 2 ) ] ( 1 − r 0 ) × ( 1 − b 1 ) ( 1 − b 2 ) ( 1 − c 1 ) c 2 [ ( 3 ( 1 − b 1 ) ( 1 − b 2 ) + 6 ( 1 − b 1 ) b 2 + 4 b 1 ( 1 − b 2 ) + 3 b 1 b 2 ) × ( 3 ( 1 − c 1 ) ( 1 − c 2 ) + 6 ( 1 − c 1 ) c 2 + 4 c 1 ( 1 − c 2 ) + 3 c 1 c 2 ) ] \begin{align} f_{ r_0 }^{(0)} (b, c)=f^{(0)} (r_0, b_0,b_1, c_0,c_1) = & \ r_0\times b_1 (1 - b_2) c_1 c_2 \Big[ (3(1 - b_1)(1 - b_2) + 6(1 - b_1)b_2 + 4b_1(1 - b_2) + 3b_1b_2) \notag \newline & \quad + (3(1 - c_1)(1 - c_2) + 6(1 - c_1)c_2 + 4c_1 (1 - c_2) + 3c_1 c_2 ) \Big] \notag \newline & (1-r_0)\times (1 - b_1)(1 - b_2)(1 - c_1)c_2 \notag \newline & \Big[ (3(1 - b_1)(1 - b_2) + 6(1 - b_1)b_2 + 4b_1(1 - b_2) + 3b_1b_2 ) \notag \newline & \quad \times (3(1 - c_1)(1 - c_2) + 6(1 - c_1)c_2 + 4c_1(1 - c_2) + 3c_1c_2) \Big] \end{align} fr0(0)(b,c)=f(0)(r0,b0,b1,c0,c1)= r0×b1(1−b2)c1c2[(3(1−b1)(1−b2)+6(1−b1)b2+4b1(1−b2)+3b1b2)+(3(1−c1)(1−c2)+6(1−c1)c2+4c1(1−c2)+3c1c2)](1−r0)×(1−b1)(1−b2)(1−c1)c2[(3(1−b1)(1−b2)+6(1−b1)b2+4b1(1−b2)+3b1b2)×(3(1−c1)(1−c2)+6(1−c1)c2+4c1(1−c2)+3c1c2)] 【使得满足 f ( 0 ) ( 0 , 0 , 0 , 0 , 1 ) = 18 , f ( 0 ) ( 1 , 1 , 0 , 1 , 1 ) = 7 f^{(0)} (0,0,0, 0,1)=18,f^{(0)} (1, 1,0, 1,1)=7 f(0)(0,0,0,0,1)=18,f(0)(1,1,0,1,1)=7 成立。】
本例中取 r 0 = 2 r_0=2 r0=2 ,从而有:
f r 0 ( 0 ) ( b , c ) = 2 b 1 ( 1 − b 2 ) c 1 c 2 [ ( 3 ( 1 − b 1 ) ( 1 − b 2 ) + 6 ( 1 − b 1 ) b 2 + 4 b 1 ( 1 − b 2 ) + 3 b 1 b 2 ) + ( 3 ( 1 − c 1 ) ( 1 − c 2 ) + 6 ( 1 − c 1 ) c 2 + 4 c 1 ( 1 − c 2 ) + 3 c 1 c 2 ) ] − ( 1 − b 1 ) ( 1 − b 2 ) ( 1 − c 1 ) c 2 [ ( 3 ( 1 − b 1 ) ( 1 − b 2 ) + 6 ( 1 − b 1 ) b 2 + 4 b 1 ( 1 − b 2 ) + 3 b 1 b 2 ) × ( 3 ( 1 − c 1 ) ( 1 − c 2 ) + 6 ( 1 − c 1 ) c 2 + 4 c 1 ( 1 − c 2 ) + 3 c 1 c 2 ) ] \begin{align} f_{ r_0 }^{(0)} (b, c) = & \ 2b_1 (1 - b_2) c_1 c_2 \Big[ (3(1 - b_1)(1 - b_2) + 6(1 - b_1)b_2 + 4b_1(1 - b_2) + 3b_1b_2) \notag \newline & \quad + (3(1 - c_1)(1 - c_2) + 6(1 - c_1)c_2 + 4c_1 (1 - c_2) + 3c_1 c_2 ) \Big] \notag \newline & - (1 - b_1)(1 - b_2)(1 - c_1)c_2 \notag \newline & \Big[ (3(1 - b_1)(1 - b_2) + 6(1 - b_1)b_2 + 4b_1(1 - b_2) + 3b_1b_2 ) \notag \newline & \quad \times (3(1 - c_1)(1 - c_2) + 6(1 - c_1)c_2 + 4c_1(1 - c_2) + 3c_1c_2) \Big] \end{align} fr0(0)(b,c)= 2b1(1−b2)c1c2[(3(1−b1)(1−b2)+6(1−b1)b2+4b1(1−b2)+3b1b2)+(3(1−c1)(1−c2)+6(1−c1)c2+4c1(1−c2)+3c1c2)]−(1−b1)(1−b2)(1−c1)c2[(3(1−b1)(1−b2)+6(1−b1)b2+4b1(1−b2)+3b1b2)×(3(1−c1)(1−c2)+6(1−c1)c2+4c1(1−c2)+3c1c2)]
现在必须保持 b 1 b_1 b1 固定并改变 b 2 , c 1 , c 2 b_2,c_1, c_2 b2,c1,c2 :b 2 b_2 b2 c 1 c_1 c1 c 2 c_2 c2 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 由于乘法因子,如
2 b 1 ( 1 − b 2 ) c 1 c 2 2b_1(1 - b_2)c_1c_2 2b1(1−b2)c1c2
除非 ( c 1 = c 2 = 1 ) (c_1 = c_2 = 1) (c1=c2=1) ,否则其在第一项中消失,同理第二项中乘法因子 − ( 1 − b 1 ) ( 1 − b 2 ) ( 1 − c 1 ) c 2 -(1 - b_1)(1 - b_2)(1 - c_1)c_2 −(1−b1)(1−b2)(1−c1)c2 中有类似情况,否则大多数组合的贡献为零。在本示例中,假设替换后,唯一的非零贡献来自:- Case 1 第一项乘法因子: 当 ( b 2 , c 1 , c 2 ) = ( 0 , 1 , 1 ) (b_2, c_1, c_2) = (0, 1, 1) (b2,c1,c2)=(0,1,1)
- Case 2 第二项乘法因子: 当
(
b
2
,
c
1
,
c
2
)
=
(
0
,
0
,
1
)
(b_2, c_1, c_2) = (0, 0, 1)
(b2,c1,c2)=(0,0,1)
现在分别对2种情况进行进行分析。 - 情况 1:
(
b
2
,
c
1
,
c
2
)
=
(
0
,
1
,
1
)
(b_2, c_1, c_2) = (0, 1, 1)
(b2,c1,c2)=(0,1,1)
2 b 1 [ 3 ( 1 − b 1 ) + 4 b 1 + 3 ] → 2 z ( z + 6 ) → 2 z 2 + 12 z 2b_1 [3(1-b_1)+4b_1+3] \to 2z(z + 6)\to 2z^2 +12z 2b1[3(1−b1)+4b1+3]→2z(z+6)→2z2+12z - 情况 2:
(
b
2
,
c
1
,
c
2
)
=
(
0
,
0
,
1
)
(b_2, c_1, c_2) = (0, 0, 1)
(b2,c1,c2)=(0,0,1)
− ( 1 − b 1 ) [ 3 ( 1 − b 1 ) + 4 b 1 ] ∗ 6 → − 6 ( 1 − z ) ( 3 − z x + 4 z ) → ( − 6 + 6 z ) ( z + 3 ) → 6 z 2 + 12 z − 18 -(1-b_1) [3(1 - b_1)+ 4b_1 ]*6 \to -6(1 - z)(3 - zx + 4z) \to (- 6 + 6z)(z + 3)\to 6z^2+12z-18 −(1−b1)[3(1−b1)+4b1]∗6→−6(1−z)(3−zx+4z)→(−6+6z)(z+3)→6z2+12z−18
总和为:
g 1 ( z ) = 2 z 2 + 12 z + 6 z 2 + 12 z − 18 = 8 z 2 + 24 z − 18 ≡ 8 z 2 + z − 18 m o d 23 g_1(z) = 2z^2 +12z + 6z^2+12z-18 = 8z^2 + 24z - 18 \equiv 8z^2 + z - 18 \mod 23 g1(z)=2z2+12z+6z2+12z−18=8z2+24z−18≡8z2+z−18mod23
证明者将此多项式(其low degree允许直接发送其系数)发送给验证者。
验证者检查两件事:
- g 1 g_1 g1 确实是一个low-degree多项式。
- 且:
g 1 ( 0 ) + g 1 ( 1 ) = m 0 . g_1(0) + g_1(1) = m_0. g1(0)+g1(1)=m0.
在本示例中: g 1 ( 0 ) = − 18 g_1(0) = -18 g1(0)=−18 g 1 ( 1 ) = 14 g_1(1) = 14 g1(1)=14 g 1 ( 0 ) + g 1 ( 1 ) = − 4 ≡ 19 = m 0 . g_1(0) + g_1(1) = -4 \equiv 19 = m_0. g1(0)+g1(1)=−4≡19=m0.
- 观察该函数满足:
-
2)验证者 V \mathcal{V} V 选择一个随机值 s 1 ∈ F p s_1 \in \mathbb{F_{p}} s1∈Fp 并将其发送给证明者 P \mathcal{P} P 。验证者还计算:
g 1 ( s 1 ) = C 1 g_1(s_1) = C_1 g1(s1)=C1本示例中,可以采样 s 1 s_1 s1 = 3: g 1 ( s 1 ) = g 1 ( 3 ) = 8 ⋅ 3 2 + 24 ⋅ 3 − 18 = 126 ≡ 11. g_1(s_1) = g_1(3) = 8 \cdot 3^2 + 24 \cdot 3 - 18 = 126 \equiv 11. g1(s1)=g1(3)=8⋅32+24⋅3−18=126≡11.
-
3)收到 s 1 s_1 s1 后,证明者计算 C 1 C_1 C1,然后重复类似的过程。证明者定义了一个新函数:
g 2 ( z ) : F p → F p g_2(z): \mathbb{F_{p}} \to \mathbb{F_{p}} g2(z):Fp→Fp
g 2 ( z ) : = ∑ ( x 3 , . . . , x 2 k 1 ) ∈ { 0 , 1 } 2 k 1 − 2 f ~ r 0 ( 0 ) ( s 1 , z , x 3 . . . , x 2 k 1 − 2 ) g_2(z) := \sum_{(x_3, ... , x_{2k_1}) \in \{0,1\}^{2k_1 - 2}} \tilde f_{r_0}^{(0)} (s_1, z, x_3 ..., x_{ 2k_1 - 2}) g2(z):=(x3,...,x2k1)∈{0,1}2k1−2∑f~r0(0)(s1,z,x3...,x2k1−2)在这里,证明者将第一个变量固定为 s 1 s_1 s1 并保留第二个变量(用 z z z 表示),对剩余的二进制赋值求和。
对应本示例,有:
g 2 ( z ) = ∑ ( x 3 , x 4 ) ∈ { 0 , 1 } 2 f ~ r 0 ( 0 ) ( s 1 , z , x 3 , x 4 ) g_2(z) = \sum_{(x_3, x_4) \in \{0,1\}^{2}} \tilde f_{ r_0 }^{(0)} (s_1, z, x_3, x_4) g2(z)=(x3,x4)∈{0,1}2∑f~r0(0)(s1,z,x3,x4)
g 2 ( z ) = 162 z 2 − 288 z + 126 ≡ z 2 − 12 z + 11 。 g_2(z) = 162z^2 - 288z + 126 \equiv z^2 - 12z + 11。 g2(z)=162z2−288z+126≡z2−12z+11。 -
4)证明者 P \mathcal{P} P将 g 2 ( z ) g_2(z) g2(z)的系数发送到 V \mathcal{V} V。
-
5)验证者检查:
g 2 ( 0 ) + g 2 ( 1 ) = C 1 g_2(0) + g_2(1) = C_1 g2(0)+g2(1)=C1
g 2 ( 0 ) = 0 g_2(0) = 0 g2(0)=0 【根据 sum-check protocol in zkproof 以及 GKR协议小记, g 2 ( 0 ) = 0 g_2(0) = 0 g2(0)=0 检查是多余且不正确的,不具备通用性。】本示例中,必须检查: g 2 ( 0 ) + g 2 ( 1 ) = 11 g_2(0) + g_2(1) = 11 g2(0)+g2(1)=11
-
6)重复此过程,直到验证者收到 C 2 k + 1 C_{2k+1} C2k+1 :
C 2 k + 1 : = f ~ r 0 ( 0 ) ( s 1 , s 2 , s 3 . . . , s 2 k i + 1 ) C_{ 2k + 1} := \tilde f_{ r_0 }^{(0)} (s_1, s_2, s_3 ..., s_{ 2k_{i+1}}) C2k+1:=f~r0(0)(s1,s2,s3...,s2ki+1)
这是 Sum-Check 协议的最后一步。 此时,验证者通常会查询预言机来直接计算该值;然而,在GKR协议中,验证者无法直接评估该函数。
验证者可以构建 Add i ~ \widetilde{\text{Add}_i} Addi 和 Mult i ~ \widetilde{\text{Mult}_i} Multi 但不能构建 W ~ i + 1 \tilde W_{i+1} W~i+1, W ~ i + 1 \tilde W_{i+1} W~i+1 表示紧邻的前一层中节点的值。
实际上,截止目前,已经将验证电路输出的问题减少到验证下一层中的值。这种减少会逐层重复,直到到达最后一层——其对应于验证者已经知道的输入。这是GKR协议背后的整个思想。
在本示例中,将以上步骤6)的重复过程展开,有:
- V \mathcal{V} V 采样 s 2 = 2 s_2 = 2 s2=2 并将其发送到 P \mathcal{P} P。
- V \mathcal{V} V 和 P \mathcal{P} P 计算 C 2 = g 2 ( s 2 ) C_2 = g_2(s_2) C2=g2(s2): g 2 ( s 2 ) = g 2 ( 2 ) = 2 2 − 12 ⋅ 2 + 11 = − 9 ≡ 14. g_2(s_2) = g_2(2) = 2^2 - 12 \cdot 2 + 11 = -9 \equiv 14. g2(s2)=g2(2)=22−12⋅2+11=−9≡14.
- P \mathcal{P} P 计算: g 3 ( z ) = ∑ x 4 ∈ 0 , 1 f ~ r 0 ( 0 ) ( s 1 , s 2 , z , x 4 ) g_3(z) = \sum_{x_4 \in {0,1}} \tilde f_{ r_0 }^{(0)} (s_1, s_2, z, x_4) g3(z)=x4∈0,1∑f~r0(0)(s1,s2,z,x4) g 3 ( z ) = 90 z 2 − 180 z + 144 ≡ 21 z 2 − 19 z + 6 g_3(z) = 90z^2 - 180z + 144 \equiv 21z^2 - 19z + 6 g3(z)=90z2−180z+144≡21z2−19z+6
- V \mathcal{V} V 接收 g 3 ( z ) g_3(z) g3(z) 并检查: g 3 ( 0 ) = 8 g_3(0) = 8 g3(0)=8 g 3 ( 1 ) = 6 g_3(1) = 6 g3(1)=6 g 3 ( 0 ) + g 3 ( 1 ) = 14 g_3(0) + g_3(1) = 14 g3(0)+g3(1)=14
- V \mathcal{V} V 采样 s 3 = 4 s_3 = 4 s3=4 并将其发送到 P \mathcal{P} P。
- V \mathcal{V} V和 P \mathcal{P} P计算 C 3 = g 3 ( s 3 ) C_3 = g_3(s_3) C3=g3(s3): g 3 ( s 3 ) = 21 ⋅ 4 2 − 19 ⋅ 4 + 6 = 266 ≡ 13 g_3(s_3) = 21 \cdot 4^2 - 19 \cdot 4 + 6 = 266 \equiv 13 g3(s3)=21⋅42−19⋅4+6=266≡13
- P \mathcal{P} P 计算: g 4 ( z ) = f ~ r 0 ( 0 ) ( s 1 , s 2 , s 3 , z ) g_4(z) = \tilde f_{r_0}^{(0)} (s_1, s_2, s_3, z) g4(z)=f~r0(0)(s1,s2,s3,z) g 4 ( z ) = − 288 z 2 + 1152 z ≡ 11 z 2 + 2 z g_4(z) = -288z^2 + 1152z \equiv 11z^2 + 2z g4(z)=−288z2+1152z≡11z2+2z
- V \mathcal{V} V 接收 g 4 ( z ) g_4(z) g4(z) 并检查: g 4 ( 0 ) = 0 g_4(0) = 0 g4(0)=0 g 4 ( 1 ) = 13 g_4(1) = 13 g4(1)=13 g 4 ( 0 ) + g 3 ( 1 ) = 13 g_4(0) + g_3(1) = 13 g4(0)+g3(1)=13
- V \mathcal{V} V 采样 s 4 = 7 s_4 = 7 s4=7 并将其发送到 P \mathcal{P} P。
- V \mathcal{V} V和 P \mathcal{P} P计算 C 4 = g 4 ( s 4 ) C_4 = g_4(s_4) C4=g4(s4): g 4 ( s 4 ) = 553 ≡ 1 g_4(s_4) = 553 \equiv 1 g4(s4)=553≡1
- P \mathcal{P} P 计算 f ~ r 0 ( 0 ) ( s 1 , s 2 , s 3 , s 4 ) = c 4 \tilde f^{(0)}_{r_0}(s_1,s_2,s_3,s_4) = c_4 f~r0(0)(s1,s2,s3,s4)=c4 f ~ ( 0 ) ( r 1 , s 1 , s 2 , s 3 , s 4 ) : = Add ~ 1 ( r 1 , s 1 , s 2 , s 3 , s 4 ) ⋅ ( W ~ 2 ( s 1 , s 2 ) + W ~ 2 ( s 3 , s 4 ) ) + Mult ~ 1 ( r 1 , s 1 , s 2 , s 3 , s 4 ) ⋅ W ~ 2 ( s 1 , s 2 ) ⋅ W ~ 2 ( s 3 , s 4 ) \begin{equation} \begin{align} \tilde{f}^{(0)}(r_1,s_1,s_2,s_3,s_4) := & \newline \widetilde{\text{Add}}_1(r_1,s_1,s_2,s_3,s_4) \cdot (\tilde{W}_2(s_1,s_2) + \tilde{W}_2(s_3,s_4)) \newline & + \widetilde{\text{Mult}}_1(r_1,s_1,s_2,s_3,s_4) \cdot \tilde{W}_2(s_1,s_2) \cdot \tilde{W}_2(s_3,s_4) \end{align} \end{equation} f~(0)(r1,s1,s2,s3,s4):=Add 1(r1,s1,s2,s3,s4)⋅(W~2(s1,s2)+W~2(s3,s4))+Mult 1(r1,s1,s2,s3,s4)⋅W~2(s1,s2)⋅W~2(s3,s4)
2.4 第四部分:递归
已经到了验证者的目标是检查的阶段
f ~ r 0 ( 0 ) ( s 1 , s 2 , s 3 , . . . , s 2 k i + 1 ) = C 1 \tilde f_{ r_0 }^{(0)} (s_1, s_2, s_3, ..., s_{2k_{i + 1}}) = C_1 f~r0(0)(s1,s2,s3,...,s2ki+1)=C1
然而,要做到这一点,验证者需要知道:
W ~ 2 ( s 1 , s 2 , . . . , s k + 1 ) \tilde W_2(s_1, s_2, ... , s_{k + 1}) W~2(s1,s2,...,sk+1) W ~ 2 ( s k + 1 , . . . , s 2 k + 1 ) \tilde W_2(s_{ k + 1}, ... , s_{ 2k + 1}) W~2(sk+1,...,s2k+1)
如果验证者要对这些值执行两次单独的求sum-check,则最终的工作量将过大。相反,证明者在某一时刻提出单一主张。如何?
双方计算唯一函数
ℓ : F → F 2 k \ell: \mathbb{F} \to \mathbb{F}^{2k} ℓ:F→F2k
使得:
ℓ ( 0 ) = ( s 1 , s 2 , . . . , s k + 1 ) \ell(0) = (s_1, s_2, ... , s_{k+1}) ℓ(0)=(s1,s2,...,sk+1) ℓ ( 1 ) = ( s k + 1 , . . . , s 2 k + 1 ) \ell(1) = (s_{k + 1}, ... , s_{2k + 1}) ℓ(1)=(sk+1,...,s2k+1)
然后
P
\mathcal{P}
P 给验证者发送函数:
q
=
W
~
2
∘
ℓ
:
F
→
F
.
q = \tilde W_2 \circ \ell : \mathbb{F} \to \mathbb{F}.
q=W~2∘ℓ:F→F.
注意:
q ( 0 ) = W ~ 2 ( s 1 , s 2 , . . . , s k + 1 ) q(0) = \tilde W_2(s_1, s_2, ... , s_{k+1}) q(0)=W~2(s1,s2,...,sk+1) q ( 1 ) = W ~ 2 ( s k + 1 , . . . , s 2 k + 1 ) q(1) = \tilde W_2(s_{k+1}, ... , s_{2k+1}) q(1)=W~2(sk+1,...,s2k+1)
因此,通过知道 q ( x ) q(x) q(x),验证者可以恢复必要的值 q ( 0 ) q(0) q(0)和 q ( 1 ) q(1) q(1)来完成Sum-Check协议中的最终评估。
因此,通过 q ( x ) q(x) q(x), V \mathcal{V} V 可以使用 q ( 0 ) q(0) q(0) 和 q ( 1 ) q(1) q(1) 来进行 sumcheck 协议中的最后一次评估。
但验证者如何知道 q ( x ) q(x) q(x) 是正确的呢?再次, V \mathcal{V} V 对随机元素 r ∗ ∈ F r^* \in \mathbb{F} r∗∈F 进行采样并计算
r 1 = ℓ ( r ∗ ) r_1 = \ell (r^*) r1=ℓ(r∗)
然后, P \mathcal{P} P 和 V \mathcal{V} V 计算:
m 1 = q ( r 1 ) m_1 = q(r_1) m1=q(r1)
现在,证明者的任务是让验证者相信:
W ~ 2 ( r 1 ) = m 1 \tilde W_2(r_1) = m_1 W~2(r1)=m1
该声明类似于之前的初始验证步骤:
D ~ ( r 0 ) = m 0 \tilde D(r_0) = m_0 D~(r0)=m0
其中 D ~ ( x ) \tilde D(x) D~(x) 对输出值进行编码,现在 W ~ 2 ( x ) \tilde W_2(x) W~2(x) 对前一层中的节点值进行编码。
因此,剩下的任务是将相同的 Sum-Check 协议应用于这个新层。
对于本示例中电路:
- P \mathcal{P} P 和 V \mathcal{V} V 计算: ℓ ( 0 ) = ( s 1 , s 2 ) = ( 3 , 2 ) \ell(0) = (s_1, s_2) = (3, 2) ℓ(0)=(s1,s2)=(3,2) ℓ ( 1 ) = ( s 3 , s 4 ) = ( 4 , 7 ) \ell(1) = (s_3, s_4) = (4, 7) ℓ(1)=(s3,s4)=(4,7) ℓ ( x ) = ( s 1 ( 1 − x ) + s 3 x , s 2 ( 1 − x ) + s 4 x ) = ( 3 ( 1 − x ) + 4 x , 2 ( 1 − x ) + 7 x ) . \ell(x) = (s_1(1-x) + s_3x, s_2(1-x) + s_4x) = (3(1-x) + 4x, 2(1-x) + 7x). ℓ(x)=(s1(1−x)+s3x,s2(1−x)+s4x)=(3(1−x)+4x,2(1−x)+7x).
- P \mathcal{P} P 发送 q = W ~ 1 ∘ ℓ : F → F . q= \tilde W_1 \circ \ell : \mathbb{F} \to \mathbb{F}. q=W~1∘ℓ:F→F. q ( x ) = − 20 x 2 − 52 x − 12 ≡ 3 x 2 + 17 x + 11 q(x) = -20x^2 -52x - 12 \equiv 3x^2 + 17x + 11 q(x)=−20x2−52x−12≡3x2+17x+11
- V \mathcal{V} V 使用 q ( x ) q(x) q(x) 检查 f ~ r 0 ( 0 ) ( s 1 , s 2 , s 3 , s 4 ) = c 4 \tilde f_{r_0}^{(0)} (s_1, s_2, s_3, s_4) = c_4 f~r0(0)(s1,s2,s3,s4)=c4
- V \mathcal{V} V 向 P \mathcal{P} P 发送一个随机的 r ∗ ∈ F r^* \in \mathbb{F} r∗∈F r ∗ = 6 r^* = 6 r∗=6
- V \mathcal{V} V 和 P \mathcal{P} P 计算: r 1 = ℓ ( 6 ) = ( 9 , 32 ) ≡ ( 9 , 9 ) r_1 = \ell (6) = (9, 32) \equiv (9,9) r1=ℓ(6)=(9,32)≡(9,9) m 1 = q ( 6 ) = 14. m_1 = q(6) = 14. m1=q(6)=14.
- 现在 P \mathcal{P} P需要让 V \mathcal{V} V知道: ∑ ( b , c ) : ∈ { 0 , 1 } 2 ⋅ 1 f r 1 ( 1 ) ( b , c ) = m 1 \sum_{(b, c) : \in \{0, 1\}^{2 \cdot 1}} f_{r_1}^{(1)} (b, c) = m_1 (b,c):∈{0,1}2⋅1∑fr1(1)(b,c)=m1
- P \mathcal{P} P 计算 g 1 ( z ) g_1(z) g1(z) 并将其发送到 V \mathcal{V} V : g 1 ( z ) = ∑ x 2 ∈ { 0 , 1 } f r 1 ( 1 ) ( z , x 2 ) g_1(z) = \sum_{x_2 \in \{0, 1\}} f_{r_1}^{(1)} (z, x_2) g1(z)=x2∈{0,1}∑fr1(1)(z,x2) g 1 ( z ) = 2 z 2 + 7 z + 14 g_1(z) = 2z^2 + 7z + 14 g1(z)=2z2+7z+14
- V \mathcal{V} V 检查 g 1 ( 0 ) + g 1 ( 1 ) = m 1 g_1(0) + g_1(1) = m_1 g1(0)+g1(1)=m1: g 1 ( 0 ) = 14 g_1(0) = 14 g1(0)=14 g 1 ( 1 ) = 0 g_1(1) = 0 g1(1)=0 g 1 ( 0 ) + g 1 ( 1 ) = 14 g_1(0) + g_1(1) = 14 g1(0)+g1(1)=14
- V \mathcal{V} V 采样 s 1 = 12 s_1 = 12 s1=12 并将其发送到 P \mathcal{P} P。
- V \mathcal{V} V 和 P \mathcal{P} P 计算 C 1 = g 1 ( s 1 ) C_1 = g_1(s_1) C1=g1(s1): g 1 ( 12 ) = 2 ⋅ 1 2 2 + 7 ⋅ 12 + 14 = 386 ≡ 18 g_1(12) = 2 \cdot 12^2 + 7 \cdot 12 + 14 = 386 \equiv 18 g1(12)=2⋅122+7⋅12+14=386≡18
- P \mathcal{P} P计算 g 2 ( z ) g_2(z) g2(z)并将其发送到 V \mathcal{V} V: g 2 ( z ) = f ~ r 1 ( 1 ) ( s 1 , z ) g_2(z) = \tilde f_{r_1}^{(1)} (s_1, z) g2(z)=f~r1(1)(s1,z) g 2 ( z ) = 9 z 2 + z + 4 g_2(z) = 9z^2 + z +4 g2(z)=9z2+z+4
- V \mathcal{V} V 检查 g 2 ( 0 ) + g 2 ( 1 ) = C 1 g_2(0) + g_2(1) = C_1 g2(0)+g2(1)=C1: g 2 ( 0 ) = 4 g_2(0) = 4 g2(0)=4 g 2 ( 1 ) = 14 g_2 (1) = 14 g2(1)=14 g 2 ( 0 ) + g 2 ( 1 ) = 18 g_2(0) + g_2(1) = 18 g2(0)+g2(1)=18
- V \mathcal{V} V 采样 s 2 = 5 s_2 = 5 s2=5 并将其发送到 P \mathcal{P} P。
- V \mathcal{V} V和 P \mathcal{P} P计算 C 2 = g 2 ( s 2 ) C_2 = g_2(s_2) C2=g2(s2): C 2 = g 2 ( 5 ) = 4 C_2 = g_2(5) = 4 C2=g2(5)=4
- P \mathcal{P} P 和 V \mathcal{V} V 计算: ℓ ( 0 ) = s 1 = 12 \ell(0) = s_1 = 12 ℓ(0)=s1=12 ℓ ( 1 ) = s 2 = 5 \ell(1) = s_2 = 5 ℓ(1)=s2=5 ℓ ( x ) = − 7 x + 12 \ell(x) = -7x + 12 ℓ(x)=−7x+12
- P \mathcal{P} P 发送 q = W ~ 1 ∘ ℓ : F → F . q= \tilde W_1 \circ \ell : \mathbb{F} \to \mathbb{F}. q=W~1∘ℓ:F→F. q ( x ) = 3 ( 1 − ( − 7 x + 12 ) ) + ( − 7 x + 12 ) q(x) = 3(1 - (-7x + 12) ) + (-7x +12) q(x)=3(1−(−7x+12))+(−7x+12)
- V \mathcal{V} V 使用 q ( x ) q(x) q(x) 检查 f r 1 ( 1 ) ( s 1 , s 2 ) = c 2 f_{r_1}^{(1)}(s_1,s_2) = c_2 fr1(1)(s1,s2)=c2
- V \mathcal{V} V 向 P \mathcal{P} P 发送一个随机的 r ∗ ∈ F r^* \in \mathbb{F} r∗∈F r ∗ = 17 r^* = 17 r∗=17
- V \mathcal{V} V 和 P \mathcal{P} P 计算: r 2 = ℓ ( 17 ) = 8 r_2 = \ell (17) = 8 r2=ℓ(17)=8 m 2 = q ( 17 ) = 10 m_2 = q(17) = 10 m2=q(17)=10
- 最后, V \mathcal{V} V计算 W ~ 2 ( x ) \tilde W_2(x) W~2(x)并检查 W ~ 2 ( r 2 ) = m 2 \tilde W_2(r_2) = m_2 W~2(r2)=m2 W 2 ( 0 ) = 3 W_2(0) = 3 W2(0)=3 W 2 ( 1 ) = 1 W_2(1) = 1 W2(1)=1 W ~ 2 ( x ) = 3 ( 1 − x ) + x \tilde W_2(x) = 3(1 - x) + x W~2(x)=3(1−x)+x W ~ 2 ( 8 ) = 10 \tilde W_2(8) = 10 W~2(8)=10
2.5 最后一部分:重复
好了,一切都差不多准备好了!只需要每层重复一次这个过程。最后, W d ( x ) W_d(x) Wd(x) 是映射程序输入的函数,将用它来验证层 d − 1 d-1 d−1 的sum-check。如果这次检查是正确的,则意味着之前的所有检查也都是正确的,因此可以自信地说计算执行正确。
3. 结论
综上所述,GKR协议优雅地将验证复杂算术电路输出的问题简化为一系列更简单的验证,这些验证递归地从输出层移动到输入层。每个步骤都依赖于代数属性,尤其是多线性扩展的唯一性和 Schwartz-Zippel 引理,以确保资源有限的验证者能够有效地确认计算的正确性。 该协议展示了交互式证明的强大功能,并为更高级的密码学应用(如零知识证明)奠定了基础。
参考资料
[1] LambdaClass团队2025年3月5日博客 GKR protocol: a step-by-step example