Nova 和 SuperNova:无需通用电路的通用机器执行证明系统

1. 引言

前序博客有:

  • Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记
  • SuperNova:为多指令虚拟机执行提供递归证明
  • 基于Nova/SuperNova的zkVM
  • Sangria:PLONK + Folding
  • 2023年 ZK Hack以及ZK Summit 亮点记
  • Sangria:类似Nova folding scheme的relaxed PLONK for PLONK

主要参考资料:

  • 2023年4月视频 ZK Study Club: Supernova (Srinath Setty - MS Research)
  • slides ZK Study Club: Supernova (Srinath Setty - MS Research)

Nova和SuperNova作者之一Srinath Setty在 ZK Study Club: Supernova (Srinath Setty - MS Research)中介绍了:

  • 何为SuperNova
  • SuperNova适于的场景
  • SuperNova的工作原理

Nova代码实现见:

  • https://github.com/Microsoft/Nova(Rust)

2. 何为SuperNova?

何为SuperNova?

  • 1)是一种证明系统:Prover将proof π \pi π发送给Verifier:
    在这里插入图片描述
  • 2)面向的是半结构化计算的证明:
    在这里插入图片描述
    实际半结构化计算可用于如下场景:
    • EVM:证明EVM执行
    • RISC-V:证明RISC-V CPU执行
    • WebAssembly:证明WebAssembly CPU执行
    • VDF
    • zkML
    • zkBridge
    • PhotoProof
      在这里插入图片描述

SuperNova的主要特点为:

  • 1)SuperNova的Prover要比general zkSNARK Prover 更便宜。
  • 2)SuperNova的Prover的per-step cost 与 所执行指令的电路size 成比例。如虚拟机有数十条指令,每一步仅执行一条指令,Prover在该step的开销 仅与 所执行指令的电路size 成比例,而与其他如等无关。
  • 3)基于folding schemes构建:将具有相同结构的2个电路(各自有不同的input),”合并“为一个电路folded instance,而不是证明这2个电路instance的satisfiability。folding是不昂贵的,在证明最终的folded instance之前,可以根据需要做任意次合并——这也是节约Prover开销的关键所在——”只合并,不证明“。
    在这里插入图片描述

3. SuperNova适于的场景

当前使用的succinct arguments的演变过程为:

  • 1)基于Linear PCPs + Linear-only encodings的方案,代表有:【具有shortest proofs,需要Per-circuit trusted setup】
    • 1.1)quadratic Prover(最坏情况):
      • Pepper [SBW11, SMBW12]
      • Ginger [SVP+12]
    • 1.2)quasilinear Prover(QAP-based linear PCP):
      • [GGPR13]
      • Zaatar [SBV+13], [BCIOP13]
      • Pinocchio [PGHR13]
      • [Groth16]
  • 2)基于Polynomial IOPs + Polynomial commitment schemes的方案,代表有:【Universal/untrusted setup,具体取决于所采用的多项式承诺方案。具有可定制化的电路表示。】
    • 2.1)non-succinct Verifier(最坏情况):【因Verifier需读取circuit description】
      • [CMT12] [VSBW13] [T13]
      • Aurora [BCR+18]
      • vSQL [ZGK+17]
      • Hyrax [WTs+18]
      • Stark [BBHR18]
    • 2.2)succinct Verifier(computation commitments/holography):【Verifier仅需电路本身的succinct encoding】
      • 2.2.1)基于Multilinear多项式的方案有:
        • Spartan [S19]
        • Quarks [SL20]
        • HyperPlonk [CCBZ23]
        • SuperSpartan [STW23——Customizable constraint systems for succinct arguments]
      • 2.2.2)基于单变量多项式的方案有:
        • Sonic [MBKM19]
        • Plonk [GWC19]
        • Marlin [CHM+19]
        • SuperMarlin [STW23——Customizable constraint systems for succinct arguments]
  • 3)基于Folding schemes的方案,代表有:【针对incremental circuits,具有最快的Prover。且易于对Prover进行并行化加速。同时具有上面”基于Polynomial IOPs + Polynomial commitment schemes的方案“ 的所有优势。】
    • 3.1)(S)NARK recursion:
      • [BCTV14]
      • Halo [BGH19] [BCMS20] [BCL+20] [BDFG20]
    • 3.2)(S)NARK-less recursion:
      • Nova [KST21]
      • SuperNova [KS22]
      • Sangria:又名PlonkNova [M23]
      • HyperNova [KS23——HyperNova: Recursive arguments for customizable constraint systems]

