페이지

2024년 11월 10일 일요일

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

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

Circom 예제로 영지식 증명 시작하기 (1)에서 작성한 회로를 사용하여 다음 두 가지 예시를 보여 줍니다.

  • 증명 성공 예시
    • 곱셈의 결과가 34인 두 수를 제공할 수 있음
  • 증명 실패 예시
    • 곱셈의 결과가 33인 두 수를 제공할 수 있음
    • 곱셈의 결과가 34인 두 수를 제공할 수 있음

1. witness 계산하기

입력 값, 중간 신호, 출력 값을 witness라고 합니다.

  1. multiplier2_js 디렉토리로 이동합니다.

    cd multiplier2_js
    
  2. 아래 내용을 input2.json 파일에 저장합니다.

    {"a": "2", "b": "17"}
    
  3. witness를 계산하여 witness2.wtns 파일에 저장합니다.

    node generate_witness.js multiplier2.wasm input2.json witness2.wtns
    

2. 증명 성공 예시

2.1. 증명 생성
  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. 증명 검증
  1. 아래 명령을 수행하여 증명을 검증합니다.

    snarkjs groth16 verify verification_key.json public2.json proof2.json
    

    위 명령의 수행 결과는 다음과 같습니다.

    [INFO]  snarkJS: OK!
    

3. 증명 실패 예시

3.1. input2.json -> public.json 증명 검증
  1. 아래 명령을 수행하여 증명을 검증합니다.

    snarkjs groth16 verify verification_key.json public.json proof2.json
    

    위 명령의 수행 결과는 다음과 같습니다.

    [ERROR] snarkJS: Invalid proof
    
3.2. input.json -> public2.json 증명 검증
  1. 아래 명령을 수행하여 증명을 검증합니다.

    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 모델로 다음 두 가지 기능을 실습합니다. 문장 완성 챗팅 ...