ブロックチェーンのゼロ知識証明を 1 つの記事で読む
BFTF技术社区联盟
2018-09-20 07:23
本文约3806字,阅读全文需要约15分钟
ゼロ知識証明とは何ですか? ZCash のゼロ知識証明の原理と Monero のプライバシー保護スキームは何ですか?

この記事は以下からのものです。 BFTF(ID:bftf2018)文章

この記事は以下からのものです。

、著者:呉瓊。

ゼロ知識証明は確率に基づく検証手法であり、検証内容には「事実の記述」と「個人の知識に関する記述」が含まれます。検証者は、あるランダム性に基づいて証明者に質問をし、正しく答えることができれば、証明者は自分が主張する「知識」を高い確率で持っていることになります。ゼロ知識証明システムは、ある命題が真であると宣言する証明者と、その命題が実際に真であることを確認する検証者の 2 つの部分で構成されます。証明は、これら 2 つの部分間の相互作用を通じて実行されます。ゼロ知識プロトコルの最後に、検証者は命題が真であるかどうかのみを確認します。ただし、証明者が誤った命題を主張した場合、検証者が誤りを発見する可能性は十分にあります。

ここでは、理解を助けるためにゼロ知識証明の非常に古典的な例を示します。

アリババは強盗に捕まりましたが、命を救うためには、石の門を開けるパスワードを持っていることを強盗に証明しなければなりませんでした。

同時に、パスワードを強盗に教えることはできません。彼は解決策を思いついた、まず強盗に矢を放っておくことだ、

その距離は強盗がパスワードを聞くことができないほど遠く、アリババが強盗の弓矢の下で逃げることができないほど近い。

強盗が左手を上げるとアリババは暗証番号を使って石の門を開け、右手を上げると石の門を閉める。

アリババが強盗たちに石の門の開閉を見せたのはこの距離でした。毎回ゲートが正しく開閉できれば、アリババが石門のパスワードを知っていることが確認できます。

  1. このプロセス全体はゼロ知識証明です。つまり、証明者は、検証者に有益な情報 (石門のパスワード) を何ら提供することなく、特定の主張 (アリババは石門の開け方を知っている) が正しいと検証者に納得させることができます。

  2. これから、ゼロ知識証明の 3 つの特性を要約できます。

  3. このステートメントが真実であれば、正直な検証者 (つまり、プロトコルに正しく従う検証者) は、正直な証明者によってこの事実を確信するでしょう。

ステートメントが偽である場合でも、詐欺師が正直な検証者にそれが真実であると説得できる可能性を排除するものではありません。

ステートメントが正しい場合、証明者の目的は、検証者に対して証明し、検証者に特定のメッセージを知っている、または持っていると信じさせることであり、証明プロセス中に、証明されたメッセージに関する内容を検証者に漏らすことはできません。

サトシ・ナカモトはビットコインを創造的に提案し、分散型取引プラットフォームを構築し、サードパーティ取引プラットフォームへの長期的な信頼と依存を取り除きましたが、同時にビットコインはすべてのトランザクションをネットワークにブロードキャストする必要があります。システム全体のセキュリティはこれは、すべてのノードを通じてコン​​センサスに達することによって保証されます、つまり、すべての人がネットワーク上のすべてのトランザクションを見ることができ、元のビットコイン プロトコルではトランザクションの送信者と受信者のアドレスが指定されていません。住所の取引特性を分析し、いくつかの実際の情報を組み合わせることで、住所と実際の人物との対応関係を分析することは、ユーザーのプライバシーに大きな隠れた危険をもたらします。これに基づいて、いくつかの有名なプライバシー コインが派生しましたが、その中でゼロ知識証明は非常に重要な役割を果たしています。

ZCash

ゼロ知識証明を使用するいくつかのブロックチェーン システムを紹介しましょう。

