search-icon
academy-icon

ゼロ知識証明(zk-SNARKs)実装の感覚を掴みたい|Circom

2024年06月26日
この記事を簡単にまとめると(AI要約)

目次

  • 前提
  • zk-SNARKsの全体図
  • Circomの概要
  • circuitを実装
  • アプリケーションを考えてみよう
  • 総論

前提

本レポートでは、ゼロ知識証明の中でもzk-SNARKsと呼ばれる分類に属する手法を実装するときに必要な考え方や概要を紹介します。
zk-SNARKsは複雑な数学を駆使した暗号技術が多く含まれており、それぞれを理解するには非常に時間がかかります。また、実装を行う際には、知らない単語や概念が多く登場するため、ゼロ知識証明を用いたシステムを構築するだけでも非常に困難です。
本レポートでは、ゼロ知識証明を用いたアプリケーション作成に特化したツールであるCircomを用いて説明を行います。まず、zk-SNARKsとCircomの概要について説明した後、簡単な実装例を通じてCircom実装時の注意点を解説します。最後にアプリケーションの例を考えることで、現実問題に対してゼロ知識証明がどのように適用可能かを考えていただきます。
本レポートの目標は、ゼロ知識証明を用いたアプリケーション作成の感覚をつかんでいただき、様々なアプリケーションのアイデアを想像する楽しさを知っていただくことです。

zk-SNARKsの全体図

ゼロ知識証明とは、「証明者がある条件を満たすデータを持っていることをそのデータを一切知らせずに証明する方法」です。ここで言うある条件とは、特定の命題を指します。図の例では、「f(x,y)=zが成り立つようなx,y,zが存在する」という命題をyを知られることなく証明するというものです。 より具体的な命題は、後述する実装とともに見ていきましょう。ゼロ知識証明についてもう少し詳しく知りたい方は以下の関連レポートを参照ください。
【関連レポート】
次に、zk-SNARKsの実装に必要な手順を説明します。まず、前準備として信頼できる第3者機関(TTP)によるTrusted Setupが必要です。Trusted Setupによって生成された証明鍵と検証鍵を公開し、それぞれ証明者と検証者に渡します。
証明者は、ゼロ知識で証明するために必要なProofを生成します。Proofを生成するために、証明に必要な入力データと証明鍵を用いてcircuit内で計算を行います。circuitとは証明したい命題をゼロ知識証明を行うための形に変換するプログラムのことです。今回の例では、x,y,zの値を入力する必要があります。なぜなら、命題にあるf(x,y)=zを満たすx,y,zであるという制約をcircuit内で定め、それを計算して確かめる必要があるからです。(circuitや制約についてはCircomの概要 の章で説明します。 )
検証者は、計算の結果得られた証明データ(Proof)と公開可能な値(x, z)を証明者から受け取り、検証鍵を用いて、命題が成り立つことを確認します。このとき、証明者から検証者に秘密の値(y)を渡す必要がないため、検証者は秘密の値(y)を知らずに検証することが可能です。

筆者作成


以上が、ゼロ知識証明を用いた証明の基本的な流れです。

本レポートのスコープ

本レポートでは、証明を行うためのロジックを記述する「circuit」に焦点を当てて説明します。
ゼロ知識証明をアプリケーションへ応用する際には、TTPによるTrusted Setup、鍵生成、Proofの検証などが必要です。しかし、CircomとSnarkjsというライブラリを組み合わせて使うことで、これらの手順をコマンドで簡単に実行することが可能です。ライブラリのインストールやコマンドの実行手順などはこちらの公式チュートリアルに沿って進めてください。 また、本レポートでは、zkReplというplayground上でも実行可能です。Circomで書かれたcircuitをweb上で手軽に試すことができます。
ゼロ知識証明を用いたアプリケーションを構築するときに、まず「何をゼロ知識で証明するのか」という命題を考える必要があります。アプリケーション固有の命題は、circuitの記述によって決まります。本レポートでは、そのロジックの核となるcircuitの実装について詳しく見ていきます。

このレポートは有料会員限定です。
HushHubリサーチの紹介 >
法人向けプラン >

※免責事項:本レポートは、いかなる種類の法的または財政的な助言とみなされるものではありません。