Skip to main content

Zero-knowledge proof

Zero-knowledge proof(ZKP)란 비밀 자체를 밝히지 않으면서도 해당 비밀을 알고 있다는 사실을 증명하는 기술입니다. 예를 들어, 정확한 값을 공개하지 않고도 어떤 속성이 특정 범위 안에 있다는 것을 증명할 수 있습니다. DApp이나 서비스의 잠재적 사용자는 ZKP를 활용하여, 자기주권 신원에서 필요한 정보만 선택적으로 공개하고 나머지는 비공개로 유지할 수 있습니다.

예를 들어, 지방 선거에서 투표하려는 사람을 생각해 보겠습니다. 이 사람은 해당 선거구에 거주하고, 유권자 명부에 등록되어 있으며, 아직 투표하지 않은 상태여야 합니다. 기존 방식으로 이 사실을 증명하려면, 주소, 생년월일, 성명이 포함된 신분증을 제시해야 합니다. 또한 투표 시 유권자 명부에서 이름을 체크해야 하는데, 부패한 행정부가 이 과정을 악용하면 유권자가 강압에 노출될 수 있습니다.

zero-knowledge 환경에서는 적절한 애플리케이션과 디지털 ID를 결합하면, 시민이 개인 식별 정보를 공개하지 않고도 다음을 증명할 수 있습니다: 주소가 해당 지역 내에 있다는 것, 유권자 등록이 되어 있다는 것, 아직 투표하지 않았다는 것.

일반적으로 ZKP는 다음과 같은 사실을 증명하는 데 활용할 수 있습니다:

  • 회사가 제재 목록에 없다
  • 고객이 28세 이상이다
  • 고객이 지난 1년간 100만 유로 이상의 제품을 구매했다.

이처럼 다른 정보를 밝힐 필요 없이 특정 사실만을 증명할 수 있습니다.

ZK Snark

Midnight은 zero-knowledge succinct non-interactive argument of knowledge(ZK Snark)를 사용합니다. ZK Snark는 특히 효율적이고 강력한 ZKP의 한 종류로, 두 가지 핵심적인 차별점이 있습니다:

  • 간결성(Succinctness): ZK Snark는 증명 대상의 크기 대비 proof 크기가 준선형적으로 유지됩니다. 덕분에 검증이 효율적이고 전송 데이터량도 줄어들어, 실용적인 시스템 구축에 매우 유리합니다.
  • 효율성(Efficiency): ZK Snark는 비대화형 proof로, 증명자가 검증자와 추가로 상호작용하지 않아도 proof를 생성할 수 있습니다. 여러 라운드의 통신이 필요한 다른 ZKP 유형과 구별되는 특징입니다.

How do ZK Snarks work?

ZK Snark는 비대화형 지식 논증이므로, 증명자가 검증자와 지속적으로 주고받지 않아도 진술의 진실성을 입증할 수 있습니다. proof의 생성과 검증에는 타원 곡선 페어링 및 고급 대수적 기법 등의 수학적 연산이 사용됩니다.

상위 수준의 프로세스는 다음과 같습니다:

zk-snarks

ZK Snark의 작동 방식을 더 자세히 살펴보겠습니다:

  • Setup phase. 다른 암호화 프로토콜과 마찬가지로, ZK Snark도 먼저 특정 매개변수를 설정하는 단계를 거칩니다. 이 매개변수는 전체 시스템의 보안과 기능에 핵심적인 역할을 합니다.
  • Key components. ZK Snark에는 타원 곡선 페어링(암호화에 사용되는 수학적 구조)과 특수 해시 함수(데이터를 고정 크기 값으로 변환하는 도구로, 일종의 디지털 지문) 등 여러 핵심 구성 요소가 포함됩니다. 이들이 간결하고 효율적인 proof 생성을 뒷받침합니다.
  • Circuit construction. 해결할 문제를 수학적으로 표현한 뒤 산술 circuit로 변환하는 과정입니다. 이 circuit에는 증명 대상과 관련된 다양한 연산과 제약 조건이 담깁니다.
  • Witness and proof generation. 진술과 관련된 비밀(witness)을 가진 증명자가 ZK Snark proof를 구성합니다. circuit의 제약 조건과 설정 단계의 공개 매개변수를 결합한 일련의 암호화 연산을 수행하며, 그 결과로 witness의 세부 정보를 드러내지 않으면서 진술의 진실성을 증명하는 컴팩트한 proof가 만들어집니다.

Verification. 검증자는 proof, 공개 매개변수, 원래 진술을 바탕으로 proof의 유효성을 효율적으로 검증합니다. 이 과정에서 수학적 계산을 통해 proof의 정확성을 확인하고, 증명자가 해당 진술에 대한 올바른 witness를 실제로 보유하고 있는지 검증합니다.