ゼロ知識証明とは?
ゼロ知識証明(Zero-Knowledge Proof, ZKP)とは、「ある主張が正しいこと」を証明する際に、その内容そのものは一切明かさずに証明だけを行う技術です。例えば、「私はある秘密のパスワードを知っている」という事実を、実際にそのパスワードを明かすことなく証明できます。
この技術は、認証、ブロックチェーン、プライバシー保護、選挙など多様な分野に応用されており、特にブロックチェーン分野では匿名性とセキュリティの両立に貢献しています。
zk-SNARKsとは?
zk-SNARKs(Zero-Knowledge Succinct Non-interactive ARgument of Knowledge)は、ゼロ知識証明の一種で、以下の特徴を持ちます。
- Succinct(簡潔): 証明サイズが小さく、検証が高速
- Non-interactive(非対話型): 1回のメッセージ送信で証明が完了
- Argument of Knowledge(知識の主張): 特定の秘密を知っていることを保証
特にZcashのような匿名通貨や、機密情報を含むブロックチェーンアプリケーションで広く利用されています。
主なzk-SNARKsフレームワーク
libsnark
- 著者/メンテナー: SCIPR Lab
- リリース年: 2010年代中盤
- 主な特徴: Zcashでも使われた、C++製の古典的zk-SNARKフレームワーク。PinocchioおよびGroth16を実装し、低レベルAPIでR1CS回路を組み立てる。
- GitHub: [https://github.com/scipr-lab/libsnark]
gnark
- 著者/メンテナー: ConsenSys
- リリース年: 2020年代初頭
- 主な特徴: Go言語製。Groth16およびPLONKをサポートし、高レベルAPIで直感的に回路設計が可能。GPU加速にも対応。
- GitHub: [https://github.com/ConsenSys/gnark]
arkworks
- 著者/メンテナー: arkworks contributors
- リリース年: 2022年
- 主な特徴: Rust製のモジュール式ZKPライブラリ群。Groth16、Marlin、PLONKなどをサポートし、PedersenやPoseidonなどのハッシュ関数を提供。
- GitHub: [https://github.com/arkworks-rs]
Zokrates
- 著者/メンテナー: Jacob Eberhardt, Stefan Tai
- リリース年: 2018年
- 主な特徴: Ethereum向け。Python風DSLで記述し、証明・検証・スマートコントラクト生成まで一貫サポート。
- GitHub: [https://github.com/Zokrates/ZoKrates](
その他のzk-SNARK関連フレームワーク
hyraxZK
- 特徴: 信頼できるセットアップ不要。Fiat-Shamir変換による非対話化。
- GitHub: [https://github.com/hyraxZK/hyrax]
libspartan
- 特徴: Spartan証明システムのRust実装。信頼できるセットアップ不要。
- GitHub: [https://github.com/Microsoft/Spartan]
Mirage
- 特徴: 普遍的な信頼セットアップ対応。Java実装。現在はメンテナンス困難。
- GitHub: [https://github.com/miragezk/mirage](
LegoSNARK
- 特徴: libsnarkベースのモジュール式zk-SNARKフレームワーク。
- GitHub: [https://github.com/scipr-lab/lego-snark]
PySNARK
- 特徴: Python構文で書けるZKPライブラリ。プロトタイピングに向く。
- GitHub: [https://github.com/meilof/pysnark]
SnarkJS + RapidSNARK
-
特徴: Circomで設計した回路を実行可能。RapidSNARKは高速版(C++/ASM)。
-
GitHub:
- SnarkJS: [https://github.com/iden3/snarkjs]
- RapidSNARK: [https://github.com/iden3/rapid-snark]
Virgo
- 特徴: セットアップ不要な階層型対話式ZKP。未メンテ、ドキュメント不足。
- GitHub: [https://github.com/vEngine/Virgo]
libiop (Aurora, Fractal)
- 特徴: IOPベースのzk-SNARK。ポスト量子暗号に関心ある開発者向け。
- GitHub: [https://github.com/scipr-lab/libiop]
Noir
- 特徴: Rust風DSLで書ける高レベルZKP言語。ACIRで中間表現化。
- GitHub: [https://github.com/noir-lang/noir]
Dusk-PLONK
- 特徴: RustによるPLONK実装。低レベルゲート記述が必要。
- GitHub: [https://github.com/dusk-network/plonk](
Halo2
- 特徴: Zcash開発チーム製。再帰的証明が可能。低レベルだが強力なコミュニティあり。
- GitHub: [https://github.com/zcash/halo2]