JP ZK Learning Club
  • 貢献について
  • 前提知識
    • 暗号学
      • 決定問題
      • P/NP問題
      • 計算複雑性理論
    • 数学
      • 代数的構造
      • 離散対数問題 (DLP)
      • 楕円曲線
      • 算術回路
  • PSE-Core-Program
    • Week 1
    • Week 2 さらなる暗号技術とSNARKsとSTARKs
    • Week 5 Frontier
  • zkSNARKs
    • Spartan
  • Folding Scheme
    • Nova
    • SuperNova
    • HyperNova
    • NeutronNova
    • CycleFold
  • Lookup Argument
    • 概要とLasso以前の提案
    • Lasso
  • zkVM
    • Backgrounds
      • Multi Linear extension(MLE)
      • Folding scheme
      • Lookup Singularity
      • Cycle of Curves
      • Extension Field
      • Glossary
      • CCS
      • Switch-board (Nebula)
    • Building Blocks
      • Binius
      • GKR
      • Circle STARK
      • Sum-check Protocol
    • 動作概要
    • ゼロ知識証明
      • メモリ読み込み・書き込みの一貫性
        • Merkle-Tree
        • Spice
        • Jolt-Memory-Checking
        • Nebula
        • Proof-for-Deep-Though
      • 命令の実行
      • バイトコードから命令へのデコード
    • プロジェクト
      • SP1
      • RISC-Zero
      • Jolt
      • Valida
      • Nexus
Powered by GitBook
On this page
  • 概要
  • 前提知識
  • Committed Relation
  • Incrementally Verifiable Computation (IVC) & Non-uniform IVC (NIVC)
  • Multi-folding schemes
  • NIVC-compatible multi-folding scheme
  • Commitment-carrying NIVC from multi-folding schemes
  1. zkVM
  2. ゼロ知識証明
  3. メモリ読み込み・書き込みの一貫性

Nebula

Commitment-Carry IVCを使った方法

PreviousJolt-Memory-CheckingNextProof-for-Deep-Though

Last updated 7 months ago

概要

では、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)R(com)は、structure sss、instance uuu, witness wwwがとある関係RRRにあり、さらにcommit CCCと public-param ppcompp_{com}ppcom​が、com=(Gen,Commit)com = (Gen, Commit)com=(Gen,Commit)によって生成されたものであることを示す関係です。

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

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

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

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

Multi-folding schemes

Folding schemesでは、構造sを持つ関係Rの2つのインスタンスを1つのインスタンスの検証に削減しますが、HyperNovaなどのMulti-folding schemesでは、s1s_1s1​の構造を持つ関係R1R_1R1​のインスタンスu1u_1u1​と、s2s_2s2​の構造を持つ関係R2R_2R2​のインスタンスu2u_2u2​を、関係R1R_1R1​のインスタンスの検証に削減します。

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

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

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

  • P(pk,(u1→,w1→),(u2→,w2→))→(u,w)P(pk,(\overrightarrow{u_1}, \overrightarrow{w_1}),(\overrightarrow{u_2}, \overrightarrow{w_2})) → (u,w)P(pk,(u1​​,w1​​),(u2​​,w2​​))→(u,w) :  μ\muμ個のR1R_1R1​のinstance u1u_1u1​とwitness w1w_1w1​の配列と、ν\nuν個のR2R_2R2​のinstance u2u_2u2​とwitness w2w_2w2​の配列を、R1R_1R1​のinstance uuuとwitness wwwに畳み込む。

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

NIVC-compatible multi-folding scheme

R1R_1R1​と、R2′R'_2R2′​に基づくコミット関係R2R_2R2​ を考えた時、決定論的な VVVを持つmulti-folding scheme (Gen,Enc,𝑃,𝑉)( Gen , Enc , 𝑃 , 𝑉 )(Gen,Enc,P,V) が、以下のプロパティを満たす場合にNIVC互換であるとします。

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

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

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

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

Commitment-carrying NIVC from multi-folding schemes

Nebula