GKR协议小记

1. 引言

前序博客:

  • Delegating Computation: Interactive Proofs for Muggles 学习笔记
  • sum-check protocol in zkproof
  • sum-check protocol深入研究

Goldwasser, Kalai和Rothblum (GKR) 2008年论文《Delegating Computation: Interactive Proofs for Muggles》中描述了一种强大的通用interactive proof protocol——GKR协议,该协议定位为circuit evaluation 上下文:

  • 已知某layered arithmetic circuit C C C,其depth为 d d d,size为 S ( n ) S(n) S(n),fan-in为 2 2 2。其中 n n n为input length, O ~ \tilde{O} O~中隐藏了 n n n中的polylogarithmic因子。
  • GKR协议允许Prover在保证正确的情况下以time poly ( S ( n ) ) \text{poly}(S(n)) poly(S(n))来evaluate C C C
  • Verifier run time为 O ~ ( n + d log ⁡ S ( n ) ) \tilde{O}(n+d\log S(n)) O~(n+dlogS(n))

因此,对于具有polynomial size和sublinear depth的电路,其Verifier的runtime为quasilinear in the input length——相比于整个电路size要小很多,因此,相比于Verifier直接在本地执行计算所需用时要节约大量时间。

而Cormode, Mitzenmacher, and Thaler(CMT)2012年论文《Practical Verified Computation with Streaming Interactive Proofs》中,将GKR协议中Prover的runtime,由 poly ( S ( n ) ) \text{poly}(S(n)) poly(S(n)) 降为 O ( S ( n ) log ⁡ S ( n ) ) O(S(n)\log S(n)) O(S(n)logS(n)),同时在https://github.com/pepper-project/pepper/tree/master/pepper/cmtgkr(C语言)中做了完整实现并benchmark。

而Thaler 2013年论文《Time-optimal interactive proofs for circuit evaluation》中,对(如任意并行数据计算中的)具有重复结构的电路,将GKR协议中Prover的runtime,由 O ( S ( n ) log ⁡ S ( n ) ) O(S(n)\log S(n)) O(S(n)logS(n)) 进一步降低。

本文:

  • 展示了对CMT协议的改进
  • 提供了一种理论简化方法,可降低Prover runtime、round复杂度,并与CMT相比将GKR协议中总的communication开销降低约33%。

2. 背景知识

2.1 Interactive Proof

为函数 f f f定义一个valid interactive proof协议:
GKR协议小记_第1张图片

2.2 sum-check 协议

GKR协议中使用的主要技术原语为Lund、Fortnow、Karloff、Nisan 1992年Algebraic methods for interactive proof systems论文中提出的sum-check protocol。
详细可参看Computational Complexity: A Modern Approach中第8章。

假设已知某基于有限域 F \mathbb{F} F的具有 v v v个变量的多变量多项式 g g g,sum-check协议的目的是计算:
H : = ∑ b 1 ∈ { 0 , 1 } ∑ b 2 ∈ { 0 , 1 } ⋯ ∑ b v ∈ { 0 , 1 } g ( b 1 , ⋯   , b v ) H:=\sum_{b_1\in\{0,1\}}\sum_{b_2\in\{0,1\}}\cdots \sum_{b_v\in\{0,1\}}g(b_1,\cdots,b_v) H:=b1{0,1}b2{0,1}bv{0,1}g(b1,,bv)

为执行该协议,Verifier需能对随机选择的 ( r 1 , ⋯   , r v ) ∈ F v (r_1,\cdots,r_v)\in\mathbb{F}^v (r1,,rv)Fv进行evaluate g ( r 1 , ⋯   , r v ) g(r_1,\cdots,r_v) g(r1,,rv)

