Using Twisted ElGamal encryption, this library implements a Non-Interactive version of the Chaum-Pedersen protocol using Fiat-Shamir Heuristics for Zero Knowledge, over an abstract cyclic group (G,+) using Ristretto Group with Curve25519. The library used in this implementation for the construction of the Ristretto Group is curve25519-dalek.
Consider cyclic Group
For Key Generation
With message in scalar form m, it encodes
Ciphertext
Compute
Then solves the discrete logarithm (theoretical) of
Given a Public Key
This statement hides
Public:
Witnesses:
Prover P chooses random
and defines:
Computes Fiat-Shamir challenge for the Non-Interactive construction:
and responds with scalars:
Validator V checks:
and accepts if they all hold, otherwise it rejects.
- Completeness: For mathematical proof, replace with generic variables.
- Special soundness: Two accepting transcripts with same initial
$T_1, T_2, T_3$ and different challenges extracts the openings$(m, r, k)$ . - Honest validator zero-knowledge (HVZK): From an accepting transcript, we can simulate
$T_1, T_2, T_3$ from totally random$s_m, s_r, s_k \xleftarrow{\$} Z_q$ and post hoc$e$ , proving no aditional information is leaked. - Non-Interactive zero-knowledge (NIZK): Given by HVZK and the Fiat-Shamir heuristics.
Goal: Prove that
Prover P choose
Validator V sends a challenge
Prover finally sends
V verifies:
If both conditions hold accepts, otherwise rejects.
Completeness, special soundness, HVZK and NIZK are given by the Multi-relation Sigma Protocol with Fiat-Shamir heuristics.