For the complete documentation index, see llms.txt
Zero-knowledge proof
Zero-knowledge proof(ZKP)란 비밀 자체를 밝히지 않으면서도 해당 비밀을 알고 있다는 사실을 증명하는 기술입니다. 예를 들어, 정확한 값을 공개하지 않고도 어떤 속성이 특정 범위 안에 있다는 것을 증명할 수 있습니다. DApp이나 서비스의 클라이언트는 ZKP를 활용하여, 자기주권 신원에서 필요한 정보만 선택적으로 공개하고 나머지는 비공개로 유지할 수 있습니다.
예를 들어, 지방 선거에서 투표하려는 사람을 생각해 보겠습니다. 이 사람은 해당 선거구에 거주하고, 유권자 명부에 등록되어 있으며, 아직 투표하지 않은 상태여야 합니다. 기존 방식으로 이 사실을 증명하려면, 주소, 생년월일, 성명이 포함된 문서를 제시해야 합니다. 또한 투표 시 유권자 명부에서 이름을 체크해야 하는데, 거버넌스가 취약한 경우 강압 위험이 발생할 수 있습니다.
zero-knowledge 환경에서는 디지털 ID와 적절한 애플리케이션을 사용하여, 시민이 개인 식별 정보를 공개하지 않고도 다음을 증명할 수 있습니다: 주소가 해당 지역 내에 있다는 것, 유권자 등록이 되어 있다는 것, 아직 투표하지 않았다는 것.
일반적으로 ZKP는 다음과 같은 사실을 증명하는 데 활용할 수 있습니다:
- 회사가 제재 목록에 없다
- 고객이 28세 이상이다
- 고객이 지난 1년간 100만 유로 이상의 제품을 구매했다.
이처럼 다른 정보를 밝힐 필요 없이 특정 사실만을 증명할 수 있습니다.
ZK Snark
Midnight은 zero-knowledge succinct non-interactive arguments of knowledge(zk-SNARK)를 사용합니다. 이는 컴팩트한 proof와 효율적인 검증을 위해 설계된 ZKP의 한 종류입니다.
두 가지 핵심 속성은 다음과 같습니다:
- 간결성(Succinctness): Proof 크기가 진술의 크기 대비 작게 유지되어, 효율적인 검증과 전송 데이터량 감소가 가능합니다.
- 비대화성(Non-interactivity): 증명자가 검증자와 상호작용하지 않고도 proof를 생성할 수 있습니다. 여러 라운드의 통신이 필요한 대화형 proof 시스템과 구별됩니다.
How do ZK Snarks work?
ZK Snark는 비대화형 지식 논증이므로, 증명자가 검증자와 지속적으로 주고받지 않아도 진술의 유효성을 입증할 수 있습니다. Proof의 생성과 검증에는 타원 곡선 기반 기법 등 고급 암호화 구성이 사용됩니다.
전체적인 흐름은 다음과 같습니다:
일반적인 과정은 다음과 같습니다:
- Setup phase: 시스템이 증명 및 검증 알고리즘에 사용되는 공개 매개변수를 설정합니다. 이 매개변수는 체계의 보안과 정확성에 핵심적입니다.
- Key components: ZK Snark는 특수 암호화 구성 요소(예: 타원 곡선 기 반 구성 및 해싱 프리미티브)를 사용하여 컴팩트한 proof를 가능하게 합니다.
- Circuit construction: 진술이 연산과 제약 조건을 정의하는 산술 circuit로 인코딩됩니다.
- Witness and proof generation: 증명자가 비공개 witness, circuit, 공개 매개변수를 사용하여 witness 데이터를 드러내지 않고 진술이 유효하다는 proof를 생성합니다.
- Verification: 검증자가 proof, 공개 매개변수, 진술을 사용하여 유효성을 효율적으로 확인합니다.
더 자세히 살펴보면:
- 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를 실제로 보유하고 있는지 검증합니다.