[Note] PLONK algorithm - Verifier

DoHoon Kim·2022년 10월 12일
0

PLONK

목록 보기
5/5

PLONK의 verifier algorithm을 알아보자. Verifier의 preprocessed input은 다음과 같다.

Verifier preprocessed input

Common preprocessed input의 다항식들의 commitment + toxic waste가 G2\mathbb{G}_2에서 hiding된 값들로 이루어져 있다.

Verifier algorithm

Verifier algorithm의 input은 circuit의 public input (wi)i[n](w_i)_{i \in [n]}πSNARK\pi_{SNARK}이다.

V((wi)i[n],πSNARK):V((w_i)_{i \in [n]}, \pi_{SNARK}):

  1. ([a]1,[b]1,[c]1,[z]1,[tlo]1,[tmid]1,[thi]1,[Wζ]1,[Wζω]1)G19([a]_1, [b]_1, [c]_1, [z]_1, [t_{lo}]_1, [t_{mid}]_1, [t_{hi}]_1, [W_{\zeta}]_1, [W_{\zeta \omega}]_1) \in \mathbb{G}_1^9

πSNARK\pi_{SNARK}의 각 다항식들의 commitment가 G1\mathbb{G}_1의 element인지 확인

  1. (aˉ,bˉ,cˉ,sˉσ1,sˉσ2,zˉω)F6(\bar{a}, \bar{b}, \bar{c}, \bar{s}_{\sigma1}, \bar{s}_{\sigma2}, \bar{z}_{\omega}) \in \mathbb{F}^6

πSNARK\pi_{SNARK}의 opening evaluation들이 field의 element인지 확인

  1. (wi)i[l]Fl(w_i)_{i \in [l]} \in \mathbb{F}^l

Public input들이 field의 element인지 확인

  1. Prover와 동일한 방법으로 transcript로부터 challenge 값 β,γ,α,ζ,v,u\beta, \gamma, \alpha, \zeta, v, u 얻어냄

  2. ZH(ζ)Z_H(\zeta) 계산

  3. L1(ζ)L_1(\zeta) 계산

  4. PI(ζ)PI(\zeta) 계산

  5. 여기부터 Batched KZG를 사용하는 부분이다. πSNARK\pi_{SNARK}[Wζ]1,[Wζω]1[W_{\zeta}]_1, [W_{\zeta \omega}]_1의 형태를 떠올려보자.

Wζ=1Xζ(r(X)+v(a(X)aˉ)+v2(b(X)bˉ)+v3(c(X)cˉ)+v4(Sσ1(X)sˉσ1)+v5(Sσ2(X)sˉσ2))Wζω=(z(X)zˉω)XζωW_{\zeta} = {1 \over {X-\zeta}} \begin{pmatrix} r(X) \\+ v(a(X) - \bar{a}) \\+ v^2(b(X) - \bar{b}) \\+ v^3(c(X) - \bar{c}) \\+ v^4(S_{\sigma1}(X) - \bar{s}_{\sigma1}) \\+ v^5(S_{\sigma2}(X) - \bar{s}_{\sigma2}) \end{pmatrix} \\[5pt] W_{\zeta \omega} = {{(z(X) - \bar{z}_{\omega})} \over {X-\zeta \omega}}

ζ\zeta에서 r(X),a(X),b(X),c(X),Sσ1(X),Sσ2(X)r(X), a(X), b(X), c(X), S_{\sigma1}(X), S_{\sigma2}(X)의 evaluation proof들과 ζω\zeta \omega에서 z(X)z(X)의 evaluation proof를 KZG로 batch verify하는 과정이 될 것이다. 먼저 step 7에서는 verifier의 scalar multiplication을 줄이기 위해 linearisation polynomial을 약간 변형한다.

r0:=PI(ζ)L1(ζ)α2(aˉ+βsˉσ1+γ)(bˉ+βsˉσ2+γ)(cˉ+γ)zˉω,r(X):=r(X)r0r_0 := PI(\zeta) - L_1(\zeta)\alpha^2 - (\bar{a} + \beta\bar{s}_{\sigma1} + \gamma)(\bar{b} + \beta\bar{s}_{\sigma2} + \gamma)(\bar{c} + \gamma)\bar{z}_{\omega}, \\[5pt] r'(X) := r(X) - r_0

