
シリーズ: Zcashから第一原理へ . 第6回. シールドプロトコル (最終章) 対象読者: 第0回から第5回までを読んだ新規ユーザー。ここではすべてがつながる。 得られるもの: シリーズで紹介されたすべての概念を適切な位置に配置し、第0回で提示されたすべてのループを閉じた、完全で正確なシールドZcash取引の心的モデル。
記事0では、パラドックスと公開ボード上の封印された封筒に関する物語から始めた。その後5つの記事を使って、有限体、楕円曲線、コミットメント、マーチャンツツリー、ゼロ知識証明といった部品を構築した。今やそれらを組み合わせて、本当にプライベートな支払いがどのように始まりから終わりまで行われるかを見ていこう。
個々のピースはそれぞれ巧妙である。しかしZcashの魔法はそれらがどのように互いに組み合わさっているかにある。nullifier(ヌリファイア)だけではプライバシーは得られないし、コミットメントだけでは偽造を防ぐことはできないし、証明だけでは何の役にも立たない。組み合わせこそが、5つの部品を同時にプライベートで信頼できる通貨に変える。
この記事はその組み合わせである。最後まで読めば、「ネットワークは見えない取引を検証する」という文は、パラドックスではなく、すでに理解している部分の明確な結果として感じられるようになるだろう。
ここでは、記事0の物語から実際の仕組みにマッピングした、シリーズ全体を1ページで確認できる。
| 記事0の物語要素 | 実際のコンポーネント | 作成方法 |
|---|---|---|
| 封筒の中のお金 | ノート(価値、受取人、ランダム性) | フィールド要素としてエンコード(記事1) |
| 封印された不透明な封筒 | ノートコミットメント | Pedersen / Sinsemillaコミットメント(記事2, 3) |
| 公開ボード | ノートコミットメントツリー(アンカー = ルート) | インクリメンタルマーチャンツツリー(記事4) |
| 空のトークン | ヌリファイア | ノート + 秘密鍵のZK対応ハッシュ(記事2, 3) |
| 「入金は出金に等しい」 | 価値コミットメント + バランスチェック | 同型Pedersenコミットメント(記事2, 3) |
| 裏側の魔法 | ゼロ知識証明 | アリティメトリック回路上のzk-SNARK(記事5) |
| 「あなただけが封筒を開ける」 | 暗号化されたノート + ビューイングキー | 暗号化 + キー階層(この記事) |
ユーザーができるすべてのことは、支出鍵という単一の秘密から流れている。1方向性の階層を介して(各矢印は不可逆的な導出であり、記事2と3で説明したトラップドアのおかげ):

以前の記事の結果として2つの重要な点に注意すべきである。
ノートをプライベートに使うには、ネットワークにノート、価値、位置、またはあなたのアイデンティティを明らかにすることなく、次の4つのことを同時に説明しなければならない。それぞれの主張はすでにご存知のコンポーネントで満たされる。

証明は下層の事実(どのノート、どの鍵、どの価値)を一切明らかにしない。ただすべての4つの主張が成立していることを示すだけである。それがシールドZcashの全体像であり、一つの図で説明されている。
記事2と3では、Pedersenコミットメントが加算可能であることに注目した。ここがその成果である。
すべての入力および出力ノートは、価値コミットメントをもつ:v.G + r.Hという形式で、金額vを隠すPedersenコミットメント。これらが加算可能なのでネットワークは以下を計算できる:
(入力価値コミットメントの合計)−(出力価値コミットメントの合計)
もし取引がバランスしている(お金が創造されたり破壊されたりしていない場合)、v部分は完全に打ち消されて、ゼロ価値へのコミットメントだけが残る。ランダム性の余りを知っていることを証明するために送信者はバインディング署名という小さな署名を作成する。有効なバインディング署名は、本当にバランスしているときのみ可能であり、一つも金額が明らかにされていない。
これはシリーズ全体で「入金は出金に等しい」というルールを強制するために封印された封筒を一緒に加算し、結果がゼロになるか確認するという理由を最も明確に示している。なぜ同型、曲線ベースのコミットメントが必要だったのか。
アリスがボブに支払う取引を組み立てよう。Saplingの明確な「支出側 / 出力側」構造を使用して、教育モデルとして使う。
シールド取引は2種類の説明をバンドルする:
| 支出説明(ノートを消費) | 出力説明(ノートを作成) |
|---|---|
| 入力の価値コミットメント | 出力の価値コミットメント |
| それを証明するアンカー(ツリールート) | 新しいノートコミットメント(新しい葉) |
| ヌリファイア(消費されたノート) | 暗号化に使用される一時鍵 |
| 再ランダマイズされた公開鍵 + 支出承認署名 | 暗号化されたノート(受取人のための暗号文) |
| 4つの主張を証明するzk-SNARK | 出力が適切であることを証明するzk-SNARK |
さらに、全体にわたるバインディング署名(セクション5)。

