groth16とplonk
Groth16
Groth16は、回路に特化した前処理型の汎用zk-SNARK構築です。証明のサイズが一定で、検証時間も魅力的なことから、いくつかのブロックチェーンプロジェクトで使用されるデファクトスタンダードとなっています。欠点としては、Groth16はその前処理段階で回路固有のTrusted Setupを必要とします。
Groth16を使用しているプロジェクトには、ZCash、Loopring、Hermez、Celo、Filecoinなどがあります。
PlonK
PlonKは普遍的な前処理を行う汎用zk-SNARK構築法です。
更新可能な前処理段階を持つ証明方式で、検証時間が短く一定であることが特徴です。欠点としては、PlonKの証明はGroth16に比べて大きく、生成に時間がかかります。
PlonKを使用しているプロジェクトには、Aztec、ZKSync、Duskなどがあります。
PlonKには、選択した多項式コミットメント・スキームに応じて、さまざまなバージョンがあります。例えば、以下のようになります。
KZG
Pedersen-Bulletproofs
FRIベース
DARK
また、プローバとベリファイアーのトレードオフを考慮したバージョンもあります。例えば、「プローバは速いが、verifierは遅い」、「プローバは遅いが、verifierは速い」といった設定です。
また、最適化にも違いがあります。例えばTurboPlonK ,Plookupなどがあります。
現在、gnark は KZG 多項式コミットメントの PlonK をサポートしています。
比較
Groth16は、同じ回路(例えば、単一の論理計算)に対して多くの証明を生成する必要があり、性能が重要な場合に適しており、PronKは、多くの異なる回路(例えば、異なる任意のビジネスロジック)を適度な速度で処理する必要がある場合に適しています。
https://scrapbox.io/files/60ffd6a30d6b27001da6f367.png