ZK 기반 자산 증명

이 기사는 기계로 번역되었습니다
원문 표시

Summa

암호화폐는 보통 중앙화된 거래소에서 사고 팔 수 있습니다. 중앙화된 거래소에서 거래하는 것은 매우 편리하고 빠르며, 비트코인 출시 이후 10년 동안 많은 중앙화된 거래소가 시장에 생겨나면서 사용자들이 암호화폐를 매우 편리하게 사고 팔 수 있게 되었습니다. 하지만 중앙화된 거래소의 붐과 함께 사기와 악의적인 자금 세탁도 일반화되었습니다. Nifty는 이를 위해 거래소의 갑작스러운 붕괴와 설립자의 의문의 죽음을 다룬 특별 홍보 영상인 '아무도 믿지 마세요, 가상 화폐 서스펜스 [1] '를 제작했습니다. 특히 2022년 FTX는 파산으로 파산을 선언해 전 세계에 충격을 주었고, 많은 사용자와 펀드 회사가 막대한 손실을 입었습니다.

사실 암호화폐 분야뿐만 아니라 다른 전통적인 분야에서도 회계를 통해 투자자를 속이는 사기 행위는 그 수를 헤아리기 어렵습니다. 21세기 초 전 세계를 뒤흔든 엔론 스캔들을 예로 들 수 있습니다. 엔론은 포춘지에서 6년 연속 '미국에서 가장 혁신적인 기업'으로 선정되었지만, 2002년 수천억 달러의 자산을 보유한 회사가 불과 몇 주 만에 파산했습니다. 또 다른 예로 에버그란데는 건물 건설에 배정된 자금을 다른 용도로 전용하여 결국 수많은 주택 소유주가 30년 모기지를 안고 썩어가는 집을 기다리는 결과를 초래했습니다.

다양한 분야에서 사기가 확산되는 주된 이유 중 하나는 감사 및 회계가 완전히 투명하지 않아서 부패와 부정행위가 발생할 여지가 많기 때문입니다. 하지만 기업의 이익과 투자자의 프라이버시를 보호하기 위해 주요 재무 데이터는 완전히 공개되고 투명할 수 없기 때문에 규제를 강화하는 것 외에 금융 사기에 대한 대응은 좋은 해결책이 아니었지만, 기술이 점차 성숙해지면서 영지식 증명은 문제를 해결할 수 있는 새로운 방법을 제시할 수 있습니다.

각 사용자가 자산의 금융 사기 여부를 스스로 검증할 수 있다면, 사용자 검증만 충분하다면 금융 사기를 하려는 조직은 매우 어려워질 것입니다. 그리고 검증 프로세스가 영 지식이기 때문에 네트워크 전송 프로세스의 검증 데이터는 제 3자가 데이터를 가로 채더라도 결국 사용자의 실제 자산을 알지 못하므로 검증 프로세스가 네트워크에 완전히 공개적으로 표시 될 수 있습니다. 영지식 증명 기술의 도움으로 더 이상 빅4 회계법인과 같은 특정 기관의 전유물이 아닌 상당수의 감사가 비공개로 비밀리에 진행됩니다. 오히려 모든 이해관계자가 참여할 수 있는 공개적인 프로세스가 되었습니다.

Summa [2]는 zk 접근 방식을 사용하여 사용자 자산 검증을 진행하는 것을 목표로 하는 PSE 연구 프로젝트입니다. 이 백서의 나머지 부분에서는 프로젝트의 개요와 기술적 구현 원칙에 대해 설명합니다.

계약

Summa의 전체 데이터 흐름은 그림에 나와 있습니다. 스마트 컨트랙트는 주로 일부 공개 데이터를 저장하고 검증하는 데 사용됩니다. 반드시 이더리움에만 묶여 있는 것은 아니며, 향후 솔라나와 같은 다른 블록체인에도 배포될 수 있습니다(해당 블록체인에서 Halo2를 지원하고, 이 프로젝트의 일부 컨트랙트는 Halo2 증명에 의해 생성됩니다 [3]).

그림에서 커스터디언은 중앙화된 거래소를 나타냅니다. 계약은 거래소에 의해 체인에 배포되고, 계약 소유권은 거래소가 소유하며, 공개 데이터는 거래소에 의해서만 제출될 수 있습니다. 공개 데이터는 두 부분으로 구성되며, 하나는 거래소가 관리하는 체인의 기본 정보와 디지털 서명 등입니다.

iyyfWjPfKHJcL4s5INyo9G0jgJFAuDccDsxwBwlt.png

두 번째 부분은 머클 합 트리의 루트 해시와 루트 잔액(체인에 있는 자산의 수, 예: BTC 수)을 포함한 체인 내 자산 정보로, 이는 zk 증명 인스턴스의 입력으로 사용됩니다.