在这里插入图片描述
上图中红色标识的S均标识Srinath Setty为作者之一。

4. SuperNova的工作原理

SuperNova为:

  • 将Nova推广至半结构化电路(或半结构化计算)。

最终目标是:

  • 为结构化计算构建fast zkSNARKs方案。
  • 证明:基于初始输入 z 0 z_0 z0,运行某non-deterministic computation C C C n n n次,最终结果为 z n z_n zn
    所谓结构化计算,是指可将某计算分解为多个steps。使得存在circuit C C C,初始输入为 z 0 z_0 z0,每个step具有non-deterministic inputs W i W_i Wi,同时每个step还将前一step的输出作为输入,重复该step n n n次,最终结果为 z n z_n zn
    在这里插入图片描述

实际应用的场景有:

  • 1)VDF: C C C为某delay函数(如MinRoot,计算用时为non-trivial sequential time)的一次或多次调用。
  • 2)zkVM: C C C为某VM(如EVM/Wasm/LLVM)的某个step,或某CPU(如RISC-V)的某个step。
  • 3)zkBridge: C C C为根据某链的共识规则来验证state。
  • 4)zkML: C C C为ML模型上的某layer。
  • 5)PhotoProof: C C C为对某图片的特定转换(如模糊、裁剪等)。
  • 6)Public key directory: C C C检查某directory在每个epoch是否为append-only。WhatsApp近期声称采取该技术解决端到端加密中的key transparency 问题:Deploying key transparency at WhatsApp。
  • 7)本文场景:用于半结构化计算,其中每个step为执行 { F 1 , F 2 , ⋯   , F l } \{F_1,F_2,\cdots,F_l\} {F1,F2,,Fl}中的某个函数。即每个step不再局限于固定相同的circuit,每个step可为预定义列表中某个可能的circuit。
    整个执行是顺序执行的,但proof生成过程可并行化(如使用binary tree结构)。本文将忽略binary tree的优化,重点关注顺序执行的部分。

4.1 结构化计算证明的直观方案

直观方案为:将 C C C n n n次调用展开到单一电路中,并以某zkSNARK来证明。
这样会构建一个巨大的电路:以初始输入 z 0 z_0 z0和所有的non-deterministic inputs调用所有的 C C C,输出为output z n z_n zn
在这里插入图片描述
直观方案的缺陷为:

  • Prover需要巨大的内存: Ω ( n ⋅ ∣ C ∣ ) \Omega(n\cdot |C|) Ω(nC)
  • 难于对proof生成过程进行并行化或分发加速。
  • Verifier的验证时长可能会依赖 n n n
  • 相比于普通zkSNARK方案,并无法提供更快的Prover。

4.2 结构化证明的Valiant方案[Val08, BCTV14]——Incrementally Verifiable Computation

2008年,[Val08]提出了Incrementally Verifiable Computation(IVC)方案,不同于直观方案中直接证明最终计算结果,在IVC中,每个step不仅证明 C C C的调用,同时还在每个step的电路中添加一个Verifier——输入为前一step的输出 z i − 1 z_{i-1} zi1 和 proof π i − 1 \pi_{i-1} πi1,输出为当前step执行正确的结果 z i z_i zi 以及 对前一step proof验证正确 且 当前step执行正确 的proof π i \pi_i πi
在这里插入图片描述

2019年[BGH19, BCMS20]中,将上述方案进一步衍化为:【将SANRK Verifier编码集成在Circuit中会引入额外的开销,因此Halo论文中改进为:采用累加机制,无需在每个step Circuit中集成完整的SNARK Verifier,可将SNARK中某些特定的昂贵的step推迟验证——累加为 U i U_i Ui。】
在这里插入图片描述
每个step:

  • Verifier V ′ V' V仅验证部分proof π i − 1 \pi_{i-1} πi1
  • 更新accumulator U i U_{i} Ui

