기본 콘텐츠로 건너뛰기

라벨이 zksnark인 게시물 표시

ZKP-2. 초보자를 위한 영지식 증명(zk-SNARKs) 실습 가이드: Circom과 SnarkJS 활용

이 가이드는 영지식 증명을 처음 접하는 분들을 위해 Circom과 SnarkJS 라이브러리를 사용하여 zk-SNARKs의 전체 과정을 직접 체험해볼 수 있도록 구성되었습니다. 1. 개발 환경 설정 먼저 영지식 증명 회로를 작성하고 증명을 생성하는 데 필요한 도구들을 설치해야 합니다. 컴퓨터에 Node.js (v16 이상 권장)와 npm이 설치되어 있어야 합니다. Circom & SnarkJS 설치 터미널(Windows의 경우 PowerShell 또는 cmd, macOS의 경우 Terminal)을 열고 아래 명령어를 실행하여 circom과 snarkjs를 전역으로 설치합니다. npm install -g circom snarkjs 설치가 잘 되었는지 확인하기 위해 각 라이브러리의 버전을 확인합니다. circom --version snarkjs --version 버전 정보가 정상적으로 출력되면 개발 환경 설정이 완료된 것입니다. 2. 회로(Circuit) 작성 및 컴파일 영지식 증명에서는 증명하려는 계산 과정을 '회로'라는 형태로 표현합니다. 우리는 "어떤 수 x를 제곱하면 y가 된다"는 관계를 증명하는 회로를 작성해 보겠습니다. 1) 회로 파일 생성 multiplier.circom이라는 이름의 파일을 만들고 아래 코드를 작성하세요. pragma circom 2.0.0; /*   이 회로는 입력 신호 'x'를 제곱한 결과가   출력 신호 'y'와 같은지 검증합니다.   증명자는 'x'를 알고 있음을 증명하고,   검증자는 'y' 값만으로 이를 확인할 수 있습니다. */ template Multiplier() {     // 증명자만 알고 있는 비공개 입력(private input)     signal input x;     // 모두에게 공개되는 공개 입력(public input)     signal output y;     // x *...

Circom SHA256 해시 예제

Circom SHA256 해시 예제 아래 문서의 예제를 약간 변형해서 SHA256 해시 검증을 실습하였습니다. Zero-Knowledge Proof of SHA256 Hash using zkSNARK , Binod, Medium 회로 생성 프로젝트 디렉토리에서 회로 파일 program.circom 작성 pragma circom 2.0.0; include "./circomlib/circuits/sha256/sha256.circom"; template program() { signal input in[8]; signal output out[256]; component SHA = Sha256(8); SHA.in <== in; out <== SHA.out; } component main = program(); 프로젝트 디렉토리에서 Git 저장소 circomlib 복제 git clone https://github.com/iden3/circomlib.git 회로 컴파일 circom program.circom --r1cs --wasm --sym --c 신뢰 설정 - Powers of Tau 프로젝트 디렉토리에서 ‘powers of tau’ ceremony 시작 snarkjs powersoftau new bn128 15 pot15_0000.ptau -v 첫 번째 기여 snarkjs powersoftau contribute pot15_0000.ptau pot15_0001.ptau --name="First contribution" -v 신뢰 설정 - Phase 2 program_js 디렉토리에서 Phase 2 준비 (시간이 많이 걸림) snarkjs powersoftau prepare phase2 ..\pot15_0001.ptau pot15_final.ptau -v .r1cs 파...