最初のレベルのタイトル

  • 匿名暗号通貨プロジェクトとして、ZCash は当初ビットコインの暗号化された匿名層としてのみ存在していましたが、後にその優れたプライバシーにより独立した暗号通貨になりました。ビットコインと同様に、ZCash の総額も 2,100 万ですが、違いは真の匿名性を実現できることです - 取引を完了するために相手がいくら持っているかを知る必要さえありません。

  • では、ZCash はどのようにして真の匿名性とプライバシー保護を実現しているのでしょうか?

zk-SNARK技術、つまりゼロ知識証明技術を活用:通貨のソースとフロー情報が完全に機密であっても、ゼロ知識証明技術により、お金を使うユーザーが本当にその通貨を所有していることを検証できます。

ZCashデジタル通貨をトランザクションに使用すると、トランザクションの元のデータが自動的に暗号化されます;同時に、個々のトランザクションはデータを保存するためにZCashノードを必要とせず、その「消費力」を証明するためにzk-SNARKのみが必要になります。これは、トランザクションプロセスにおける主に 2 つの点に反映されます。1 つは、特定のトランザクション内容を知らなくても、他の人がトランザクション (またはスマートコントラクトの関数呼び出し) の正当性を検証できるようにすること、2 つ目は、トランザクションの詳細をトランザクションに記録することもできることです。パブリックブロックチェーンを排除します。

このように、取引の当事者双方が現れることはないようで、実際の取引は完了します。メロンを食べる人は、取引が行われたことだけを知っていますが、通貨の流れを追跡することはできません。これにより、真の「匿名取引」が実現します。

  • 副題

zk-SNARK への技術実装

準同型隠蔽

準同型隠蔽はゼロ知識証明をある程度実現できます。

  1. 例:

  2. A は 2 つの秘密の数字 x と y を持っており、これら 2 つの数字の合計が 7 であることを B に証明する必要があり、次の 3 つの手順を実行するだけで済みます。

  3. A は f(x)、f(y) を計算し、それを B に送信します。

  • 関数 f(x) は加法準同型性を満たすため、B は f(x)、f(y) を通じて f(x+y) を計算できます。

B は独自に f(7) を計算し、f(x+y)=f(7) を検証します。

多項式ブラインド検証

多項式ブラインド検証では、多項式に対する加法準同型性の特性を使用します。 (ここでは数学的な概念が比較的強いので、表面的な理解しかできません)

  1. A が最高次数 d の多項式 P を知っており、B がいくつかの s に対応する E(P(s)) を知りたいとします。

  2. 検証プロセス中、A は P だけを知っていて s は知らない、B は s だけを知っているが P は知らないことを望みます。これは次の方法で実現できます。

  3. s のインデックスごとに、B は E(1)、E(s)、...、E(sd) を計算し、それを A に送信します。

    A は多項式のすべての係数を知っており、準同型特性を使用して P(s) を計算し、それを B に送り返すことができます。

    KCA (係数テストと仮定の知識) および完全多項式ブラインド検証。

  4. 上記の多項式ブラインド検証方法には致命的な問題があります。つまり、B は、A が本当に多項式 P(s) を使用して結果を計算しているかどうかを検証できません。つまり、A が多項式 P(X を本当に知っていることを証明できません) )。 KCA は上記の検証を継続的に改善していきます。

    つまり、加法準同型性により加法隠蔽を実装することができ、B が x と y を知らなくても x+y の値を検証できるようになります。さらに、多項式ブラインド検証を通じて、多項式 P(X) を暴露することなく、B に任意の s に対応する P(s) を検証させることができます。

  5. 任意の計算が多項式証明に変換されました。

    検証プロセスの最終ステップ。

モネロ

最初のレベルのタイトル

モネロ

  1. Monero は、現在の暗号化デジタル通貨の代表格として、取引のプライバシーを確​​保するために非常に独創的な暗号技術を適用しています。

  2. Monero の 2 つの特性:

リンク不可能性: 2 つのトランザクションが同じ人物に送信されたことを証明することは不可能です。つまり、トランザクションの受信者が誰であるかを知ることは不可能です。

  1. 追跡不可能性: トランザクションの送信者が誰であるかを知ることは不可能です。

    Monero の技術的実装:

    ステルスアドレス

  2. Monero では、送信者がトランザクションを開始するたびに、まず受信者の公開鍵情報を使用して 1 回限りの一時的な中間アドレスを計算し、次に金額をこの中間アドレスに送信します。その後、受信者はパブリック/プライベート アドレスを使用します。キー情報は、トランザクションを見つけて使用するために使用できます。このようにして、マイナーを含むネットワーク上の他のユーザーは、中間アドレスが誰に属しているかを判断できませんが、トランザクションの正当性を検証することはできます。は 1 回限り、毎回ランダムに再生成されるため、攻撃者は実際の送信者および受信者と関連付けることができなくなります。

    アリスがボブにアカウントを転送したいと仮定すると、ボブにとっては非常にストレスがかかります。ブロックチェーン上のすべてのトランザクションをスキャンし、対応する情報を計算して比較して、自分に送信されたトランザクションを見つける必要があるからです。 Monero はこれに対する改善された解決策を提案しています。つまり、ボブは自分の秘密鍵 (a、B) の半分を第三者に渡すことができ、それによってブロックチェーン上のボブに属するすべてのトランザクションをチェックするのを第三者に許可することができます。ボブのプレッシャーを和らげますが、最終的に費やすことができるのはボブだけです。

ワンタイムリング署名(ワンタイムリング署名)

つまり、リング署名は、署名者の公開鍵を別の公開鍵のセット (ただし秘密鍵はわからない) と混合し、メッセージに署名します。これにより、署名検証者 (誰でも検証できます) にとって、混合セット内のどの公開鍵が実際の署名者に対応するかを区別することは不可能です。

Monero で使用されるリング署名テクノロジーの全プロセス:

最初のステップ、鍵生成 (GEN)

署名者はまず秘密鍵 x をランダムに選択し、次に対応する公開鍵を計算します。同時に、別の公開鍵が計算されます。この公開鍵 I を「鍵画像」と呼び、この鍵画像は署名ごとに一意であるため、後でその署名が以前に出現したかどうかを判断するためにも使用されます。

第 2 ステップ、署名 (SIG)

まず、署名者は n 個の要素を含む公開鍵セットをランダムに選択し、それを自分の公開鍵と混合して混合セット S を生成します。 S の混合署名者の公開鍵の添え字が s であると仮定すると、署名者の公開鍵は追伸です。次に、署名者は [1, l-1] から {qi, i = 0,...,n} と {wi, i=0,...,n,i!=s} をランダムに選択し、非インタラクティブなチャレンジ。

ここでの非インタラクティブは、インタラクティブなゼロ知識証明のチャレンジに関連しています。インタラクティブ モードでは、チャレンジは検証者によってランダムに選択された値であり、ブロックチェーンではトランザクションの両当事者がブロックチェーンを渡すことしかできないためです。情報を転送するが、直接対話しないため、ここでは非対話型のゼロ知識証明が選択されます。この課題の理由は、証明者が検証者を欺くために証拠を偽造する状況を回避するためです。

3 番目の部分、署名検証 (VER)

署名の有効性を検証するために、検証者は最初に計算を行ってから検証します。等価性が true の場合は、LNK を実行して署名が使用されているかどうかを確認します。等価性が true でない場合、署名は不正です。

第4ステップ、リピートチェック(LNK)

これには、システムがすべての署名を含む画像のコレクションを維持し、新しい署名ごとに、その画像がコレクション内にあるかどうかを判断することによって、その署名が以前に出現したかどうかを判断する必要があります。このステップの前に、前のステップの署名検証プロセスを通過する必要があることに注意してください。

BFTF技术社区联盟
作者文库