PLONK protocol의 더러운 식을 이해하기 위해 알아야 하는 KZG PCS의 batched version에 대해서 정리해봤다.
두 개의 distinct한 evaluation point를 각각 z,z′라고 하고, z에서 evaluate되는 polynomial들을 {fi}i∈[t1], z′에서 evaluate되는 polynomial들을 {fi′}i∈[t2]라고 하겠다. open protocol은 다음과 같다. (srs는 미리 생성되어 있다고 가정) PPC가 증명하고자 하는 것은 fi(z)=si,fi′(z′)=si′ 이다.
open({cmi}i∈[t1],{cmi′}i∈[t2],{z,z′},{si,si′})
(a) VPC가 random field element γ,γ′을 PPC에게 보낸다.
(b) PPC가 다음과 같은 polynomial을 계산한다.
h(X):=i=1∑t1γi−1X−zfi(X)−fi(z)h′(X):=i=1∑t2γ′i−1X−z′fi′(X)−fi′(z′)
그냥 각 polynomial들의 evaluation proof를 random linear combination한 다항식이다. 위 다항식에 대한 commitment를 계산한다.
W:=[h(x)]1,W′:=[h′(x)]1
(c) VPC가 random field element r′를 선택한다.
(d) VPC가 다음과 같은 G1 element를 계산한다.
F:=(i∈[t1]∑γi−1⋅cmi−[i∈[t1]∑γi−1⋅si]1)+r′(i∈[t2]∑γ′i−1⋅cmi′−[i∈[t2]∑γ′i−1⋅si′]1)
더럽게 복잡해 보이지만 γi−1,γ′i−1의 계수를 살펴보면 (b)에서 계산한 W,W′의 γi−1,γ′i−1의 계수의 분자와 대응됨을 알 수 있다.
마지막으로 다음과 같은 pairing check를 하고, protocol은 종료된다.
e(F+z⋅W+r′z′⋅W′,[1]2)⋅e(−W−r′⋅W′,[x]2)=1
마지막에 pairing check도 보자마자 뇌절 와서 그러려니 하고 넘어가고 싶지만 약간 중요하다.(내 생각엔?)
[KZG10] 논문을 읽은 사람이라면 pairing check의 우변을 약간 변형하겠다.
e(W+r′⋅W′,[x]2)=e(W,[x]2)⋅e(r′⋅W′,[x]2)=e(W,[x−z+z]2)⋅e(r′⋅W′,[x−z′+z′]2)=e(W,[x−z]2)⋅e(W,[z]2)⋅e(r′⋅W′,[x−z′]2)⋅e(r′⋅W′,[z′]2)=e(F,[1]2)⋅e(z⋅W+r′z′⋅W′,[1]2)=e(F+z⋅W+r′z′⋅W′,[1]2)
지금은 식을 왜 이렇게 변형해서 헷갈리게 만드는 건지 모르겠지만, 추후 proof aggregation에서 유용한 등식이 된다.
자, 이제 PLONK protocol의 더러운 식을 이해해보자.