zk-SNARKs Zero-Knowledge Succinct Non-Interactive Argument of Knowledge
Zero Knowledge - We are able to provide a proof that certain information exists, without revealing what it is.
Succinct - Proofs are easily verifiable
Non-interactive - no back and forth required.
Arguments - Technically these proofs are not “formal proofs”. So we call them arguments.
Knowledge - The prover has actual knowledge of this information, and not just the ability to prove it exists.
When is this useful?
Proof construction where one can prove possession of information, without revealing any information beyond the validity of the statement itself.
For example, given the hash of a random number, the prover could convince the verifier that there indeed exists a number with this hash value, without revealing what it is.
They can also show that they know this number, without revealing what it is.
Succinct means that proofs can be verified within a few milliseconds, with a proof length of only a few hundred bytes, even for statements about programs that are very large.
Non-interactive means the proof consists of a single message sent from prover to verifier, rather than a back and forth.
Initial setup phase, generate a common reference string shared between prover and verifier. This is referred to as public parameter.
Public parameters are not generated via random source (someone can compromise). They are generated in multi-party ceremony.
Computation -> Arithmetic Circuit -> R1CS -> QAP -> zk-SNARK