📘 Academy原文準拠 | Phase 2 · Unit 1 · Lesson 1.5 Case Studies — ZKP Projects in Production 内容に忠実な日本語版です。原文(英語)・図・動画は公式 Academy(外部リンク・別タブで開きます)を正本に。
レッスン 1.4 では、ゼロ知識証明(ZKP)の「種類」を学びました。ここでは、その種類を実際に動かしてみせたプロジェクトを見ていきます。
これから紹介する実装は、それぞれが業界に大事なことを教えてくれました。Zcash は「プライバシーは実現できる」と証明しました。Tornado Cash は「プライバシーが規制とぶつかると何が起きるか」を見せました。Polygon ID は「実用的な本人確認」を実演しました。zkSync と Starknet は、いままさに Ethereum をスケールさせています。そして Mina は「ブロックチェーンとは何か」を作りなおしました。
ひとつずつ見ていきましょう。
Zcash
Zcash は 2016年10月にローンチした、zk-SNARK の初めての実用的な応用です。チームは Bitcoin のコードベースを土台にして、革命的なものを足しました。それは「取引の中身を隠したまま、その取引が正しいことを証明できる」という機能です。
Zcash には2種類のアドレスがあります。透明アドレス(t-addresses)とシールドアドレス(z-addresses)です。
- 透明アドレスは Bitcoin と同じで、すべてが見えます。
- シールドアドレスは、送り主・受け取り手・金額を zk-SNARK で暗号化します。
ネットワークは、それらの中身を一切見ないまま、その取引が正しいことを検証できます。
巧妙なのは、この2つを混ぜられるところです。透明からシールドへ送る(shielding)。シールドから透明へ送る(deshielding)。あるいはシールドからシールドへ送って、すべてを秘密のままにする、ということもできます。
ただし、落とし穴がありました。最初の zk-SNARK は trusted setup(信頼できるセットアップ) を必要としました。これは、暗号パラメータを作るためにランダムな数を生成する「儀式(セレモニー)」です。もし誰かがその数(いわゆる “toxic waste”=有害な廃棄物)を取っておいたら、証明を偽造して偽のコインを作れてしまいます。Zcash は大がかりな多者参加(マルチパーティ)の儀式を、複数の大陸にまたがる参加者で実施しました。乱数のために放射性崩壊からラバランプ(溶岩ランプ)まであらゆるものを使い、終わったあとは使ったコンピュータを物理的に破壊しました。
2022年、Zcash は Halo 2 アップグレードでこの問題に対処しました。Halo は新しい zk-SNARK で、trusted setup を完全に取り除きつつ、性能を保ちます。これはシステムをより trustless(信頼を前提にしない)にする、大きな暗号上のブレイクスルーです。
今日、Zcash のシールドプールは約 500万 ZEC に近づいていて、これは総供給量のおよそ 30% にあたります。プライバシー機能はもう実験段階ではありません。実戦で鍛えられたインフラになっています。
Zcash の教訓はこうです。公開ブロックチェーン上のプライバシーは、数学的に実現可能である。ただ、それを実用的にするには、10年にわたる暗号の革新が必要だった、ということです。
Tornado Cash
Tornado Cash は 2019年にローンチした、Ethereum ベースのミキサー(混合器)です。ETH を預け入れると暗号的な「ノート(note)」を受け取り、あとで別のアドレスから引き出せます。預け入れと引き出しの間に、オンチェーン上のつながりは残りません。ZKP が「あなたには引き出す権利がある」ことを、どの預け入れがあなたのものかを明かさずに証明します。
技術は設計どおり、完璧に動きました。それが問題でした。
2022年8月、米国財務省の外国資産管理室(OFAC)が Tornado Cash を制裁対象にしました。理由は、このプロトコルが 70億ドルを超える暗号資産のマネーロンダリング(資金洗浄)に使われたこと。その中には、北朝鮮の Lazarus Group が Ronin Bridge ハックで盗んだ 4億5500万ドルが含まれていました。
これは即座に混乱を生みました。Tornado Cash は会社ではありません。Ethereum 上で自律的に動くオープンソースのスマートコントラクトです。OFAC は実質的に「コードそのもの」を制裁したことになります。GitHub はリポジトリを削除しました。開発者は逮捕されました。そして、Tornado Cash のアドレスと一度でもやり取りした人は、法的なリスクにさらされかねない状況になりました。
制裁により利用は 85%減りました。けれど、コントラクトは動きつづけました。変更不可(immutable)なスマートコントラクトは止められないからです。
そのあとに続いた法廷闘争は、「何を制裁できるのか」という根本的な問いを試すものになりました。
2024年11月、第5巡回区控訴裁判所(Fifth Circuit Court of Appeals)は、OFAC が行き過ぎていたと判断しました。裁判所は、変更不可なスマートコントラクトは、誰も所有・管理していないため、ブロック(凍結)できる「財産(property)」ではない、と認定しました。自動販売機を制裁できないのと同じように、自律的に動くコードも制裁できない、というわけです。
2025年3月、財務省は正式に制裁を解除しました。ただし、創業者に対する刑事訴追はまだ係属中です。
Tornado Cash の教訓は、なかなか居心地のよくないものです。
- プライバシーのツールは、誰に対しても機能する。あなたが「使ってほしくない」と思う相手にも、です。
- 分散型プロトコルは、責任を問う主体がいないため、本物の規制上の難題を生む。
- いまある法的な枠組みは、自律的なコードのために作られたものではない。
Polygon ID
Polygon ID は 2023年3月に一般公開された、ゼロ知識ベースのアイデンティティ(本人確認)ソリューションです。目的はシンプルで、「元のデータを明かさずに、自分についての事実を証明する」ことです。
このシステムには3つの役割があります。
- Issuers(発行者)…政府や大学など。verifiable credentials(検証可能な証明書)を作る。
- Holders(保有者)…その証明書を自分のウォレットに保管する。
- Verifiers(検証者)…特定の主張についての証明を要求する。
具体例で見てみましょう。あるバーが「あなたが18歳以上か」を確認したいとします。従来のやり方では、身分証を見せることになり、名前・住所・生年月日・写真まで明かしてしまいます。Polygon ID のやり方は違います。「自分の生年月日の証明書は、18歳以上であることを示している」という ZKP を生成します。バーが知るのはひとつの事実(あなたは十分な年齢だ)だけで、それ以外は何も分かりません。
技術アーキテクチャは、Verifiable Credential 形式のオフチェーン証明書を使います。検証が必要になると、ユーザーは自分の端末上でローカルに ZKP を生成します。その証明は、オンチェーンではスマートコントラクトが、オフチェーンではアプリケーションが検証できます。元の証明書データは、ユーザーのウォレットから決して外に出ません。
Polygon ID が面白いのは zkQuery 言語です。検証者は「自分が知りたいこと」を正確に指定でき、ユーザーはそれだけを証明します。「年齢は18より大きいか?」「居住国はこのリストに含まれるか?」「証明書は存在し、かつ失効していないか?」といった具合です。
Collab.Land・The Sandbox・Fractal といったプロジェクトが Polygon ID を統合し、400万人を超えるユーザーに届いています。用途は、トークンゲート型アクセスから、規制対応(コンプライアンス)、パスワードレスログインまで幅広く広がっています。
zkSync と Starknet
この2つは zk-rollup(ZKロールアップ)技術の最前線で、どちらもメインネット上で稼働し、本物の取引を処理しています。
zkSync Era は 2023年3月にメインネットでローンチしました。これは zkEVM です。つまり Ethereum のプログラミングモデルと互換性があり、開発者は既存の Solidity コントラクトをほとんど変更せずにデプロイできます。
スケーリングはこう動きます。取引は zkSync の Layer 2 上で実行されます。ロールアップがそれらをまとめてバッチにし、「すべて正しく計算された」という validity proof(妥当性証明)を生成します。Ethereum に投稿されるのは、その証明と圧縮された取引データだけです。結果として、Ethereum のセキュリティを受け継ぎながら、手数料は劇的に下がり、スループットは上がります。
zkSync は 100を超えるプロトコルをホストしていて、分散型取引所(DEX)が採用をリードしています。Deutsche Bank(ドイツ銀行)は資産のトークン化に zkSync のインフラを使っています。Tradable は、このプラットフォーム上で20億ドル近くのオルタナティブ資産をトークン化しました。
Starknet は別のアプローチを取ります。zkEVM 互換ではなく、独自の言語(Cairo)と独自の証明システム(SNARK ではなく STARK)を使います。
STARK は “transparent(透明)” です。つまり trusted setup を必要としません。さらに post-quantum secure(耐量子) でもあります。トレードオフは証明サイズが大きくなることですが、Starknet はバッチ処理と recursive proofs(再帰的証明)でこれを最適化しています。
Starknet は開発者向けツールへの注力と STARK ベースのアーキテクチャによって、本格的なプロジェクトを引き寄せてきました。最大級の分散型取引所のひとつ dYdX は、自前のチェーンを立ち上げる前に、StarkEx(Starkware の技術)の上に構築していました。
どちらのアプローチも妥当です。
- zkSync は互換性を最適化し、移行を簡単にする。
- Starknet は、たとえ新しいツールを学ぶ必要があっても、クリーンな暗号的基盤を最適化する。
これらのロールアップの教訓は、ZKP はもうプライバシーだけのものではないということです。ZKP は、ブロックチェーンのスケーリングを支える中核インフラになりつつあります。Ethereum のロードマップは、取引量をさばくために、ますます zk-rollup に頼るようになっています。
Mina Protocol
Mina Protocol は 2021年にローンチし、ひとつのラディカルな問いを投げかけます。「もしブロックチェーン全体が、いつでも同じサイズだったら?」
従来のブロックチェーンは、永遠に大きくなりつづけます。Bitcoin のチェーンは 500GB を超えます。Ethereum のアーカイブノードは 13TB を超えます。フルノードを動かすには本格的なハードウェアが必要で、これは時間とともに検証を一部の参加者に集中させてしまいます。
Mina のチェーンは、およそ 22キロバイトという一定サイズに保たれます。ツイート数件ぶんのサイズです。これまでに何件の取引があったかは、まったく関係ありません。
仕掛けは recursive zk-SNARK(再帰的 zk-SNARK)です。すべての過去データを保存するのではなく、Mina は「すべての過去データが正しかった」という証明だけを保存します。新しいブロックが追加されると、前の証明を取り込んだ新しい証明が生成されます。チェーンは、その歴史すべてを、たえず更新されるひとつの証明へと圧縮するのです。
これはつまり、誰でもスマートフォン上でブロックチェーンの全状態を検証できるということです。
- ギガバイト級のデータを同期する必要はありません。
- 第三者を信頼する必要もありません。
- 完全な検証が、数秒で済みます。
Mina はこれを “succinct blockchain(簡潔なブロックチェーン)” と呼びます。プライバシーを可能にするのと同じ暗号が、ラディカルな圧縮も可能にする、というわけです。
このプラットフォームは zkApps をサポートします。これは TypeScript(o1js 経由)で書くゼロ知識スマートコントラクトです。これらのアプリはオフチェーンで実行され、オンチェーンで検証される証明を生成します。ユーザーのデータは端末に残り、ネットワークには証明だけが提出されます。
zkApps は zkOracles を通じて外部のウェブサイトにも接続でき、API やウェブページについての事実を trustless(信頼を前提にしない)かたちで証明できます。たとえば、あなたのクレジットスコア提供者が、「スコアがあるしきい値を超えている」という証明を、実際の数値やほかの口座情報を一切明かさずに発行できる、といったことが可能になります。
ゼロ知識証明は、プライバシーを足したり取引をスケールさせたりするだけではありません。ブロックチェーンのアーキテクチャそのものを、根本から作りなおすこともできるのです。
5つの答えのまとめ
この5つのプロジェクトは、同じ根本の問いに対する、それぞれ違う答えを表しています。その問いとは、「どうやって、明かさずに検証するか?」 です。
- Zcash は、コンセンサスを保ったまま取引の中身を隠せることを証明した。
- Tornado Cash は、プライバシーのツールが規制の枠組みと本物の緊張を生むことを見せた。
- Polygon ID は、本人確認のための実用的な selective disclosure(選択的開示)を実演した。
- zkSync と Starknet は、ZKP が「隠す」だけでなく「計算をスケールさせる」こともできると証明した。
- Mina は、ZKP がシステム全体を圧縮できることを見せた。
次のモジュールからは、一般的な ZKP の応用から、Midnight そのものへと話を移します。Midnight のアーキテクチャが、これらの土台の上に積み上がりつつ、どう違う問題を解いているのかを学んでいきます。
開発者として押さえる点
- Zcash:zk-SNARK の最初の実用例。透明(t-)/シールド(z-)の2アドレス。
trusted setupと “toxic waste” の問題を、Halo 2 で取り除いた。 - Tornado Cash:ZKP で「引き出す権利」を証明するミキサー。技術は完璧に動いたが、変更不可なコントラクトは止められず、規制との衝突を露呈した。
- Polygon ID:Issuer / Holder / Verifier の3役と Verifiable Credential。ZKP は端末上でローカル生成、元データはウォレットから出ない。zkQuery で「必要な事実だけ」を証明。
- zkSync と Starknet:zk-rollup は validity proof をオンチェーンに投稿してスケールする。zkSync は zkEVM(Solidity 互換)、Starknet は Cairo + STARK(trusted setup 不要・耐量子)。ZKP は「スケーリングの中核インフラ」になりつつある。
- Mina:
recursive zk-SNARKで全履歴をひとつの証明(約22KB)に圧縮。zkApps は TypeScript(o1js)でオフチェーン実行し、証明だけをオンチェーン提出。 - 共通テーマは 「明かさずに検証する」。Midnight はこの土台の上に積み上がる。
やさしい版・公式へ
- やさしい版:ZKでなにができる?(ユースケース)
- 公式:Academy Courses(外部リンク・別タブで開きます)(Phase 2 / Unit 1 / 1.5)
- 関連ドキュメント:Midnight 公式ドキュメント(外部リンク・別タブで開きます)
つぎに読むページ
➡️ 原文準拠コースの入口へ戻る。このコースについて(次のレッスンは順次追加します)