Getting Started
⚡Lazarus⚡
A Framework of Lattice-based Zero-knowledge Arguments in Rust
0. setup
- relation R
- constraints
- norm check
- is witness
- data structure
- ,
- is the constant term of
- params
- , , , , , are public inputs of dot product constraint system(DPCS)
- each iteration they are the same?
- (page 26)
- (page 26)
- (page 26)
- use K and L??
- , , , , , are public inputs of dot product constraint system(DPCS)
- constraints
- sample A, B, C, D in challenge space
- they are common reference string(CRS)
- challenge space
- sample ring element from ring
- sampled ring element should meet below requirements
- 23 zero coefficients
- 31 coefficient that are ±1
- 10 coefficients that are ±2
- coefficients are total 64
- data structure
-
- see below decomposition section
-
- see below decomposition section
- ??
-
- questions
- use K and L to compute ??
- how to get the values of ??
1. commit
- commit
- , this is Ajtai commitment
- decompose and combine
- problems
- problem 1:
- costly to send directly to verifier
- solution: combine all inner commitments into a shorter outer commitment
- problem 2:
- ring elements have arbitrary length of coefficients, not good for commitment
- solution: decompose and concatenate
- each coefficient of ring element need to be decomposed to same length with a proper basis, then concatenate them together
- problem 1:
- decompose
- decompose
- in total there are in , means
- choose length , basis
- decompose , output decomposed
- concatenate all decomposed , get decomposed
- decompose
- since , means choose any 2 items from r items, this a classical combination problem, the result is
- in total there are in , means
- choose length , basis
- decompose , which , output decomposed
- concatenate all decomposed , get decomposed
- decomposition params(page 16, 19)
- : variance for the sum of the coefficients of a challenge polynomial
- : standard deviation for the coefficients of the vectors
- , b is used in recurse section
- decompose
- combine
- combine all inner commitments with random matrix B to get a shooter outer commitment
- also put combination here, because is dependent of all the challenges, so compute it in the very beginning of the protocol
- finally get:
- prover sends to verifier
- problems
- data structure
- ,
- ,
- after decompose
- ,
2. project
- goal: norm check can be replaced by Johnson-Lindenstrauss projection.
- why: because the JL proof is more compact than check the long vector
- need to reach a security level
- steps
- verifier do a random sample get then send to prover
- n: length of
- d: degree of each element() in
- sample probability
- -1: 1/4
- 0: 1/2
- 1: 1/4
- prover calculate
- ,
- prover sends
- verifier check instead of
- notes: greyhound only use {1, -1} to do the sample
- verifier do a random sample get then send to prover
- new constraint added to: (1) make sure final projection is correct, (2) aggregate
- =>
- =>
- is the j-th row of
- , just replace with
- this defines a LaBRADOR compatible constant-term constraint() that can be aggregated
- data structure
- n: , length of
- d: , degree of
- :
3. aggregate
- goal: aggregate all dot product constraints
- aggregate
- steps
-
- aggregate
- for security , F' is aggregated to constant-term constraints(why??)
- F' includes constant-term constraints related to and
- steps
- verifier sends random samples: ,
- aggregate:
- ,
-
- so prover gets:
- extends integers to full polynomials such that
- prover sends to verifier
- verifier checks the constant term
-
- aggregate linear constraints and
- verifier sends random samples from challenge space: ,
-
- compute outer commitment
- decompose
- in total there are in , means
- choose length , basis
- decompose , output decomposed
- concatenate all decomposed , get decomposed
-
- data structure
- after decompose
- questions
4. amortize
- purpose: achieve small proof size
- method: instead of checking is satisfied by the witness, verifier will check 3 dot product constraints hold
- steps
- verifier sends challenge from challenge space
- prover calculates
- provers sends
- data structure
5. verifier checks(without recursion)
- dot product constraints
- 3 dot product constraints check
- (1)
- (2)
- (3)
- dot product constraints check
- 3 dot product constraints check
- norm check for
- params
- see page 19
6. recurse
- goal: prove the last message () of each iteration with base protocol recursively until get shooter witness and proof, then output the last message ()
- steps:
-
- convert last message to new witness vector ,
- decompose
- ,
- combine
- compose
- choose how to choose??
- part 1:
- part 2:
- part 3:
-
- use base protocol to prove the new witness
- get new relation
- value refer page 15
-
- keep recursing, until proof is small enough
- need O(log log n) iterations
- in practice , 6-7 iterations gives the best results
-
- norm check
- verifier checks(without recursion)
-
- data structure
- params
- (page 19)
- is optimal(page 5)