c1miZfFRIOB4Zp7L2i8dFvh6PxtgW5UasNEstxAp.png

데이터의 두 부분은 모두 체인에서 공개적으로 쉽게 접근할 수 있습니다(루트 해시 제외). 거래소가 이 데이터를 속이는 것은 매우 어렵습니다. 누구나 컨트랙트에 저장된 데이터와 블록체인 주소에 있는 실제 데이터의 결과를 비교할 수 있습니다.

증명 생성은 현재 거래소에서 생성하며, 사용자는 검증을 위해 거래소에 주요 정보를 제출하고 거래소는 증명을 생성하여 사용자에게 반환합니다. 사용자는 이 증명을 가지고 스마트 컨트랙트에 요청하면 스마트 컨트랙트가 증명을 검증합니다.

마지막으로, 증명 검증은 사용자와 컨트랙트 간의 직접적인 상호작용입니다. 계약의 이 부분은 Halo2 회로에 의해 솔리디티 코드로 변환된 다음 별도의 검증 계약으로 체인에 배포됩니다.

YQRmpm6qKGHWDiLdIOEBtmbeJ4ZFXJcAmiFTJbjO.png

실제로는 증명이 전달되어 체인에서 계산되고 검증될 수 있습니다.

9YydLp45uvMaNmjb7zXfbsRIVUtfr2o1WghjXsqZ.png

아래 코드 예시는 실제 해시 연산에 사용되는 함수를 보여줍니다. 보시다시피 전체 해시 계산 자체는 비트 연산이 아닌 덧셈과 곱셈만 사용하며, zk 친화적입니다.

xOCfOLIEsYSELqHknDGVfOwN13VaMafEvo6lyY1L.png

zk 데이터 계산과 기존 절차적 계산의 차이점은 zk 데이터는 유한한 영역에서 계산되며, 머클 트리를 구성할 때 각 노드의 데이터가 유한한 영역을 초과하지 않도록 해야 하기 때문에 계산 전에 데이터에 대해 범위 검사를 수행하여 나중에 데이터가 오버플로되지 않도록 해야 한다는 점입니다.

범위 검사의 원리는 다음 예시와 유사합니다. 먼저 입력 데이터를 8비트 길이 단위로 잘라내어 향후 뺄셈 연산에 편리하도록 합니다. 그런 다음 다음 값을 계산할 때마다 아래 예제의 단계를 따릅니다. 범위 검사 회로는 실제로 중간 결과 diff = z_cur - z_next * Expression::Constant(Fp::from(1 << 8)) 에 의해 제약을 받습니다. diff가 8비트 값 이내여야 합니다. 이런 식으로 32비트 데이터 제약 조건의 경우 4개의 계산 셀과 256개의 룩업 테이블만 차지하면 되고, 가장 높은 비트가 0인 인스턴스 제약 조건을 사용할 수 있습니다. 이런 식으로 설계되지 않은 경우 단순히 32 비트 값의 범위 검사를 수행하고 조회 테이블의 크기가 필요하며 이러한 회로가 너무 커서 실제로 적용 할 수 없음이 분명합니다.

bY8TLJjsgoNu89Sjca3AyBqdgSJ6N58gtlqJlBht.png

이러한 보조 구조를 사용하면 공식적으로 머클 합 트리를 구성할 수 있는데, 각 사용자 입력을 엔트리라고 하며 그 구조는 다음과 같습니다:

o9aIgUzysC7YzXzGdrQMzeLtyyaHKXEsXhOK6Lab.png

해시 계산의 머클 트리 중간 노드는 H(LeftChild.balance[0] + RightChild.balance[0], LeftChild.balance[1] + RightChild.balance[1], ... , LeftChild.balance[N_CURRENCIES - 1] + RightChild.balance[N_CURRENCIES - 1], LeftChild.hash, RightChild.hash) 이므로 계산할 vec 배열의 실제 길이는 N_CURRENCIES+ 2.

이제 전체 머클 트리를 구축했는데, 리프 노드 부분은 비교적 간단하며, 엔트리를 노드로 변환하기만 하면 됩니다. 중간 노드는 계층별로 구성해야 하며, 각 중간 노드의 값은 다음 계층의 왼쪽 및 오른쪽 하위 트리의 값과 관련이 있습니다. 마지막으로 계산된 중간 노드를 트리 배열에 넣습니다:

YMAQ8kTVGgDriOT3kbwxjzW8vqynweadGShXKBSS.png

