비밀을 증명할 수 있을까?
이상한 질문처럼 들린다. 무언가를 증명하려면 보통 증거를 보여줘야 한다. 내가 돈이 있다는 걸 증명하려면 잔액을 보여줘야 하고, 내가 18세 이상임을 증명하려면 주민등록증을 보여줘야 한다.
하지만 이런 상황을 상상해보자. 나이 확인이 필요한 서비스에서, 생년월일을 포함한 개인정보 전체를 넘기는 대신 "이 사람은 18세 이상이다"는 사실만 증명할 수 있다면?
이것이 **영지식 증명(Zero-Knowledge Proof, ZKP)**이다.
알리바바 동굴 이야기
영지식 증명을 설명할 때 가장 유명한 비유는 "알리바바 동굴"이다.
동굴 안에 비밀 문이 있다. 문을 열려면 주문을 알아야 한다. 앨리스는 이 주문을 알고 있고, 밥에게 "나는 주문을 알고 있다"는 것을 증명하고 싶다. 하지만 주문 자체를 밥에게 알려주고 싶지는 않다.
동굴은 가운데서 두 갈래로 나뉜다. 왼쪽 길 A, 오른쪽 길 B. 두 길은 안쪽에서 비밀 문으로 연결된다.
실험을 반복한다:
- 밥이 입구에서 기다리는 동안, 앨리스는 A나 B 중 하나를 선택해 들어간다
- 밥이 동굴 안쪽으로 와서 "A에서 나와!" 또는 "B에서 나와!"를 무작위로 외친다
- 앨리스가 주문을 알고 있다면, 어느 쪽에서 들어갔든 밥이 요구하는 쪽으로 나올 수 있다
- 앨리스가 주문을 모른다면, 밥의 요구가 자신이 들어간 쪽과 일치할 때만 성공한다 (50% 확률)
이 실험을 20번 반복하면, 주문을 모르는 사람이 모두 성공할 확률은 (1/2)²⁰ = 약 백만 분의 1이다. 100번이면 사실상 불가능한 수준이 된다.
핵심: 밥은 앨리스가 주문을 안다는 것을 확신하게 됐지만, 주문이 무엇인지는 여전히 모른다.
영지식 증명의 세 가지 조건
암호학에서 영지식 증명이 성립하려면 세 가지를 만족해야 한다:
완전성 (Completeness): 참인 명제는 항상 증명할 수 있다. 앨리스가 주문을 알고 있다면, 밥을 항상 설득할 수 있다.
건전성 (Soundness): 거짓인 명제는 증명할 수 없다. 주문을 모르는 사람이 밥을 속일 수 없다. (아주 낮은 확률 제외)
영지식성 (Zero-Knowledgeness): 명제가 참이라는 것 외에 어떤 추가 정보도 유출되지 않는다. 밥은 실험 후 주문에 대해 아는 것이 없다.
블록체인에서 ZK가 왜 중요한가
이더리움은 안전하지만 느리다. 초당 15건 정도의 거래밖에 처리하지 못한다. 수수료(가스비)가 높은 이유다.
이 문제를 해결하는 가장 유망한 방법 중 하나가 **ZK 롤업(ZK Rollup)**이다.
아이디어는 간단하다: 수천 건의 거래를 이더리움 메인체인 밖에서 처리한 뒤, "이 거래들이 모두 유효하다"는 ZK 증명 하나만 이더리움에 제출한다. 이더리움은 거래 하나하나를 검증하는 대신 증명 하나만 검증하면 된다.
결과: 처리량은 수십~수백 배 늘고, 비용은 대폭 줄어든다.
zkEVM: 이더리움의 복사본
더 나아가, zkEVM은 이더리움 가상머신(EVM) 전체를 ZK 증명으로 검증할 수 있게 만든다. 기존 이더리움 스마트컨트랙트를 수정 없이 ZK 롤업 위에서 실행할 수 있다는 의미다.
Polygon zkEVM, zkSync Era, Scroll 등이 대표적인 zkEVM 프로젝트다.
프라이버시 코인과 ZK
또 다른 중요한 응용은 프라이버시 보호다.
비트코인과 이더리움의 모든 거래는 공개 장부에 기록된다. 누구나 어떤 주소가 얼마를 어디에 보냈는지 볼 수 있다. 주소와 신원이 연결되는 순간 모든 금융 이력이 노출된다.
Zcash는 ZK 증명(zk-SNARKs)을 사용해 "이 거래는 유효하다 (금액이 맞다, 이중지불이 없다)"는 것을 증명하면서도 발신자, 수신자, 금액을 모두 숨길 수 있다.
마찬가지로, 내가 신용점수가 700점 이상임을 증명하면서 정확한 점수는 숨기거나, 특정 국가 국적임을 증명하면서 이름과 생년월일은 감추는 것도 ZK로 가능하다.
zk-SNARKs vs zk-STARKs
ZK 증명에는 여러 구현 방식이 있다. 현재 가장 많이 사용되는 두 가지:
zk-SNARKs (Succinct Non-interactive ARguments of Knowledge)
- 증명 크기가 매우 작고 검증이 빠르다
- "신뢰할 수 있는 설정(Trusted Setup)"이 필요하다는 단점
- Zcash, Groth16 등이 사용
zk-STARKs (Scalable Transparent ARguments of Knowledge)
- 신뢰 설정이 필요 없다 (투명하다)
- 양자 컴퓨터에도 안전하다
- 증명 크기가 상대적으로 크다
- StarkWare(StarkNet)가 사용
간단히 말하면: SNARKs는 빠르고 작지만 초기 신뢰 가정이 필요하고, STARKs는 더 투명하고 미래 지향적이지만 무겁다.
ZK 기술의 현재와 미래
영지식 증명은 2010년대까지 순수 이론에 가까웠다. 계산이 너무 복잡하고 느려서 실용화가 어려웠다.
2020년대 들어 상황이 바뀌었다. Groth16, PLONK, Halo2 같은 새로운 증명 시스템이 등장하면서 증명 생성 속도가 수백 배 빨라졌다. 전용 하드웨어(ZK 가속기)도 개발되고 있다.
앞으로 ZK가 변화를 가져올 분야:
- 신원 인증: 주민등록증 없이 나이나 국적만 증명
- 의료: 특정 질병 여부만 증명하고 의료기록은 비공개
- 투표: 투표 내용을 숨기면서도 유효한 투표임을 증명
- 금융: 신용 조회 없이 상환 능력만 증명
영지식 증명을 직접 시뮬레이션해보고 싶다면 ZK 증명 인터랙티브 모듈에서 체험해보세요. "나는 비밀을 알고 있다"는 것을 증명하면서 비밀 자체는 숨기는 과정을 직접 해볼 수 있습니다.