sum-check协议执行 v v v轮:

  • 第一轮:Prover P P P 发送多项式 g 1 ( X 1 ) g_1(X_1) g1(X1),并声称 g 1 ( X 1 ) = ∑ x 2 , ⋯   , x v ∈ { 0 , 1 } v − 1 g ( X 1 , x 2 , ⋯   , x v ) g_1(X_1)=\sum_{x_2,\cdots,x_v\in\{0,1\}^{v-1}}g(X_1,x_2,\cdots,x_v) g1(X1)=x2,,xv{0,1}v1g(X1,x2,,xv)。由此可知:
    • g 1 g_1 g1正确,则有 H = g 1 ( 0 ) + g 1 ( 1 ) H=g_1(0)+g_1(1) H=g1(0)+g1(1)
    • 多项式 g 1 ( X 1 ) g_1(X_1) g1(X1)的degree为 deg ⁡ 1 ( g ) \deg_1(g) deg1(g)——即 X 1 X_1 X1变量在 g g g多项式中的degree。因此,可通过 deg ⁡ 1 ( g ) + 1 \deg_1(g)+1 deg1(g)+1个field elements来唯一确定 g 1 g_1 g1
      • 实际实现时,Prover P P P 可发送 g g g在set { 0 , 1 , ⋯   , deg ⁡ 1 ( g ) } \{0,1,\cdots,\deg_1(g)\} {0,1,,deg1(g)}的evaluations来唯一确定 g g g
  • 在第 j > 1 j>1 j>1轮:
    • Verifier V V V 选择随机值 r j − 1 ∈ F r_{j-1}\in\mathbb{F} rj1F,并发送给Prover P P P
    • Prover P P P 发送多项式 g j ( X j ) g_j(X_j) gj(Xj),并声称:
      g j ( X j ) = ∑ x j + 1 , ⋯   , x v ∈ { 0 , 1 } v − 1 g ( r 1 , r 2 , ⋯   , r j − 1 , X j , x j + 1 , ⋯   , x v )      ( 1 ) g_j(X_j)=\sum_{x_{j+1},\cdots,x_v\in\{0,1\}^{v-1}}g(r_1,r_2,\cdots,r_{j-1},X_j,x_{j+1},\cdots,x_v) \ \ \ \ (1) gj(Xj)=xj+1,,xv{0,1}v1g(r1,r2,,rj1,Xj,xj+1,,xv)    (1)
    • Verifier V V V
      • 选择最新的2个多项式,检查 g j − 1 ( r j − 1 ) = g j ( 0 ) + g j ( 1 ) g_{j-1}(r_{j-1})=g_j(0)+g_j(1) gj1(rj1)=gj(0)+gj(1)是否成立,若不成立则拒绝。
      • 若多项式 g j g_j gj的degree太高,也会拒绝:每个多项式 g j g_j gj的degree应为 deg ⁡ j ( g ) \deg_j(g) degj(g)——对应为多项式 g g g X j X_j Xj变量的degree。
  • 在最后一轮:
    • Prover P P P 发送 g v ( X v ) g_v(X_v) gv(Xv),并声称 g v ( X v ) = g ( r 1 , r 2 , ⋯   , r v − 1 , X v ) g_v(X_v)=g(r_1,r_2,\cdots,r_{v-1},X_v) gv(Xv)=g(r1,r2,,rv1,Xv)
    • Verifier V V V
      • 直接检查 g v ( r v ) = g ( r 1 , r 2 , ⋯   , r v − 1 , r v ) g_v(r_v)=g(r_1,r_2,\cdots,r_{v-1},r_v) gv(rv)=g(r1,r2,,rv1,rv)是否成立(之前已假设Verifier V V V可evaluate g g g at ( r 1 , ⋯   , r v ) (r_1,\cdots,r_v) (r1,,rv))。
      • 若本轮检查、以及之前所有轮检查 均成功的话,则Verifier V V V accept,从而信服 H = g 1 ( 0 ) + g 1 ( 1 ) H=g_1(0)+g_1(1) H=g1(0)+g1(1)

从而有proposition:
在这里插入图片描述

