ZCash の背後にあるゼロ知識証明を理解するための記事

avatar
CertiK
2年前
本文は約3892字で,全文を読むには約5分かかります
この記事では、ゼロ知識証明がどのように機能するかを直感的に説明します。

ZCash の背後にあるゼロ知識証明を理解するための記事

暗号化の複雑な分野では、ゼロ知識証明は、情報自体を明らかにすることなく、情報の一部についての知識を証明するという、一見矛盾したタスクに対する独自の解決策を提供します。この暗号化方式には、証明者と検証者の 2 つの当事者が関与します。証明者の目標は、x 自体に関するデータを明らかにすることなく、何らかの情報 (x とします) を所有していることを証明することです。検証者が交換から学ぶことは、証明者がその知識を持っているという単純な事実です。最も重要なことは、検証者は x に関する追加情報を持っていないということです。

たとえば、シャオリンとシャオシーが脱出ゲームをしているとき、シャオリンはある「宝箱」のパスワードを解いたとシャオリンに告げる。しかし、シャオリンは既成の「答え」を直接共有する気はなく、シャオテンの前にある宝箱を開ける気もありません。それでは、Xiao Shi が本当にパズルを解き、宝箱のパスワードを知っていることを証明するにはどうすればよいでしょうか?

そこで彼はシャオテンに自分だけが知っている文字列を紙に書いてもらい、同時に自分の名前に署名し、その紙を宝箱の隙間に押し込みました。

そこでシャオリンは宝箱を開け、シャオテンが入れていた紙を取り出してシャオテンに見せ、文字列と署名が正しいか確認した。これはシャオリンが宝箱のパスワードを知っていることを証明しており、この紙片は確かに宝箱から取り出されたものである。

ゼロ知識証明

ゼロ知識証明

暗号化において、ゼロ知識証明 (Zero Knowledge Proof、ZKP とも呼ばれます) またはゼロ知識プロトコルは、証明者が検証者に、信じるか証明するよう説得し、検証者にステートメントまたはアサーションの真実性を与えることを可能にする方法です。

ゼロ知識証明はもともと、MIT 教授のシャフィ・ゴールドワッサー氏、シルビオ・ミカリ氏、暗号学の達人チャールズ・ロックフ氏による論文「対話型証明システムの知識の複雑さ」で提案されました。このアルゴリズムの概念は、現代の暗号化の一定の基盤を築きました。

ゼロ知識証明には、簡潔さとゼロ知識という 2 つの追加特性があります。簡潔性により、検証者はステートメントや表現自体を計算することなく、大規模な計算の正しさを受け入れることができます。また、ゼロ知識では、入力に関するデータが漏洩しないことが保証されます。

最初のレベルのタイトル

幅広い用途

ブロックチェーンと暗号化: Zcash のようなブロックチェーン テクノロジーは、ゼロ知識証明を使用してトランザクションのプライバシーを保護します。人は、正確な資金額を開示しなくても、取引を行うのに十分な暗号通貨を持っていることを証明できます。これにより、トランザクションの整合性を確保しながらプライバシーも確保されます。

ID の検証と認証: ゼロ知識証明は、不必要な情報を明らかにすることなく ID を確認するために使用することもできます。たとえば、正確な生年月日を提供せずに 18 歳以上であることを証明したり、パスワードなどの機密データを共有せずに身元を証明したりすることができます。これにより、個人情報の盗難や不正アクセスのリスクが最小限に抑えられます。

Secure Multi-Party Computation (SMPC): ゼロ知識証明は、複数の当事者間の複雑な対話を容易にすることができ、各当事者は入力の詳細を明らかにすることなく、合意されたプロトコルに従っていることを証明できます。これは、プライバシーを保護するデータマイニング、安全な投票システムなど、多くの側面で非常に効果的です。

ネットワーク セキュリティ: ゼロ知識証明は、安全なパスワード ポリシーなどの改善されたセキュリティ プロトコルを提供できます。実際のパスワードをサーバーに知らせたり記録したりすることなく、ユーザーが提案したパスワードが特定のセキュリティ基準を満たしていることを検証できます。パスワードはどこにも保存されないため、潜在的な侵害が防止されます。

プライバシーを保護しながらデータを共有する: ゼロ知識証明は、データ自体を明らかにすることなく、特定のデータが特定の要件を満たしていることを証明するために使用できます。これは、医療や金融などの分野で特に重要です。これらの分野におけるデータプライバシー規制は厳しいですが、安全かつプライバシーを保護した方法で情報を共有することは、医療キャリアの発展を促進するなど、大きなメリットをもたらす可能性があります。

最初のレベルのタイトル

証明をどのように表現するか

このセクションと記事の残りの部分では、PLONK ベースの証明システム用に構築された証明に焦点を当てます。

PLONK はゼロ知識証明システムであり、その正式名は

「知識のエキュメニカル非対話型議論のためのラグランジュ基底上の順列」、つまり「ラグランジュ基底に基づくグローバルな非対話型知識証明の取り決め」。

本質的に、PLONK は汎用の更新可能な暗号証明システムであり、ブロックチェーン システムやその他の分散ネットワークでの効率的な検証と拡張を可能にするイノベーションです。

