TL

ゼロ知識証明(SNARK・STARK)

秘密を明かさず「正しく計算した」ことだけを証明できる。zk-SNARKとzk-STARKの原理を押さえれば、ブロックチェーンのプライバシー保護とロールアップによるスケーリングの仕組みが腑に落ちる。

応用ブロックチェーンゼロ知識証明zk-SNARKzk-STARK暗号スケーリング最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.ゼロ知識証明は「命題が真である」ことを、真である理由(証拠)を一切明かさずに検証者へ納得させる。完全性・健全性・ゼロ知識性の3性質を満たす。
  • 2.zk-SNARKは証明が数百バイトと極小で検証も高速だが、多くは信頼できるセットアップ(有害廃棄物の破棄)を要し、楕円曲線ペアリング前提で量子に弱い。
  • 3.zk-STARKはハッシュのみで構成し信頼セットアップ不要・耐量子だが、証明は数十〜数百KBと大きい。両者ともブロックチェーンのプライバシーとロールアップ型スケーリングを支える。

ゼロ知識性とは何を意味するか

ゼロ知識証明(Zero-Knowledge Proof, ZKP)は、ある命題が真であることを、なぜ真なのかを一切漏らさずに相手へ納得させる暗号プロトコルです。証明する側を証明者(prover)、確かめる側を**検証者(verifier)**と呼びます。古典的な例が「洞窟の問題」です。環状の通路の奥に秘密の扉があり、証明者はその合言葉を知っている。証明者は先に分岐のどちらかへ進み、検証者が「右から出てこい/左から出てこい」と指定する。合言葉を知っていれば扉を通って必ず指定側から出られますが、知らなければ2分の1でしか当たりません。これを何度も繰り返せば、合言葉そのものを口にせずに「知っている」ことだけを高確率で示せます。

ZKPが満たすべき性質は3つです。

性質英語意味
完全性Completeness命題が真なら、正直な証明者は正直な検証者を(ほぼ)必ず納得させられる
健全性Soundness命題が偽なら、どんな不正な証明者も検証者を欺けない(成功確率は無視できるほど小さい)
ゼロ知識性Zero-Knowledge検証者は「命題が真」という事実以外、証拠について何も学べない

ゼロ知識性の厳密な定義はシミュレータで与えられます。証明者と一切やり取りせず、命題が真という情報だけを持つシミュレータが、本物のやり取りと**区別できない偽の記録(トランスクリプト)**を生成できるなら、その記録には証拠の情報が含まれていない、と結論できます。区別不能性の強さに応じて完全・統計的・計算量的ゼロ知識に分かれます。

対話型から非対話型へ

洞窟の例は検証者がその場で乱数(左右の指定)を投げる対話型です。ブロックチェーンでは検証者が多数かつ非同期なので、対話は使えません。そこでFiat–Shamir変換を用い、検証者の乱数を「これまでのメッセージのハッシュ」で置き換えます。ハッシュをランダムオラクルと見なせば、証明者は乱数を予測できず、対話1往復ぶんが1個の非対話証明に畳み込まれます。SNARK/STARKはいずれもこの非対話型です。

検証可能計算という枠組み

ブロックチェーンでZKPが強力なのは、「秘密を隠す」用途以上に検証可能計算(verifiable computation)として使えるからです。すなわち「ある関数 f に入力 x を与えたら出力 y になった」という計算の正しさを、検証者が f を再実行せずに確かめられる。証明サイズと検証時間が入力規模に対して劣線形(多くは対数〜定数)になるのが鍵です。証明者の計算は重くても、検証者は軽い——この非対称性がスケーリングの源泉です。

そのために、まず証明したい計算を数学的な制約の集合へ翻訳します。代表的なのが算術回路と、それを1本ずつの掛け算・足し算の制約に落としたR1CS(Rank-1 Constraint System)や、行方向に一様なAIR(Algebraic Intermediate Representation)です。制約が「すべて成り立つ」ことは、対応する多項式が特定の点でゼロになることと同値に変換できます。

計算 → 算術回路 → 制約系(R1CS / AIR) → 多項式の等式
                                          ↓
       「制約を全部満たす代入が存在する」
     = 「ある多項式が消失点の集合で 0 になる」