다음으로, 머클 트리를 사용하여 zk 증명을 구축합니다. zk는 사용자의 항목이 실제로 머클 트리에 있다는 것을 증명합니다. 따라서 먼저 특정 항목의 색인을 생성하고 머클 트리에서 zk 증명에 필요한 데이터 구조를 생성해야 합니다.

XV0YjYQ4algxTjfbj5wR4O0rnfWXETv6nRUnQwtd.png

0과 1을 설정하여 전체 방정식을 0으로 만드는 제약 효과를 영리하게 얻을 수 있습니다.

oRyRD1H8D48iZx6fNgqte3C4aAV4ePLYIexfumrv.png

머클 트리 zk 제약 조건은 크게 두 부분으로 나뉘는데, 하나는 교환 제약 조건으로 증명 생성 시 교환이 실제로 위 그림의 실제 순서에 따르도록 보장합니다. 다른 부분은 잔액 제약, 즉 부모 노드의 잔액이 실제로 왼쪽 자식 노드와 오른쪽 자식 노드의 합에서 나오도록 하는 것입니다. 잔액에 대한 합 제약 조건은 비교적 간단하지만 여기서는 스왑 제약 조건에 중점을 둡니다.

앞서 소개한 Merkle zk 트리 데이터 구조인 sibling_middle_node_hash_preimages는 배열이며 위치 정보를 포함하지 않습니다. 그림에서 점선 상자의 위치가 트리의 왼쪽에 있는지 오른쪽에 있는지는 경로_인덱스의 0과 1에 의해 결정됩니다. 따라서 값이 0이면 생성하는 부모가 왼쪽에 있고 같은 레벨의 해당 형제자매가 오른쪽에 있으며, 값이 1이면 그 반대가 되는지 확인해야 합니다. 이 로직은 데이터를 zk 회로로 가져올 때 코드에서 쉽게 구현할 수 있습니다:

MCeVGEFrHhW61H6gMBDBOQm5BY2CexGTUdIZLfxB.png

머클 합 트리 zk 증명의 전체 과정은 데이터를 레이어별로 처리한 다음 해당 위치 데이터를 zk 제약 회로에 입력해 확인하는 것입니다. 최종 출력은 루트 노드 해시와 총 잔액이며, 이는 컨트랙트의 해당 데이터와 일치해야 하며 인스턴스를 사용하여 일관성을 검증합니다. 모든 검증이 정상이라면 전체 머클 트리에 대한 증명이 완료된 것입니다.

지급 능력 검증

증명을 생성하는 과정은 사용자가 거래소에 요청하고, 거래소가 증명 데이터를 반환한 다음, 사용자가 스마트 컨트랙트를 검증하는 순서로 진행됩니다. 현재 프로젝트는 거래소를 우회하는 사용자의 증명 생성을 지원하지 않지만, 향후 검토할 방향이 될 수 있습니다. 거래소가 증명을 반환하는 것이 아니라 사용자가 직접 증명을 생성하는 것입니다. 전체 halo2 증명 회로는 러스트를 사용하여 웹 어셈블리로 패키징할 수 있으며, 해당 대화형 API는 에테르 rs [7] 를 사용하여 만들 수 있습니다. 머클 트리 루트 검증의 시간 복잡도는 로그(n)이므로 사용자 기기에서 검증을 수행하는 데 많은 시간이 걸리지 않아 탈중앙화의 보안이 더욱 강화될 수 있습니다.

참고 문헌

[1]

아무도 믿지 마세요, 가상 화폐 숙취: https://www.netflix.com/hk/title/81349029

[2]

서마: https://github.com/summa-dev

[3]

헤일로2 생성 증명: https://github.com/privacy-scaling-explorations/halo2-solidity-verifier

[4]

포세이돈 해시: https://github.com/ingonyama-zk/poseidon-hash

[5]

파라미터 준비 단계 및 해시 연산 단계: https://autoparallel.github.io/overview/index.html

[6]

선형 피드백 시프트 레지스터: https://en.wikipedia.org/wiki/Linear-feedback_shift_register

[7]

에테르 RS: https://github.com/gakonst/ethers-rs

추천 자료

ZK 인사이트 시리즈

zkp 스터디 노트

웬 빌딩 팟캐스트

연구 및 분석 시리즈

유니스왑 시리즈

Antalpha Labs는 오픈 소스 소프트웨어의 출시와 지원을 통해 웹3 기술의 혁신과 채택을 촉진하는 데 전념하는 비영리 웹3 개발자 커뮤니티입니다.

공식 웹사이트: https: //labs.antalpha.com

트위터: https: //twitter.com/Antalpha_Labs

유튜브: https: //www.youtube.com/channel/UCNFowsoGM9OI2NcEP2EFgrw

문의: hello.labs@antalpha.com

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트