들어가며
투자를 하다보면, 영지식 증명과 관련되어있는 다양한 것들을 접하게 된다.
zkSync, zk animal..
최근에 주목을 받고있는 이 영지식 증명이 의미하는 바가 무엇인지를 기술을 모르는 투자자 기준에서
누구나 알 수 있게 최대한 쉽게 이야기 해 보고,그것을 바탕으로 실제로 지금 접할 수 있는 zksync에 대해 풀어보려고 한다.
영지식 증명이란? (=zero-knowledge proof, zk)
영지식 증명이란, 정보를 공개하지 않고도 정보의 유효성을 증명할 방법이다.
비밀번호가 없지만 이 사람이 비밀번호를 안다는것을 증명하는 방법과 비슷하다.
어떻게 개인정보가 없이 인증을 할 수 있을까?
아주 간단한 영지식 증명의 한가지 예시로,
만약 A가 위와 같은 빨간공과 파란공을 각각 1개씩만 가지고 있다고 생각해보자.
그리고 흑백밖에 볼 수 없는 친구 B 에게 내가 이 공들의 색깔을 알고있음을 증명해야 한다
그러면 우선 빨간 공과 파란공을 B 에게 준 다음,
뒤 돌아서 공을 섞거나, 섞지 말라고 한다.
그렇게 한 다음, 공을 섞었는지, 섞지 않았는지 여부를 연속적으로 맞추면 영지식 증명이 된다.
영지식 증명에서 사용하는 4가지 역할이 있다 위의 예시에 대입해보면,
- Prover 정보를 알고 있는 사람
색을 볼줄 아는 A - Verifier 정보를 알지 못하는 상태로, Prover 가 정보를 알고 있는지 증명해야 하는 사람
색을 보지 못하지만 Prover 가 색을 볼줄 안다고 입증해야 하는 B - Secret 문제의 해답
공이 바뀌었는지 안바뀌었는지 - Challenge Verifier 가 Prover 가 정보를 알고있는지 시험하는 과정
A 가 안보는 곳에서 공을 바꾸거나 안 바꾼다음, 자신이 바꿨는지 안바꿨는지 물어보는 형식
하지만 이러한 영지식 증명의 단점은,
말 그대로 증명하는 자가 답이 있는지 아닌지 알 수 없기 때문에 오류가 생길수도 있다는 점이다.
따라서 여러번 시도하는것으로 이것을 보완해야 한다.
formal definition
- P(x): Prover
- V(x, z): Verifier
- ←-→:Challenge 과정 (interactive proof system)
- View: Challenge 과정을 관찰하여 기록한것
- z: Verifier의 challenge value 위의 예시에서는 공을 바꿨는지 여부로 대입할 수 있다.
그래서 영지식 증명이란?
정보가 없는 상태로 정보를 가지고 있는지 입증하는것
영지식 증명의 실제 예시 - ZK sync 에 대해
zkSync 란?
zkSync 는 영지식 기술을 활용하여 저렴하고 효율적이면서
보안성까지 보장하는 이더리움용 레이어2 확장 솔루션이다.
ZK rollup을 이용하여, 여러 트랜잭션을 가져와 하나로 일괄 처리한다음,
이더리움 블록체인에서 이것을 검증하는 방식으로 작동한다.
zk-rollup 이란?
수백개의 트랜잭션을 하나의 트랜잭션으로 묶은 후
거래가 맞다는 영지식 증명을 포함하여,
롤업 계좌 상태가 맞다는것에 대한 별도의 검증이 필요 없도록 만든 보다 빠르고 정확한 롤업이다
zk롤업에는 Transactors, Relayers 라는 두 종류의 참가자가 있는데,
Transactors
발신인의 주소, 보내는 금액, 네트워크 수수료, 논스 로 구성된 전송 데이터를 생성하고 네트워크로 이것을 보낸다.
그리고 롤업을 사용하는 주소와 그 잔고에 대해 각각 머클트리 형태로 데이터를 기록하고 관리한다.
Relayers
Transactors 에게 받은 데이터를 모아 하나의 트랜잭션으로 합치며,
이 과정에서 릴레이어는 zk-SNARK 을 이용한 영지식 증명을 트랜잭션에 포함해서 보낸다.
그리고 이 증명은 레이어1 이더리움 위의 스마트 컨트랙트에서 검증된다.
ZK-SNARK
zk-snark 란 영지식 증명 중 간결하고 상호작용 없는 지식 을 의미한다.
상호작용이 없다는 뜻은 여러번 반복할 필요 없이 한번만에 검증이 되어야 한다는 말로,
위의 빨간공 예시는 반복해서 값을 맞춰가야 하므로 zk-snark 가 아니다.
그럼 어떻게 하면 상호작용 없이 영지식 증명을 할 수 있을까?
이 예시는 완전히 적합하진 않지만, 쉽게 비유를 들어보자면,
부자인 철수가 백화점의 VIP 로 쇼핑을 하러 백화점에 갔다.
그리고 할인을 받으려고 하는데, 점원에게 vip 계정 비밀번호를 노출하기는 싫었다.
그래서 철수 자신의 폰으로 백화점 VIP 인증을 해서 바코드를 생성하여 점원에게 보여줬고,
점원은 그 바코드를 찍어 회원 닉네임을 확인해서 할인과 적립을 해줬다.
이로서 여러번 반복하는 상호작용 없이도,
간결하고 확실하게 영지식 증명을 하는것이 zk-snark 이다.
조금더 자세한 예시는 아래에 더보기를 누르면 볼 수 있다.
검증자인 유진이에게 어떤해시 H 가 주어지고,
철수가H 로 해시되는 비밀값S 를 알고 있다는 증거를 원한다고 한다.
그런데 철수는 유진이에게 비밀값S 를 알려주기 싫다고 한다.
그렇게 할때, 철수는 다음과 같은 프로그램을 철수의 컴퓨터로 돌려서,
return 값을 유진이에게 전달해주면 된다.
function C(H, S) {
return ( sha256(S) == H );
}
이 함수는 철수가 해답을 알고 있을 때만 참을 반환하게 된다.
ZK Snark 는 세가지 알고리즘 Generating, prove, Verify 로 구성된다.
- Generating
G(C,lambda)=(pk,vk)
증명자인 철수는 키 생성기 G를 이용하여 위와 같은 프로그램 C 와
비밀 랜덤값(lambda)을 집어넣어 두개의 키를 생성한다.
pk: 증명자가 사용하는 공개 키
vk:검증자가 사용하는 공개 키 - prove
prf = P(pk, x, w)
그리고 철수는 증명 키pk 와 공개 입력x, 그리고 해답인 w를 이용하여
자신이 프로그램을 만족 시킨다는 증거로 prf 를 생성하고 검증자인 유진이에게 넘겨준다. - Verify
검증자인 유진이는 검증 공개키와 공개입력 x 그리고 철수에게 받은 prf 를 가지고
증명이 정확하면 참 그렇지 않으면 거짓을 반환하는
V(vk, x, prf)를 계산한다.
여기서 중요한 점은,
제너레이트 과정에 들어간 lambda 값은 절대로 검증자가 알 수 없어야 하므로, 꼭 철수가 해야 한다.
철수가 prf 를 만들어 유진이에게 검증을 시키는것을 대입해서 생각해보면,
zk 롤업에서는 Relayers 가 만들어 보낸 prf 를 이더리움에서 verify함으로 이더리움의 보안성을 누린다고 볼 수 있다.
마무리
이로서 영지식 증명의 개념, 그리고 그것을 이용한 zk-sync 등에 대해 간단히 설명을 해 보았다.
레이어2의 보안을 높이기 위해서나, 다른 이유에서라도 영지식 증명은 중요하지 않을 수 없는 획기적인 기술이다.
웹3 말고 웹2에서도 영지식 증명을 활용할 수 있지 않을까?
스타트업에서 만든 앱같은거 회원가입을 할때, 개인정보가 나갈까봐 겁을 내고 안하는 사람들이 많다.
더불어 개인정보를 보관하는 db 값도 스타트업에서는 골칫거리가 될 수 있다.
그렇게 할때 그냥 회원 가입 및
로그인 기능을 영지식 증명으로 이용해본다면 걱정도 덜고 DB 값도 덜 수 있을것같다.
영지식 증명이 다양하게 활용될 날을 기대해본다.
참고 자료
https://talken.io/board/post/TOKEN_TALK/332491
https://media.consensys.net/introduction-to-zksnarks-with-examples-3283b554fc3b
https://youtube.com/watch?v=liOn-n4lqfA
https://youtube.com/watch?v=OcmvMs4AMbM&t=114s
https://hyun-jeong.medium.com/h-3c3d45861ced