PrivacyIN Week2 | 博士監修者の Zhang Yupeng 氏が古典的なゼロ知識証明プロトコルの設計原理について講義を行いました

序文

プライバシー研究所 [PrivacyIN] ZK トレーニング キャンプ コースの第 1 段階はオンラインで、このクラスでは、テキサス A&M 大学 (Texas A&M University) のコンピューター科学工学部の助教授である Zhang Yupeng 氏を招待して紹介します。古典的なゼロ知識証明プロトコル設計. 原則、クラスのテーマは「古典的な ZK プロトコルの基本原則 (Groth16 Plonk Stark)」です。

コース集中講義全文

ゼロ知識証明が 1985 年に Goldwasser、Micali、Rackof によって最初に提案されて以来、ゼロ知識証明理論と技術の進歩に伴い、Groth16、Pinocchio、Plonk、Marlin など、多くの古典的なゼロ知識証明システムが登場しました。 , Stark, Halo2, etc. これらのゼロ知識証明システムは、ゼロ知識証明を理論から実用化へと推進してきました. 同時に、これらのプロトコルの動作メカニズムと構築原理を理解することは、ZKPアプリケーションシステムを設計する上で非常に重要です.

このクラスでは、Zhang Yupeng 氏が、これら 3 つの代表的なプロトコル (非ユニバーサル) SNARK、PLONK、および STARK の設計原理を分析しました. 主な内容には、多項式のコミットメント、暗号数論の紹介、PlONK プロトコル、SNARK プロトコル、STARK プロトコルが含まれます。など

授業の最初に、Zhang Yupeng 氏は、学生が ZKP の概念とコンピューティング モデルの理解を深められるように、前の授業のゼロ知識証明システムを簡単に復習しました。
ここに画像の説明を挿入
多項式コミットメント

多項式コミットメント (多項式コミットメント) は、ゼロ知識証明システムを構築するための一般的な暗号ツールです. その構築モデルでは、証明者/検証者が主な参加者であり、インタラクティブな証明方法で構築されます (非知識証明システムに変換できます)。 Fiat–Shamir ヒューリスティックを使用したインタラクティブな方法)。実際、多項式コミットメントは、ゼロ知識証明の正確性、健全性、およびゼロ知識の特性も満たす、特別な種類のゼロ知識証明と見なすことができます。

多項式コミットメントの根拠は次のとおりです。

  • 証明者は多項式を持ち、この多項式へのコミットメントを構築しますδ f \delta_fdf、次にδ f \delta_fにコミットしますdf検証者に送信

  • 検証者が受け取ったコミットメントδ f \delta_fdf、任意にポイントを取り、このポイントを証明者に送信し、このポイントでの結果の計算を要求します

  • 証明者は計算要求を受け取り、多項式を使用して点 a でf ( a ) f (a)を計算します。f ( a )、証明証明を生成し、次にf ( a ) f(a)f ( a )と証明証明の両方が検証のために検証者に送信されます

ここに画像の説明を挿入
多くの古典的なゼロ知識証明プロトコルは、Plonk、Dark、Stark、Supersonic などの多項式コミットメントに基づいて構築されています。

KZG多項式コミットメントは、多項式コミットメント構造の非常に古典的で効率的な実装であり、特にPlonkプロトコルでは非常に基本的なコンポーネントです。KGZ 多項式コミットメントは Bilinear-Pairing と生成群 (注: 以下の内容で詳しく紹介します) に基づいており、生成群は一般的に楕円曲線に基づく有限体で生成されます (たとえば、楕円曲線を選択した後に g が決定されます)。 )、KGZ コミットメントの主な手順:

  1. 信頼セットアップ生成パラメータ

一般に、パブリック パラメーター素数 p と g (楕円曲線に関連付けられている) が選択され、MPC の儀式を使用して生成されます。

{ g , gs , gs 2 , gs 3 , ⋯ , gsd } \left\{ \begin{matrix} g,g^{s},g^{s^{2}},g^{s^{3} },\cdots,g^{s^{d}} \end{行列} \right\}{ g g _gs2gs3gsd}