这种基于SNARK的IVC方案[BCTV14, BGH19, BCMS20],存在的缺陷为:

  • 需要为 C C C的每次调用生成SNARK,因此最终的Prover速度 无法超过 所使用的SNARK方案的Prover速度。
  • Verifier circuit仍相当大(大于 2 18 2^{18} 218个乘法门),引入大量的递归开销、

4.3 结构化证明的Nova方案

Nova方案避免了上述SNARK方案以及(non-succinct)arguments of knowledge方案的缺陷。

Nova的关键点为:

  • 1)使用Non-interactive folding schemes 来实现 IVC。
  • 2)对NP,存在a public coin, one-round folding scheme。
    • 因在RO模式下可使其Non-interactive,在plain模式下,可对Non-interactive做启发式版本实现。

最终Nova的性能为:

  • Nova Prover的开销要比通用SNARK方案便宜很多:如PLONK中需要22+个MSM运算以及一些FFT运算,而Nova中仅需要2个size为 O ( ∣ C ∣ ) O(|C|) O(C)的MSM运算(与circuit size成比例)。
  • Nova的缺陷为其proof size为 O ( ∣ C ∣ ) O(|C|) O(C)(与circuit size成比例),不过可采用通用SNARK方案来压缩proof size。

4.3.1 Nova的基石——Folding schemes

假设Prover和Verifier具有某circuit C C C,且具有2个待check的claims:
在这里插入图片描述
Folding scheme是以原始的2个instance(分别具有witness w 1 , w 2 w_1,w_2 w1,w2 和 public io x 1 , x 2 x_1,x_2 x1,x2)为输入,将其合并为一个folded output instance(具有新的witness w w w 和 public io x x x):
在这里插入图片描述
folding scheme应满足如下属性:

  • 1)Completeness:若原始的2个instance时satisfiable的,则folding合并之后的folded output instance也是satisfiable的。
  • 2)Knowledge soundness:若Prover知道folded output instance的witness w w w,则其必然知道原始的2个instance的witness w 1 , w 2 w_1,w_2 w1,w2
  • 3)Succinct:Verifier的验证开销 应小于 直接检查2个原始instance的开销。
  • 4)ZK:除输入输出instance之外,整个交互过程不泄露其它信息。

事实上,zkSNARKs trivially提供了一种folding scheme实现:【如之前图片中的Halo、[BCMS20]等accumulation方案】

  • 即先证明第一个instance C ( w 1 , x 1 ) = 1 C(w_1,x_1)=1 C(w1,x1)=1
  • 然后再证明第一个instance C ( w 2 , x 2 ) = 1 C(w_2,x_2)=1 C(w2,x2)=1
    在这里插入图片描述

不过Nova的目的是设计一种无需SNARKs甚至non-succinct NARKs的folding scheme。

4.3.1.1 Nova采用R1CS电路表示[GGPR13]

R1CS电路表示首次在[GGPR13]论文中含蓄提出。其要素主要为:

  • 电路描述:矩阵 A 、 B 、 C A、B、C ABC
  • Public input: x x x
  • witness: W W W
  • 电路所满足的relation:即有向量 Z = ( W , x , 1 ) Z=(W, x, 1) Z=(W,x,1),满足:【其中 ∘ \circ 表示Hadamard product运算,详细可参看rank-1 constraint system R1CS。】
    在这里插入图片描述
    社区传说或观点:”R1CS时代已终结?“
  • 1)PlonkNova(”Sangria“ [M23]):可将Nova扩展至degree为2的Plonk电路表示。详细可参看博客:Sangria:类似Nova folding scheme的relaxed PLONK for PLONK。
  • 2)[STW23——Customizable constraint systems for succinct arguments]中引入了CCS(Customizable Constraint System):在不引入额外开销overhead的情况下,为R1CS、PLONK、AIR电路的通用表示。
  • 3)[KS23——HyperNova: Recursive arguments for customizable constraint systems]:将Nova扩展至CCS(Customizable Constraint System),从而也就扩展至了Plonk电路表示。

4.3.1.2 对R1CS Instance的fold尝试

引入随机值 r r r,做random linear combination:
在这里插入图片描述

