This is an experimental framework to build Zero-knowledge non-interactive proofs, based on the Fiat-Shamir heuristic, a proof-of-work, and a constant-size commitment scheme.
It turns an interactive system with many challenges into a compact static proof.
The proof-of-work sets the minimum effort required from an attacker to try a commitment, if looking for favorable challenges.
The commitment scheme turns the list of hidden responses into a single number. After the responses to reveal are chosen, it produces a proof that those were indeed parts of the commitment.
See https://medium.com/@aurelcode/cryptographic-accumulators-da3aa4561d77.
A demonstration with the obligatory Sudoku interactive proof.
See the file zkSudoku.py
.
-
Find a secret Sudoku grid.
-
Prover generates many encrypted versions of the grid, and keeps them hidden.
-
Verifier picks a row, file or block to reveal from each grid, and checks that they do contain the numbers from 1 to 9.
See ZK Sudoku.pdf
and print it on paper to try it out by hand.
-
Commit to the encrypted values.
-
Execute a proof-of-work.
-
Pick pseudo-random challenges from the commitment and p-o-w.
-
Collect responses and prove that they were committed to.
-
Serialize / deserialize and measure the proof size.
-
Verify the proof.