Nebula
Commitment-Carry IVCを使った方法
概要
Nebulaでは、commitment-carrying IVC
をIVCのstepで受け渡しいくダイジェストとして用いることで、zkVMのMemory Consistency Checkを行う手法が提案されいます。
Memory Checkingの立ち位置としてはSpiceの後継で、主にMultisetの表現について改良がなされています。
Spiceでは、Multisetを表現するためにHash(Poseidonなど)の楕円曲線上の加算を用いていましたが、Nebulaでは、衝突耐性を持つ一方向性の関数としてJoltと同じfingerprintingを使い、commitment-carrying IVC
でMultisetを表現しています。なお、fingerprintingは、ランダム線型結合で計算されます。
Nebulaのもう一つの特徴であるswitchboardは、MemoryCheckingからは外れるため、このページでは解説しません。
前提知識
Committed Relation
このは、structure 、instance , witness がとある関係にあり、さらにcommit と public-param が、によって生成されたものであることを示す関係です。
また、structure は、folding schemeでたたみ込まれるインスタンスの構造の種類を表しています。

Incrementally Verifiable Computation (IVC) & Non-uniform IVC (NIVC)
を入力に受け取ってを証明するを生成するを使い、とを再帰的に計算していくことで、繰り返しの計算を再帰的に証明していきます。
NIVC は、IVC の一般化で、各ステップで実行される関数が固定ではなく、決まった関数集合 から選ばれます。の選択には補助的な関数を利用し、全体ではを計算します。
Multi-folding schemes
Folding schemesでは、構造sを持つ関係Rの2つのインスタンスを1つのインスタンスの検証に削減しますが、HyperNovaなどのMulti-folding schemesでは、の構造を持つ関係のインスタンスと、の構造を持つ関係のインスタンスを、関係のインスタンスの検証に削減します。
2つの関係 と に対して、ある互換性述語(predicate) があり、この述語が と のインスタンス間で満たされる必要があります。また、 はそれぞれのインスタンスの数を表すパラメータです。この対して、Multi-foldingでは次の4つの関数が定義されます。
: security param とサイズ上限 からpublic param を求める。
: と構造から証明・検証の為の鍵を求める。
: 個ののinstance とwitness の配列と、個ののinstance とwitness の配列を、のinstance とwitness に畳み込む。
: との配列から新しいinstance を作る。
NIVC-compatible multi-folding scheme
と、に基づくコミット関係 を考えた時、決定論的な を持つmulti-folding scheme が、以下のプロパティを満たす場合にNIVC互換であるとします。
NP-completness: 任意の算術回路 のinput , 非決定的な入力、output に対して、構造・インスタンス・witness のタプル が に属し、 が成り立つ。
Partial functions: を満たすを生成すると、 のinstance を生成するが存在し、あるのwitness に対してとなる。
Monotonicity: 任意の算術回路 ( F ) と ( G ) について、もし であれば、 が成り立つ。ここで、は のゲートの総数を表し、 は、内の制約の数を示す。
Default instances: あるデフォルトインスタンス が存在し、任意の公開パラメータ と構造 に対して、 が成り立つ。
Commitment-carrying NIVC from multi-folding schemes
Last updated