TON에서 간단한 ZK 프로젝트 만들기
👋 소개
Zero-knowledge (ZK) 증명은 한 당사자(증명자)가 다른 당사자(검증자)에게 진술의 유효성 이외의 어떤 정보도 공개하지 않고 진술이 참임을 증명할 수 있게 하는 기본적인 암호화 기법입니다. 제로 지식 증명은 프라이버시를 보호하는 시스템을 구축하는 강력한 도구이며 익명 결제, 익명 메시징 시스템, 그리고 무신뢰 브릿지 등 다양한 애플리케이션에서 사용되고 있습니다.
2023년 6월 이전에는 TON에서 암호화 증명을 검증하는 것이 불가능했습니다. 페어링 알고리즘 뒤의 복잡한 계산 때문에 증명 검증을 수행하기 위해 TVM 옵코드를 추가하여 TVM의 기능을 향상시킬 필요가 있었습니다. 이 기능은 2023년 6월 업데이트에서 추가되었으며 현재는 테스트넷에서만 사용할 수 있습니다.
🦄 이 튜토리얼에서 다룰 내용
- 제로 지식 암호화의 기초와 특히 zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)
- 신뢰할 수 있는 설정 세리머니 시작하기 (Powers of Tau 사용)
- 간단한 ZK 회로 작성 및 컴파일하기 (Circom 언어 사용)
- 샘플 ZK-증명을 검증하기 위한 FunC 컨트랙트 생성, 배포 및 테스트
🟥🟦 색상 중심의 예시로 ZK-증명 설명하기
제로 지 식의 세부사항을 파고들기 전에, 간단한 문제부터 시작해보겠습니다. 색맹인 사람에게 서로 다른 색상을 구별할 수 있다는 것을 증명하고 싶다고 가정해봅시다. 이 문제를 해결하기 위해 대화형 솔루션을 사용하겠습니다. 색맹인 사람(검증자)이 똑같은 종이 두 장을 찾았는데, 하나는 빨간색 🟥이고 하나는 파란색 🟦이라고 가정해봅시다.
검증자는 당신(증명자)에게 종이 한 장을 보여주고 그 색상을 기억하라고 합니다. 그런 다음 검증자는 그 특정 종이를 등 뒤에 숨기고 그대로 두거나 바꾼 다음 색상이 바뀌었는지 아닌지 물어봅니다. 색상 차이를 구별할 수 있다면, 당신은 색상을 볼 수 있다는 것을 증명한 것입니다(또는 50%의 확률로 맞출 수 있었기 때문에 그저 운이 좋았을 수도 있습니다).
이제 검증자가 이 과정을 10번 반복하고 매번 차이를 구별할 수 있다면, 검증자는 ~99.90234% (1 - (1/2)^10)의 확신을 갖게 됩니다. 따라서 검증자가 30번 반복한다면, 99.99999990686774% (1 - (1/2)^30)의 확신을 갖게 됩니다.
그럼에도 불구하고, 이는 대화형 솔루션이며 특정 데이터를 증명하기 위해 사용자가 30개의 트랜잭션을 보내야 하는 DApp을 가지는 것은 효율적이지 않습니다. 따라서 비대화형 솔루션이 필요합니다. 여기서 Zk-SNARKs와 Zk-STARKs가 등장합니다.
이 튜토리얼에서는 Zk-SNARKs만 다룰 것입니다. 하지만 Zk-STARKs가 어떻게 작동하는지는 StarkWare 웹사이트에서 읽을 수 있으며, Zk-SNARKs와 Zk-STARKs의 차이점에 대한 정보는 이 Panther Protocol 블로그 포스트