不过,令 Z i = ( W i , x i , 1 ) Z_i=(W_i, x_i,1) Zi=(Wi,xi,1),且 Z = Z 1 + r ⋅ Z 2 Z=Z_1+r\cdot Z_2 Z=Z1+rZ2,这样直接的random linear combination之后,有:
A Z ∘ B Z ≠ C Z AZ\circ BZ\neq CZ AZBZ=CZ
因:
C Z = A Z 1 ∘ B Z 1 + r ⋅ A Z 2 ∘ B Z 2 CZ = AZ_1\circ B Z_1 + r\cdot AZ_2\circ BZ_2 CZ=AZ1BZ1+rAZ2BZ2
A Z ∘ B Z = A Z 1 ∘ B Z 1 + r 2 ⋅ A Z 2 ∘ B Z 2 + r ⋅ ( A Z 1 ∘ B Z 2 + A Z 2 ∘ B Z 1 ) AZ\circ BZ = AZ_1\circ B Z_1 + r^2\cdot AZ_2\circ BZ_2 + r\cdot (AZ_1\circ BZ_2 + AZ_2\circ BZ_1) AZBZ=AZ1BZ1+r2AZ2BZ2+r(AZ1BZ2+AZ2BZ1)

4.3.1.3 Relaxed R1CS:为folding引入的修正版R1CS

在Relaxed R1CS中,额外引入了:

  • 一个error vector E E E:用于抵消交叉项 r ⋅ ( A Z 1 ∘ B Z 2 + A Z 2 ∘ B Z 1 ) r\cdot (AZ_1\circ BZ_2 + AZ_2\circ BZ_1) r(AZ1BZ2+AZ2BZ1)。【注意error向量 E E E的长度等于 Z Z Z向量的长度,即 ∣ E ∣ = O ( ∣ W ∣ ) |E|=O(|W|) E=O(W),因此Verifier为not succinct的。】
  • 一个scalar u u u:用于解决 r ⋅ A Z 2 ∘ B Z 2 r\cdot AZ_2\circ BZ_2 rAZ2BZ2 r 2 ⋅ A Z 2 ∘ B Z 2 r^2\cdot AZ_2\circ BZ_2 r2AZ2BZ2 之间差的 r r r乘项。

E E E为零向量, u u u为scalar零值时,Relaxed R1CS等价为通用R1CS。

向量 Z Z Z变为 Z = ( W , x , u ) Z=(W,x,u) Z=(W,x,u),使得满足:
在这里插入图片描述

4.3.1.4 针对Relaxed R1CS的Folding Scheme(有问题版本)

认为 error vector E E E 和 scalar u u u 均与特定待证明的电路关联,将二者作为公开信息,对Prover和Verifier均已知。
针对Relaxed R1CS的Folding Scheme设计为:
在这里插入图片描述
基本流程为:【注意, A , B , C , E 1 , u 1 , x 1 , E 2 , u 2 , x 2 A,B,C,E_1,u_1,x_1,E_2,u_2,x_2 A,B,C,E1,u1,x1,E2,u2,x2均为公开信息,对Prover和Verifier都已知。】

  • Prover:计算交叉项 T = A Z 1 ∘ B Z 2 + A Z 2 ∘ B Z 1 − u 1 ⋅ C Z 2 − u 2 C Z 1 T = AZ_1\circ BZ_2 + AZ_2\circ BZ_1 - u_1\cdot CZ_2-u_2CZ_1 T=AZ1BZ2+AZ2BZ1u1CZ2u2CZ1
    Prover将 T T T发送给Verifier。
  • Verifier:发送随机challenge值 r r r
  • Prover:fold W = W 1 + r ⋅ W 2 W=W_1+r\cdot W_2 W=W1+rW2,fold E = E 1 + r ⋅ T + r 2 ⋅ E 2 E=E_1+r\cdot T+r^2\cdot E_2 E=E1+rT+r2E2
  • 最终Prover和Verifier获得了单个folded instance,其witness为 W W W,公开信息为 ( A , B , C , E , u , x ) (A,B,C,E,u,x) (A,B,C,E,u,x)
    但是,该设计存在2个问题:
    • 1)Verifier无法enforce约束 Prover是否正确fold了 W W W。即无法保证completeness。
    • 2)error向量 E E E的长度等于 Z Z Z向量的长度,即 ∣ E ∣ = O ( ∣ W ∣ ) |E|=O(|W|) E=O(W),因此Verifier为not succinct的。

