Introduction
very introductory explanation on ivc is computation that can verify itself with constant overhead. In the paper, computation is defined as incremental steps that takes an input and a proof of previous step and can return proof of correct computation of the application and that the previous proof has been verified correctly.
IVC works on step based functions: for some steps , initial input and output .
nova realises incremental verifiability using a relaxed R1CS instance. so each step is treated as an R1CS instance and that step proves that step was computed correctly and folds the R1CS instance of previous step and the current step to a new relaxed R1CS instance which is passed to next step.
how does nova map R1CS computation into a step computation function?
Preliminaries
Section 3 explains all the preliminary definitions used to construct a complete, knowledge sound and zero knowledge IVC scheme.
completeness:
knowledge soundness:
NIFS
In section 4, they propose a folding scheme for NP. they take R1CS as the NP-complete language for arithmetic circuit satisfiability. First attempt is the naive attempt where they just create random linear combination of and witness matrix. But this doesn’t create correct folding instance, as there are cross terms from multiplying and .
Then, they introduce two terms in the form of relaxed R1CS structure. amounts for the cross error terms in AZ and BZ, folds public instance and private witness into one.
Above folding scheme is not zero-knowledge as prover sends witness to the verifier. To circumvent this, commitments are used. Thus, committed relaxed R1CS is used to verify the folded instance. Let CRRI denotes committed relaxed R1CS instance: , and denote relaxed R1CS witness satisfying CRRI. V takes outputs instance satisfying witness:
- sends commitment to , to
- sends to P.
- V calculates folded instance: from
- P outputs folded witness to V
- V verifies that it satisfies.
Above folding scheme is rendered non-interactive in random-oracle model using Fiat-Shamir transformation. Constructing a non-interactive folding scheme:
Let’s understand efficiency of nova’s NIFS:
- verifier needs to do 2 scalar mults: , 3 EC add: 2 for , 1 for
- communication: relaxed R1CS witness:
NOVA IVC
function is augmented to takes two arguments : computes and give and invokes verifier to fold and together to create . IVC prover then creates a proof for that attests to being correct execution of steps while attest to correct computation of step i+1 of .
To construct an IVC from above folding scheme, let be non-interactive folding scheme for committed relaxed R1CS.
- : and
- Nova works on 2 R1CS constraint systems defined as
- For each constraint system, relaxed R1CS instance consist of .
- Prover derives new after each iteration and verifier derives .
- Augmented circuit consists of relations that takes as input relaxed r1cs instance and relation witness pair: . At each step:
- folding verifier folds:
- and generates new relaxed instance:
- gets transferred to next step and is passed as input to step.
- determine why non-native field implementation is used in Nova?
- IVC verifier: after the final iteration verifies following:
- Input:
- index and evaluations:
- function with auxiliary inputs:
- Proof
- Verifies:
- index > 0
- satisfies R1CS
- satisfies R1CS
- strictly satisfies
- Input:
- IVC prover:
- Input:
- , converts this into augmented circuits relation
- proof
- Computes:
- folds prior pairs:
- creates relation witness , runs augmented circuit to extend witness to
- commit to witness
- define and
- similar for
- Input:
Let’s talk about costs:
- P’s complexity:
- operations: combining W, E
- 1 MSM:
- V’s complexity:
- constraints to encode computation
- 2 MSM (
- 2 Hash functions for
- 1 Random Oracle for
- communication: 4 EC point , 2 vectors:
Proof compression using SNARK
In the next step, to circumvent succinctness and zero-knowledge, nova attaches the IVC proof in a SNARK. Uses Spartan, but any SNARK for NP can be used. It uses following steps to compress the proofs:
-
-
- uses into
- take
-
- uses to get folded instance
- uses
Another very interesting paper identified a soundness bug in nova proving on a cycle of curves. Why is a cycle of curves necessary? because output of one circuit is in scalar field while the input is in base field of the elliptic curve used for commitments.
So, you have to send the commitments to next curve layer, where it’s accumulated and is verified and is sent to next layer.
SNARK for committed relaxed R1CS
modifies spartan’s equation for relaxed R1CS. performs 6 sumcheck protocol to get values of multilinear polynomials.
Costs:
- Prover work: 4 sumcheck protocol where polynomial has degree at most . Prover work is and
- IOP communication complexity is also
- V work:
- calculate in
converts a polynomial IOP into SNARK by using a PCS for multilinear polynomials.
Furthermore, there is a polynomial commitment scheme for log m-variate multilinear polynomials if there exists an argument protocol to prove an inner product computation between a committed vector and an m-sized public vector ((r1, 1 − r1) ⊗ … ⊗ (rlog m, 1 − rlog m)), where r ∈ F log m is an evaluation point
still don’t understand this properly
Supernova
supernova generalised nova’s folding scheme to a list of functions, such that at any point of time, prover can fold execution of any function selected through a mux.
Let be polynomial time computable functions, and a program counter . Goal of the prover is to take for NIVC statement: and generate proof for statement: .
Augmented Function:
- Runs
- runs folding verifier to fold into
- runs
Verifier :
- contains in its public output, so use that to verify that is satisfying constraints
- for each , verify that satisfies
Prover :
- : base case
- Initialise all running instances as empty, i.e.
- run circuit for step 0
- runs
- else:
- Parse as
- Runs NIFS.P to obtain:
- runs to get
- compute
- compute
Cyclefold
In Nova, a NIFS verifier has to run in augmented circuit on opposite curve. This, arguably adds ~10k mul gates on both circuits.
CycleFold’s starting point is the observation that folding-scheme-based recursive arguments can be efficiently instantiated without a cycle of elliptic curve
how?
Cyclefold improves the performance of IVC prover by reducing the size of the secondary circuit on another curve. Second curve is used to perform a single scalar multiplication (1000-1500 mul gates).
CycleFold then folds invocations of that tiny circuit on the first curve in the cycle.
didn’t understand this. Why does it folds the circuit on first curve? don’t we just run folding verifier to get new relaxed R1CS instance?
Use secondary circuit to perform curve operations for primary circuit, verifiability of which is delegated back to augmented circuit which runs a NIFS verifier.
- Run a folding scheme verifier that performs folding for a relation.
- scalar mult operations for folding is delegated to a secondary circuit which uses opposite curve for efficient computation.
- result of operation is verified and folded by a Nova NIFS.V and output used by primary folding scheme verifier.
Remark 3
did not understand this remark. authors are referring to higher degree constraints to encode which would result in higher constraints.
Sangria
TODO
Hypernova
Prerequisite: CCS
similar to any proof system with two entities: where prover is trying to prove
Protostar
TODO
Protogalaxy
TODO
Nebula
MicroNova
Twist & Shout
Interesting questions:
what's the difference between halo style recursion/accumulation vs nova style folding scheme?