zk-SNARK(Zero-Knowledge Succinct Non-interactive Argument of Knowledge)とは、ある当事者が秘密そのものを明かすことなく、他の当事者に対して秘密の知識を証明することを可能にする暗号証明です。zk-SNARKは暗号資産、プライバシー保護技術、サプライチェーン管理など様々な分野で応用されています。
zk-SNARKの動作の主な特性
-
証明者は、自分の知識を検証者に明かすことなく証明したいある秘密を持っている。
-
zk-SNARKの重要な特性は、証明が簡潔(succinct)であること、つまり非常にサイズが小さく検証が容易であることである。
-
当社のシステムでは、残高がマイナスのユーザーについてはゼロとして扱う。
準備金の証明(Proof of Reserves)と預り資産の証明(Proof of Liabilities)の両方を検証するためにzk-SNARKを利用しています。当社が使用するzk-SNARKは、預り資産の合計の計算に負の残高が含まれていないことを証明します。もしそうでなければ、悪意のある取引所が負の残高を持つ偽のユーザーを作成し、顧客の預り資産の総額を過小評価する可能性があります。負の残高が含まれないようにするzk-SNARKを使用することで、公表された顧客に対する預り資産の総額が正確で改ざんされないことを保証します。
改ざんを防止するzk-SNARKの例
取引所には以下の残高を持つ2人の顧客がいるとします。
アリス: 4 BTC
ボブ: 10 BTC
顧客の預り資産の合計 = 14 BTC
取引所の預り資産の合計 = 14 BTC を証明します。
取引所がマイナス残高の Carol という偽アカウントを作成した場合、以下のように預り資産を報告することができます。
アリス: 4 BTC
ボブ: 10 BTC
キャロル: - 2 BTC
顧客の預り資産の合計 = 12 BTC
取引所の正しい預り資産は実際には14 BTCです。 負の残高を持つ偽のユーザーを作成することで、取引所はその正しい預り資産を隠そうとし、その結果、その預り資産を過少に評価する可能性があります。
zk-SNARK を使用した証明では、マイナスの口座残高は無視され、顧客の預り資産の合計は 14 BTCとして計算されます。
ゼロ知識証明とzk-SNARKの違いは何ですか?
-
ゼロ知識証明(ZKP)とzk-SNARKs(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)は、どちらも暗号技術を用いた証明の一種で、ある当事者が他の当事者に対して、他の情報を明かすことなく何かの知識を証明できるようにするものです。しかし、これら2つの方法にはいくつかの重要な違いがあります。
-
ZKPは対話型の証明であり、証明を検証するために、証明者と検証者が互いに対話する必要があることを意味します。これにより証明の検証プロセスが複雑になり、時間がかかるという欠点があります。
-
一方、zk-SNARKは非対話型の証明であり、証明を検証するために証明者が検証者と対話する必要がないことを意味します。このため、証明の検証プロセスをより迅速かつ容易に行うことができ、zk-SNARKはZKPよりも効率的となります。
-
ZKPとzk-SNARKのもう一つの違いは、証明のサイズです。ZKPは比較的大きくなることがありますが、zk-SNARKは概して非常に小さくなります。このためzk-SNARKは、ブロックチェーンや分散台帳技術など、証明のサイズが重要なアプリケーションに適しています。
-
最後に、ZKPとzk-SNARKは異なる暗号技術に基づいています。ZKPはFiat-Shamirヒューリスティックに基づいており、zk-SNARKはGroth16プロトコルに基づいています。Groth16プロトコルはFiat-Shamirヒューリスティックよりも新しく洗練されたプロトコルであり、効率性や安全性の向上など多くの利点があります。
一般的に、zk-SNARKはZKPよりも効率的で安全なタイプのゼロ知識証明です。しかし、ZKPは依然として貴重なツールであり、アプリケーションによってはZKPの方が適している場合もあります。
ZKPとzk-SNARKの主な違いをまとめた表を以下に示します。