4.3.1.5 针对Relaxed R1CS的Folding Scheme(借助commitment同态属性的完美版)

认为 error vector E E E 和 scalar u u u 均与特定待证明的电路关联, E E E作为witness,将 u u u E ˉ \bar{E} Eˉ(error向量 E E E的承诺值)、 W ˉ \bar{W} Wˉ(witness W W W的承诺值)作为公开信息,对Prover和Verifier均已知。

针对Relaxed R1CS的Folding Scheme(借助commitment同态属性的完美版)设计为:
在这里插入图片描述
其中所采用的承诺方案应具有加法同态属性,如Pederson承诺等。
该设计方案:

  • 同时具备completeness属性和knowledge soundness属性。
  • 为succinct的:因Verifier仅需对多项式承诺值进行folding。

4.3.2 Nova的IVC方案实现

详情见Nova论文 5.1节内容,针对的IVC场景为:
初始输入 z 0 z_0 z0,运行 n n n F F F函数,输出为 z n z_n zn。即 z n = F ( n ) ( z 0 ) z_n=F^{(n)}(z_0) zn=F(n)(z0)

在这里插入图片描述
上图中NIFS表示Non-interactive Folding Scheme。

与基于SANRK的IVC方案类似,Prover采用augmented函数 F ′ F' F,其中每个step i i i包含:

  • 当前step对 F ′ F' F函数的调用:对应committed relaxed R1CS instance u i u_i ui,其中包含了 z i z_i zi F ′ F' F用于计算 z i + 1 = F ( z i ) z_{i+1}=F(z_i) zi+1=F(zi)
  • 之前step的 F ′ F' F函数的调用:对应committed relaxed R1CS instance U i U_i Ui,表示之前的 1 , ⋯   , i − 1 1,\cdots, i-1 1,,i1 F ′ F' F调用的正确执行。

F ′ F' F中包含2个任务:

  • 1)执行当前step的增量计算:即instance u i u_i ui中包含了 z i z_i zi F ′ F' F用于计算 z i + 1 = F ( z i ) z_{i+1}=F(z_i) zi+1=F(zi)
  • 2)触发folding scheme的Verifier:将committed relaxed R1CS instance u i u_i ui U i U_i Ui合并一个instance U i + 1 U_{i+1} Ui+1

IVC Prover:

  • 计算新的instance u i + 1 u_{i+1} ui+1:以保证第 i + 1 i+1 i+1次调用 F ′ F' F的正确执行,从而确保 z i + 1 = F ( z i ) z_{i+1}=F(z_i) zi+1=F(zi) U i + 1 U_{i+1} Ui+1 u i u_i ui U i U_i Ui的folding结果。
    此时:
    • U i + 1 U_{i+1} Ui+1:表示第 1 , ⋯   , i 1,\cdots,i 1,,i次调用 F ′ F' F的正确执行。将 F ′ F' F在step i i i中输出的instance U i + 1 U_{i+1} Ui+1 称为running instance。
    • u i + 1 u_{i+1} ui+1:表示第 i + 1 i+1 i+1次调用 F ′ F' F的正确执行。instance u i u_i ui中包含了 z i z_i zi F ′ F' F用于计算 z i + 1 = F ( z i ) z_{i+1}=F(z_i) zi+1=F(zi)

简化表示为:
在这里插入图片描述
在这里插入图片描述
与Halo的IVC方案类似,只是其中:

  • V V V:为non-interactive folding scheme的Verifier,而不是accumulator。
    具有最低的recursion开销(即Verifier circuit size):约1万个gate。
  • u i u_i ui:为previous step的witness的commitment承诺值。对应step instance。
  • U i U_i Ui:为”running witness“ 和 "running error-term"的commitment承诺值。对应running instance。

相应的Recursive proof为: ( u n , U n ) (u_n, U_n) (un,Un) + 相应的witness,由2部分组成:

  • 1)最后一个step的2个承诺值 ( u n , U n ) (u_n, U_n) (un,Un),分别对应step instance和running instance。
  • 2)对应最后一个step的witness ( w n , W n ) (w_n,W_n) (wn,Wn),分别对应step instance的witness和running instance的witness。
    该witness与step size呈线性关系。
    在这里插入图片描述
    Nova再次将step instance和running instance再fold为一个:
  • ( U , W ) (\mathbf{U,W}) (U,W):其中 U = ( W ˉ , E ˉ , u , x ) , W = ( W , E ) \mathbf{U}=(\bar{W},\bar{E},u,x), \mathbf{W}=(W,E) U=(Wˉ,Eˉ,u,x),W=(W,E)

