Intro
_Groth16_은 Pinocchio protocol에 비해 성능을 향상시킨 시스템이다. Pinocchio protocol에 비해 훨씬 적은 수의 페어링으로도 검증이 가능하고 CRS도 더 짧다. 다만 두번의 Trusted setup을 해야한다는 치명적인 단점이 있다.
CRS
- Toxic waste: α,β,γ,δ,τ∈Fp
- Q(x)=A(x)∗B(x)−C(x)=H(x)∗Z(x) → R1CS로부터 생성된 QAP polynomial Q(x)
- n개의 constraints가 있고, Z(x)=(x−1)(x−2)...(x−n) 이다.
- computation에 m개의 variable을 사용하고, 그중 public input은 l개이다.
- Li(x)=β∗Ai(x)+α∗Bi(x)+Ci(x)
Proving Key:
G1 elements: g1,g1α,g1β,g1δ,{g1τi,g1ατi,g1βτi}i=0n−1,{g1Li(τ)/δ}i=l+1m,{gτiZ(x)/δ}i=0n−2
G2 elements: g2,g2β,g2δ,{g2τi}i=0n−1
Verification Key:
G1 elements: g1,{g1Li(τ)/γ}0l
G2 elements: g2,g2γ,g2δ
GT element: g1α∗g2β
Proof Generation
- witness vector w=(1,w1,...,wm)
- 랜덤값 r,s
- Proof는 세개의 점 A,B,C로 이루어진다.
※ 아래 식에서 아래첨자 1 또는 2는 G1,G2를 의미한다. (e.g. α1=α∗g1)
A는 G1 위의 점이고 다음식을 만족한다.
A1=α1+w0∗A0(τ)1+w1∗A1(τ)1+...+wm∗Am(τ)1+r∗δ1
B는 G2 위의 점이고 다음식을 만족한다.
B2=β2+w0∗B0(τ)2+w1∗B1(τ)2+...+wm∗Bm(τ)2+s∗δ2
C는 G1 위의 점이고 다음식을 만족한다.
C1=wl+1∗(Ll+1(τ)/δ)1+...+wm∗(Lm(τ)/δ)1+H(τ)∗(Z(τ)/δ)1+s∗A1+r∗B1−rs∗δ1
Verification
아래 식이 성립하는지 확인함으로써 위에서 생성한 Proof를 검증할 수 있다.
A1∗B2=α1∗β2+(w0∗L0(τ)/γ+...+wl∗Ll(τ)/γ)1∗γ2+C1∗δ2
이 식에서 α1∗β2는 이미 verification key 로 주어져있으므로 3개의 paring만 연산하면 된다.
- 좌변 AB=(α+A(τ)+r∗δ)∗(β+B(τ)+s∗δ)=A(τ)∗B(τ)+α∗β+α∗B(τ)+β∗A(τ)+s∗α∗δ+s∗A(τ)∗δ+r∗β∗δ+r∗B(τ)∗δ+s∗r∗δ∗δ
- 우변 α∗β+L(τ)+H(τ)∗Z(τ)+s∗α∗δ+s∗A(τ)∗δ+s∗r∗δ∗δ+r∗β∗δ+r∗B(τ)∗δ+s∗∗r∗∗δ∗δ−s∗∗r∗∗δ∗δ=α∗∗β+β∗∗A(τ)+α∗∗B(τ)+C(τ)+H(τ)∗∗Z(τ)+s∗∗α∗∗δ+s∗∗A(τ)∗∗δ+s∗∗r∗∗δ∗∗δ+r∗∗β∗∗δ+r∗∗B(τ)∗δ=C(τ)+H(τ)∗∗Z(τ) +α∗∗β + α∗∗B(τ) + β∗∗A(τ) +s∗∗α∗∗δ +s∗∗A(τ)∗∗δ +r∗∗β∗∗δ +r∗∗B(τ)∗∗ δ +s∗∗r∗∗δ ∗δ
위 좌변과 우변을 전개한 결과에서 공통 인수들을 소거해보면 A(τ)∗B(τ)=C(τ)+H(τ)∗Z(τ) 임을 알 수 있고, 결론적으로 증명하고자 했던 식을 검증할 수 있게 된다.