プライバシーの流れを追跡:ネットワークはアンカーをチェックし、ヌリファイアが新鮮であることを確認し、証明を検証し、バランスを確認した。そして金額、住所、どのノートが使われたかを一切学ばずに有効な支払いを受け入れた。一方で、消費されたノートのヌリファイア(その死)とボブの新しいコミットメント(彼のノートの誕生)は、記事0からの切断リンクが見える2つの異なる公開構造に存在している。
記事0では意図的に質問を開いた。それらはすべてここで閉じている。
| 記事0で開かれたループ | 閉じた方法 |
|---|---|
| 封印されながらも偽造できない封筒の可能性は? | コミットメント:ランダム性による隠蔽、衝突耐性 / 曲線トラップドア(記事3) |
| 鍵と秘密レシピはどこから来るのか? | フィールド算術および楕円曲線スカラー乗算(記事1, 2) |
| 「ボード」とは一体何なのか? | ノートコミットメントのインクリメンタルマーチャンツツリー;そのルートがアンカー(記事4) |
| 空トークンが封筒とリンクできない理由は? | ニュリファイアは、コミットメントとは別に保管されるキーハッシュ(記事2, 3, 4) |
| 有効性を証明しながら何も明らかにしない方法は? | アリティメトリック回路でエンコードされたすべての4つの主張に関するzk-SNARK(記事5) |
| 受取人が支払いを受けたことをどうやって知るのか? | ノートがアドレスに暗号化され、ビューイングキーを使って試行解読(この記事) |
| 「入金は出金に等しい」をプライベートに強制する方法は? | 同型価値コミットメント + バインディング署名(セクション5) |
最初のページで提示されたパラドックス、「見えないものを検証する」という文は今や完全に解消されている。ネットワークは隠れたデータに関する主張を検証し、データ自体は決して見ることはない。
Saplingの構造を使って教えたのは、その分割が最も明確だからである。現在の設計であるOrchardはこれらのアイデアを精緻化するだけであり、置き換えるわけではない:
| Sapling | Orchard | |
|---|---|---|
| トランザクション単位 | 別々の支出と出力説明 | 統合されたアクション(各アクションは1つの支出 + 1つの出力) |
| 証明システム | Groth16(信頼セットアップ) | Halo 2(信頼セットアップなし) |
| 曲線 | BLS12-381 + Jubjub | Pallas / Vesta (Pasta) |
| コミットメントハッシュ | Pedersen | Sinsemilla |
この記事で説明したすべての概念は直接的に適用可能であり、Orchardは主に支出と出力を一緒にまとめ、儀礼的な証明システムを交換している。五つの柱は変更されていない。
これはシリーズで最も完全な図解であるが、それでもモデルである。ノートの正確なフィールドエンコード、鍵導出公式、支出鍵の再ランダマイズ、分散アドレス、メモフィールド、手数料処理、価値コミットメントとノートコミットメントの違い、各署名の正確な役割、そして実際のトランザクションが一度に多くの支出や出力を含めたり、透明とシールド部分を混在させたりできるという点などはすべて詳細に省略した。権威的な情報源はZcashプロトコル仕様書である。今あなたが持っているのは正しい形状であり、仕様書がすべての測定値を補完している。
| 項目 | 平易な意味 |
|---|---|
| Spending key | ユーザーのすべての鍵が導出される単一のルート秘密 |
| Viewing Key | あなたに取引を明らかにするが、支出権を与えない |
| Spend description | 取引のノートを消費する部分(ヌリファイア、アンカー、証明) |
| Output description | 取引のノートを作成する部分(コミットメント、暗号文、証明) |
| Action (Orchard) | 1つの支出と1つの出力を一緒に実行する統合された単位 |
| Value commitment | 金額に対する同型Pedersenコミットメント |
| Binding signature | 値がバランスしていることを証明するが、それらを明らかにしない署名 |
| Anchor | 支出がメンバーシップを証明するツリールート |
| Trial decryption | 受取人が新しいコミットメントをテストして自分宛のノートを探す行為 |
ネットワークは金額や誰が誰に支払ったかを見ることができるのか? いいえ。証明、ヌリファイアの新鮮さ、アンカー、バインディング署名を検証するだけです。すべてのプライベートな値は隠されたままです。
ノートを2回使うことを防ぐのは何ですか? ヌリファイアです。支出時にそれを公開し、ネットワークはすでにヌリファイアセットに存在するものを拒否します。同じノートは常に同じヌリファイアを生成します。
金額が隠されている場合、バランスをどう確認するのですか? 価値コミットメントは同型的に加算可能であり、バランス取引のコミットメントはゼロへのコミットメントにキャンセルされ、バインディング署名によって証明されます。
監査人に自分のトランザクションを見せることなく、権限を譲渡することはできますか? はい。ビューイングキーを手渡せば、シールドされた活動を明らかにしますが、一方向性の鍵階層により支出権を与えることはできません。
Orchardが存在する今、Saplingは古くなったのですか? 両方ともネットワーク上に存在しています。Orchardは現在の設計です。概念は共有されているので、一方を理解すればもう一方も理解できます。
友人がこう言う:「証明が金額を隠しているから、盗賊は出力が入力より価値が高いと主張し、無料のお金を作り出すことができるかもしれない。」セクション5を使って、2文でなぜこれは失敗するのか説明しなさい。(答えは下にあります。)
金額は隠されているが、それぞれは同型価値コミットメントに包まれており、ネットワークはすべての入力コミットメントを加算し、すべての出力コミットメントを減算する;もし隠された値がバランスしていなかったら、結果はゼロには封印されず、有効なバインディング署名を作成することはできない。 盗賊はどのくらいかを隠すことはできるが、バランスしていない値がバランスチェックに通るのを防ぐことができないため、無料のお金を作り出すことは不可能であり、何も明らかにせずに検出される。
今やあなたは単一のパラドックスから完全なプライベート支払いまで到達した:

ここから自然な次の流れはさらに深く進む:Groth16とHalo 2の内部仕組み、信頼セットアップ儀礼、SaplingおよびOrchard回路の詳細、鍵導出および分散アドレス、ネットワークアップグレードに伴うプロトコルの進化。しかし基礎は今や確立され、これらのすべての話題にはそれぞれのホームが存在する。
Zcash from First Principlesシリーズの一部で、ZecHub向け。CC BY-SA 4.0ライセンス。