Set of functions and circuits for the prover and verifier to build a Public Verifiable Secret Sharing scheme based on lattices.

The problem PVSS-buidl solves

PVSS is a framework for building various multiparty protocols, such as DKG (decentralized key generation), RNG (random number generation), and more. The main advantage of PVSS over other VSS schemes is public verifiability. This means that the correctness of the scheme can be verified by anyone using only public parameters, without revealing any secret information. In a blockchain setting, PVSS correctness can be verified by Smart Contracts.

Challenges I ran into

Challenge #1: Create a proof of a bounded vector norm.

  • The circuit should not use an "if" statement, only "add" and "mul" operations on field elements to reduce the size of the proof.
  • Expressions should not "wrap" modulo q.
    Implemented an algorithm that allows the verifier to check if the infinity vector norm is bounded without using any "costly" operations inside the circuit.

Challenge #2: Creating a Proof that Message Vector is a Polynomial of Degree Less than k

  • The circuit should only use "add" and "mul" operations on field elements to minimize the size of the proof.
    I have implemented a proof system that checks <v, v'> = 0, where v is a message vector and v' is a vector from an orthogonal subspace.

Tracks Applied (1)

=nil; Foundation - Solution example with zkLLVM Track

All circuits were implemented using zkLLVM tools.

=nil; Foundation