2.3 Multilinear extension

对于任意域 F \mathbb{F} F,若 d d d-variate多项式 p : F d → F p:\mathbb{F}^d\rightarrow \mathbb{F} p:FdF d d d个输入变量的degree最多为1,则称 p p p是multilinear的。

已知函数 W : { 0 , 1 } d → { 0 , 1 } W:\{0,1\}^d\rightarrow \{0,1\} W:{0,1}d{0,1}的domain为 d d d-dimensional Boolean hypercube,将基于域 F \mathbb{F} F W W W的multilinear extension表示为 W ~ \tilde{W} W~,对于在所有Boolean-valued input上的值均与 W W W一致,则 W ~ \tilde{W} W~ W W W的唯一multilinear多项式 F d → F \mathbb{F}^d\rightarrow \mathbb{F} FdF。即对于所有的 x ∈ { 0 , 1 } d x\in\{0,1\}^d x{0,1}d,有 W ~ ( x ) = W ( x ) \tilde{W}(x)=W(x) W~(x)=W(x)

2.4 GKR协议总览

GKR协议中,Prover P P P 和 Verifier V V V需对所关心的、代表特定函数的、基于有限域 F \mathbb{F} F的、fan-in 2算术电路 C C C达成一致—— C C C可能具有多个输出。

  • 假设电路 C C C为分层模式,即可将电路分解为多层,将连接相邻层的gate。
  • 假设电路 C C C的depth为 d d d,则层1~层 d d d对应为输入层,且层1对应为输出层。

GKR协议中:

  • Prover P P P 发送的第一个消息为:声称的电路 C C C的输出。
  • GKR协议逐层迭代,每个输入层对应一次迭代。
    • i i i次迭代的目的是将 层 i i i中的gates values claim reduce为 层 i + 1 i+1 i+1中的gates values,从而Verifier V V V可安全地假设:若第1个claim为true,则第2个claim也为true。——具体通过对特定多项式运用标准的sum-check协议即可实现。(见下一章的Equation (2))
  • 事实上,GKR协议 以 “电路output gates values claim” 为起点,但Verifier V V V 无法在不evaluate该电路的情况下check该claim——Verifier V V V 想要避免该工作。
    因此,第一个迭代:运用sum-check protocol来将 “电路output gates values claim” reduce 为 “层2的gates values claim”(准确来说,是“对层2的gates values的multilinear extension evaluation的claim”)。
    以此类推,每次迭代Verifier V V V 都不想自己check claim,因此需再用另一个sum-check protocol来将 “层2的gates values claim”(准确来说,是“对层2的gates values的multilinear extension evaluation的claim”) reduce为 “层3的gates values claim”(准确来说,是“对层3的gates values的multilinear extension evaluation的claim”)等等。
    最终,Verifier V V V 剩下的为“电路的inputs claim”,从而Verifier V V V 可自己检查该claim。

2.5 附加说明

