NeutronNova
Last updated
Last updated
NeutronNovaはZeroCheck関係を畳み込むFolding Schemeの一種です。ZeroCheck関係を畳み込むことでJoltのようなLookup関係やSumcheck Protocolなどの色々な関係も畳み込むことができます。
Incrementally Verifiable Computation(IVC)だけでなくProof Carrying Data (PCD)も実現することができるため並列処理が可能で、n個の任意の関係を一つに畳み込むことができます。また、Movaと同じくコミットメントを作成せずに証明できるという性質を持っています。
NeutronNovaはzkVMをより効率的に設計するための提案です。既存提案であるJoltは時間効率が良く、Nexusは空間効率が良いことで知られていますが、NeutronNovaはそれらを両立させることを目標としています。そのためのアイデアとして、Joltで用いられている命令ステップごとに存在するLookup関係を1つに畳み込むことで効率化しています。
NeutronNovaでは、以下のプロセスでLookup関係を畳み込みます。
Lookup関係(LKP)を4つのGrand Product関係(GP)に変換
GPをZeroCheck関係(ZC)に変換
ZCをNested SumCheck関係(NSC)とPowerCheck関係(PC)に変換
NSCとPCを畳み込み
4のプロセスをSumFoldといい、3と4のプロセスを合わせてZeroFoldといいます。
以下のようなSumCheck証明があるとします。
このとき、Q(x,w)=F(G(x,w))で表せる構造的な多項式であると仮定します。これをSumCheck関係で表すと以下のようになります。ppはprover parameter、uはインスタンス、xとwはインプットです。
この関係を畳み込むには、Gに着目します。Gは複数の出力を持つ多項式なので、以下のようにgを用いて定義します。これを簡単にランダム線形結合を用いて畳み込むことはできません。そこで、畳み込みの結果の多項式をラグランジュ補完によって求めます。
まず、ゴールはある2つのSumCheck関係にあるGをgとhとおいたとき、それを一つのfという関数に畳み込むことです。まず、それをするために以下のようなfを定義します。これはb=0のときにgを、b=1のときにhを表現します。
そうすると証明すべきことは以下の2つのSumCheckに置き換え可能です。
この2つの式をラグランジュ係数として埋め込むと、SumCheckは以下のようになります。
この法則に従ってu,x,wなども畳み込むことができます。Schwarz-Zippelの補題により、実際にはランダムなβをxの中から選んでチェックします。
上記のSumFoldを用いてZeroCheck関係(ZC)を畳み込みます。
どうように以下の様なZeroCheckの証明があるとします。
このときのZeroCheck関係は以下のようになります。
このZCをSumCheck関係SCに変換するために、以下のような多項式を定義します。τはランダムなチャレンジです。
そしてe(x)も定義します。
proverはe1とe2のコミットメントをを送信し、verifierはe+ρeを計算し、folded witnessを計算することができます。しかし、ここで、コミットメントにpowers of τが適切に利用されていることも追加で検証する必要が生じます。つまりZCを変換しようとすると、以下のNested SumCheck関係(NSC)とPowerCheck関係(PC)の2つに変換されます。
このNSCとPCを同時にfoldingすることでZeroFoldを行なうことができます。
LassoのようなIndexed Lookup Argumentがあるとします。vはベクトル、tはテーブル、aはindicesを表します。
このためのLookup関係(LKP)は以下のようになります。
ここで、proverは、テーブルtにベクトルvが存在することを証明するために以下が成り立つcとfを計算し、そのコミットメントをverifierに送信します。
これは、合計で4つのGrandProductがあると解釈することができ、簡単に4つのGrandProduct関係(GP)として表現できます。
GrandProductの証明には大きく2つの方法があります。1つはSumcheck Protocolを用いた方法で、もう1つはGKRを用いた方法です。前者はvのエントリ数だけコミットメントしなければならないというダウンサイドがあり、後者は対数回のSumcheck Protocolの呼び出しが必要というダウンサイドがあります。
NeutronNovaでは、前者のSumcheck Protocolを用いた方法に照らし合わせてGrandProduct関係(GP)をZeroCheck関係(ZC)に変換しています。そうすれば、あとはZeroFoldを用いてfoldingすることができます。
ZC→NSCのような関係の変換にはラグランジュ多項式補完を伴うため、なるべく変換回数が少なく済むように方式を改善する。
GrandProductを変換する際のオプションであるGKR Protocolのfoldingバージョンを提案する。
NebulaをZeroFoldで畳み込む。
ZeroFold/SumFoldの計算を並列化してO(n log d)をO(logn * logd)オーダーに削減する。