notes on zero knowledge proofs
November 2nd, 2021

ty to ember for the casual talk / discussion!!!

/ zero knowledge proofs

  • prove you know something w/o having to reveal what that something is
  • applications:
    • private transactions, anonymous voting
  • proof systems
    • prover and a verifier
    • prover gives verifier a proof
    • define R(): a relation fun
      • takes a public set of parameters, called x, and a solution/witness called w
      • solution is private
      • the parameters are public (x)
      • proof system needs to satisfy properties:
        • 1 - complete
          • i.e. if w is valid solution, R = 1
          • verifier needs to accept the proof
          • (completeness: if r is valid, verifier accepts the proof)
        • 2 - soundness
          • if w is not a valid solution, verifier should reject with high probability
          • ?: why high probability
            • in cryptography — information theoretic security
              • mathematically impossible to find the value
            • but what makes cryptography practical / performant / usable for us — we state security in terms of probabilities
            • it’s secure if it’s very hard for attacker to distinguish or retrieve something
        • 3 - knowledge soundness property
          • if verifier accepts the proof, that must mean the prover must know what the solution (w) actually is
        • 4 - optional: zero knowledge
          • the proof reveals nothing about w (the solution)
    • analogy:
      • R is the rules of sudoku
      • x is a particular puzzle instance
      • w is a solution for that sudoku puzzle
    • so: R(x,w) = 1
  • proving knowledge of an assignment
    • arithmetic circuit
      • turning an equation into a graph
    • how to represent instance / problem the witness/solution is solving?
  • examples of how to represent problems in this format: (arithmetic circuits)
    • e.g. range proof - can represent as polynomials
    • e.g. verifiable shuffle - prove permutations
  • range proof in transactions
    • want to prove that the exchange equals out (not creating/destroying money)
    • need to prove that the amount is >=0
    • use polynomials
  • zero-knowledge interactive proofs
    • schnorr: basis of schnorr signatures
    • sigma protocol — a set of proof of knowledge that greeks invented
    • i have a secret key
    • want to reveal that i have a secret key w/o revealing the key
      • show it to another person by providing a signature with the key
    • steps: ***
      • alpha is secret key, prover want to prover they know alpha
      • Y = alpha * G
        • Y is public key
        • alpha is the secret key
      • 1 - R is commitment. R = r * G
        • r is random scalar in this group
        • G is a generator of the group
        • when you multiply r*G you get a public key, basically. a public commitment to that secret value
      • 2 - verifier generates a random scalar, c
      • 3 - prover computs s = r + c * a
      • 4 - verifier checks:
        • s * G = R + c * Y
        • if equal, then verified
      • “discrete logs are hard”
  • schnorr proof of knowledge
    • using fiat-shamir
    • instead of sending c (verifier sending a random number in the interaction)
      • uses hashes
      • c = hash of the transcript of the protocol
  • steps:
    • same but:
      • we replace verifier sending c
        • c <- H(Y, R)
        • by sending the hash instead of generating a c,
          • c is “basically random”
          • hash — you know that the person on the other side can’t choose an incorrect value
      • fiat shamir transform — same property
    • result: prover can just send everything in one message
      • sigma protocol: s looks like the “back and forth” lol
    • you just send over s because you know all the other values
      • you both agree on H already so you can send all the values over in one interaction
  • fiat-shamir transform
    • original proof should be a public-coin proof
    • the random numbers being sent are public
  • allows for interactive -> non interactive
  • succinct NARGs -> zkSNARKS
    • succinct
    • an argument is only sound against computationally bound provers
    • how to make succinct?
      • PCP theorem + merkle trees
    • idea: turn everything into polynomials
  • zkSNARKS
    • hard part is succinctness
    • 1 - turn problem into polynomials
    • 2 - how do we prove that two polynomials are equal?
  • schwartz-zippel lemma
    • two polynomials that are different, are different in most places
      • two different polynomials of degree 1 intersect in at most 1 point
      • two diff polynomials of degree 2 intersect in at most 2 points
    • two different polynomials of degree n can intersect in at most n points
  • how to turn a problem into a set of polynomials you can input into zksnark?
  • kind of a grind lol
  • rank 1 constraint system (R1CS) representation of circuits
    • an equation of matrices in this form
    • Quadratic Arithmetic Program (QAP) - represent arithmetic equations
  • trusted setup: for ZKPs, some have trusted set up and some don’t
    • a result of doing a trusted setup, it can speed up the subsequent verifications
    • the fastest ZKPs today still require trusted setup
  • zkSTARKS: don’t require trusted setup
    • zcash: ceremony
    • downside of trusted setup: requires trusting someone to do the setup
    • need to generate parameter w certain properties
      • an intermediate of that process — that data can allow you to break the privacy guarantees of the system
      • should be thrown away — but if you have the intermediates, that lets you break the system
    • trusted setup:
      • 1 - five ppl do diff parts on diff computer
      • 2 - organized a mailing list and allowed anyone join the trusted setup, w the idea that if anyone is honest and throws away their thing, then you can’t break the system
    • limited set of ppl: each sets up a part of public and private key pair. everyone destroys the private keys at the end
      • but they kept some transcript value in the output/typo in the original paper. a lot of implementations just followed the paper
      • CRS: common reference string. output of the trusted setup, used in the subsequent proofs
    • ?: how often do u have to do this trusted setup?
      • depends on the proof system
      • some proof systems require trusted setup, per transaction
        • others are trusted setup but transparent (zkSTARKs) and updatable
          • ppl can keep adding themselves to the trusted setup?
  • examples
    • constructions of zk proof systems:
      • e.g. zksnarks, bulletproofs, zkstarks, PLONK, halo, grof
    • considerations: proof size, prover work, verifier work, post-quantum, trusted setup
    • ?: how big of a concern / soon is quantum computing?
      • discrete log problem — a lot of crytpography depends on this being hard
      • schnorrs algorithm — a quantum computer would make it easy to solve the discrete log problem
      • so if we have quantum computers fast enough, all these systems would be broken
      • how many qubits … how powerful does a qcomp need to be for cryptographic consideration?
        • 100? 1000? qubits?
      • e.g. bulletproofs — rely on discrete log problem
        • very fat
        • but not post-quantum resistant
      • e.g. sha3
        • algorithms are not post quantum safe
      • some standards / working groups consider it when choosing a standard paik? algorithm
      • depends on the problem … the nature/scale … security assumptions, if the trade off is worth the extra complexity for post quantum resistance
  • e.g. penumbra
  • PLONK
    • stark-ish
      • PLONK uses “Kate commitments”
Subscribe to rw
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from rw

Skeleton

Skeleton

Skeleton