Source: Proofs, Arguments, and Zero-Knowledge, Section 17.4

A linear PCP, for satisfiability of an R1CS instance (in this presentation), i.e., there is a witness such that

where are fixed matrices.

Let be a set of elements in (for example, a multiplicative subgroup). Then, we can interpolate univariate polynomials that map to entry of the respective matrix. In other words, interpolates column of matrix .

Then, the following polynomial is zero on all iff. is a valid witness:

This can be validated using the Univariate Zero-Check Protocol, which requires the prover to commit to a univariate polynomial such that . The verifier than asks for an evaluation of both at a random point .

The prover commits to linear functions :

  • : the vector of coefficients of
  • : The vector

Then, the verifier can:

  • Evaluate by querying at the vectors
  • Evaluate by querying at

Linear Interactive Proof (LIP) vs. linear PCP:

  • When querying the same polynomial using queries , a LIP ensures that all queries are answered using the same linear function
  • We can add query for randomly chosen
  • Given answers , the verifier accepts iff.

We add

SRS: For a randomly chosen and each and , the SRS contains the pair . (Only depends on the circuit!)

Verification key:

Proof: Using the SRS and additive homomorphism, the prover computes:

Verification:

    • Verifies that vanishes on !
    • The verification from the LIP above
  • For :
    • Under the Knowledge of Exponent Assumption (KEA), this ensures that the prover actually knows the exponents of the sent values

Question: How is it possible that there is nothing circuit-specific in the verification algorithm & verification key?!

  • is used in the verification, so it’s specific to the setup
  • The prover could not have used different values for , , , and (corresponding to a different circuit), because that would require knowing

Public inputs: This is a subset of . The prover can simply commit to the other parts of , while the verifier computes the contribution of the public input on its own. For this, needs to be part of the verification key (but not ; this was the bug Ariel Gabizon found in the BCTV14 paper and ZCash!)

Achieving Zero Knowledge (sketch): The prover can pick random values and apply the protocol to:

The rest of the protocol can be modified accordingly.

Groth16: Very influential variant of this SNARK which reduces the size of the proof from 10 to 3 group elements by:

  • Introducing a LIP that makes 3 queries instead of 5
  • Relying on the Algebraic Group Model instead of KEA, so all the elements aren’t needed anymore