Changes between Initial Version and Version 1 of SNARKs


Ignore:
Timestamp:
2014-03-11T18:29:08Z (11 years ago)
Author:
warner
Comment:

collecting papers on SNARKs and other multi-party-computation -ish topics

Legend:

Unmodified
Added
Removed
Modified
  • SNARKs

    v1 v1  
     1= zero-knowledge proofs/arguments of knowledge: reading list =
     2
     3This page collects useful papers, articles, and links about
     4multi-party computation and zero-knowledge proofs.
     5
     6== SNARKs ==
     7
     8[http://tau.ac.il/~tromer/papers/csnark-20131007.pdf SNARKs for C:
     9Verifying Program Executions Succinctly and in Zero Knowledge]:
     10(Ben-Sasson, Chiesa, Genkin, Tromer, Virza). This defines the
     11zk-SNARK (zero-knowledge Succinct Non-interactive ARgument of
     12Knowledge) scheme used by Zerocash.
     13
     14This paper collects a number of previous clever ideas, adds some
     15new ones, and finds ways to optimize the combination enough to make
     16everything useful. The resulting system does the following:
     17
     18* compiles an arbitrary C program into a simple virtual machine
     19  named "TinyRAM"
     20* performs a one-time key-generation phase that takes the program
     21  and limits on runtime and input size, and produces two keys: the
     22  "proving key" and the "verification key". The proving key is very
     23  big, while the verification key is pretty small.
     24* for each run of the program (given some primary input):
     25 * the Prover runs the TinyRAM program in a special way that
     26   gathers information about its execution (order of execution,
     27   changes to memory values). It also gets "auxilliary input",
     28   which is not revealed to the verifier, and represents
     29   nondeterminism (somehow).
     30 * the Prover combines this information with the proving key to
     31   create the proof. These proofs are very small.
     32 * later, the Verifier can combine the proof, the primary input,
     33   and the verification key, and compute a single "accept/reject"
     34   value. Verifying a proof is much much faster than creating one.
     35
     36One example they use is a proof of a good solution for the
     37"rectilinear Traveling Salesman Problem", whose input is the node
     38locations (x,y), the starting point (x,y), and a distance bound.
     39You can solve this problem by measuring the Manhattan distance for
     40all possible routes (permutations of the non-starting-point nodes)
     41and finding at least one whose total distance is lower than the
     42bound. Their example uses such a solution as the "auxilliary
     43input", and a TinyRAM program which sums the distances and compares
     44it against the bound. The verifier learns that the program really
     45does run and emits "yes", without learning what the route is.
     46
     47For a 200-node graph, their TinyRAM program had 1105 instructions
     48and needed 11001 steps to complete. It took 247 minutes to create
     49the proving and verification keys. The proving key was about 12GB
     50(using an 80-bit security level), and the verification key was 620
     51bytes. It then took 155 minutes to create one instance of the
     52proof, and the proof itself was 322 bytes. Verifying the proof took
     530.11 seconds.
     54