这样可将Recursive proof size减半,但proof size仍为 O ( ∣ C ∣ ) O(|C|) O(C)个field elements。

不过,直观方案是:

  • 可引入某zkSNARK方案来证明knowledge of satisfying ( U , W ) (\mathbf{U,W}) (U,W),从而可提供额外的succinctness和zero-knowledge属性。但是相应的证明开销将是昂贵的。

针对:

  • π = ( U , W ) \pi=(\mathbf{U,W}) π=(U,W):其中 U = ( W ˉ , E ˉ , u , x ) , W = ( W , E ) \mathbf{U}=(\bar{W},\bar{E},u,x), \mathbf{W}=(W,E) U=(Wˉ,Eˉ,u,x),W=(W,E)

Nova的压缩proof size的方案为:

  • 1)将 ( W ˉ , E ˉ ) (\bar{W},\bar{E}) (Wˉ,Eˉ)看成是multilinear多项式的承诺值。
  • 2)使用基于multilinear多项式的SNARK方案,如Nova中使用Spartan [S19]来证明,对于所承诺的多项式,如下R1CS关系成立:
    A ⋅ z ∘ B ⋅ z = u ⋅ C ⋅ z + E A\cdot z\circ B\cdot z = u\cdot C\cdot z + E AzBz=uCz+E,其中 Z = ( W , x , u ) Z=(W,x,u) Z=(W,x,u)

从而可将proof size由 O ( ∣ C ∣ ) O(|C|) O(C)个field elements,reduce为, O ( log ⁡ ∣ C ∣ ) O(\log{|C|}) O(logC)个group elements,从而实现了指数级的压缩改进。
也可将 ( W ˉ , E ˉ ) (\bar{W},\bar{E}) (Wˉ,Eˉ)看成是向量承诺值,也可使用其它证明系统(如Plonk、Marlin等等)。

4.4 使用Nova来证明机器执行

在这里插入图片描述
当将Nova用于证明机器执行时:

  • C C C中编码了VM的某个step,该step可执行所支持的任意指令:
    • ADD、MUL、KECCAK256、SLOAD、SSTORE、ECADD、ECMUL、ECPAIRING等等。
  • 这样的缺陷之一是, C C Csize与所支持的指令数呈比例: ∣ C ∣ ≥ ∣ C A D D ∣ + ∣ C M U L ∣ + ∣ C K E C C A K 256 + ∣ C S L O A D ∣ + ⋯ |C|\geq |C_{ADD}|+|C_{MUL}|+|C_{KECCAK256}+|C_{SLOAD}|+\cdots CCADD+CMUL+CKECCAK256+CSLOAD+

为证明某个step,相应Prover的开销为:

  • 至少 O ∣ C ∣ O|C| OC次crypto运算

为此,要求 C C C尽可能小,即实现minimal VM,但是让其尽可能小无法解决实际应用需要,因为某些实际程序,过小的VM意味着需增加递归调用次数。

4.5 使用SuperNova来证明机器执行

4.5.1 Non-uniform IVC

已知:

  • l + 1 l+1 l+1non-deterministic函数: C 1 , C 2 , ⋯   , C l C_1,C_2,\cdots,C_l C1,C2,,Cl ϕ \phi ϕ。其中 ϕ \phi ϕ函数用于帮助选择IVC中每个step所执行的指令。
  • 初始输入值 z 0 z_0 z0

证明:

  • z n z_n zn为运行 C j C_j Cj n n n次的结果,其中在step i i i,有 j = ϕ ( w i − 1 , z i − 1 ) j=\phi(w_{i-1},z_{i-1}) j=ϕ(wi1,zi1)。【即 ϕ \phi ϕ函数会将witness w i − 1 w_{i-1} wi1和input z i − 1 z_{i-1} zi1,映射为 1 1 1 l l l之间的某个值。】

在这里插入图片描述

4.5.2 将Nova看成是单个指令的Non-uniform IVC

