Other arguments
There are some common zk-proofs/arguments that are helpful when designing proving systems. You could use these as auxiliary proofs to help your proving system craft the "main proof". Let's see an example.
Permutation argument
The permutation argument is a zk proof on itself. The goal of this argument is to convince that two sets , contain the same elements, without revealing their content. This could be helpful in the context of a bigger proof where you are already using and for some stuff, and you now want to prove the equality of the two sets. As before, the permutation argument will consist of a constraint system.
Out constraint system is inspired in the following fact:
The equation on the right contains polynomials with roots on and respectively. If the sets are equal, then the polynomials are equal, and the reverse is also true. Note that other simpler strategies don't work. For example if we just checked there would be no guarantees about . In this case, there are different ways to obtain the same result : . But polynomials do work, and that is good because as we've already learned, we want to create a system of polynomial constraints in order to make a zk-proof.
Protocol
and agree to work over a finite field and a domain . has polynomials such that and . These polynomials encode and . will prove that , without revealing the contents of the two sets.
Commitment phase
- computes .
- computes .
- sends to .
Commitment phase 2
- sends a challenge to .
- interpolates such that
- computes .
- sends to .
Challenge and open phase
- sends a challenge to .
- opens at .
Verify phase
- verifies .
- verifies that the constraint system holds:
The polynomial constraint system for this particular zk-proof is the following:
We'll interpolate over the polynomial :
This polynomial is the cumulative product of the polynomials we've seen in the last section, until the -th element.
Boundary constraint:
We want the sets to be equal. Once the cumulative product in has reached the end, all the elements are the same and holds. In particular, evaluating that expression in also holds.
Transition constraint:
This constraint makes sure that actually is the cumulative product.
- computes such that
- commits the polynomial and sends it to .
- sends a challenge to .
- opens the polynomial and sends it to .
- verifies using
- verifies