Web3 기초부터 배우기 - 영지식 증명(ZKP)이란 무엇인가?
Zero-knowledge proof를 사용하면 알고 있는 내용을 공개하지 않고도 그것을 알고 있음을 증명할 수 있습니다. 이 암호학적 혁신이 Web3 애플리케이션의 프라이버시를 어떻게 변화시키고 있는지 알아봅니다.
Web3의 기초를 계속 탐구하면서, 지난주에는 Smart Contracts and Compact에 집중했습니다. Midnight의 전용 smart contract 언어입니다. 이 두 요소가 함께 프라이버시 보존 애플리케이션에서 로직을 정의하고 집행하는 기반을 형성합니다.
하지만 탈중앙화 시스템에서, 특히 프라이버시가 우선시될 때, 로직만으로는 충분하지 않습니다. 바로 여기서 zero-knowledge proof(ZKP)가 등장합니다.
ZKP는 근거가 되는 데이터를 공개하지 않으면서 진술이 참임을 검증할 수 있게 합니다. 민감한 데이터를 비공개로 유지하면서 smart contract 규칙을 집행하는 핵심 기술로, 신뢰, 유용성, 기밀성의 균형을 맞추는 시스템 구축에 필수적입니다.
이번 글에서는 zero-knowledge proof가 무엇인지, 어떻게 작동하는지, 그리고 Midnight이 프라이버시, 컴플라이언스, 안전한 DApp 개발을 지원하기 위해 이를 어떻게 사용하는지 설명하겠습니다.
What Are Zero-Knowledge Proofs?
Zero-knowledge proof는 증명자가 검증자에게 특정 진술이 참이라는 것을, 그 사실 이상의 정보는 전혀 공개하지 않으면서 증명하는 기법입니다.
예를 들어 생각해 보겠습니다. 18세 이상임을 증명하기 위해 신분증 전체를 건네는 대신, ZKP를 사용하면 생년월일, 이름, 신분증 번호를 공개하지 않고도 연령 기준 충족을 증명할 수 있습니다.
이 암호학적 기술은 세 가지 기본 속성을 기반으로 합니다:
- Completeness: 진술이 참이면, 증명자는 검증자에게 참이라고 확신시킬 수 있습니다.
- Soundness: 진술이 거짓이면, 어떤 부정직한 증명자도 검증자에게 참이라고 확신시킬 수 없습니다.
- Zero-knowledge: 검증자는 진술의 참 여부 외에는 아무것도 알 수 없습니다.
Interactive vs. Non-Interactive Proofs
초기 ZKP는 증명자와 검증자 간의 왕복 교환이 필요했으며, 이를 대화형 proof라 합니다. 하지만 탈중앙화 시스템에서는 이런 상호작용이 항상 가능하지 않습니다. 여기서 비대화형 proof가 등장합니다.
비대화형 ZKP에서는 증명자가 단일 proof를 생성하면, 추가 입력 없이 누구나 언제든 검증할 수 있습니다. zk-SNARK, zk-STARK 같은 프로토콜이 이를 실현하며, Fiat-Shamir 휴리스틱 같은 기법으로 암호학적 해시를 통해 상호작용을 시뮬레이션합니다.
Proof가 공개적이고 재사용 가능하며 누구나 검증할 수 있어야 하는 blockchain 환경에 비대화형 ZKP가 이상적인 이유입니다.
Types of Zero-Knowledge Proof Systems
ZKP 시스템마다 크기, 속도, 신뢰 요구사항 면에서 다른 트레이드오프가 있습니다:
- Groth16 (zk-SNARK): 매우 작은 proof, 빠른 검증, 하지만 circuit당 trusted setup 필요
- Plonk (zk-SNARK): 약간 더 큰 proof, 느린 검증, 하지만 일회성 universal setup만 필요
- Bulletproofs: Trusted setup 불필요, 하지만 복잡도에 따라 proof 크기가 증가
- zk-STARK: 투명(trusted setup 불필요), 양자 내성 보안, 하지만 큰 proof 크기
Midnight은 Halo 2라는 Plonk 파생 시스템을 활용합니다. 재귀적 proof를 지원하고 특정 구성에서 trusted setup을 제거하므로, 유연성과 확장성을 모두 요구하는 프라이버시 보존 DApp에 이상적인 선택입니다.
How Do ZKPs Work?
Zero-knowledge proof는 거의 마법처럼 보일 수 있습니다. 증명자가 검증자에게 진술이 참이라는 것을, 왜 참인지는 공개하지 않으면서 증명할 수 있으니까요. 하지만 눈속임이 아니라 엄밀한 암호학과 수학적 구조를 영리하게 활용한 결과입니다.
ZKP의 핵심에는 증명자가 비밀을 공개하지 않으면서 검증하려는 "진술"이 있습니다. 이 진술은 충족해야 할 논리적 규칙과 제약 조건을 나타내는 circuit으로 인코딩됩니다. 증명자는 proving key라는 암호학적 키와 witness라 불리는 비밀 입력을 사용해 간결한 proof를 생성합니다. 검증자는 verifying key로 이 proof를 확인하여, private 입력을 전혀 보지 않고도 규칙 준수를 확인할 수 있습니다.
이 특성이 ZKP를 프라이버시 보존 smart contract에 이상적으로 만듭니다. 기존 시스템에서는 행위의 정당성을 검증하려면 모든 데이터를 공개해야 합니다. ZKP는 이 신뢰 모델을 전환합니다. 데이터 자체를 검사하는 대신, 데이터가 규칙을 준수한다는 암호학적 proof를 검증하는 것입니다.
Midnight은 ZKP를 smart contract의 구조와 실행에 직접 내장하여 한 단계 더 나아갑니다. Midnight에서 컴파일된 Compact smart contract의 verification key가 곧 해당 contract의 온체인 식별자가 됩니다. 사용자가 contract와 상호작용할 때, 단순히 함수를 호출하는 것이 아니라 입력을 공개하지 않으면서 contract 로직을 준수했다는 proof를 제출합니다.
이 과정의 상위 수준 흐름은 다음과 같습니다:
- Setup: Circuit이 생성됩니다. Proving key와 verifying key가 생성됩니다.
- Proof Generation: 증명자가 비밀(witness)과 proving key를 사용하여 암호학적 proof를 생성합니다.
- Verification: 검증자가 verifying key와 proof를 사용하여 다른 것은 전혀 알지 못하면서 진술이 참인지 확인합니다.
이 과정을 통해 smart contract 로직이 기본 데이터를 노출하지 않으면서 의도한 대로 정확히 실행되었음을 보장합니 다.
Midnight's Approach to ZKPs
Midnight은 zero-knowledge proof를 이론적 프라이버시뿐 아니라, 실제 컴플라이언스와 사용성을 위해서도 활용합니다. Midnight 네트워크에서 ZKP가 어떻게 나타나는지 몇 가지 핵심 요소를 살펴보겠습니다:
Confidential Transactions
사용자는 발신자, 수신자, 금액을 공개하지 않으면서 Midnight에서 자산을 전송할 수 있습니다. ZKP를 사용하여 transaction이 유효한지(이중 지출 없음, 잔액이 맞음) 특정 세부 사항을 드러내지 않고 증명합니다. 이를 통해 프라이버시와 무결성을 모두 보장합니다.
Selective Disclosure and Compliance
Midnight은 "차폐" 및 "비차폐" 데이터 모드를 지원합니다. Transaction 데이터를 기본적으로 비공개로 유지하되, ZKP나 viewing key를 통해 규제 기관, 감사인, 또는 기타 권한이 있는 당사자에게 특정 정보를 선택적으로 공개할 수 있습니다.
이를 통해 "국가 X의 시민임을 증명" 또는 "제재 대상이 아님을 증명" 같은 사용 사례가 가능해지며, 완전한 신원이나 지갑 이력을 공개할 필요가 없습니다.
Selective disclosure에 대한 더 자세한 내용은 제 개요 글을 여기에서 확인하세요!
Decentralized Identity
ZKP는 전체 자격 증명을 공개하지 않으면서 신원에 대한 사실을 증명하는 핵심 기술입니다. Midnight은 문서가 아닌 proof를 사용하여 KYC 상태("신뢰할 수 있는 제공자가 나를 검증했음")를 증명하는 워크플로를 지원합니다.
이를 통해 사용자는 거래소나 마켓플레이스처럼 신원 확인이 필요한 서비스와 민감한 개인 데이터를 노출하지 않으면서 상호작용할 수 있습니다.
Scalability via Recursive Proofs
ZKP는 또한 대규모 연산을 작은 proof로 압축합니다. 이는 transaction 배치 처리나 blockchain 부하를 줄이는 데 이상적입니다. Midnight의 재귀적 proof 활용으로 smart contract와 transaction이 기존 blockchain보다 더 효율적으로 확장될 수 있습니다.
Real-World Use Cases on Midnight
Midnight에서 ZKP로 구동되는 애플리케이션의 사례는 다음과 같습니다:
- 투표: 투표 자격이 있고 투표가 집계되었음을 신원이나 투표 내용을 공개하지 않으면서 증명합니다.
- 내부 고발: 보고서를 익명으로 제출하되, 권한이 있다는 것(예: 직원)만 증명합니다.
- Private Asset Swap: Midnight의 Zswap을 사용하여 조건이나 참여자를 공개하지 않으면서 기밀로 토큰을 교환합니다.
- KYC 온보딩: 문서를 노출하지 않으면서 플랫폼이나 DApp에 컴플라이언스 상태를 증명합니다.
- 토큰화된 실물 자산: 감사 가능한 전송 기록을 유지하면서 소유권을 비공개로 유지합니다.
이러한 사용 사례는 Midnight의 ZKP가 프라이버시를 이론적 약속이 아닌 실용적 기능으로 구현하는 방식을 보여줍니다. 기본적으로 안전하고, 컴플라이언스를 준수하며, 데이터를 보호하는 애플리케이션을 구축할 수 있는 기반이 됩니다.
Conclusion
Zero-knowledge proof는 trustless 시스템에 신뢰를 부여합니다. 법률 준수, 자산 소유권, 사용자 자격 등 민감한 세부 사항을 공개하지 않으면서 참임을 증명할 수 있습니다.
Midnight은 ZKP를 이론에 머무르지 않고 실제로 구현합니다. Smart contract 아키텍처, transaction 모델, 개발자 도구에 깊이 통합되어 있습니다. 지난주 글에서 다룬 Compact 언어와 결합하면 프라이버시 우선 DApp을 구축하기 위한 견고한 기반이 완성됩니다.
더 자세히 알고 싶다면 다음을 확인하세요:
ZKP에 대한 훌륭한 설명이나 튜토리얼을 발견하셨다면 공유해 주세요!
다음 주에도 Web3에서 프라이버시를 구동하는 핵심 아이디어를 계속 풀어나가겠습니다!