将Nova看成是单个指令的Non-uniform IVC:【即 ϕ \phi ϕ函数确定性的返回1,可忽略。】
在这里插入图片描述

4.5.3 将SuperNova看成是对多个指令的Non-uniform IVC

将SuperNova看成是对多个指令的Non-uniform IVC,其简化版表示为:
在这里插入图片描述
其中:

  • p c i pc_i pci为第 i i i个step所执行的函数的index,其结果值为 1 1 1 l l l中某个值。

”将SuperNova看成是对多个指令的Non-uniform IVC“ 与 ”将Nova看成是单个指令的Non-uniform IVC“ 的关键不同之处在于:

  • non-interactive folding scheme中的Verifier N I F S . V NIFS.V NIFS.V
    • 从多个Running instance选中一个 U i , p c i U_{i,pc_i} Ui,pci u i u_i ui合并,即只更新一个running instance。

”将SuperNova看成是对多个指令的Non-uniform IVC“时,每个step所执行的指令可能不同,具体在某个step执行哪个指令由 φ \varphi φ函数以及 witness w i − 1 w_{i-1} wi1和input z i − 1 z_{i-1} zi1 共同决定。

4.5.3 SuperNova性能对比

在这里插入图片描述

5. 小结

SuperNova为一种新的证明系统,其具有fast prover和small proof:

  • 提供了”a la carte(点菜)“ cost profile:仅pay for what is executed。
  • 引入了folding scheme等新技术
  • 通过Spartan利用了如linear-time sum-checks等最佳技术。

相比同类方案,SuperNova具有诸多优势,为构建基于proof的trustless service提供了新的选型。

HyperNova:

  • 支持对customizable constraint system(CCS)的证明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ptp4l测试-LinuxPTP\ptp4l配置与问题排查

目录 一、前言 1.1 什么是ptp4l 1.2 描述 1.3 官网连接 1.4 目的 1.5 平台 二、 平台必要软件 2.1 linux物理机 2.2 imx6ull开发板 三、检查硬件是否支持 3.1 ifconfig查看当前网卡的名称 3.2 ethtool检查驱动和网卡是否支持 四、开启ptp4l服务 4.1 方法一&#x…

leetcode--环形链表.找到入环节点(java)

环形链表II 环形链表.找到入环节点题目描述解题思路 环形链表.找到入环节点 LeetCode 142:环形链表II 可以在这里测试 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节…

电压放大器的主要指标有哪些方面

电压放大器是电子电路中常用的器件,在选择和评估电压放大器时,需要考虑以下几个主要指标: 输入电阻(Input Resistor):输入电阻是指放大器输入端的电阻值,它反映了放大器将输入信号转换成输出信号…

Linux驱动入门(二)——嵌入式处理器介绍和构建驱动程序开发环境

文章目录 嵌入式处理器和开发板介绍处理器简述处理器种类Intel的PXA系列处理器StrongARM系列处理器MIPS处理器摩托罗拉龙珠(DragonBall)系列处理器日立SH3处理器德州仪器OMAP系列处理器 ARM处理器ARM处理器简介ARM处理器的特点ARM处理器系列ARM处理器的应用ARM处理器选型 STM32…

Jupyter Notebook如何导入导出文件

目录 0.系统:windows 1.打开 Jupyter Notebook 2.Jupyter Notebook导入文件 3.Jupyter Notebook导出文件 0.系统:windows 1.打开 Jupyter Notebook 1)下载【Anaconda】后,直接点击【Jupyter Notebook】即可在网页打开 Jupyte…

初阶数据结构之栈的实现(五)

文章目录 😏专栏导读🤖文章导读🙀什么是栈?🙀画图描述 😳栈的代码实现及其各类讲解😳栈的初始化代码实现及其讲解😳栈的初始化 😳栈的销毁代码实现及其讲解😳…

PLX31-EIP-SIE 以太网/IP到西门子工业以太网

ProSoft Technology的EtherNet/IP to Siemens工业以太网通信网关允许支持EtherNet/IP的控制器或设备与西门子S7 PACs(包括S7-200s、S7-300s、S7-400s、S7-1200和S7-1500 PACs)之间进行高速双向数据传输。 此外,该网关还包括几个功能,包括数据优先级&…

