페이지

2024년 11월 10일 일요일

snarkjs 예제로 영지식 증명 시작하기 (2)

snarkjs 예제로 영지식 증명 시작하기 (2)

snarkjs 예제로 영지식 증명 시작하기 (1)에서 작성한 회로의 제한 조건 개수를 1000에서 1로 변경하여 다음 두 가지 예시를 보여 줍니다.

  • 증명 성공 예시
    • a*a + b의 결과가 20인 두 수를 제공할 수 있음
  • 증명 실패 예시
    • a*a + b의 결과가 21인 두 수를 제공할 수 있음

1. 회로 생성

  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);
    
  2. 컴파일

    circom --r1cs --wasm --c --sym --inspect circuit2.circom
    

2. 신뢰 설정 - Phase 2

snarkjs 예제로 영지식 증명 시작하기 (1)의 중간 결과물을 활용하면서 새로 생성하는 파일들이 기존 파일들을 덮어쓰는 것을 피하기 위하여 circuit2_js 디렉토리로 이동하여 다음 작업들을 수행합니다.

  1. Phase 2 준비

    snarkjs powersoftau prepare phase2 ..\pot14_beacon.ptau pot14_final.ptau -v
    
  2. 마지막 ptau 검증

    snarkjs powersoftau verify pot14_final.ptau
    
  3. .r1cs 파일과 연관된 .zkey 파일 생성

    snarkjs groth16 setup ..\circuit2.r1cs pot14_final.ptau circuit2_0000.zkey
    
  4. ceremony의 phase 2에 기여

    snarkjs zkey contribute circuit2_0000.zkey circuit2_0001.zkey --name="1st Contributor Name" -v
    
  5. 두 번째 기여

    snarkjs zkey contribute circuit2_0001.zkey circuit2_0002.zkey --name="Second contribution Name" -v -e="Another random entropy"
    
  6. 세 번째 기여

    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"
    
  7. 무작위 비콘 적용

    snarkjs zkey beacon circuit2_0003.zkey circuit2_final.zkey 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f 10 -n="Final Beacon phase2"
    
  8. 검증키 내보내기

    snarkjs zkey export verificationkey circuit2_final.zkey verification_key.json
    

5. 증명 생성 및 검증

  1. input.json 작성

    {"a": "3", "b": "11"}
    
  2. witness 계산

    snarkjs wtns calculate circuit2.wasm input.json witness.wtns
    
  3. 증명 생성

    snarkjs groth16 prove circuit2_final.zkey witness.wtns proof.json public.json
    

    public.json 파일의 내용은 다음과 같습니다.

    [
    	"20"
    ]
    
  4. 증명 검증

    snarkjs groth16 verify verification_key.json public.json proof.json
    

    실행 결과는 다음과 같습니다.

    [INFO]  snarkJS: OK!
    

6. 증명 실패 예시

  1. public2.json 파일의 내용

    [
    	"21"
    ]
    
  2. 증명 검증

    snarkjs groth16 verify verification_key.json public2.json proof.json
    

    실행 결과는 다음과 같습니다.

    [ERROR] snarkJS: Invalid proof
    

Written with StackEdit.

댓글 없음:

댓글 쓰기

Llama 3.2로 문장 생성 및 챗팅 완성 실습

Llama 3.2로 문장 생성 및 챗팅 완성 실습 Running Meta Llama on Linux 문서의 내용을 참고하여 Llama 3.2 1B 모델로 다음 두 가지 기능을 실습합니다. 문장 완성 챗팅 ...