<aside> 🏎️ Formula Zero 는 Nonce Open Source Lab 소속으로, Tezos Foundation 의 지원을 받아 PoS 기반 블록체인의 Light Client를 연구하는 프로젝트입니다.

</aside>

zk-SNARK의 종류

zk-SNARK 는 Prover가 특정 Statement 가 True 임을 증명하는 Proof 를 생성하고 Verifier가 이를 검증하는 데 있어서 Prover 와 Verifier 간에 사전에 공유하는 방식에 따라 3가지로 분류할 수 있다

특정 Statement, 즉 일반적으로 함수에서 SNARK 를 기반으로 Proof 를 생성하는 과정은 다음과 같다.

위에서 언급된 Front-end 와 Back-end 의 조합으로 다양한 Proof System 이 가능하다. 예를 들어, 최근 Starkware 에서 발표한 Cairo 의 경우 Plonk와 FRI 의 조합이다.

Polynomial Commitment

Prover가 Verifier 에게 특정 Statement 가 True 임을 증명하는 방법은 간단하게 해당 Statement 를 표현하는 다항식들을 다 전달하면 된다. 하지만 이럴 경우 효율적이지 않으므로, 다항식을 짧은 숫자로 표현하면서도 긴 다항식을 나타내는 것이 맞다는 것을 보장하는 증명 방법이 Polynomial Commitment 이다. 보통 Interactive Proof, 즉 Prover 와 Verifier 간에 메시지들을 주고 받음으로써 증명하게 된다. Prover 가 다항식 f(X)에 대한 Polynomial Commitment 를 Verifer 에게 전달하고 Verifier 는 임의의 z 값에 대한 다항식의 Evaluation f(z) 를 요청한다. Prover 는 f(z) 를 계산하고, f(z) 가 정확하다는 Proof 를 Verifier 에게 제공한다. 처음 전달한 Polynomail Commitment 는 f(z)에 대한 Proof 검증시에 필요한 정보를 전달하기에 일종의 오라클 (Oracle) 역할을 한다. 이와 같은 과정을 Polynomial IOP (Interfactive Oracle Proof) 라고 하며 요즘 대부분의 SNARK 가 이를 기반으로 한다.