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

このR(com)R(com)は、structure ss、instance uu, witness wwがとある関係RRにあり、さらにcommit CCと public-param ppcompp_{com}が、com=(Gen,Commit)com = (Gen, Commit)によって生成されたものであることを示す関係です。

また、structure ss は、folding schemeでたたみ込まれるインスタンスの構造の種類を表しています。

Incrementally Verifiable Computation (IVC) & Non-uniform IVC (NIVC)

(i,z0,z)(i, z_0, z)を入力に受け取ってzi+1Fi(z0)z_{i+1} \leftarrow F^i (z_0)を証明するΠi\Pi_{i}を生成するFFを使い、(ii+1,z0,zi+1)(i_{i+1}, z_0, z_{i+1})Πi+1\Pi_{i+1}を再帰的に計算していくことで、繰り返しの計算を再帰的に証明していきます。

NIVC は、IVC の一般化で、各ステップで実行される関数が固定ではなく、決まった関数集合 F1,F2,,FF_1,F_2,…,F_\ell​ から選ばれます。FFの選択には補助的な関数ϕ\phiを利用し、全体ではzj+1Fϕ(zj,wj)j(zj,wj)z_{j+1} \leftarrow F^j_{\phi(z_j, w_j)} (z_j, w_j)を計算します。

Multi-folding schemes

Folding schemesでは、構造sを持つ関係Rの2つのインスタンスを1つのインスタンスの検証に削減しますが、HyperNovaなどのMulti-folding schemesでは、s1s_1の構造を持つ関係R1R_1のインスタンスu1u_1と、s2s_2の構造を持つ関係R2R_2のインスタンスu2u_2を、関係R1R_1のインスタンスの検証に削減します。

2つの関係 R1R_1R2R_2に対して、ある互換性述語(predicate) compatcompat があり、この述語が R1R_1​ と R2R_2のインスタンス間で満たされる必要があります。また、μ,νN\mu, \nu \in \mathbb{N} はそれぞれのインスタンスの数を表すパラメータです。この(R1,R2,compat,μ,ν)(R_1, R_2, compat, \mu, \nu)対して、Multi-foldingでは次の4つの関数が定義されます。

  • g(1λ,N)=ppg(1^{\lambda}, N) = pp :  security param λ\lambda とサイズ上限 NNからpublic param ppppを求める。

  • Enc(pp,(s1,s2))(pk,vk)Enc(pp,(s_1,s_2)) → (pk, vk) :   ppppと構造s1,s2s_1, s_2から証明・検証の為の鍵を求める。

  • P(pk,(u1,w1),(u2,w2))(u,w)P(pk,(\overrightarrow{u_1}, \overrightarrow{w_1}),(\overrightarrow{u_2}, \overrightarrow{w_2})) → (u,w) :  μ\mu個のR1R_1のinstance u1u_1とwitness w1w_1の配列と、ν\nu個のR2R_2のinstance u2u_2とwitness w2w_2の配列を、R1R_1のinstance uuとwitness wwに畳み込む。

  • V(vk,(u1,u2))uV(vk,(\overrightarrow{u1}, \overrightarrow{u2})) → u :  u1u_1u2u_2の配列から新しいinstance uuを作る。

NIVC-compatible multi-folding scheme

R1R_1と、R2R'_2に基づくコミット関係R2R_2 を考えた時、決定論的な VVを持つmulti-folding scheme (Gen,Enc,𝑃,𝑉)( Gen , Enc , 𝑃 , 𝑉 ) が、以下のプロパティを満たす場合にNIVC互換であるとします。

  • NP-completness: 任意の算術回路 FFのinput xx, 非決定的な入力ww、output yyに対して、構造・インスタンス・witness のタプル(s2,u,w) ( s _2 , u , w )R2R'_2​ に属し、 F(x,w)=yF(x,w)=y が成り立つ。

  • Partial functions: compat(s1,s2)=1\text{compat}(s_1 ​ ,s_2 ​ )=1を満たすcompat(s1,s2)=1compat(s_1 ​ ,s_2 ​ )=1(s1,s2)(s_1, s_2)を生成するencstr(F)\text{enc}_{str}(F)と、R2R'_2 のinstance uuを生成するencinst((x,y))\text{enc}_{inst}((x, y))が存在し、あるR2R'_2のwitness wwに対して(s2,u,w)=enc(F,(x,y),w)(s_2, u,w) = \text{enc}(F,(x, y), w)となる。

  • Monotonicity: 任意の算術回路 ( F ) と ( G ) について、もし FG |F| \leq |G| であれば、encstr(F)encstr(G) |\text{enc}_{\text{str}}(F)| \leq |\text{enc}_{\text{str}}(G)| が成り立つ。ここで、F|F| F F のゲートの総数を表し、encstr(F)|\text{enc}_{\text{str}}(F)| は、encstr(F)\text{enc}_{\text{str}}(F)内の制約の数を示す。

  • Default instances: あるデフォルトインスタンス (u,w) (u_{\bot}, w_{\bot}) が存在し、任意の公開パラメータ pp\text{pp}と構造 s\text{s}に対して、(pp,s,u,w)R1 (\text{pp}, s, u_{\bot}, w_{\bot}) \in R_1 が成り立つ。

Commitment-carrying NIVC from multi-folding schemes

Last updated