PLONK の背後にある考え方は、一般的で更新可能な証明システムを構築することです。ゼロ知識証明システムのコンテキストでは、「ユニバーサル」とは、あらゆるタイプの計算に使用できることを意味し、「更新可能」とは、暗号参照文字列 (証明の生成と検証に使用されるデータの一部) が時間の経過とともに安全に更新されることを意味します。 。

PLONK はその効率性とシンプルさで際立っており、安全なプライベート トランザクション システムを必要とするプロジェクトや企業に人気の選択肢となっています。他のシステムと比較して、ゲート (計算の基本単位。総称して「ゲート」と呼びます) ごとに使用する制約が少ないため、計算がより高速になり、よりスケーラブルになります。

最初のレベルのタイトル

証明する

ステートメントを証明する前に、まずステートメントを回路の観点から表現します。回路は、他の 2 種類のデータとともに計算の値をエンコードします。

1. 演算:入力データに対する乗算や加算などの演算
2. 操作の実行順序

このデータをエンコードするために、PLONKish 回路はベクトルと制約のセットとして表されます。制約は、ベクトル内のユニットが従わなければならない関係です。制約のタイプには、ゲート制約とコピー制約があり、それぞれ回路内の演算と演算の順序を表します。

さまざまなゲートと回路アーキテクチャを使用して回路を表現する方法は数多くあります。

🎛 ステートメントを回路として表現する

乗算ゲートと加算ゲートの 2 つのゲートがあるとします。乗算ゲートは、長さ 3 のベクトル |a|b|c| として表されます。

このゲートが選択されると、c が a*b に等しくなるように制約されます。同様に、加算ゲートは長さ 3 のベクトルとして表され、加算ゲートが選択された場合、c は a+b に等しくなります。これらのゲートを使用して、2 つのベクトル (a, b) と (c, d) の間の内積を表してみましょう。これを行うには、次の計算を実行する必要があります。

1. 乗算ゲートを使用して a*b を計算します
2. 乗算ゲートを使用して c*d を計算します
3. 加算ゲートによる ab+cd の計算
これはベクトルで表すことができます。

ZCash の背後にあるゼロ知識証明を理解するための記事

最初と 2 番目の乗算ゲートの出力が加算ゲートの入力値であることに注意してください。このデータは、回路内のゲート制約とは別にエンコードされます。これをコピー制約と呼びます。

では、なぜ回路制約が重要なのでしょうか?制約がない場合、悪意のあるバリデータは回路に任意の値を入れることができます。たとえば、検証者は ab+cd を aba*b に置き換えることができます。スマート コントラクトと同様に、制約は使用する前に証明システムを通じて検証する必要があります。

🎛証拠陳述

回路の観点からステートメントを表現できるようになったので、証明者はどのようにして証明が有効であることを検証者に納得させるのでしょうか? PLONK システムの場合、証明者は、ゲート制約とレプリケーション制約が満たされていることを検証者に納得させる必要があります。コピー制約の場合、これは順列チェックによって行われます。

置換チェックは Bayer-Groth によって最初に提案され、Gabizon、Williamson、Ciobotaru によって PLONK 論文でさらに開発されました。ゲートの制約を証明するには、特定の商多項式を計算する必要があります。

直感的には、並べ替えチェックでは、コピー制約のエントリが並べ替えられた場合でも、回路は同じままであることがわかります。 🎛 交換小切手

b のすべての i 番目の位置について、a に等しい σ(i) 位置が存在する場合、ベクトル a は順列 σ によってベクトル b に関連付けられていると言います。これを σ(a)=b と表します。 2 つのベクトル a=(a, b,..., c)、b=(a, b,..., c)$ と順列 σ が与えられた場合、σ(a)= であることを決定したいとします。 b 。これは次のようにして実行できます。

ベクトルを a=((a, 1),(b, 2),...,(c, n)) および b=((a,σ( 1),(b,σ( 2) として表現します。 )),...,(c,σ(n)) ). これは、順列 σ に関するベクトルをエンコードします。

ベクトルを多項式ベクトルとして書き換えます: a=((a+1X),(b+2X),...,(c+nX)) および b=((a+σ(1)X )、(b+σ(2)X)、...、(c+σ(n)X))

a と b がマルチセットとして等しいかどうかを確認するには、 $(a+ 1 X+γ)(b+ 2 X+γ)....(c+nX+γ ) = ( a+σ( 1)X)+γ)(b+σ( 2)X+γ)....(c+σ(n)X+γ)$。

最後に書きます

最後に書きます

ゼロ知識証明は複雑なテーマですが、その採用は増加しています。この記事では、ゼロ知識証明がどのように機能するかを直感的に説明しました。将来的には、CertiK チームも参加して、ゼロ知識証明のアプリケーションと、チームが新しいユースケースに合わせて回路を最適化する方法についての詳細なディスカッションに参加する予定です。

オリジナル記事、著者:CertiK。転載/コンテンツ連携/記事探しはご連絡ください report@odaily.email;法に違反して転載するには必ず追究しなければならない

ODAILYは、多くの読者が正しい貨幣観念と投資理念を確立し、ブロックチェーンを理性的に見て、リスク意識を確実に高めてください、発見された違法犯罪の手がかりについては、積極的に関係部門に通報することができる。

おすすめの読み物
編集者の選択