Zero Knowledge Proof (ZKP) とは何か?
Zero Knowledge Proof (ZKP) は、裏にある情報を明かさずにある主張が正しいことを示す方法です。たとえば、パスワードを入力せずに知っていると示すことや、生年月日を見せずに21歳以上であることを確認することが挙げられます。魔法のように見えますが、数学が根底にあります。
ZKPはすべてを隠すのでこっそりした行動に使われる、と思われがちです。実際はそうではありません。ZKPはあなたが定めた特定の主張を証明し、検証者は秘密を見せてもらうことなく厳密に確認できます。
Zero Knowledge Proof (ZKP) の仕組み
簡単な例でざっと説明します。残高を明かさずに取引に十分な資金があることを証明したいとします。
- ステップ1:「残高が最低Xある」というような主張を選び、秘密データをランダムネスでコミットします。
- ステップ2:秘密データと公開情報から、数学的に整合するような証明を作成します。
- ステップ3:秘密そのものではなく、証明を検証者へ送ります。
- ステップ4:検証者は受理するか拒否するかを判定する検査を行います。残高を見ることはありません。
- ステップ5:受理されれば、後で他の人があなたとやり取りせずに同じ証明を再検証できます。
内部では高度な cryptography に依存しています。つまり、数学が証拠を保管します。
Zero Knowledge Proof (ZKP) が重要な理由
なぜ気にするべきか。手短に三つの観点です。
- 利点:必要なことだけ証明して、他は自分にとどめておけます。情報漏えいが減り、リスクも低くなります。
- 視点:最小限のデータで動くアプリは洗練されて見えます。必要な情報だけを共有しましょう。
- 関連性:ZKはロールアップ、プライベート転送、身元確認などの場面で、主要な blockchain に登場します。
アプリがZKを使っていると言われたら、まず二つを確認しましょう。何が正確に証明されているのか、信頼できる初期設定が必要だったかどうかです。また、データ管理を重視するなら、証明の外側でも強い privacy 慣行を併用すると良いです。
Zero Knowledge Proof (ZKP) の主な特徴
平易に言えば、何が特別なのか。
- プライバシー:検証者は主張が真であると知るが、秘密は知らないままです。
- 簡潔:証明は小さく検証も速く、オンチェーンでも扱いやすいことがあります。
- 高速:検証は計算を最初からやり直すより負担が小さいです。
- 合成可能:証明を重ねたり、多くの検査を一つにまとめたりできます。
- スケーラブル:重い処理を検証者の外に移しつつ正当性を保つことで、scalability に寄与します。
バリエーション
用途に合わせて異なる種類があります。
- SNARKs:証明が短く検証が速い反面、通常は信頼できる初期設定を必要とします。
- STARKs:信頼できる初期設定が不要で、証明は大きめですが、量子耐性研究に適しています。
- Bulletproofs:レンジチェックに向いており、秘密の金額の処理でよく使われます。
- Sigma:古典的な対話型の方式で、多くの講義で扱われます。
ZKPだけでアプリ全体が安全になるわけではありません。主張が弱すぎたり設定がずさんだったりすると、証明自体は正しくても役に立たない場合があります。主張は慎重に設計してください。
例
ある市で行われた投票では、voters が有権者であることと未投票であることを証明しつつ、集計から個人の身元は隠されます。
面白い事実
ZKPを説明する定番の出し物では、同じ色の玉を二つ使い、目隠しでどちらがどちらかを区別できることを示します。オタクっぽいですが、よく伝わります。
まとめ
一言で言えば、Zero Knowledge Proof (ZKP) は過剰な情報公開をせずに証明する手法です。つまり「見せずに証明できる」と言えます。
