ゼロ知識証明の力:zk-SNARKsを数学的に復号する

著者: 0xAlpha 共同創設者 @DeriProtocol; コンパイラ: DODO Research

はじめに

zk-SNARKs(ゼロ知識簡潔な非対話的知識論証)は、証明者が証人と呼ばれる特定の知識を持っていること、証人自体について何も明らかにすることなく、特定の関係を満たすことを確認できます。

特定の問題に対する zk-SNARK の生成は、次の 4 つのフェーズで構成されます。

  • 問題(または関数)を算術ゲート回路に変換する。
  • この回路は、行列式に変換されます。
  • この行列式はさらに多項式に変換され、特定の最小多項式で割り切れるはずです。
  • 最後に、この分割可能性は有限体の楕円曲線点で表され、そこで証明が行われる。

最初の 3 つのステップでは、元のステートメントの表現を変換するだけです。 最後のステップでは、準同型暗号化を使用してステップ3のステートメントを暗号化空間に投影し、証明者がその中のミラーステートメントを検証できるようにします。 このプロジェクションが非対称暗号を利用していることを考えると、ステップ 3 の元のステートメントまでさかのぼってゼロ知識の漏洩を保証することは現実的ではありません。

この記事を読むために必要な数学の背景は、STEM専攻の代数の新入生レベルに相当します。 挑戦的な唯一の概念は、おそらく楕円曲線の暗号化です。 これに慣れていない人のために、それは特別なカーディナリティを持つ指数関数と考えることができますが、その逆関数は未解決のままであることを念頭に置いてください。

この記事では、次の表記規則に従います。

*マトリックス:太字の大文字、例:A; フォームに明示的に記述する

  • ベクトル: 小文字と矢印、明示的な形式で記述 [ ] ; 既定では、すべてのベクトルは列指向ベクトルです
  • スカラー: 通常の文字表現

この質問を例に考えてみましょう。

f(x)=x^3+x^2+5 (1)

アリスが知っていることを証明したいとしましょう。 アリスが証明のためにzk-SNARKを生成するために必要な手順全体を見ていきます。

この質問は、制御フロー (if-then-else など) を伴わないため、単純すぎるように思えるかもしれません。 ただし、制御フローを持つ関数を算術式に変換することは難しくありません。 たとえば、次の質問(プログラミング言語の「関数」)について考えてみましょう。

f(x, z):

if(z == 1):

x*x*x+x*x+5を返します

然も無くば:

x*x+5 を返します。

この問題を次の算術式に書き直すのは簡単で(zが(0,1)に属すると仮定)、式(1)ほど複雑ではありません。

f(x,z)=(z-1)(x^2+5)+z(x^3+x^2+5)

本稿では、引き続き式(1)を基礎として議論します。

ステップ1:演算ゲート回路

式 (1) は、次の基本的な算術演算に分解できます。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-122a4a0e88-dd1a6f-cd5cc0.webp)

これは、次の演算ゲート回路に相当します。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-9001e3d244-dd1a6f-cd5cc0.webp)

また、式(2)を4つの「1次制約」のセットと呼び、それぞれが回路内の算術ゲートの関係を記述します。 一般に、n 個の 1 次制約のセットは、次に説明する 2 次算術プロシージャ (QAP) として一般化できます。

ステップ 2: マトリックス

まず、「witness」ベクトルを次のように定義しましょう。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-1157f4c74a-dd1a6f-cd5cc0.webp)

式中、y、s1、s2、s3は、式(2)で定義されるものと同じである。

一般に、m 個の入力と n 個の演算ゲート (つまり、n-1 個の中間ステップと最終出力) の問題では、この証人ベクトルは (m+n+1) 次元になります。 実際の問題では、数値nは非常に大きくなる可能性があります。 たとえば、ハッシュ関数の場合、n は通常数千です。

次に、式(2)を次のように書き換えることができるように、3つのn*(m + n + + \ * 1)行列A、B、Cを作成しましょう。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-a9e2164b2f-dd1a6f-cd5cc0.webp)

