Circom 예제로 영지식 증명 시작하기 (1)에서 작성한 회로를 사용하여 다음 두 가지 예시를 보여 줍니다.
- 증명 성공 예시
- 곱셈의 결과가 34인 두 수를 제공할 수 있음
- 증명 실패 예시
- 곱셈의 결과가 33인 두 수를 제공할 수 있음
- 곱셈의 결과가 34인 두 수를 제공할 수 있음
1. witness 계산하기
입력 값, 중간 신호, 출력 값을 witness라고 합니다.
-
multiplier2_js
디렉토리로 이동합니다.cd multiplier2_js
-
아래 내용을
input2.json
파일에 저장합니다.{"a": "2", "b": "17"}
-
witness를 계산하여
witness2.wtns
파일에 저장합니다.node generate_witness.js multiplier2.wasm input2.json witness2.wtns
2. 증명 성공 예시
2.1. 증명 생성
-
회로 및 witness와 연관된 증명을 생성합니다.
snarkjs groth16 prove multiplier2_0001.zkey witness2.wtns proof2.json public2.json
위 명령은 다음 두 파일을 생성합니다.
proof2.json
: 증명 포함{ "pi_a": [ "14743280952072949668948706550574899717145559551048017963794441189237494636481", "14298005267871599183835964858782397954547197261581693679006469198474879205631", "1" ], "pi_b": [ [ "3626277144031511427418657496308860145981471611754900712998539558757189996322", "19214378261821279575001588540284946453492239896169946671818976034832760915828" ], [ "17050251975840390849719173233534275494368423304240394905189026587388563221923", "2634421260606614787002565397702133406990838684718588715509117554509241602439" ], [ "1", "0" ] ], "pi_c": [ "17316308177915526759196441569174377596954015849854187372616893918873802428359", "12807215143857622682136446721264951084285188093999940643258181139940589592908", "1" ], "protocol": "groth16", "curve": "bn128" }
public2.json
: 공개 입력 및 출력 값 포함[ "34" ]
2.2. 증명 검증
-
아래 명령을 수행하여 증명을 검증합니다.
snarkjs groth16 verify verification_key.json public2.json proof2.json
위 명령의 수행 결과는 다음과 같습니다.
[INFO] snarkJS: OK!
3. 증명 실패 예시
3.1. input2.json -> public.json 증명 검증
-
아래 명령을 수행하여 증명을 검증합니다.
snarkjs groth16 verify verification_key.json public.json proof2.json
위 명령의 수행 결과는 다음과 같습니다.
[ERROR] snarkJS: Invalid proof
3.2. input.json -> public2.json 증명 검증
-
아래 명령을 수행하여 증명을 검증합니다.
snarkjs groth16 verify verification_key.json public2.json proof.json
위 명령의 수행 결과는 다음과 같습니다.
[ERROR] snarkJS: Invalid proof
Written with StackEdit.
댓글 없음:
댓글 쓰기