已知某layered arithmetic circuit C C C,其depth为 d d d,size为 S ( n ) S(n) S(n),fan-in为 2 2 2

  • S i S_i Si表示电路circuit C C C在层 i i i的gates数量。层 i i i中gates的编号为 0 , ⋯   , S i − 1 0,\cdots,S_i-1 0,,Si1
  • 假设 S i S_i Si为a power of 2,并令 S i = 2 s i S_i=2^{s_i} Si=2si
  • 为解释GKR协议中每个迭代是如何处理的,需额外引入多个函数,每个函数编码了该电路的特定信息。
    • a)层 i i i中gates的编号为 0 , ⋯   , S i − 1 0,\cdots,S_i-1 0,,Si1。令函数 W i : { 0 , 1 } s i → F W_i:\{0,1\}^{s_i}\rightarrow \mathbb{F} Wi:{0,1}siF以binary gate label为输入,输出为层 i i i中相应gate的value。GKR协议中使用了函数 W i W_i Wi的multilinear extension W ~ i \tilde{W}_i W~i
    • b)GKR协议中还使用了“wiring predicate”概念来编码 “层 i + 1 i+1 i+1中与层 i i i中特定gate之间连接关系的wires pairs”。
      为此,定义了2个函数 a d d i , m u l t i : { 0 , 1 } s i + 2 s i + 1 → { 0 , 1 } add_i,mult_i:\{0,1\}^{s_i+2s_{i+1}}\rightarrow \{0,1\} addi,multi:{0,1}si+2si+1{0,1},来共同构成层 i i i的wiring predicate。
      这2个函数已3个gate labels ( j 1 , j 2 , j 3 ) (j_1,j_2,j_3) (j1,j2,j3)为输入,若“层 i i i中的gate j 1 j_1 j1” 为 “层 i + 1 i+1 i+1中gate j 2 , j 3 j_2,j_3 j2,j3” 的addition(或multiplication),则返回1,否则返回0。
      a d d ~ i , m u l t ~ i \tilde{add}_i,\tilde{mult}_i add~i,mult~i分别为 a d d i , m u l t i add_i,mult_i addi,multi的multilinear extension。
    • c)令 β s i ( z , p ) \beta_{s_i}(z,p) βsi(z,p)表示为函数:
      β s i ( z , p ) = ∏ j = 1 s i ( ( 1 − z j ) ( 1 − p j ) , z j p j ) \beta_{s_i}(z,p)=\prod_{j=1}^{s_i}((1-z_j)(1-p_j),z_jp_j) βsi(z,p)=j=1si((1zj)(1pj),zjpj)
      很容易看出, β s i ( z , p ) \beta_{s_i}(z,p) βsi(z,p)为函数 B ( x , y ) : { 0 , 1 } s i × { 0 , 1 } s i → { 0 , 1 } B(x,y):\{0,1\}^{s_i}\times \{0,1\}^{s_i}\rightarrow \{0,1\} B(x,y):{0,1}si×{0,1}si{0,1}的multilinear extension,当 x = y x=y x=y时,有 B ( x , y ) = 1 B(x,y)=1 B(x,y)=1,否则为0。

3. CMT的GKR协议细节

CMT论文中实现的GKR协议中利用了如下identity,即对于所有的 z ∈ F s i z\in\mathbb{F}^{s_i} zFsi,有:
W ~ i ( z ) = ∑ ( p , w 1 , w 2 ) ∈ { 0 , 1 } s i + 2 s i + 1 f ( i ) ( p , w 1 , w 2 )      ( 2 ) \tilde{W}_i(z)=\sum_{(p,w_1,w_2)\in\{0,1\}^{s_i+2s_{i+1}}}f^{(i)}(p,w_1,w_2) \ \ \ \ (2) W~i(z)=(p,w1,w2){0,1}si+2si+1f(i)(p,w1,w2)    (2)
其中:
f ( i ) ( p , w 1 , w 2 ) = β s i ( z , p ) ⋅ ( a d d ~ i ( p , w 1 , w 2 ) ( W ~ i + 1 ( w 1 ) + W ~ i + 1 ( w 2 ) ) + m u l t ~ i ( p , w 1 , w 2 ) ( W ~ i + 1 ( w 1 ) ⋅ W ~ i + 1 ( w 2 ) ) ) f^{(i)}(p,w_1,w_2) =\beta_{s_i}(z,p)\cdot (\tilde{add}_i(p,w_1,w_2)(\tilde{W}_{i+1}(w_1)+\tilde{W}_{i+1}(w_2))+\tilde{mult}_i(p,w_1,w_2)(\tilde{W}_{i+1}(w_1)\cdot\tilde{W}_{i+1}(w_2))) f(i)(p,w1,w2)=βsi(z,p)(add~i(p,w1,w2)(W~i+1(w1)+W~i+1(w2))+mult~i(p,w1,w2)(W~i+1(w1)W~i+1(w2)))

