snarkjs 예제로 영지식 증명 시작하기 (1)에서 작성한 회로의 제한 조건 개수를 1000에서 1로 변경하여 다음 두 가지 예시를 보여 줍니다.
- 증명 성공 예시
- a*a + b의 결과가 20인 두 수를 제공할 수 있음
- 증명 실패 예시
- a*a + b의 결과가 21인 두 수를 제공할 수 있음
1. 회로 생성
-
제한 조건 개수 변경하여
circuit2.circom
파일로 저장pragma circom 2.0.0; template Multiplier(n) { signal input a; signal input b; signal output c; signal int[n]; int[0] <== a*a + b; for (var i=1; i<n; i++) { int[i] <== int[i-1]*int[i-1] + b; } c <== int[n-1]; } component main = Multiplier(1);
-
컴파일
circom --r1cs --wasm --c --sym --inspect circuit2.circom
2. 신뢰 설정 - Phase 2
snarkjs 예제로 영지식 증명 시작하기 (1)의 중간 결과물을 활용하면서 새로 생성하는 파일들이 기존 파일들을 덮어쓰는 것을 피하기 위하여 circuit2_js
디렉토리로 이동하여 다음 작업들을 수행합니다.
-
Phase 2 준비
snarkjs powersoftau prepare phase2 ..\pot14_beacon.ptau pot14_final.ptau -v
-
마지막 ptau 검증
snarkjs powersoftau verify pot14_final.ptau
-
.r1cs
파일과 연관된.zkey
파일 생성snarkjs groth16 setup ..\circuit2.r1cs pot14_final.ptau circuit2_0000.zkey
-
ceremony의 phase 2에 기여
snarkjs zkey contribute circuit2_0000.zkey circuit2_0001.zkey --name="1st Contributor Name" -v
-
두 번째 기여
snarkjs zkey contribute circuit2_0001.zkey circuit2_0002.zkey --name="Second contribution Name" -v -e="Another random entropy"
-
세 번째 기여
snarkjs zkey export bellman circuit2_0002.zkey challenge_phase2_0003 snarkjs zkey bellman contribute bn128 challenge_phase2_0003 response_phase2_0003 -e="some random text" snarkjs zkey import bellman circuit2_0002.zkey response_phase2_0003 circuit2_0003.zkey -n="Third contribution name"
-
무작위 비콘 적용
snarkjs zkey beacon circuit2_0003.zkey circuit2_final.zkey 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f 10 -n="Final Beacon phase2"
-
검증키 내보내기
snarkjs zkey export verificationkey circuit2_final.zkey verification_key.json
5. 증명 생성 및 검증
-
input.json
작성{"a": "3", "b": "11"}
-
witness 계산
snarkjs wtns calculate circuit2.wasm input.json witness.wtns
-
증명 생성
snarkjs groth16 prove circuit2_final.zkey witness.wtns proof.json public.json
public.json
파일의 내용은 다음과 같습니다.[ "20" ]
-
증명 검증
snarkjs groth16 verify verification_key.json public.json proof.json
실행 결과는 다음과 같습니다.
[INFO] snarkJS: OK!
6. 증명 실패 예시
-
public2.json
파일의 내용[ "21" ]
-
증명 검증
snarkjs groth16 verify verification_key.json public2.json proof.json
실행 결과는 다음과 같습니다.
[ERROR] snarkJS: Invalid proof
Written with StackEdit.
댓글 없음:
댓글 쓰기