Source: Proofs, Arguments, and Zero-Knowledge, Chapter 12
- Given a generator , the discrete log relation is the collection of pairs such that
 - -Protocol: A 3-message public coin protocol that convinces the verifier that the prover knows a tuple  in the relation for a public 
- Let’s call the messages , where and are prover messages and is a random challenge
 
 - The protocol:
- : The prover picks a random number and sends to the verifier
 - : The verifier responds with a random challenge
 - : The prover responds with
 - → The verifier checks that
 
 - Honest-verifier perfect zero-knowledge (HVZK): There is a simulator that can generate transcripts of identical distribution
- The simulator generates and randomly, then solves for
 
 - Special soundness: There exists a polynomial-time algorithm that for any pair of distinct accepting transcripts  and  can output a witness 
- If the prover was prepared to answer to more than one challenge, (s)he could have run that algorithm to get the witness, so (s)he must know it!
 - In this case, setting , we can solve for
 
 - Fiat-Shamit transformation: Set , where is modeled as a random oracle