카테고리 없음

10분만에 이해하는 영지식 증명 (ft: zk, zkSync)

메모하는 사람 2023. 8. 11. 18:29

들어가며

투자를 하다보면, 영지식 증명과 관련되어있는 다양한 것들을 접하게 된다.

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://medium.com/@coineasy/zksync-%EC%9D%B4%ED%95%B4-%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80%EC%9D%98-%EB%A0%88%EC%9D%B4%EC%96%B4-2-%ED%99%95%EC%9E%A5-%EC%86%94%EB%A3%A8%EC%85%98-c83f5b724328

https://youtube.com/watch?v=liOn-n4lqfA 

https://youtube.com/watch?v=OcmvMs4AMbM&t=114s 

https://hyun-jeong.medium.com/h-3c3d45861ced