横向移动-传递攻击SMB服务利用psexecsmbexec

win2012以上版本,关闭了wdigest 或者安装了 KB287199补丁。无法获取明文密码 总的来说就是win2012后无法获取明文密码 解决办法就是: 1.可以利用哈希hash传递(pth,ptk等进行移动) 2.利用其他服务协议(S…

UGUI进阶知识[二十九]循环GridView

节省内存的常用滑动列表还有一种形式,上下滑动的GridView。这种格式的滑动列表可用于移动设备的背包,仓库,商店UI等数据可能海量从而导致产生特别多但又看不见的UI的情况。 于是基于 UGUI进阶知识[八]循环利用滑动列表的循环ListView工程做了…

Tomcat服务器、Servlet生命周期、上传下载文件、使用XHR请求数据、注解使用

文章目录 Servlet认识Tomcat服务器使用Maven创建Web项目创建Servlet探究Servlet的生命周期解读和使用HttpServletWebServlet注解详解使用POST请求完成登陆上传和下载文件下载文件上传文件 使用XHR请求数据重定向与请求转发重定向请求转发 ServletContext对象初始化参数 Servlet…

Office project 2010安装教程

哈喽,大家好。今天一起学习的是project 2010的安装,Microsoft Office project项目管理工具软件,凝集了许多成熟的项目管理现代理论和方法,可以帮助项目管理者实现时间、资源、成本计划、控制。有兴趣的小伙伴也可以来一起试试手。…

在职阿里6年,一个29岁女软件测试工程师的心声

简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) 其中成功的有4家&am…

CSAPP Lab5- MallocLab

实验目标 本实验需要用c语言实现一个动态的存储分配器,也就是你自己版本的malloc,free,realloc函数。 实验步骤 tar xvf malloclab-handout.tar解压文件 我们需要修改的唯一文件是mm.c,包含如下几个需要实现的函数 int mm_ini…

c++调用dll出现LNK2001 无法解析的外部符号

先说说下正常的dll。 动态库显试调用一般3个文件.h .lib .dll ,隐式调用 只需要2个文件:.h(函数定义) .dll 静态库2个文件:.h .lib 先说C正常dll显式调用 #include "BYD_MES/MES2Interface.h" //#include 是以当前…

Android 12.0下拉状态栏通知栏的通知设置默认展开

1.概述 在12.0的产品定制化中,对于SystemUI的定制也是常用的功能,而在下拉状态栏中的通知栏部分也是极其重要的部分,每条通知实时更新在通知栏部分,由于通知栏高度的限制,每条通知是默认收缩的,功能开发需要要求通知默认展开,所以就要从通知的加载流程分析 如图: 2.…

【Java基础篇】运算符

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:Java.SE,本专栏主要讲解运算符,程序逻辑控制,方法的使用&…

多态的原理、单继承和多继承的虚函数表、以及虚函数表的打印。

一、多态原理 1、下面这个结果是多少&#xff1f; class A { public:virtual void func(){cout << "func()" << endl;}private:int _a 1; };int main() {printf("%d\n", sizeof(A));return 0; } 是 4&#xff1f;8&#xff1f;还是多少&am…

MVC 接收不到参数? —— 看我如何给你安排得明明白白

文章结构 问题背景&#xff1a;问题处理总结 问题背景&#xff1a; 现有如下代码&#xff1a; PostMapping(value "/payment/create") ResponseBody public CommonResult create(Payment payment) {}乍眼看去是不是很好&#xff0c;至少没啥问题很自然&#xff0c…

什么是日志关联

什么是日志关联 日志关联是一种分析来自不同源的日志数据以识别事件模式的技术。它用于更好地了解网络的活动&#xff0c;从而有效地保护网络免受漏洞和威胁。 日志关联是日志管理过程的关键部分。收集和存储日志后&#xff0c;集中式日志服务器将执行分析以检测特定事件。日…

LC-3 机器码编程实验

一、实验目的 分析和理解试验指定的需解决问题。利用LC-3的机器代码设计实现相关程序。通过LC-3仿真器调试和运行相关程序并得到正确的结果。 二、实验内容 利用LC-3的机器代码计算一个16位的字中有多少位是“1”&#xff0c;程序从x3000开始&#xff0c;需计算的字存储在x3…