출처: Vaish Puri @TheTieLabs
"내가 아는 것은 단 하나, 그것은 내가 아무것도 모른다는 것이다" - 소크라테스
최근에 L2 스케일링 솔루션에 대한 눈에 띄는 열광이 많이 있었습니다. 옵티미즘의 거버넌스 토큰 출시, ETH 메인넷의 가스비 인하 필요성, 연이은 해커톤에서 쏟아지는 새로운 아이디어 등으로 인해 2022년에는 L2가 본격화된다고 해도 무방합니다.
오늘 포스트에서는 지금까지 만들어진 가장 강력하지만 자주 오해받는 암호화 도구 중 하나인 영지식 증명에 대해 분석하겠습니다. 또한 향후 구현을 위한 사용 사례와 권장 사항을 강조하고 영지식 증명이 미래 암호화폐의 핵심인 이유를 보여줄 것입니다.
영지식 증명이 중요한 이유
간단히 말해서, 영지식 증명은 증명자가 어떤 정보도 실제로 공개하지 않고 무언가가 사실임을 검증자에게 확신시키는 방법입니다. 이를 비유로 설명하겠습니다. Alice와 Bob이라는 두 사람이 있다고 가정합니다. Alice는 52장의 카드로 된 봉인된 덱을 가지고 있습니다. Alice는 레드 카드를 몰래 가지고 밥에게 자신이 레드 카드를 가지고 있다는 것을 증명하려고 하지만 실제로는 보여주지 않습니다. 이를 위해 Alice는 더미에서 모든 검은색 카드를 분리하여 Bob에게 보여줘야 합니다. Bob은 26개의 검은색 카드를 모두 세고 카드의 존재를 확인하고 Alice가 소유한 카드가 빨간색이어야 한다고 결정합니다. 따라서 Alice는 실제로 그것을 보여주지 않고도 그녀가 레드 카드를 가지고 있다는 것을 Bob에게 증명할 수 있습니다. 이 은유는 매우 단순화되어 전체 그림을 그리지는 않지만 기술의 핵심 아이디어는 동일하게 유지됩니다.
영지식 증명은 지난 10년 또는 수천년 동안 새로운 것이 아닙니다. 사실, 이 아이디어는 1980년대에 추상 수학 연구자들이 처음 제안했습니다. 그 해결책은 증명자와 검증자 사이의 이론적 시스템과 관련된 당시의 문제인 대화형 증명을 해결하는 것이었습니다.
하지만 검증자가 악의적인 것으로 판명되면 어떻게 될까요? Prover는 진술의 진실성을 확인하는 것 외에 얼마나 많은 추가 정보를 공개했습니까? 암호 해시가 중앙 집중식 서버에 어떻게 저장되는지 살펴보겠습니다. 전통적으로 서버와 상호 작용할 때 서버는 암호를 일반 텍스트로 가져옵니다. 그것은 "신원 증명"을 수행하는 좋지 않은 방법이므로 연구원들은 외부 정보를 공개하지 않고 주장을 증명할 수 있는 시스템으로 전환했습니다.
더 구체적으로, 두 개의 입력 C(x,y)를 가진 함수 C가 있다고 가정합니다. x를 공개 입력으로, y를 비밀 증인으로 두고 함수의 출력을 참 또는 거짓으로 설정합니다. 특정 공개 입력 x가 주어지면 증명자는 C(x,y) == true인 비밀 증인 y를 알고 있음을 증명해야 합니다. 증명자의 관점에서 제로 지식을 달성하려면 무작위성이 필요합니다. 검증자 측에서는 증명자에게 쿼리를 생성하기 위해 임의성이 필요합니다. 널리 시연된 첫 번째 응용 프로그램은 NP에서 그래프의 3색 문제라고 하는 복잡한 클래스를 완성했습니다. 이 응용 프로그램은 NP 클래스의 모든 문제에 적용될 수 있기 때문에 이것은 엄청난 돌파구였습니다. 이것은 여러 목적에 도움이 될 수 있습니다.
블록체인 공간에는 확장성을 제공할 수 있는 능력과 개인 정보 보호 모델에서의 유용성으로 인해 많은 영지식 증명 구현이 있습니다. 특히 검증자는 영지식 증명 시스템이 없는 경우보다 계산 작업을 기하급수적으로 적게 수행합니다. 반면 증명자는 증명을 수행하기 위해 상당한 계산 오버헤드가 필요합니다. 이에 대해서는 나중에 자세히 다루겠습니다.
ZK 프로토콜
현재 수많은 zk 프로토콜이 존재하지만 이 게시물에서는 SNARK 및 STARK에 초점을 맞추고 이후 게시물에서 다른 프로토콜을 파헤칠 것입니다.
SNARK(Succinct Non-Interactive Argument of Knowledge)는 2011년에 처음 도입된 영지식 증명을 통합하는 인기 있는 증명 메커니즘입니다. 내부적으로 zk-SNARK는 보안을 위해 타원 곡선을 사용하고 신뢰할 수 있는 설정에 의존합니다. 처음에는 트랜잭션에 필요한 증명을 개발하고 해당 증명을 확인하기 위해 키가 생성됩니다. 이러한 키에는 개인 메시지를 보내기 위한 인증 키와 키를 연결하는 참조 문자열이 포함되어 있습니다. 이렇게 하려면 키 생성 방법을 제거하고 키 생성자를 신뢰해야 합니다(따라서 신뢰 설정이라는 이름). 생성 단계에서 이러한 신뢰에 대한 의존은 zk-SNARK에 대한 주요 비판으로 남아 있습니다. 또한 참조 문자열은 업그레이드할 수 없습니다. 즉, 프로그램을 업데이트해야 하는 경우 신뢰할 수 있는 설정 단계를 다시 실행해야 합니다.
그러나 실제로 zk-SNARK는 자체적으로 구현하기 어렵습니다. 계산에서 조사할 단계는 많지만 각 단계의 작업에 소요된 시간을 개별적으로 조사하는 것은 불가능합니다. 솔루션은 다항식의 형태로 제공됩니다. 계산을 다항식으로 코딩하면 많은 정보와 시간을 절약할 수 있습니다. 숫자 사이에 무한한 수의 방정식을 두는 대신, 숫자를 "대체"하는 다항식으로 바꿀 수 있습니다.
하지만 더 있습니다! 일반적으로 다항식은 각 계수를 확인하여 방정식을 확인하는 데 사용되지만 너무 오래 걸립니다. 여기서 다항식 약속이 작용합니다. 다항식 약정은 다항식을 "해시"하는 고유한 방법으로 생각할 수 있습니다. 이를 통해 다항식이 아무리 크더라도 짧은 시간 안에 검증할 수 있습니다. 또한 다항식 약속은 증명이 다항식 자체보다 훨씬 작기 때문에 본질적으로 프라이버시를 보호합니다. 임의성을 추가할 수 있지만 다항식 약속은 다항식에 대한 소량의 정보를 나타내지 않습니다.
다항식 약정은 방탄, KZG 및 FRI(Fast Reed-Solomon Interactive Oracle Proximity Proof of Proximity)의 세 가지 주요 프로토콜 중 하나를 사용합니다. 이들을 비교하고 대조하는 것은 이 기사의 범위를 벗어나는 것입니다. 각각 자체적으로 심층적인 연구가 필요하기 때문입니다.
2018년에 연구원 그룹이 zk 시스템에 투명성을 추가하려고 시도했습니다. 투명성은 초기 설정을 위해 신뢰할 수 있는 당사자에 의존할 필요가 없음을 의미하며 백도어를 여는 위협을 제거합니다. 이는 확장 가능한 투명한 지식 인수 또는 STARK의 생성으로 이어집니다. STARK는 SNARK에서 사용하는 쌍선형 구현과 다른 보안 소스로 해시 함수를 사용합니다. 확장성 측면은 다음 두 가지를 나타냅니다.
1. SNARK와 비교하여 증명자의 실행 시간이 훨씬 더 복잡합니다.
2. 검증 시간의 크기는 다중 로그입니다. STARK는 FRI를 사용하여 정보 저장 용량과 성능을 향상시킵니다.
현재 애플리케이션
Zcash와 같은 zk-SNARK 개척자가 한동안 존재했지만 zk-STARK의 생성은 폭발적으로 증가했습니다. zk 프로토콜에서의 작업은 롤업에 국한되지 않습니다. 실제로 일부 L1은 이미 zk 증명과 신진 게임 프로젝트 위에 구축되었습니다.
StarkWare는 zk-STARK의 선구자로서 무허가 분산형 zk 롤업인 StarkNet과 독립적인 zk 롤업 SaaS인 StarkEx라는 두 가지 핵심 제품을 개발하고 있습니다. 또한 StarkWare는 Cairo라는 생산 등급 zk 가상 머신(zkVM)을 개발했습니다. Cairo는 Turing-complete von Neumann 구조를 구현한다고 주장합니다. 각 프로그램은 처리하는 데이터와 함께 VM의 메모리에 상주합니다. 오늘날 누구나 카이로에 액세스할 수 있으며 현재 dydx, Immutable 및 DeversiFi와 같은 저명한 StarkEx 클라이언트에서 사용되고 있습니다. 자체 버전의 zkVM을 사용하는 다른 새로운 애플리케이션에는 일반 zkVM을 구축하려는 Polygon Miden 및 RiscZero가 포함됩니다.
zkVM 이데올로기의 반대는 zkEVM입니다. zkVM은 처음부터 zk에 최적화된 새로운 블록체인 VM으로 시작하거나 단순히 Solidity 도구 및 호환성에 맞게 조정되었습니다. 반면에 zkEVM은 완전한 EVM opcode 세트를 구현합니다. EVM opcode를 사용하면 다음과 같은 몇 가지 이점이 있습니다.
당연히 zkVM과 zkEVM 진영 사이에 큰 격차가 있는 것 같습니다.
zkVM에 비해 zkEVM의 가장 큰 장점은 EVM 동등성입니다. 낮은 가스비 인센티브와 개발자를 위한 손쉬운 개발 경험으로 기존의 대규모 dApp 커뮤니티를 대상으로 하는 것은 유익한 것으로 입증되었으며, 이는 zkEVM 빌더가 기대하고 있는 것입니다.
현재 가장 인기 있는 zkEVM 프로젝트는 검증 및 확장을 위한 레이어 2 솔루션으로 zk-SNARK를 사용하는 zkSync입니다. 또한 zkSync는 지분 증명(zkPorter)을 사용하여 zkSync 토큰 스테이커에 의해 보호되는 데이터 가용성을 오프체인으로 유지하도록 선택했습니다(에어드롭이 임박했음을 의미). 이 구현의 설계는 StarkWare에서 개발한 Volition이라는 솔루션을 기반으로 합니다.
마지막으로 상당히 새로운 플레이어인 Scroll은 범용 L2 zkEVM을 개발하고 있습니다. Scroll은 GPU 성능을 사용하여 오프체인에서 zk 증명을 생성하는 새로운 접근 방식을 취합니다. Poseidon 해싱, Plookup 및 PLONK와 같은 zk 증명의 최근 돌파구는 zkEVM을 현실로 만들기에 충분한 비용을 가져왔습니다. 또한 GPU 및 ASIC/FPGA 가속기의 발전으로 하드웨어 조건이 개선되고 비용이 더욱 절감됩니다. Scroll은 아직 개발 중이며 앞으로 몇 달 안에 zkEVM 테스트넷을 출시할 계획입니다.
미래의 응용 프로그램
Zk Proof는 원래 프라이버시를 유지하기 위해 개발되었습니다. 대중 매체는 "더 큰 TPS 허용"에 대한 현재 사용 사례에 초점을 맞출 수 있지만 zk Proof가 더 넓은 범위의 응용 프로그램을 가지고 있다는 사실은 여전히 남아 있습니다.
이러한 애플리케이션 중 하나는 zk-ID 도구로, zk 회로를 통해 지갑 또는 온체인 트랜잭션의 자산을 익명으로 확인하여 사용자의 신원을 확인합니다.
Zk ID는 매우 강력한 잠재력과 즉각적인 실제 사용 사례를 가지고 있습니다. 예를 들어, 내가 은행 정보와 활동을 비공개로 유지하면서 신용도를 증명하려는 채무자라고 가정해 보겠습니다. 나는 여러 신뢰할 수 있는 은행으로부터 거액의 대출금을 상환했음을 인증하지만 이러한 대출의 은행이나 사양을 공개하지 않을 것입니다.
미래의 zk-identity를 지원하는 4가지 주요 구성 요소
zk 공간의 또 다른 주요 발전은 zk-SNARK 증명자의 효율적인 개인 위임입니다. 앞서 언급했듯이 증명 시간은 다소 느립니다. SHA2를 사용하여 10kb를 해시하는 데 필요한 밀리초가 아니라 140초가 걸립니다. 이 문제에 대한 해결책은 증명을 아웃소싱하는 것입니다. 불행히도 이것은 또 다른 딜레마를 야기합니다. 비밀은 항상 드러납니다. 필요한 것: 아웃소싱된 개인 정보 보호 증명. 신중하게 구현하면 로컬 계산보다 최대 26배 빠르게 휴대폰과 같은 장치에 증명을 위임할 수 있습니다. 이 새로운 프레임워크는 2022년 4월 zkSummit에서 Pratyush Mishra가 처음 발표했습니다.
발문
우리는 애플리케이션 기반 zk 증명을 개발하는 초기 단계에 있습니다. 그래도 진행 속도는 빠르다. 캠프가 형성되고 의견이 정치화되면서 커뮤니티 간에는 여전히 많은 갈등이 있습니다. 시간만이 어느 쪽이 옳은지 알려줄 것입니다. 확실히, 역사가들이 되돌아보면 zk 구현의 이 기간을 암호 화폐의 장엄한 역사의 중요한 부분으로 볼 것입니다.