証明者は「その多項式を確かに知っている」ことを、多項式全体を送らずに示します。ここで使うのが多項式コミットメントです。多項式に短いコミット値を発行し、検証者が指定した点での評価値だけを、コミットと整合することの証明つきで開示します。シュワルツ・ジッペルの補題により、次数が上限未満の相異なる2つの多項式がランダムな1点で一致する確率は極めて低い。ゆえに数点の検査で多項式全体の正しさをほぼ保証できます。SNARKとSTARKの技術的な違いの多くは、この「多項式コミットメントをどう作るか」の違いに帰着します。

zk-SNARK と zk-STARK の違い

SNARKは Succinct Non-interactive ARgument of Knowledge の略で、簡潔(succinct)=証明が小さく検証が速いことを主眼にします。STARKは Scalable Transparent ARgument of Knowledge で、透明(transparent)=信頼できるセットアップが不要であることを主眼にします。両者は目的が近く方式が異なる兄弟です。

観点zk-SNARK(Groth16等)zk-STARK
暗号の土台楕円曲線ペアリング+離散対数仮定衝突耐性ハッシュのみ
信頼セットアップ回路ごと、または汎用(更新可能)に必要な方式が多い不要(公開乱数のみ/transparent)
証明サイズ数百バイトと極小(ほぼ定数)数十〜数百KB(入力の対数オーダー)
検証時間定数時間に近く非常に速い対数オーダーでSNARKより重い
耐量子性なし(ショアのアルゴリズムで破れる)あり(ハッシュ前提のため)
証明者コスト比較的軽いが FFT が要る大きいが並列化しやすい

決定的な差は3点です。第一に信頼できるセットアップ。多くのSNARK(Groth16など)は回路ごとに秘密乱数から公開パラメータ(CRS)を作ります。この乱数は有害廃棄物(toxic waste)と呼ばれ、誰か一人でも破棄せず保持すると、偽の証明を作れてしまう——存在しない残高の証明すら通ってしまうため、健全性が崩れます。実務では多数参加者によるMPC儀式(powers of tau など)を行い、「1人でも正直に廃棄すれば安全」という形に薄めます。PLONK系は汎用(universal)かつ更新可能なセットアップを使い、回路が変わるたびの再儀式を不要にしました。STARKはハッシュの公開値だけで動くため、そもそも秘密が存在せずセットアップが透明です。

有害廃棄物は健全性の急所

zk-SNARKの安全性は「セットアップの秘密乱数が確実に消された」という前提に依存します。もし秘密が漏れれば、攻撃者は任意の偽命題に有効な証明を捏造でき、それを外部から見抜く手段はありません。だからこそセットアップは公開の多人数儀式で行われます。この一点が「透明性」を掲げるSTARKの最大の存在意義です。

第二に耐量子性。SNARKの多くは楕円曲線上の離散対数の困難性に依存し、これはショアのアルゴリズム/security/ の格子・耐量子暗号の議論とも関わる)で量子計算機に破られます。STARKは衝突耐性ハッシュだけを前提にするため、量子計算機でも安全余裕が大きい(/quantum/ の量子アルゴリズムの文脈で、グローバーによる二次加速はあってもハッシュ長で吸収できる)。

第三に証明サイズと検証コストのトレードオフ。SNARKは証明が数百バイトと極小で検証もほぼ定数時間。STARKは証明が数十〜数百KBと大きい代わりに、透明性と耐量子性を得ています。STARKが依存する多項式コミットメントFRI(Fast Reed–Solomon IOP of Proximity)は、低次多項式への近さをハッシュベースのマークル木で反復的に検査する仕組みで、証明サイズを入力規模の対数に抑えます。

プライバシーとスケーリングへの応用

ブロックチェーンでのZKPは、大きく2つの目的に整理できます。プライバシースケーリングで、後者が近年の主戦場です。

