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
  1. zkVM
  2. Backgrounds

Switch-board (Nebula)

Nebulaのswitch-boardは、1つの回路内に切り替えできる複数の回路を混在させることができるテクニックです。

PreviousCCSNextBuilding Blocks

Last updated 6 months ago

Switch-boardは、HyperNovaやMovaなどのいくつかのfolding-schemeであれば、変更なしに導入できます。論文では、R1CSに沿って説明されていますが、CCSでも同様の手法を使って書くことができます。さらに、switch-boardを使うことで、使用していない回路にはコストがかからないpay-per-useをfolding-schemeの変更なしに行えます。

HyperNovaのようなすでにNon-uniformなIVCでは、このswitch-board回路をいくつかコピーして一つの回路にすることで、複数の回路を一つのfoldingで実行でき、foldingのオーバーヘッドを減らすことも期待できます。

なお、一つのswitch-board回路で一度に実行できる内部の回路の個数は1つだけです。

R1CSで書かれたℓ\ellℓ個の異なる回路、(ただし入力の長さは同じ)、があるとします。

Ai⋅zi∘Bi⋅zi=Ci,⋅zi,i∈[1,ℓ]A_i \cdot z_i \circ B_i \cdot z_i = C_i, \cdot z_i, i \in [1, \ell]Ai​⋅zi​∘Bi​⋅zi​=Ci​,⋅zi​,i∈[1,ℓ]

AiA_iAi​を全て結合したA∗A^*A∗を考えますが、Bi,CiB_i, C_iBi​,Ci​も同様にuniversal-switchboard回路を作ることができます。

下の図で、AiA_iAi​とSwitch constrains以外の場所は全て0となります。また、この行列に対するz∗z^*z∗は、図内の右側です。

この行列に対するzは z∗=(1,×,w∗)z^* = (1, \times, w^*)z∗=(1,×,w∗)で定義されます。w∗w^*w∗には、選択したい回路のフラグと、その回路に対する入力とwitnessが含まれますが、それ以外は全て0となります。

これを実現する制約をswitch constrainsに定義していきます。まず、AiA_iAi​に対応するzをzi′=(si,xi,wi)z_i ' = (s_i, x_i, w_i)zi′​=(si​,xi​,wi​)とします。

w∗=(s1,x1,w1,s2,x2,w2,...,sℓ−1,xℓ−1,wℓ−1,sℓ,xℓ,wℓ)w^* = (s_1, x_1, w_1, s_2, x_2, w_2,...,s_{\ell-1}, x_{\ell -1}, w_{\ell -1}, s_{\ell}, x_{\ell}, w_{\ell})w∗=(s1​,x1​,w1​,s2​,x2​,w2​,...,sℓ−1​,xℓ−1​,wℓ−1​,sℓ​,xℓ​,wℓ​)

sis_isi​はセレクターで、次のSingle switch constraintとBinary switch constraintを満たすように制約します。

  1. Single switch constraint: Enforce ∑i=1ℓsi=1.\sum_{i = 1}^{\ell} s_i = 1.∑i=1ℓ​si​=1.

  2. Binary switch constraint: For i∈[1,ℓ]i \in [1, \ell]i∈[1,ℓ], enforce si⋅(1−si)=0s_i \cdot (1-s_i) = 0si​⋅(1−si​)=0

次に、このセレクターsis_isi​を使って、使用したい回路以外の入力を0であることを強制したいので、次の制約を定義します。

  1. Input consistency constraint: For i∈[1,ℓ]i \in [1,\ell]i∈[1,ℓ], enforce ×⋅si=xi\times \cdot s_i = x_i×⋅si​=xi​

もし、sk=1s_k = 1sk​=1の場合はxi=0,i≠kx_i = 0, i \neq kxi​=0,i=kである必要があります。さらに、入力が0の回路はwitnessが0でも問題ないので、wi=0,i≠kw_i = 0, i \neq kwi​=0,i=kとすることができます。

HyperNovaでは0へのコミットは無料なので、使わない回路にコストはかかりません。

Novaの場合は、もう少し工夫が必要ですが、同様の方法で実現できます。

参考

https://eprint.iacr.org/2024/1605.pdf