zk-SNARKsの理論
ゼロ知識証明
ゼロ知識証明とは証明者が検証者に対して、ある情報が正しいことを、それが正しいこと以外の情報を明らかにせずに証明できる手法のことです。
例えば、運転免許証や保険証を提示して相手に自分の身元を明らかにしたい時に、免許証に含まれる住所や、生年月日等の個人情報を隠蔽しつつ、持っているその免許証が本当に自分のものあり、正しい情報が含まれていることを証明する場合にゼロ知識証明が使われます。
ゼロ知識証明はいくつかの性質を持ちます。
ゼロ知識証明が持つ3つの性質
- 完全性(Completeness)
- 証明者の主張が真であるならば、検証者は真であることが必ずわかること。
- 健全性(Soundness)
- 証明者の主張が偽であれば、検証者はかなり高い確率でそれが偽であること見抜けること。
- ゼロ知識証明(Zero Knowledge)
- あらゆる場合において、検証者が証明者から何らかの知識(情報)を盗もうとしても、証明者の主張が真であること以上の知識は得られない
対話型と非対話型のゼロ知識証明
ゼロ知識証明には対話型と非対話型の2通りの構築方法があります。
名前の通り対話型は有名な洞窟の例のように証明者と検証者がやりとりを繰り返し、証明者が本当に正しい情報を持っているかを確率的に検証する方です。
一方、非対話型のゼロ知識証明は証明者と検証者はやりとりをせずに証明することが可能です。対話を行う代わりに証明者と検証者の間に第三者を置き、CRSと呼ばれる事前に公開される情報を証明者と検証者に送ります。証明者はそのCRSを用いて正しい情報を持っているという証明を生成し、それを検証者に一回だけ送ります。受け取った検証者はそれを検証するだけで非対話なゼロ知識証明が実現できます。事前にCRSを生成することを一般的に信頼されたセットアップといい、第三者は証明者、検証者にとって信頼される存在となります。
zk-SNARKsとは
zk-SNARKsとは非対話なゼロ知識証明を構築し、ブロックチェーンでのトランザクションの秘匿化やイーサリアムのスケーリング問題のソリューションとして応用されています。ゼロ知識証明が持つ3つの性質に加えてさらにSNARKを示す4つの性質を追加します。
- Succinct(簡潔)
- 証明のサイズがステートメントのサイズと比べて非常に小さい
- Non-interactive(非対話型)
- 証明者と検証者の間で何度も対話をする必要がない
- ARgument
- 証明者の計算能力には限りがある
- Knowledge
- 証明者は、知識なしでは証明を生成することは不可能である。
zk-SNARKsは簡潔な性質を持つので、ゼロ知識証明だけではなく、検証プロセスにおけるコストの削減にも大きな利点を持ちます。zk-Rollupは複数のトランザクションを一つにまとめることで、コストを大幅に削減し、そこに含まれるトランザクション全てを検証せずに検証することができます。
一般に、zk-SNARKsは次のように動作する3つのアルゴリズム(Key Generator、Prover、Verifier)によって構成されています。
- Key Generator
Gen(1^{\lambda}, \mathcal{R}) - セットアップアルゴリズムであり、信頼されるサードパーティによって証明者と検証者に事前に渡されるCRSを生成します。このCRSには証明者に渡す評価鍵と呼ばれる
と検証者に渡す検証鍵pk が含まれています。vk
- セットアップアルゴリズムであり、信頼されるサードパーティによって証明者と検証者に事前に渡されるCRSを生成します。このCRSには証明者に渡す評価鍵と呼ばれる
- Prover
P(pk, x, w) - 証明者は
と、ステートメントpk 、証拠x を入力として受け取り、証明w を出力する証明アルゴリズム\pi
- 証明者は
- Verifier
V(vk, \pi, x) - 検証者は
、ステートメントvk 、証明x を入力として受け取り、その証明が正しいものであれば1、そうでなければ0を返す検証アルゴリズム\pi
- 検証者は
非対話型ゼロ知識証明について
ゼロ知識の標準的なモデルである対話型ゼロ知識証明は第三者のような信頼の仮定を一切行わずに強力なセキュリティ保証を持つ対話型プロトコルに依存しています。この計算モデルでは、攻撃者は利用可能な時間と計算能力によってのみ制限されています。
しかし、何も信頼する存在がいない場合、対話型のゼロ知識証明には安全性や効率性の限界があります。対話回数が多いほどそれにかかる計算量が多く、検証に時間がかかってしまいます。
先ほど触れたように、簡潔な非対話型ゼロ知識証明の構築には信頼された第三者を介して証明プロセスが行われます。これをCRSモデルと呼びます。
CRSモデルとは全ての関係者が、一様分布などの分布から取得した文字列(CRS)にアクセスすることができる信頼されたセットアップが存在するという仮定に基づいたモデルである。このCRSモデルは、強力なセキュリティを持ち、効率的な証明プロセスを構築することができます。
証明者と検証者にそのCRSを提供することで、証明者と検証者は一切対話を行わずにゼロ知識証明が可能になります。
zk-SNARKsの理論
zk-SNARKsは楕円曲線暗号、NP完全、確率的検証性などの数学的手法を用い、離散対数問題などの暗号的仮定に依拠しながら、簡素で非対話なゼロ知識証明を構築しています。zk-SNARKsの理論を理解するには、まずクラスPやクラスNPなどの複雑性クラスを理解する必要があります。
クラスPとクラスNP
複雑性クラスにはNPやPというクラスが存在します。クラスPとは「ある判定問題が多項式時間で計算するアルゴリズムを持つ時、その問題はクラスPに属する」ということです。つまり、効率的に解くことができる問題のクラスです。
一方で、クラスNPとは「ある判定問題の解となる入力が問題の条件を満たすかどうかを多項式時間で判定することができるようなアルゴリズムを持つ時、その問題はクラスNPに属する」ということです。つまり、アルゴリズムは条件を満たす解を教えてもらえると、多項式時間でその解が正しいか確かめることができるが、自分で条件を満たす解を見つけるには指数時間かかる可能性があるという性質を持ちます。
NP問題の例として、「電車に乗っている時間が与えられた時間
一般的に、効率的に計算可能な関係(多項式時間アルゴリズム)
- 効率的に計算可能な関係
\mathcal{R} = \lbrace(\bm{x}, \bm{w}) \in \Bbb{F^n \times F^h}\rbrace - NP言語
\mathcal{L} = \lbrace x \in \Bbb{F^n} | \exists w \in \Bbb{F^h}, (x, w) \in \mathcal{R} \rbrace -
をステートメントといい、x \in \mathcal{L} をw となる(x, w ) \in \mathcal{R} を証明するための知識(witness)というx \in \mathcal{L}
NP完全問題
クラスNPに属する問題のうち、解くのが最も難しい問題をNP完全問題と呼びます。NP完全問題の一つとして命題論理式の充足可能問題(SAT)という問題が知られています。その例として、「次のような論理式の出力を1とするような入力
上式の入力を
Circuit-SAT
上記のような命題論理式を演算回路へと変換した回路の充足性問題(Circuit-SAT)を考えます。Circuit-SATとは、「演算回路
正式には、関係
証明者はCircuit-SATに対する証拠
しかし実際には、
Circuit-SATからQAP(quadratic arithmetic programs)を構築します。QAPとは、関数
上図では演算回路から
したがって、
(QAPの詳細については別途記事を出そうかなと思います)
つまり、Circuit-SATを
上図のように、証明者が検証者に生成した多項式自体を渡すことは非常に効率性を悪くさせます。実際には対象となる多項式が非常に多いため、SNARKsの性質である簡潔さを失うことになります。
検証者に多項式自体を渡さずにそれが正しいか判断する方法がもう一つあります。
証明者の持っている証拠
しかし、単純に式を展開し、全ての係数が0であることを確認するには計算コストがかかり、指数関数的な時間が必要になります。
ここで、多項式が「正しくない」ものであった場合、ランダムに選択された点
この補題に依拠し、検証者はランダムに選んだ評価点
エンコーディング方式
ゼロ知識証明を構築するために検証者に渡す多項式をの詳細や、検証者が渡す評価点などは明らかにしてはいけません。なので多項式、評価点をブラインド化し、ブラインドしたまま証明プロセスを行う必要があります。
次のようなエンコード関数を定義します。
- ほとんどの
に関して、x からg^x を特定することが難しいx - 入力が異なると出力も異なる
(x \not = y \to E(x) \not = E(y)) -
とE(x) が与えられたとき、E(y) が計算可能E(x+ y)
証明者は
また、
次に、
各ゲートの演算を表す多項式
この多項式は回路全体の計算になっています。
したがって、証明者は
では、検証者はどのように多項式を評価するか。先ほど定義した
とする。この時、
ペアリング
検証者は双線形ペアリング写像で検証を行います。
双線形写像とは、ヴェイユペアリングやテイトペアリングなどの楕円曲線上の2点をある有限体の元に変換する写像です。このペアリングは双線形性をもち、以下の式が成り立ちます。
例えば、証明者は
このように
したがって、検証者はブラインドされた
q-PKE仮定
しかし、これではまだ完全に証明者が正しい多項式を持っていることを証明できていません。
自分の持っている正しい情報から多項式を作成し、
したがって、証明者に強い線形性の制限をかけ、正しく実行させる方法を考えます。
例えば、有限体
もし、
それは、
が得られます。したがって
以上がq-PKEの満たす仮定であり、この仮定の下で多項式評価の検証を行います。
ペアリングによって証明者が与えられた
対話型から非対話型へ
これまでの構築は証明者と検証者の対話によるゼロ知識証明を構築してきました。第三者をおき、非対話なゼロ知識証明の構築を行います。
今までで、検証者が渡していた、評価点や多項式を事前のセットアップとして生成し、検証者も不正ができないようにブラインドされたままそれらを
- 抽出可能性
- QAPの条件を満たす多項式であるか
このzk-SNARKsの構築が4つの性質を満たしていることを確認します。
- Succinct
- 証明者に評価点を与えることで多項式を評価した結果のみ返すだけで済む
- Non-interactive
- 対話を行わずに証明者が一回だけ検証者に証明を送るだけで検証を可能にしている
- ARgument
- 線形結合の制限をかけることで不正が難しくなっている
- Knowledge
- 証拠
でQAPによる多項式を作る必要があるw
- 証拠
以上で簡潔で非対話なゼロ知識証明であるzk-SNARKsの構築をすることができました。
Pinocchio Protocol
Pinocchioプロトコルと呼ばれる「暗号の仮定だけに頼りながら一般的な計算を効率的に検証するために構築されたプロトコル」の下でzk-SNARKsの構築を行いました。
このプロトコルでは、使われるq-PDHやq-SDH、q-PKEはそれぞれDH、SDH、KEA仮定を一般化した離散対数問題です。q-SDHは現代のペアリングベース暗号の基礎になっており、qによってパラメータ化されたこれらの仮定は解くことがより難しいと知られています。これらの暗号学的仮定に依拠しながらzk-SNARKsを構築することで、安全かつ効率的な証明プロセスを実現することができます。
q 型仮定
Pinocchioプロトコルはq型仮定の暗号学的仮定を用いています。従来の標準的な仮定(DDH、CDHなど)はパラメーター化されておらず、常に一定のサイズ(静的)です。
一方、非静的な
zk-SNARKsの厳密な構成(Zcash)
今回は、zk-SNARKsのざっくりした概念や、構築方法を説明を行いましたが、実際にはまだ全ての説明をしきれていません。
実際には上図のような鍵生成者と証明者、検証者が存在します。説明できていない部分としては、多項式集合
また、zk-SNARKsの構築における
色々省いて説明を行ったので、説明不足な部分や、間違っている箇所もあると思いますので、訂正箇所ございましたらコメント等くださると嬉しいです。
ご閲覧ありがとうございました!
参考論文
Succinct Non-Interactive Arguments via Linear Interactive Proofs
Pinocchio: Nearly Practical Verifiable Computation
Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture
Quadratic Span Programs and Succinct NIZKs without PCPs
The Knowledge-of-Exponent Assumptions and 3-Round Zero-Knowledge Protocols
Succinct Non-Interactive Arguments from Quadratic Arithmetic Programs
Discussion