zk-SNARKとは
- 執筆
- CRYPTO PORT 編集部
- 公開日
- 更新日
- 読了目安
- 6 分
結論
zk-SNARKは、証明のサイズが非常に小さく検証が一瞬で終わるゼロ知識証明の一種です。その代わり、多くの方式で「信頼できるセットアップ」と呼ばれる初期儀式が必要で、その過程で生成される秘密情報が残ると偽の証明を作られる危険があります。イーサリアムのZKロールアップで広く使われています。
要点
- 証明が数百バイト程度と小さく検証が速い
- 多くの方式で信頼できるセットアップが必要
- セットアップの秘密が残ると偽証明を作られる
- PLONK系は回路ごとの再セットアップが不要
定義
Zero-Knowledge Succinct Non-interactive ARgument of Knowledge の略。簡潔(証明が小さい)かつ非対話(やりとり不要)なゼロ知識証明方式の総称。
名前の各文字が性質を表しています。Succinct は証明が小さいこと、Non-interactive は証明者と検証者が対話せず証明を1回送るだけで済むこと。ブロックチェーンでは検証をスマートコントラクトが行うため、この2つの性質が実用上決定的です。証明サイズは方式によりますが、Groth16では約200バイト程度に収まります。
課題は信頼できるセットアップです。証明系を立ち上げる際に共通パラメータを生成しますが、その計算に使った乱数(toxic waste と呼ばれます)が残っていると、内容が嘘でも検証を通る証明を作れてしまいます。そのため実際には数百〜数千人が順番に計算に参加し、1人でも乱数を破棄すれば安全という多人数儀式(MPCセレモニー)の形で行われます。
Groth16は回路ごとにセットアップが必要でしたが、PLONKやMarlinのような新しい方式は、1度のセットアップを回路を変えても使い回せる「ユニバーサル」な設計になっています。zkSyncやScrollといったZKロールアップは、こうしたSNARK系の証明を使ってイーサリアムに状態遷移の正しさを提出しています。
注意点
- · セットアップ儀式の参加者や手順が公開されていない証明系は、偽証明の余地を検証できない
- · 証明が小さいことと、回路の実装が正しいことは別問題
- · 「ゼロ知識だから匿名」と短絡しない。何を隠すかは設計次第