式(3)は、式(2)の別の表現であり、各グループ(ai、bi、ci)は回路内のゲートに対応します。 これを確認するには、行列式を明確に展開するだけで済みます。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-630e507588-dd1a6f-cd5cc0.webp)

したがって、LHS=RHSは式(2)とまったく同じであり、行列方程式の各行は1次制約(つまり、回路内の算術ゲート)に対応します。

比較的簡単なビルド手順 (A、B、C) は省略しました。 (A, B, C)、つまり(AI, BI, CI)の各行の内容を決定するために、対応する第1レベルの制約に従ってそれらを行列形式に変換するだけで済みます。 最初の行を例にとると、1 次の制約 x に s1 に等しい x を乗算して成り立つためには、[0,1,0,0,0,0]、[0,1,0,0,0]、[0,0,0,0,0,0] にベクトル s を乗算する必要があることが簡単にわかります。

このように、演算ゲート回路を行列式、すなわち式(3)に変換することに成功しました。 同時に、マスタリングする必要があるオブジェクトも、目撃者ベクトル s に変更しました。

ステップ3:多項式

それでは、z に関する多項式の集合を定義する n*(*n+m+*1) 行列 PA を作成しましょう。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-94169f2b1d-dd1a6f-cd5cc0.webp)

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-2c37ea96a6-dd1a6f-cd5cc0.webp)

これらは、従来の方法で解くことができる 6 つの変数に対する 4 組の線形方程式です。 ただし、この場合にPAを解くより効率的な方法は、問題の特異性を利用するラグランジュ補間です。 ここでは、少し面倒ですが簡単なPAを解くプロセスをスキップします。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-fcac15b335-dd1a6f-cd5cc0.webp)

そこに:

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-a7d3309d02-dd1a6f-cd5cc0.webp)

ステップ 4: 楕円曲線の点

式 (4) を次のように書き換えます。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-f974fc7c93-dd1a6f-cd5cc0.webp)

ここで、i(z)=1 は z の自明なゼロ次多項式であり、方程式を統一するために使用されます - すべての項は二次です。 その必要性はすぐに明らかになるでしょう。 この方程式には、zの多項式の加算と乗算のみが含まれていることに注意してください。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-8fdea08104-dd1a6f-cd5cc0.webp)

次に、実際の手順について詳しく説明します。

楕円曲線の暗号化

楕円曲線の一般理論は、この記事の範囲をはるかに超えています。 この論文では、楕円曲線は素数領域 Fp から E 関数への写像として定義され、E には y^2=x^3+ax+b を満たす点 (楕円曲線点、略して ECP と呼ばれる) が含まれます。

ここまでは通常の算術演算について説明してきましたが、素数フィールドに変換すると、数値の算術演算はモジュール方式で行われることに注意してください。 たとえば、a+b=a+b(mod p) のようになりますが、ここで p は Fp の次数です。

一方、2つの楕円曲線点の加算定義を次の図に示します。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-baf3cc3cbe-dd1a6f-cd5cc0.webp)

具体的には、2つのECP、PとQを追加すると、

線PQと-(P+Q)として定義される曲線Rの交点を求めます。

Rの曲線上の「ミラー」点R’に反転します。

したがって、楕円曲線点P+Q=R’の加算を定義します。

このルールは、点の接線が使用されるECP自己加法性などの特殊なケースにも適用されることに注意してください。

ここで、ランダムな点 G を選び、それに数値 1 をマッピングするとします。 (この「初期マッピング」は少し恣意的に聞こえます。 これについては後で詳しく説明します)。 次に、任意の n が Fp に属するようにするには、次のように定義します。

E(N)=G+G+G+…+G=G

これにはアクション式があります。 +G を定義するアクションは “ジェネレータ” であり、g と表記されます。 この場合、上記の定義は以下と同等です。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-bb825d6ba2-dd1a6f-cd5cc0.webp)

