이 문서의 해시(SHA1): 6ec9df3960804ae5e6b0bee29289da35f3abc356
번호: LianYuan 보안 지식 No.133
영지식 증명 기술은 많은 레이어 1 블록체인 프로젝트의 확장성 및 개인 정보 보호 문제를 해결할 수 있는 암호화 분야입니다. 블록체인은 영지식 증명 기술을 사용하여 거래 처리량을 향상시키고, 사용자 데이터 프라이버시를 보호하면서 사용자 신원을 확인하고, 복잡한 계산을 가능하게 하며, 기업이 지적 재산권을 보호하면서 블록체인 기술을 활용할 수 있도록 해줍니다. 위의 모든 응용 시나리오에서 영지식 증명은 필수적인 핵심 기술입니다.
현재 보안, 예측 가능성, 상호 운용성, 자율 경제 등 프로그래밍 가능한 블록체인이 제공하는 모든 유틸리티 중에서 가장 널리 사용되는 블록체인은 개인 정보 보호를 제공하지 않으며 이것이 여전히 블록체인이 사용되는 주요 장벽입니다. 널리 채택됩니다. 따라서 점점 더 많은 사람들이 체인의 개인 정보 보호와 보안에 더 많은 관심을 기울이게 되며 개인 정보 보호 지불이 탄생했습니다.
기본 지식
영지식 증명은 두 가지 유형의 인수 체계로 나뉩니다.
- 대화형 논쟁 계획
- 비대화형 인수 구성표
- 대화형 ZKP
대화형 영지식 증명(IZKP)에서는 증명자와 검증자가 검증자의 쿼리에 응답하는 앞뒤 대화에 참여해야 합니다. 이러한 상호 작용은 직접 또는 인터넷과 같은 네트워크를 통해 발생할 수 있습니다. 검증자가 증명된 것 이상의 진술에 대한 추가 정보를 요청할 수 있도록 검증자와 여러 차례의 상호 작용이 필요합니다. 각 라운드에서 증명자는 검증자의 쿼리를 기반으로 답변을 제공해야 합니다.
IZKP에는 증명자와 검증자 간의 상호 작용이 필요하므로 이는 비효율적이고 시간 소모적일 수 있습니다. 증명을 완료하려면 증명자는 검증자에게 여러 메시지를 주고 받아야 합니다. 특히 증명이 복잡하거나 많은 양의 데이터가 포함된 경우에는 시간이 많이 걸릴 수 있습니다. 이는 초단타 거래나 실시간 의사 결정과 같이 속도가 중요한 경우 문제가 될 수 있습니다.
구체적인 구현 계획은 zk-starks입니다. STARK를 사용하면 블록체인이 계산을 오프체인 STARK 증명자로 전송한 다음 온체인 STARK 검증기를 사용하여 이러한 계산의 무결성을 확인할 수 있습니다. 레이어 2 네트워크는 STARK를 사용하여 단일 배치로 많은 수의 트랜잭션을 계산한 다음 단일 STARK 증명을 사용하여 온체인 트랜잭션의 유효성을 확인함으로써 확장성을 달성할 수 있습니다. 일괄 처리되는 모든 트랜잭션은 온체인 운영 비용을 공유하므로 레이어 2 네트워크의 모든 트랜잭션에 대해 낮은 가스 비용을 제공합니다.
중요한 것은 검증인이 사용하는 무작위성이 공개적으로 사용 가능하고 외부 매개변수에 의존하지 않고 증명을 확인할 수 있기 때문에 STARK에는 신뢰할 수 있는 설정 의식이 필요하지 않다는 것입니다.
StarkNet, dydx 및 Polygon Miden은 모두 zk-starks의 zk-rollup 솔루션을 사용합니다.
비대화형 ZKP
NIZKP(비대화형 영지식 증명)에는 증명자와 검증자 간의 상호 작용이 필요하지 않습니다. 비대화형 영지식 증명은 증명자가 증명을 한 번 생성하여 여러 차례의 상호 작용 없이 검증자에게 보낼 수 있음을 의미합니다.
구체적인 구현은 zk-snarks입니다. SNARK는 몇 밀리초 내에 확인할 수 있기 때문에 더 효율적이고 빠릅니다. 그러나 SNARK가 의존하는 일부 신뢰할 수 있는 설정 의식에는 보안 취약성이 있기 때문에 이러한 효율성에는 비용이 듭니다. 즉, 증명에 사용되는 초기 매개변수는 안전한 환경에서 생성되어야 하며, 매개변수가 유출되면 보안 취약점이 발생할 수 있습니다.
zkSync와 zcash는 모두 zk-snark의 zk-rollup 솔루션을 사용합니다.
개인정보 거래 개념
개인 거래의 개념을 이해하려면 거래 주체와 거래 내용을 모두 고려하고 익명과 숨겨진 두 가지 개인 정보 보호 유형을 구별해야 합니다.
일반 거래에는 다음 요소가 포함됩니다.
- 거래 주체: 거래의 송신자(Trader A)와 수신자(Trader B)를 포함합니다.
- 거래 세부정보: 거래 금액, 하위 거래 수, 거래 해시 및 기타 특정 세부정보를 포함합니다.
개인정보 거래는 제3자에 대한 정보 가시성 정도에 따라 두 가지 범주로 나눌 수 있습니다.
- 익명 거래: 익명 거래에서는 거래의 보낸 사람과 받는 사람의 주소가 제3자에게 알려지지 않습니다. 이는 거래 프로세스 중에 거래에 관련된 두 엔터티를 제외하고 다른 사람들이 거래의 특정 참가자를 결정할 수 없음을 의미합니다. 예를 들어 Tornado Cash는 거래 경로를 난독화하여 익명성을 달성하는 개인 정보 보호 프로토콜입니다.
- 히든 거래(Hidden transaction): 히든 거래에서는 거래의 송신자와 수신자의 주소가 표시되지만 거래의 구체적인 내용은 알 수 없습니다. 이는 거래 금액, 하위 거래 수, 거래 해시 등과 같은 세부 정보가 제3자에게 숨겨져 있음을 의미합니다. 이러한 개인정보 보호는 영지식 증명과 같은 기술을 사용하여 달성될 수 있습니다. 예를 들어, Zcash는 zk-SNARK 기술을 사용하여 거래 세부 정보를 숨기는 개인 정보 보호 암호화폐입니다.
기존 개인정보 결제 솔루션
체인에서 zk에 적용되는 블록체인 솔루션은 크게 여러 가지 유형으로 나눌 수 있는데, 하나는 Layer 2 솔루션으로서의 롤업, 즉 zk-rollup과 비교하면 7일의 챌린지 기간이 필요하지 않습니다. 데이터는 더욱 신뢰할 수 있고 안전합니다. 그러나 프라이버시가 없으며 zkSync 및 스크롤과 같은 중간 계층에 직접 배포할 수 있습니다. zk를 직접 이해할 필요는 없습니다. 이 솔루션은 주로 zk의 증명 이론을 사용하여 데이터의 정확성을 확인하지 않습니다. 개인정보 보호를 위해.
Zcash 및 MantaPay의 개인정보 자산 플랫폼 L1과 같이 개인정보 보호가 필요한 거래를 구체적으로 처리하기 위해 별도의 체인으로 사용되는 플랫폼입니다. 개인정보 자산과 상호 작용하려면 ZK 프로그래밍을 직접 수행해야 할 수도 있습니다. 개발자에게는 매우 흥미로운 일입니다.
마지막 솔루션은 레이어 2이지만 체인에서 zk-aluvm 확인 방법을 사용할 수도 있고, 오프체인 노드에서 zk 확인을 위해 프라이빗 결제 방법을 사용할 수도 있으며, 현재는 프라이빗 결제 기능도 도입할 수 있습니다. 비교적 대중적인 방식이지만, 실제 개발에서는 기술이나 정책에 가장 큰 영향을 받는 방식이기도 하다.
이 글은 zkp 블록체인을 기반으로 한 개인정보 결제 솔루션에 중점을 둘 것입니다.
지캐시
ZCash의 거래 모델은 기본적으로 비트코인과 동일하지만 UTXO가 ZCash의 기본 거래 단위인 메모로 대체됩니다. 이는 거래 약속의 일반 텍스트로 이해될 수도 있습니다. note=(PK, v, r, rho), PK는 공개 키(Public Key), v는 금액(Value), r은 일련번호(Random Serial Number)입니다. rho는 각 노트의 고유 식별자입니다. 노트가 소비되면 이 값은 nullifier 테이블에 배치됩니다. 즉, 동일한 노트가 다시 소비되면 이중 지출 오류가 발생합니다. . 즉, 거래 이중 지출 보호 메커니즘입니다.
ZCash에는 약정과 무효화라는 두 가지 테이블이 있습니다. 개인 정보 보호 요구 사항으로 인해 노트를 공개할 수 없으므로 해당 약정을 계산해야 합니다. 계산 방법은 다음과 같습니다.
Commitment는 금액의 이전을 나타내고 Nullifier는 소비를 나타냅니다. Commitment와 Nullifier는 모두 Note에 고유합니다. Commitment와 Nullifier는 Hash의 결과이기 때문에 이 두 데이터가 공개되더라도 다른 사람들은 Commitment와 Nullifier 사이에 연관성이 있다고 유추할 수 없습니다. 즉, 약정을 제공하면 이전이 이루어졌음을 나타낼 수 있습니다(특정 정보는 다른 사람에게 알려지지 않음). 해당 Nullifier를 제공할 수 있으면 소비할 수 있습니다.
개인 전송 플랫폼으로서 모든 약속(cm)은 머클 트리로 구성됩니다.
특정 cm을 소비해야 하는 사용자는 블록체인에 영지식 증명을 제공해야 합니다.
1/ 그는 Note를 알고 cm를 생성할 수 있으며, 이 cm는 rt를 루트로 하는 Merkle 트리에 있습니다.
2/ 동일한 Note 정보를 이용하여 nullfier를 생성할 수 있는데, 이 nullfier는 이전에 생성된 적이 없습니다.
위의 내용은 Zcash 영지식 증명의 일반적인 아이디어를 가장 간단하게 요약한 것입니다. ZCash의 디자인은 매우 복잡하고 엄격하며 많은 세부 사항이 있습니다.
현재 버전의 zcash는 Sprout와 Sapling에 의해 두 번 업그레이드되었으며 원래 모델과 많이 변경되었습니다. 현재 zcash 모델은 기본 토큰 ZEC 간의 개인 거래만 지원한다는 점에서 매우 치명적인 문제를 가지고 있습니다. ERC20 등의 토큰을 지원합니다. 이를 사용할 때 사용자는 거래소에서 ZEC를 구매하고 Zcash 체인에 배치하며 ZEC와 거래하여 개인 거래 목적을 달성할 수만 있습니다. 게다가, zkcash는 프로토콜 수준에서 최초의 개인 결제 선구자입니다. 너무 많은 복잡한 사항을 통합하지 않아 단일 기능과 낮은 TPS 및 기타 역사적 문제가 발생합니다.
토네이도캐시
TornadoCash는 zcash의 단일 통화 문제를 해결하기 위해 주로 zkp 기반의 코인 믹서 프로토콜을 사용합니다. TornadoCash는 주로 이더리움 체인의 스마트 계약에 의존하여 유용성을 완전히 확장합니다.
Tornado 구현 경로는 다음과 같습니다. TornadoCash는 영수증(약정)을 사용하여 액세스 권한을 제어합니다. 영수증은 secret과 nullifier를 함께 해싱하여 생성되며, commit = hash(secret, nullifier)로 사용자는 혼합할 금액(예: 1 ETH)과 Commitment를 TornadoCash 계약의 입금 기능으로 보냅니다. TornadoCash 계약은 이 두 데이터를 저장하며, 약속은 예치된 자금을 인출하는 데 사용됩니다.
각 약정은 한 번만 철회할 수 있습니다. 머클 트리를 사용하여 예금 정보를 기록하고 커밋을 리프 노드로 사용하고 머클 루트를 계산합니다. 사용자는 데이터가 머클 트리의 잎 중 하나인지 여부를 증명하기 위해 리프에서 루트까지 데이터를 제공하기만 하면 되며, 이전에 TornadoCash에 자금이 입금되었음을 간접적으로 증명하기만 하면 됩니다.
돈을 인출할 때 사용자는 zk-snark 체계를 활용하여 비밀 및 무효화자가 있다는 증거를 제출해야 합니다. TornadoCash 스마트 계약은 이 증거를 확인한 다음 입금액을 지정된 출금 주소로 이체합니다. 외부 관찰자의 경우 인출이 어느 예금에서 발생했는지 알 수 있는 방법이 없습니다. 또한 Double Withdrawal 공격을 방지하려면 nullifier를 사용하세요.
Tornado Cash의 핵심은 사용자가 Ethereum에서 개인 거래를 수행할 수 있게 해주는 스마트 계약입니다. 사용자가 사용하면 계약은 지원되는 두 가지 작업인 "예금" 또는 "인출" 중 하나를 자동으로 수행합니다. 이러한 작업을 통해 사용자는 한 주소에서 코인을 입금한 다음 동일한 코인을 다른 주소로 출금할 수 있습니다. 결정적으로, 이러한 입출금 이벤트가 이더리움의 투명한 원장에서 공개적으로 발생하더라도 입출금 주소 간의 공개 링크가 끊어집니다. 사용자는 전체 금융 내역이 제3자에게 노출될 염려 없이 자금을 인출하고 사용할 수 있습니다.
만타페이
MantaPay는 처음 두 프로토콜의 장점을 결합하고 Polkadot 체인을 기반으로 하는 ZK L1 체인을 독립적으로 개발합니다. zkSBT를 통해 MantaPay는 개인 결제 문제와 번영하는 생태 문제를 성공적으로 해결합니다.
MantaPay는 ZK 기술을 사용하여 개인 송금을 실현합니다. 사용자는 Manta Signer를 사용하여 트랜잭션을 시작할 때 전송 요청을 제출하고 증명자(Prover) 역할을 하여 ZK 인증서를 생성합니다. 검증자로서 노드는 전송 정보를 얻지 않고도 사용자의 트랜잭션이 사실인지 확인할 수 있습니다.
Manta는 UTXO 방식을 사용하여 거래를 검증합니다. Manta UTXO에는 실제로 "두 개의 트리"가 있습니다. 모든 토큰은 첫 번째 트리에 있고 두 번째 트리는 사용자가 소비한 UTXO를 기록합니다. 거래 시 해당 거래에는 ZK 증명이 수반되어 두 번째 트리에 해당 상태가 존재하지 않음을 증명합니다. ZK 증명은 위조나 변조가 불가능하므로 노드는 증명이 유효한 한 거래가 유효한지 확인합니다.
Manta의 ZKEvm은 ZK-SNARK 기술을 사용하여 이더리움과 같은 거래에 대한 암호화 실행 증명을 생성하는 기술입니다. 이러한 증명은 거래를 확인하는 데 필요한 계산 부하를 줄이거나 효율적이고 확장 가능한 ZK 롤업을 구축함으로써 이더리움 블록체인의 확장성을 높이는 데 사용될 수 있습니다.
현재 Manta는 ZKEvm에 대해 더 나은 지원을 제공하지 않습니다. 개발이 어려울 수도 있고 규제의 영향을 받을 수도 있지만 매우 미래 지향적인 솔루션이라고 할 수 있습니다.
ZKP 온체인 솔루션 컨셉
위 내용은 기존의 여러 개인정보 보호 결제 솔루션에 대해 설명합니다. 앞으로 더 높은 TPS와 더 나은 생태학적 지원이 확실히 주류 솔루션이 될 것입니다. 이를 바탕으로 우리는 몇 가지 아이디어를 제시했습니다.
ZK-AluVM
AluVM - (Algorithmic Logic Unit VM)은 결정론적 휴대용 컴퓨팅 작업을 위해 설계된 순수 기능 RISC 가상 머신입니다. Pandora Core AG의 Maxim Orlovsky 박사가 설계하고 구현했으며 LNP/BP 표준 협회에서 유지 관리했습니다.
AluVM은 무작위 메모리 액세스가 필요하지 않고 타원 곡선 연산을 포함한 산술 연산을 수행할 수 있는 순전히 기능적인 레지스터 기반의 매우 결정적이고 예외 없는 명령어 세트 아키텍처(ISA) 및 가상 머신(VM)입니다. 가상 머신이 실행되는 환경(호스트 환경)은 AluVM ISA를 확장하여 VM 레지스터에 데이터를 로드하고 애플리케이션별 명령어(예: SIMD)를 지원할 수 있습니다.
ALuVM의 주요 용도는 견고성, 플랫폼 독립적 결정성이 계산 속도보다 더 중요한 분산 시스템에 대한 것입니다. AluVM(적절한 ISA 확장 사용)의 주요 적용 영역은 블록체인 환경, 합의 중심 컴퓨팅, 엣지 컴퓨팅, 다자간 컴퓨팅(결정론적 기계 학습 포함), 클라이언트 인증, 샌드박스 Internet2 컴퓨팅 및 유전자 알고리즘입니다.
블록체인에서 ZK-AluVM을 사용하여 트랜잭션을 처리하고 상태 트리를 업데이트하며 동시에 증명을 생성합니다. 구현 계획은 Mina를 기반으로 하여 보다 심층적인 연구를 수행할 수 있습니다.
ZK-AluVM을 기반으로 몇 가지 확장 계획을 구상했습니다.
비트코인 확장 계획
오프체인 부분: ZK-AluVM은 로컬에서 거래 및 증명 생성을 수행하지만, 거래 정보의 전송을 중앙 운영자에게 맡깁니다. 이 작업에서 거래 인식자는 양자 간 거래이자 중앙 운영자입니다. Nostr과 같은 프로토콜을 사용하여 중앙 집중화를 줄일 수 있습니다.
온체인 부분: 온체인 검증을 사용합니다. 온체인 검증을 위한 롤업은 선택 사항입니다. 동일한 씰을 사용하여 가스를 절약하기 위해 여러 트랜잭션 롤업을 캡슐화합니다. 여기에서 BTC를 라이트닝 네트워크로 변경하여 매우 높은 TPS를 달성할 수 있습니다.
Ethereum 레이어2 솔루션 프레임워크의 개략도
오프체인 부분: 거래 및 증명 생성을 위해 ZK-AluVM을 사용합니다. 여기에서 중앙 집중식 서비스를 선택하거나 클라이언트가 P2P 전송을 위해 자체적으로 운영할 수 있습니다.
온체인 부분: 먼저 클라이언트는 트랜잭션을 Layer2 노드로 보내고 이를 정렬한 후 Calldata에 씁니다. 실행 계층은 Ethereum에서 데이터를 읽고 트랜잭션을 처리합니다. 여기서 UTXO 기반의 일회성 캡슐화 솔루션은 계약 중앙 관리 방식으로 변경됩니다. 이 솔루션의 체인 상단은 매우 중앙 집중화되어 있으며 다양한 고성능 EVM 퍼블릭 체인을 기반으로 선택하여 더 높은 TPS를 달성할 수 있습니다.
요약
길이 제한으로 인해 아직 나열되지 않은 Aleo, RGB 등 좋은 프로토콜이 많이 있지만, 개인 결제 분야에서는 사용자로서 보안, 효율성, 안정성을 더 중요하게 생각합니다. 보안 인식을 높여야 합니다. 블록체인에 대한 이해를 높이려면 어떤 개인 정보 보호 결제 솔루션이든 그 핵심을 이해하고 자신의 자산에 책임을 져야 하며 자신의 미래에 책임을 져야 합니다.