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.