Halo2 学习笔记——背景资料之Polynomial commitment

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Halo2 学习笔记——背景资料之Polynomial commitment相关的知识,希望对你有一定的参考价值。

1. 引言

本文重点关注基于inner product argument实现的polynomial commitment。

对polynomial p ( X ) ∈ F p [ X ] p(X)\\in\\mathbb{F}_p[X] p(X)Fp[X]进行commit,并需可provably evaluate the committed polynomial at arbitrary points。
最直观的解决方案是:
Prover将多项式的系数都发给Verifier,这需要 O ( n ) O(n) O(n) communication。

而借助polynomial commitment scheme,可实现 O ( log ⁡ n ) O(\\log n) O(logn) communication。

2. Setup

根据参数 d = 2 k d=2^k d=2k,生成common reference string σ = ( G , G ⃗ , H , F p ) \\sigma=(\\mathbb{G},\\vec{G},H,\\mathbb{F}_p) σ=(G,G ,H,Fp)

  • G \\mathbb{G} G为a group of prime order p p p
  • G ⃗ ∈ G d \\vec{G}\\in\\mathbb{G}^d G Gd为a vector of d d d random group elements。
  • H ∈ G H\\in\\mathbb{G} HG为a random group element。
  • F p \\mathbb{F}_p Fp为the finite field of group p p p

3. Commit

Pedersen vector commitment C o m m i t Commit Commit定义为:
C o m m i t ( σ , p ( X ) ; r ) = < a ⃗ , G ⃗ > + [ r ] H Commit(\\sigma,p(X);r)=<\\vec{a},\\vec{G}>+[r]H Commit(σ,p(X);r)=<a ,G >+[r]H
其中,多项式 p ( X ) ∈ F p [ X ] p(X)\\in\\mathbb{F}_p[X] p(X)Fp[X],blinding factor r ∈ F p r\\in\\mathbb{F}_p rFp。每个vector元素 a i ∈ F p a_i\\in\\mathbb{F}_p aiFp p ( X ) p(X) p(X) i i i项的系数, p ( X ) p(X) p(X)的最大degree为 d − 1 d-1 d1

4. Open (prover) and OpenVerify (verifier)

改进版的inner product argument用于证明以下关系:
{ ( ( P , x , v ) ; ( a ⃗ , r ) ) : P = < a ⃗ , G ⃗ > + [ r ] H , v = < a ⃗ , b ⃗ > } \\{((P,x,v);(\\vec{a},r)):P=<\\vec{a},\\vec{G}>+[r]H, v=<\\vec{a},\\vec{b}>\\} {((P,x,v);(a ,r)):P=<a ,G >+[r]H,v=<a ,b >}
其中 b ⃗ = ( 1 , x , x 2 , ⋯   , x d − 1 ) \\vec{b}=(1,x,x^2,\\cdots,x^{d-1}) b =(1,x,x2,,xd1) 包含的为increasing powers of the evaluation point x x x

即,需要Prover向Verifier证明:
the polynomial contained “inside” the commitment P P P evaluates to v v v at x x x,且该committed polynomial的最大degree为 d − 1 d-1 d1

inner product argument需 k = log ⁡ 2 d k=\\log_2d k=log2d轮。仅需知道其最后一轮的输出即可,而不需要中间轮的结果,详细可参看Halo论文第3节内容。

在开始证明之前,Verifier需选择一个随机group element U U U,并将 U U U发送给Prover。并从第 k k k轮开始,递减到 1 1 1,初始 a ⃗ ( k ) = a ⃗ , G ⃗ ( k ) = G ⃗ . b ⃗ ( k ) = b ⃗ \\vec{a}^{(k)}=\\vec{a},\\vec{G}^{(k)}=\\vec{G}.\\vec{b}^{(k)}=\\vec{b} a (k)=a ,G (k)=G .b (k)=b ,在每一轮 j = k , k − 1 , ⋯   , 1 j=k,k-1,\\cdots,1 j=k,k1,,1