zkSync는 이더리움 Layer 솔루션2이다.
Layer 2는 이더리움의 네트워크 트래픽 혼잡을 해결해주고, 개선하기 위해 Matter Labs가 개발하는 솔루션, zk-롤업 플랫폼이다.
1. zkSync의 주요 특징으로는 낮은 송금 수수료를 보장하고 이더리움 메인넷에 상주하고 있기 때문에 메인넷 수준의 보안으로 유저가 자금을 완전하게 컨트롤 할 수 있다.
2. 이 프로토콜은 ETH 및 ERC20 토큰 전송에 있어서 즉각적으로 확인할 수 있고, 10분의 허용시간을 제공해준다.
간단히 말해서 사용자는 자신의 ETH 또는 ERC20 토큰을 이더리움의 zkSync로 스마트 컨트랙트를 보낼 수 있으며, zkSync는 사용자들에게 받은 토큰의 자산을k 안전하게 보장해준다.
디렉토리를 새로 만들어주고 package.json 을 추가시켜준다.
mkdir zksync
cd zksync
npm init -y
ethers, zksync를 설치해준다
npm install ethers
npm install zksync
zkSync는 zk-SNARKs를 사용한다.
zk-SNARKs(영지식 스나크)는 'zero-knowledge Succinct Non-interactive Argument of Knowledge' 의 약자로, 기존의 영지식 증명(zero-knowledge proof)을 좀 더 간결하고 비상호적(non-interactive)인 환경에서 적용 가능하도록 변형한 기술이다.
영지식 스나크를 활용한 블록체인 트랜잭션의 경우 수신자, 송신자, 전송금액 등의 정보를 노출하지 않고도 해당 트랜잭션의 유효성을 송수신 노드 외의 다른 노드들에게 알릴 수 있다. 영지식 느타크를 최초로 적용한 암호화폐는 지캐시가 있으며, 이외에 이더리움의 비잔틴 하드포크에도 관련 내용이 적용되었다.
영지식 증명 (zero-knowledge proof) ?
영지식 증명은 암호학에서 누군가가 상대방에게 어떤 사항이 참이라는 것을 증명할 때, 그 문장의 참 거짓 여부를 제외한 어떤 것도 노출되지 않는 interactive한 절차를 뜻한다. 영지식 증명을 활용한 프로토콜의 가장 큰 특징은 정보를 공개하지 않고 정보의 '유효성'을 증명할 수 이쓴 방법이라는 것이다.
어떤 문장이 참이라는 것을 증명하려는 쪽을 증명자(prover)라고 하고, 증명 과정에 참여하여 증명자와 정보를 주고 받는 쪽을 검증자(verifier)라고 한다. 영지식 증명에 참여하는 당사자들이 상대방을 속이려는 목적으로 프로토콜을 임의로 변경하는 경우, 당사자들이 부정직하다 또는 정직하지않다고 한다. 그 외의 경우에는 정직하다고 한다.
- Prover : Prover는 자신이 가지고 있는 정보가 무엇인지 공개하지 않고, Verifier에게 '정보를 알고 있다'는 것을 증명하고 싶은 참여자라고 생각하면된다.
- Veriferi : Prover가 해당 정보를 가지고 있음을 검증하고 싶은 참여자이다.
- Secret : Prover가 가지고 있음을 증명하고 싶은 정보이며, 모두에게 숨기고자 하는 정보이다.
- Challenge : Verifier가 Prover가 Secret을 가지고 있는지 확인하기 위해 문제를 내는 과정이다.
- Statement is true : Verifier가 Prover가 Secret을 가지고 있음을 검증한 상태이다
영지식 증명에서 Prover가 Secret을 그 누구에게도 공개하지 않고, Verifier에게 자신이 Secret을 알고 있다는 것을 증명하는 과정이다.
하나의 예시를 통해서 좀 더 알아보는 과정을 가지도록 하자
The Ali Baba Cave
- Prover : 분홍색 옷을 입은 사람
- Verifier : 초록색 옷을 입은 사람
- Secret : 동굴의 문을 열 수 있는 주문
- Challenge : Verifier가 Prover에게 나올 방향을 요구하는 과정
이 동굴은 A와 B 방향의 두 갈래길이 있고, 가운데는 문으로 막혀있습니다. 동굴의 문은 주문을 통해 열 수 있고, 주문을 알지 못하면 다른 방향으로 나올 수 없습니다. 여기서 Prover는 가운데 문을 열 수 있는 주문을 알고있습니다. 이를 Verifier에게 알리지 않은채로 자신이 주문을 알고 있다는 것을 증명해야합니다.
- 먼저 Verifier는 동굴 밖에서 기다리고 Prover는 A 또는 B 방향의 길 중에서 아무 곳이나 들어갑니다.
- Verifier는 Prover에게 A (또는 B)로 나오라고 합니다.
- Prover는 Verifier가 요구한 A (또는 B)로 나옵니다.
- 이 과정을 반복합니다.
Prover는 동굴의 문을 여는 주문을 알고 있기 때문에, B로 들어갔어도 A로 나올 수 있습니다. 하지만 Prover가 주문을 모를 경우 A로 들어가서 B로 나올 수 없습니다. 이러한 상황이 발생하면 Verifier는 Prover가 주문을 모른다는 의심을 하게됩니다.
그런데 Prover는 주문을 몰라도 Verifier에게 주문을 알고있는 것처럼 속일 수 있습니다. Prover가 A로 들어갔을 경우 Verifier가 A로 나오라고 했을 경우 주문을 몰라도 나올 수 있기에 Verifier에게 Prover가 주문을 알고있는 것처럼 속일 수 있다. 이럴 확률은 1 / 2 로써 이 과정이 반복되면 될수록 맞출 확률은 점점 내려간다. 이러한 과정을 20번 한다고하면 모두 성공한 확률은 (1/2)²⁰이다.
이처럼 성공확률은 시행 횟수에 따라 줄어들게 되지만 성공하게되면 Verifier는 Prover가 주문을 알고 있다고 확률적으로 확신하게 된다.
Prior agreement
Prover가 Challenge하는 과정에서 Verifier에게 secret을 알고 있음을 확신시킬 수 있는 '올바른 답'을 계속 제공했다면 성공확률은 올라갈 것입니다. 이러한 조건을 가능하게 하는 것이 영지식 증명의 Prior agreement 가능성입니다.
Ali Baba Cave에서 Verifier는 Prover가 주문을 알고 있는지 확인하기 위해 A 혹은 B로 나오라고 요구하는 것을 20번 반복할 것입니다. 그런데 여기서 만약 사전에 Verifier가 Prover에게 자신이 20번 동안 했던 과정의 내용을 Prover에게 미리 공유했다고 한다면, Prover는 주문을 몰라도 Verifier가 어디로 나오라고 하는지 알고 있기 때문에 20번의 Challenge를 모두 성공할 수 있습니다. 실제로 영지식 증명에서는 이러한 사전 공모가 가능합니다.
이는 영지식 증명의 한게로 보이기도 하지만, 사실 이는 Prior agreement를 가능하게 하는 조건입니다.
Prior agreement 가능성을 통해 Prover와 Verifier를 제외한 제 3자는 영지식 증명 과정에서 서로 사전에 정보를 공유했는지, 혹은 공유하지 않았는지 확신할 수 없습니다.
즉 Prover가 secret을 알고 있다는 정보 조차 제 3자에게 노출되지 않는 것을 의미합니다. 한편, Verifier는 본인이 Prover와 사전에 공모를 했는지 안했는지 알고 있습니다 . 이에 따라 Prover가 Verifier에게만 secert을 알고 있다고 증명할 수 있습니다.
'블록체인' 카테고리의 다른 글
[Solidity/Smart Contract] 솔리디티를 이용한 Smart Contract 배포 (0) | 2022.07.11 |
---|---|
[Ethereum/이더리움] 메타마스크 연결하기 (0) | 2022.06.30 |
[Ethereum/이더리움] Web3 (0) | 2022.06.29 |
[Ethereum/이더리움] WSL2 개발 환경설정 (윈도우) (0) | 2022.06.28 |
블록( Block ) 이란? (0) | 2022.06.08 |