楕円曲線に馴染みのない人のために、このマッピングを、基数 g が実数に置き換わる通常の指数関数に例えることができます。 算術演算も同様に動作します。 ただし、主な違いは、g^n の逆関数が計算上実行できないことです。 つまり、楕円曲線バージョンを計算する方法はありません。 [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-c989bcd81c-dd1a6f-cd5cc0.webp)。 もちろん、これが楕円曲線暗号の基礎です。 このようなマッピングは、一方向暗号化と呼ばれます。

楕円曲線が与えられた場合、G(したがってジェネレータg)の選択は任意であるため(x軸上の点を除く)、それをマッピングする方法は無限にあることに注意してください。 (G または g) を選択することは、常識の一部として指数関数 (2^x、10^x、e^x など) のカーディナリティを選択することに似ています。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-ce9f261ecc-dd1a6f-cd5cc0.webp)

しかし、アリスが証明したい方程式(5)は二次方程式であるため、十分に線形ではありません。 二次項を扱うためには、暗号空間で乗算を定義する必要があります。 これはペア関数、または双一次写像と呼ばれ、次に説明します。

バイリニアマッピング

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-146a4881e5-dd1a6f-cd5cc0)

共通参照文字列

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-17e9a49fa0-dd1a6f-cd5cc0.webp)

このプロセス全体を「検証キー」、または略してVKと呼びます。 ここには7つの楕円曲線点(ECP)しか含まれておらず、検証者に提供する必要があります。 問題にどれだけ多くの入力と第 1 レベルの制約が関係していても、VK は常に 7 つの ECP で構成されていることに注意することが重要です。

さらに、「信頼できるセットアップ」とPKとVKを生成するプロセスは、特定の問題に対して一度だけ実行できることに言及する価値があります。

証明と検証

公開鍵 (PK) を使用して、Alice は次の楕円曲線点 (ECP) を計算します。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-c7eacd57e6-dd1a6f-cd5cc0.webp)

これらの9つの楕円曲線点は、ゼロ知識簡潔非対話型証明(zk-SNARK)の鍵です。

アリスは実際には、公開鍵の楕円曲線の点に対して線形の組み合わせ演算を行っているだけであることに注意してください。 これは特に重要であり、検証中にチェックされます。

アリスがzk-SNARKの証明を手渡したので、いよいよ3段階の検証プロセスに入りましょう。

まず、最初の 8 つの楕円曲線の点が、一般的な参照文字列内のそれらの点の線形結合であることを確認することが重要です。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-4cf599e8c2-dd1a6f-cd5cc0.webp)

3つのチェックがすべて真であれば、式(5)が検証されるため、アリスは証人を知っていると考えられます。

方程式の背後にある理論的根拠を説明しましょう。 最初の部分の最初の方程式を例として取り上げますが、これは双線形の性質のために成り立ちます。

! [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-0032ace846-dd1a6f-cd5cc0.webp)

ただし、Alice はシンボル alpha の値を知らないため、この加算を明示的に計算することはできません。 彼女が方程式(EA、EA’)を満たすペアを思いつくことができる唯一の方法は、それぞれ同じベクトルのセットを使用して計算することでした。 [ゼロ知識証明の力:zk-SNARKsを数学的に解読する] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-933d054c72-dd1a6f-cd5cc0.webp)。

参考文献

「Zk-SNARKs:ボンネットの下」(ヴィタリック・ブテリン)

「ゼロ知識証明のレビュー」(Thomas Chen、Abby Lu、Jern Kunpittaya、Alan Luo)

“Why and How zk-SNARK Works: Definitive Explanation” (マクシム・ペトクス)

Web サイト: Zero-Knowledge Proofs (ゼロ知識証明)

ウィキペディア: 楕円曲線

ウィキペディア:有限体

ウィキペディア: Pairing-based cryptography

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • リポスト
  • 共有
コメント
0/400
コメントなし
  • ピン