用途隠す/圧縮するもの代表例
プライバシー送金送信者・受信者・金額を秘匿し、二重支払いだけ検証Zcash(zk-SNARKで残高保存を証明)
ZKロールアップ多数の取引をL2で処理し、正しさの証明1個をL1へzkSync, StarkNet, Polygon zkEVM 等
ID・資格証明属性(年齢・保有)を値を明かさず証明選択的開示クレデンシャル
ブリッジ/相互運用他チェーンの状態遷移が正当だと軽量に検証ZKブリッジ、ライトクライアント証明

プライバシー送金の代表がZcashです。UTXOの金額と宛先をコミットメントで隠したまま、「使おうとしている残高は確かに存在し、まだ使われておらず、入出金の総額が一致する」ことをzk-SNARKで証明します。台帳には暗号化されたコミットメントと無効化子(nullifier)だけが載り、金額は誰にも見えないのに二重支払いは防げます。

ZKロールアップはスケーリングの本命です。L2(レイヤー2)が多数の取引をオフチェーンで実行し、まとめた後の状態遷移が正しいことを示す妥当性証明(validity proof)を1個だけL1(メインチェーン)へ提出します。L1は個々の取引を再実行せず、短い証明を検証するだけで巨大なバッチを受理できる——まさに検証可能計算の非対称性です。ここで簡潔性が本質になります。1万件の取引を処理しても証明サイズと検証コストがほとんど増えないからこそ、スループットを大きく引き上げられます。

楽観的ロールアップとの違い

ライバルの Optimistic Rollup は「正しいと仮定して受理し、異議があれば不正証明で覆す」方式で、確定までに異議申立期間(例:7日)を要します。ZKロールアップはその場で妥当性を暗号証明するため、L1が証明を検証した時点で確定し、長い待機がありません。プライバシー面でも、状態遷移の正しさだけを示し中身を隠せる余地があります。

試験・面接での要点

・ZKPの3性質は完全性・健全性・ゼロ知識性。ゼロ知識性はシミュレータで定義される。
・SNARKは簡潔(小さい証明・速い検証)だが信頼セットアップと量子脆弱性が弱点。STARKは透明・耐量子だが証明が大きい。
・両者とも計算を算術回路→制約系→多項式へ落とし、多項式コミットメントで数点検査に帰着させる。
・キラーアプリはZKロールアップ。簡潔性ゆえにバッチを1証明でL1確定でき、Optimisticの異議期間が不要。

まとめ

  • ゼロ知識証明は、証拠を明かさず命題の真偽だけを納得させる。完全性・健全性・ゼロ知識性を満たし、ゼロ知識性はシミュレータで厳密化される。Fiat–Shamir変換で非対話化する。
  • 実体は検証可能計算。計算を算術回路→制約系(R1CS/AIR)→多項式へ変換し、多項式コミットメントで数点の検査に帰着。証明者は重く検証者は軽い非対称性がスケーリングを生む。
  • zk-SNARKは証明が数百バイトと極小で検証も高速だが、多くが信頼セットアップ(有害廃棄物)を要し、ペアリング前提で量子に弱い。zk-STARKはハッシュのみで透明・耐量子だが証明は数十〜数百KBと大きい。
  • 応用はプライバシー(Zcashの秘匿送金)とスケーリング(ZKロールアップ)。後者は簡潔性を活かし、大量取引の妥当性を1証明でL1へ即時確定させる点がOptimisticとの本質的な差になる。

ブロックチェーン Article

ゼロ知識証明(SNARK・STARK)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

ブロックチェーン

比較で見る軸

難易度: advanced / カテゴリ: ブロックチェーン / タグ数: 6

導入後に効く点

zk-SNARKは証明が数百バイトと極小で検証も高速だが、多くは信頼できるセットアップ(有害廃棄物の破棄)を要し、楕円曲線ペアリング前提で量子に弱い。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
ブロックチェーン
タグ数
6

判断チェックリスト

  • 自社の用途が「ブロックチェーン / ゼロ知識証明」に近いか確認する。
  • 強みである「ゼロ知識証明は「命題が真である」ことを、真である理由(証拠)を一切明かさずに検証者へ納得させる。完全性・健全性・ゼロ知識性の3性質を満たす。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

ブロックチェーンゼロ知識証明zk-SNARKzk-STARK暗号ブロックチェーンゼロ知識証明zk-SNARK