본문 바로가기

Blockchain/ZKP

zkSNARKs란? (circom-zkSNARKs의 관계)

* 해당 강의는 https://learn.0xparc.org/materials/circom/learning-group-1/circom-1  을 듣고 정리한 글입니다. 

 

Circom Workshop 1 | ZK Learning Resources

Description

learn.0xparc.org

함수 입력값 : x1,x2,x3,x4 

OUT = f(x) = (x1+x2) * x3 - x4 

 

여기서 zkSNARKs는 x1,x2,x3,x4 라는 비밀을 알고 있는데, OUT의 연산 결과에 필요한 값들이다. 

위에서 튜플()의 값이 정확히 무엇인지 몰라도 결과값을 증명할 수 있다. 

 

위에서 function의 input이 x1,x2,x3,x4 라고했고, OUT의 식이 OUT = f(x) = (x1+x2) * x3 - x4 로 되어있는 상황에서 어떻게 ZKP 증명을 할 수 있을까? 

y1 = x1 + x2 

y2 = y1 * x3 

OUT = y2 - x4 
(위의 식을 circuit이라고 한다) 

이렇게 된 걸 보니, 차례로 연산을 하는 것 같다. 

우리가 흔히 하는 연산에서도 괄호가 있으면 괄호 연산을 먼저 하는 것처럼 말이다. 그래서 (x1+x2)가 먼저 계산이 되고 차례로 *x3, -x4 연산이 실행되었다. 

 

이로써 SNARK의 prover의 input은 x1,x2,x3,x4,y1,y2,OUT이 되고 

SNARK의 prover output은  x1,x2,x3,x4를 input으로 받고 계산하여 얻는 값이다. 

 

* 여기서 signature라는 단어가 사용되는데, 처음 보았다. 

zkSNARKs에서 쓰이는 signature에 대해 챗GPT한테 물어보았다. 

 

- signature은 zkSNARKs 프로토콜을 사용하여 생성된 증거(proof)를 가리킨다. 정의한 조건을 만족하는지 증명하는데 사용된다. 

데이터 유효성 증명, 연산의 무결성 증명, 개인 정보 보호에 쓰인다. 

proof는 circuit을 실행한 prover가 생성하며, verifier는 이 proof를 사용하여 circuit의 결과를 검증한다. 

-> 즉, signature은 circuit의 실행을 증명하는데 사용된다. 

 

여기서 또 한 가지 궁금한 점이 생겼다. 

zkSNARKs와 circom의 관계는 무엇일까? 

circom은 circuit을 설계하기 위한 언어로, circuit의 구조와 연산을 정의하는데 사용하며 

zkSNARKs는 circom에서 정의된 circuit을 사용하여 영지식증명을 기반으로 circuit의 실행 결과를 증명하거나 검증하는데 사용된다. 

 

오늘 알게된 점 

1) zkSNARKs와 circom의 관계 

2) circuit이란? 

3) circuit에서의 input, out