ここで、s は乱数であり、生成中に破棄されます (s は秘密にされます)

  1. 約束と証明を作成する

生成群には加法準同型とスケール乗法性があり、コミットメントは次のように表されます。

gf ( s ) = g ∑ cisi = Π ( gsi ) cig^{f(s)}=g^{\sum{c_{i}s^{i}}}=\Pi\left(g^{s^ {i}}\right)^{c_{i}}gf ( s )=gcs=円周率( gsc

Schwartz-Zippel Lemma に基づく、つまり任意の乱数ssについてs、ポイントを取るaaaを開いてf ( a ) f(a)を評価しますf ( a )の場合:f ( s ) − f ( a ) = ( s − a ) q ( s ) f(s)-f(a)=(sa)q(s)f ( s )f ( a )=( sa ) q ( s )なので、f ( s ) − f ( a ) f(s)-f(a)f ( s )f ( a )s − a sasaq ( s ) q(s)q ( s )は、gf ( s ) / gf ( a ) g^{f(s)}/g^{f(a)} のようにジェネレータを使用して表されます。gf ( s ) /gf ( a )gs − ag^{sa}gs agq ( s ) g^{q(s)}gq ( s ) (相加準同型プロパティを持つ暗号化された値として理解できます)。

  1. コミットメント + 証明検証

バイリニア ペアリングを使用して検証します。

e ( gf ( s ) / gf ( a ) , g ) = e ( gs − a , gq ( s ) e(g^f(s)/g^f(a),g)=e(g^{sa },g^{q(s)}e ( gf ( s ) /gf (a),g )=e ( gs a ,gq ( s )

f ( s ) − f ( a ) = ( s − a ) q ( s ) f(s)-f(a)=(sa)q(s )f ( s )f ( a )=( sa ) q ( s )が成立します。
ここに画像の説明を挿入

暗号数論の基礎

ゼロ知識証明には非常に重い数論の要件があります.深刻な数学的問題を克服し、古典的なプロトコルの構築の背後にある数学的原理を誰もが理解できるようにするために、張玉鵬氏は、素数の最も基本的な定義から数論を学び始めるように全員を導きました.数とモジュロ演算。

素数 p は、p が 2 以上で、p と 1 だけで割り切れる整数です。

モーダル算術とは、任意の数値またはその算術演算値 (中間演算を含む) がモジュラスで指定された正の整数 (p など) を必要とすることを意味します。これにより、モーダル演算後の数値が次のように (0,p) の間にあることが保証されます。モジュロ 13 演算:

-1mod13=-1 +1x13=12;
-1+2mod13、つまり (-1mod13)+(2mod13)=(12+2)mod13=1.

ここに画像の説明を挿入

グループ Group は一連の数値で定義され、次の演算子を満たします。

  • 閉鎖閉鎖 (グループ内の要素は、演算子操作の実行後も定義されたグループ内にあります)

  • 結合法則 結合性 (群内の要素は、(a+b)+c=a+(b+c) のような定義演算子操作の可換法則を満たします)

  • 要素がゼロの同一要素 (群内に要素 e があり、群内の任意の要素であり、定義操作を実行する e が要素自体である)

  • 逆元 (群内の任意の元 a、群内に元 b があり、a+b=e を満たす)

たとえば、足し算 + の整数のグループと、足し算を法とする整数のグループです。

ここに画像の説明を挿入

ドメイン Field は、操作 (+, x) を満たすグループ Group です。

  • フィールド フィールドは加算グループです

  • フィールド Field は、追加のゼロを削除する "x" 操作のグループです。

有理数、実数、複素数、および素数 p を法とする整数 (有限体) はすべて体であり、有限体は暗号化で非常に一般的に使用されます。

ここに画像の説明を挿入

有限体は常に生成元(Generator)を見つけられるという特徴があり、生成元自体の巡回乗算演算は有限体のすべての元、つまり巡回群を得ることができるので、生成される指数形式の元はさらに、現在、有限体の生成元を見つけることができる高速なアルゴリズムがあります。

ここに画像の説明を挿入

バイリニア ペアリング バイリニア ペアリングは、基数乗算巡回群の 2 つの要素ペアをターゲット ターゲット グループにマッピングする、非常に効率的な暗号化ツールです。

e ( pa , Q b ) = e ( P , Q ) ab : G × G → GT e(p^a,Q^b)=e(P,Q)^ab:G \times G \rightarrow G_Te ( p _Qb )=e ( P ,Q )a b:G×GGT

Bilinear-Pairing は、乗法巡回群の元間の乗法関係 (等しいかどうか) を検証するために使用できますが、計算には使用できず、その実装はより複雑です. コースでは、主に Bilinear の操作上の特徴を紹介します. -ペアリング、および次のような使用例を提供します。

e ( ga , G b ) = e ( g , g ) ab = e ( gab , g ) e(g^a,G^b)=e{(g,g)}^ab=e(g^ab, g)e ( g _Gb )=e ( g ,g )a b=e ( ga bg )

PLONK プロトコル

Plonk の構築原理をよりよく説明するために、Zhang Yupeng 氏は一般的な ZKP 構築モデルを提示しました。秘密データを入力として使用し、回路を実行して出力を得ることを検証者に伝え、検証者は証明者の証明が正しいかどうかを検証します。

ここに画像の説明を挿入

Plonk プロトコルは、SRC (Structure-Reference-String) を次の形式で使用する、ユニバーサルで信頼できる設定のゼロ知識証明プロトコルです。

{ g , gs , gs 2 , gs 3 , ⋯ , gsd } \left\{ \begin{matrix} g,g^{s},g^{s^{2}},g^{s^{3} },\cdots,g^{s^{d}} \end{行列} \right\}{ g g _gs2gs3gsd}
の構造パラメータ。一般的で更新可能な特性があります。Plonk は主に、KZG のコミットメントと順列に基づいて、独自の回路表現を設計することによって実現されます。Plonk 回路ゲートは、Plonkish 形式 (R1CS とは異なります) を使用して、回路ゲートの制約を一様に表します。

q L iai + q R ibi + q M iai × bi + q O ici + qci = 0 q_{L_i}a_i+q_{R_i}b_i+q_{M_i}a_i \times b_i+q_{O_i}c_i+q_{ c_i}=0qLa+qRb+qMa×b+qc+qc=0

このように、足し算、掛け算、公開入力、公開出力は、すべてこの式で表すことができます。

たとえば、加算ゲートは次のように表すことができます。

q L 1 = 1 , q R 1 = 1 , q M 1 = 0 , q O 1 = − 1 , qc 1 = 0 q_{L_1}=1,q_{R_1}=1,q_{M_1}=0, q_{O_1}=-1,q_{c_1}=0qL1=1 qR1=1 qM1=0 q1=1 qc1=0

たとえば、乗算ゲートは次のように表すことができます。

q L 2 = 0 , q R 2 = 0 , q M 2 = 1 , q O 2 = − 1 , qc 1 = 0 q_{L_2}=0,q_{R_2}=0,q_{M_2}=1, q_{O_2}=-1,q_{c_1}=0qL2=0 qR2=0 qM2=1 q2=1 qc1=0

ここに画像の説明を挿入

Plonk プロトコルの構築は、主に回線ゲート制約処理とコピー (回線) 制約処理の 2 つの部分に分けられます。

回路ゲート制約処理の主な手順:

証明者、検証者の前処理、多項式補間を使用して係数多項式q L ( x ) qL(x)を解くq L ( x )q R ( x ) qR(x)qR ( x )qM ( x ) qM(x)qM ( x )q O ( x ) qO(x)qO ( x )qC ( x ) qC(x)qC ( x ) ; 証明者は、回路のゲート ライン入力多項式a ( x ) a(x)a ( x )b ( x ) b(x)b ( x )c ( x ) c(x)c ( x )、補間された根を解きます。

x = wi , i = 0 , … , n − 1 x=w^i,i=0,\ldots,n-1バツ=w私は=0 n1

証明者 これらの多項式は多項式に圧縮され、目的の多項式t ( x ) t(x)が得られます。t ( x )

q L ( x ) a ( x ) + q R ( x ) b ( x ) + q M ( x ) a ( x ) b ( x ) + qo ( x ) c ( x ) + qc ( x ) = VH ( x ) t ( x ) q_L(x)a(x)+q_R(x)b(x)+q_M(x)a(x)b(x)+q_o(x)c(x)+q_c(x) =V_H(x)t(x)qL( x ) a ( x )+qR( x ) b ( x )+qM( x ) a ( x ) b ( x )+qo( × ) c ( × )+qc( × )=H( x ) t ( x )

VH ( x ) = ∏ i ( x − wi ) V_H(x)=\prod_i(xw^i)H( × )=( ×wi )消失多項式

(注: t ( x ) t(x)元の論文におけるt ( x )の実現は、回路ゲート制約とコピー制約によって構築された多項式の 2 つの部分で構成されています)。

証明者は、KZG コミットメントを使用して( x ) a(x)を作成します。a ( x )b ( x ) b(x)b ( x )c ( x ) c(x)c ( x )t ( x ) t(x)t ( x )は証明として使用されます。これは、公開して正確性を検証するというコミットメントのために検証者に提供されます。

ここに画像の説明を挿入

Plonk のコピー制約の主なアイデアは、等しい回路線を置換 (再配置) することにより、置換後の要素が要素と等しくなり、置換多項式を導入し、さらにそれを同等の制約多項式に変換することです。
ここに画像の説明を挿入

そして最終的に、ラグランジュ多項式に基づく特別な多項式Z ( X ) Z(X)に変換されますZ ( X )であり、この多項式とゲート制約多項式を使用して、証明と検証のために圧縮された新しい多項式を形成します。

ここに画像の説明を挿入
ここに画像の説明を挿入

コピー (行) 制約の処理における主な手順:

  • 証明者と​​検証者の前処理、順列多項式を解くための多項式補間:

SID ( x ) , S δ ( x ) S_{ID}(x),S_\デルタ(x)S( × ) Sd( × )

(注: Plonk の元の論文は、同様の多重置換関数を使用しており、原理は類似しています)

  • prover对 Z ( x ) Z(x) Z ( x )などの多項式は、

  • 検証者は、KZG コミットメント オープンと多項式関係の正当性検証を実行します。

Plonk プロトコルの全体的な実行:

Plonk プロトコルの全体的な実装は、実際にはゲート制約と複製制約の処理であり、完全なプロトコルを構築するために、主に KZG 多項式コミットメントとラグランジュ補間に基づいて、大きなゲート制約と複製制約に関連付けられた大きな多項式制約を構築します。最後に、検証に Bilinear-Pairing を使用します。

ここに画像の説明を挿入

スナークプロトコル

従来の SNARK プロトコルは主に、非普遍的信頼設定を使用してゼロ知識証明を生成するために必要な公開パラメーターと公開鍵 (認証鍵と検証鍵) を参照します. これは一般に、簡潔な非対話型ゼロ知識証明プロトコルに基づいています。 Billlinear-Pairing. ここでは、より古典的な構造には Pinocchio および Groth16 プロトコルが含まれ、主に R1CS を使用して回路制約を構築し、それらを QAP に変換して多項式証明を構築し、Billlinear-Pairing を使用して多項式を検証します。

ここに画像の説明を挿入

従来の SNARK 計算問題の一般的なワークフローは次のとおりです。

  • 計算問題を回路問題 (回路として表される) に変換する

  • 回路を R1CS 制約 (乗算ゲート制約) として表す

ここに画像の説明を挿入

  • R1CS 制約を多項式補間で解いて QAP を求め、QAP 多項式と対象多項式 t(x) を証明部として暗号化された形で群 G に変換する
    ここに画像の説明を挿入

  • QAP 多項式とターゲット多項式t ( x ) t(x)に Billlinear-Pairing を使用するt ( x )の定義
     : 検証: e ( π 1 , π 2 ) / e ( π 3 , g ) = e ( gt ( s ) , π 4 ) \text { 検証: } e\left(\pi_{1 }, \pi_{2}\right) / e\left(\pi_{3}, g\right)=e\left(g^{t(s)}, \pi_{4}\right) 検証:  e( p1円周率2)/ e( p3g )=e( gt ( s ) ,円周率4)

スタークプロトコル

STARK はトラステッドセットアップを必要としないシンプルな非対話型ゼロ知識証明プロトコルです. STARK のフロントエンドは主に共構築のために RAM (Random-Access-Memory) プログラムを採用しています. 典型的な RAM プログラムはCPU(多数のレジスタなどを含む)、メモリ、メモリ、プログラム実行命令プログラムなど

ここに画像の説明を挿入

STARK は、証明問題を RAM プログラムが正しく実行されているかどうかの証明に変換します。これは、従来の zkSNARK プロトコル検証回路の実行とは大きく異なります。STARKはフロントエンドプログラムの構築にRAMプログラムを使用しているため、設計プログラムは回路規模に制限されることなく、非常に少ない命令コードで多くの回数と循環的な命令ステップを実行できます; ランダムアクセス操作は一定の複雑さなどの利点があります. .

ここに画像の説明を挿入

STARK は、RAM-to-cuirt-Reduction テクノロジーを使用して証明します。これは、計算プロセス全体で RAM と CPU の状態変化とのすべての相互作用を記録し、それらを接続または集約し、それらを同様の回路制約に変換して、RAW を証明および検証します。プログラムは正しく実行されます。

ここに画像の説明を挿入

STARK の算術演算は一連の多項式で表され、プログラム実行ステップ 1 の状態はP 1 ( X , ⋯ , Y ) P1(X,\cdots,Y)P 1 ( X ,Y )、ステップ 2 を実行した状態はP 2 ( X , ⋯ , Y ) P2(X,\cdots,Y)P 2 ( X ,Y )、各ステップは多項式を構築できます。

ここに画像の説明を挿入

STARK のバックエンド実装は、実行ステップ多項式を SNARK や Plonk と同様の多項式制約に変換し、ある程度のランダム線形結合を実行して大きな検証多項式を構築し、プログラム実行の正確性を証明および検証できます。

ここに画像の説明を挿入

実際、STARKはマークルツリーに基づくFRIプロトコル(低次テスト)を使用してバックエンド構築を実現しています.さらに、追加のPermutationテストと公開制約が必要です.FRI部分の理論は比較的複雑です.そしてそれは教室で深く議論されませんでした。
ここに画像の説明を挿入
ここに画像の説明を挿入

自由討論セッションでは、Zhang Yupeng が、学生向けのプロトコル設計の原則に関する一連の関連する質問に辛抱強く答えました。

閉じるプライバシーIN

PrivacyIN Privacy Institute (Privacy Institution) は、LatticeX Foundation によって開始され、オープンな暗号およびプライバシー技術の伝道と研究コミュニティの構築に取り組んでいます。世界トップクラスの学者やプライバシー テクノロジー開発者に加わり、ZK (ゼロ知識証明)、MPC (Secure Multi-Party Computation)、および FHE (完全準同型暗号化) の革新と実装を促進します。

LatticeX財団について

LatticeX Foundation (LatticeX Foundation) は、ユーザー データの主権を取り戻し、データのプライバシーを保護し、複雑な計算を構築することでデータの価値交換を実現するというビジョンを掲げ、完全に分散化されたコンピューティングの相互運用性ネットワークの構築を目指し、グローバルなオープン ソース テクノロジ コミュニティです。データの主権とプライバシーを保護するという前提の下でデータ使用権の取引を行い、LatticeX のビジョンを実現するためのさまざまな学術研究および科学研究プロジェクトに資金を提供します。

おすすめ

転載: blog.csdn.net/Matrix_element/article/details/127314839