CMT的第 i i i次迭代对多项式 f ( i ) f^{(i)} f(i)运用sum-check protocol。由于多项式 f ( i ) f^{(i)} f(i) s i + 2 s i + 1 s_i+2s_{i+1} si+2si+1个变量,相应的sum-check协议需要 s i + 2 s i + 1 s_i+2s_{i+1} si+2si+1轮。

CMT论文中展示了:

  • 在每轮,Prover time为 O ( S ) O(S) O(S)——假设 F \mathbb{F} F的每个加法和乘法运算为 O ( 1 ) O(1) O(1) time。

4. 本文对CMT的改进

本文对CMT的改进:

  • 对一个不同的、更简单的多项式运用sum-check协议。
  • 将round数由 s i + 2 s i + 1 s_i+2s_{i+1} si+2si+1 降为 2 s i + 1 2s_{i+1} 2si+1,从而将总的communication开销和Prover runtime降低了一个常量因子。
  • 此外,彻底移除了 β s i ( z , p ) \beta_{s_i}(z,p) βsi(z,p)多项式。

关键的改进之处为:

  • 派生了一个比上面Equation (2)更简单的 W ~ i ( z ) \tilde{W}_i(z) W~i(z)——关键在于仅利用了multilinear extension W ~ i \tilde{W}_i W~i of W i W_i Wi a d d ~ i \tilde{add}_i add~i of a d d i add_i addi m u l t ~ i \tilde{mult}_i mult~i of m u l t i mult_i multi。【关键点在于:若2个multilinear多项式agree at all Boolean inputs,则相应的2个formal多项式也必须相等。
    GKR协议小记_第2张图片
    因此,改进之后,第 i i i次迭代不对多项式 f ( i ) f^{(i)} f(i)运用sum-check protocol,而是,对多项式 g ( i ) g^{(i)} g(i)运用sum-check protocol就足以:
  • 由于 g ( i ) g^{(i)} g(i)具有 2 s i + 1 2s_{i+1} 2si+1个变量,因此需要 2 s i + 1 2s_{i+1} 2si+1轮。
  • 每一轮prover的计算量,等同于,CMT中对 f ( i ) f^{(i)} f(i)运用sum-check协议的最后 2 s i + 1 2s_{i+1} 2si+1轮的Prover计算量。

参考资料

[1] Justin Thaler论文 A Note on the GKR Protocol

Justin Thaler系列博客

  • SNARK Design
  • Rollup项目的SNARK景观
  • SNARK原理示例
  • SNARK性能及安全——Prover篇
  • SNARK性能及安全——Verifier篇
  • sum-check protocol in zkproof
  • sum-check protocol深入研究
  • Lasso、Jolt 以及 Lookup Singularity——Part 1
  • Lasso、Jolt 以及 Lookup Singularity——Part 2

lookup系列博客

  • PLOOKUP
  • PLOOKUP代码解析
  • Efficient polynomial commitment schemes for multiple points and polynomials学习笔记
  • PLONK + PLOOKUP
  • PlonKup: Reconciling PlonK with plookup
  • PLONK: permutations over lagrange-bases for oecumenical noninteractive arguments of knowledge 学习笔记
  • Plonk代码解析
  • RapidUp: Multi-Domain Permutation Protocol for Lookup Tables学习笔记
  • Lookup argument总览
  • Halo2 学习笔记——设计之Proving system之Lookup argument(1)
  • 多变量lookup argument
  • cq:fast lookup argument
  • Lookup Argument性能优化——Caulk
  • 2023年 ZK Hack以及ZK Summit 亮点记
  • Research Day 2023:Succinct ZKP最新进展
  • Lasso、Jolt 以及 Lookup Singularity——Part 1
  • Lasso、Jolt 以及 Lookup Singularity——Part 2
  • Lookup Singularity

你可能感兴趣的:(零知识证明,零知识证明)