역시나 처음에는 이 짓거리를 왜 하나 싶지만, 약간만 생각해 보면 r(ζ)=r(ζ)r0r'(\zeta) = r(\zeta) - r_0가 되고, r(ζ)=0r(\zeta) = 0이기 때문에 r(ζ)=r0r'(\zeta) = - r_0를 바로 얻을 수 있기 때문이다. 다항식 하나에 대한 evaluation을 꽁으로 얻은 셈이지.

  1. Batched polynomial commitment의 첫 번째 부분을 계산

KZG batch verify algorithm에서 G1\mathbb{G}_1의 element FF의 형태를 생각해 보자. Random challenge γ,γ\gamma, \gamma' power의 계수들이 각각 {cmifi(z)},{cmifi(z)}\{cm_i - f_i(z)\}, \{cm'_i - f'_i(z')\} 형태였다. Step 9에서는 각 다항식들의 commitment의 합부터 계산한다.

[D]1=[r]1+u[z]1[D]_1 = [r']_1 + u \cdot [z]_1

[D]1[D]_1 계산은 너무 더러우므로 생략.
a(X),b(X),c(X),Sσ1(X),Sσ2(X)a(X), b(X), c(X), S_{\sigma1}(X), S_{\sigma2}(X)의 commitment는 step 10에서 계산한다. 왜 나누어져 있는지는 모르겠다.

  1. Full batched polynomial commitment 계산

a(X),b(X),c(X),Sσ1(X),Sσ2(X)a(X), b(X), c(X), S_{\sigma1}(X), S_{\sigma2}(X)의 commitment들까지 계산해서 [D]1[D]_1에 더한다.

[F]1=[D]1+v[a]1+v2[b]1+v3[c]1+v4[Sσ1]1+v5[Sσ2]1[F]_1 = [D]_1 + v \cdot [a]_1 + v^2 \cdot [b]_1 + v^3 \cdot [c]_1 + v^4 \cdot [S_{\sigma1}]_1 + v^5 \cdot [S_{\sigma2}]_1
  1. Group-encoded batch evaluation 계산

이제 모든 다항식들의 opening evaluation들의 random linear combination한 값을 G1\mathbb{G}_1으로 encoding한 [E]1[E]_1을 계산한다.

[E]1=(r0+vaˉ+v2bˉ+v3cˉ+v4sˉσ1+v5sˉσ2+uzˉω)[1]1[E]_1 = (-r_0 + v \cdot \bar{a} + v^2 \cdot \bar{b} + v^3 \cdot \bar{c} + v^4 \cdot \bar{s}_{\sigma1} + v^5 \cdot \bar{s}_{\sigma2} + u \cdot \bar{z}_{\omega}) \cdot [1]_1
  1. 드디어 마지막 단계... KZG batch verify algorithm의 pairing check 단계이다. Pairing check equation은 다음과 같다.
e([Wζ]1+u[Wζω]1,[x]2)=e(ζ[Wζ]1+uζω[Wζω]1+[F]1[E]1,[1]2)e([W_{\zeta}]_1 + u \cdot [W_{\zeta \omega}]_1, [x]_2) = e(\zeta \cdot [W_{\zeta}]_1 + u\zeta\omega \cdot [W_{\zeta\omega}]_1 + [F]_1 - [E]_1, [1]_2)

이로써 PLONK verifier algorithm까지 모두 살펴보았다. 식이 너무 더러워서 절대 paper를 읽어보고 싶지 않았는데, 한 번 쭉 훑어보았다.

현재 research 중인 주제로 EVM 상에서 PLONK verifier를 구현하는 건데, 마지막 pairing check가 비싼 연산이라서 여러 개의 proof를 aggregation해서 한 번의 pairing check만 하도록 하는 게 중요한 포인트다.

profile
Researcher & Developer

0개의 댓글