Say there's a public encryption scheme whose public key is $p_k$ and secret key is $s_k$. Prover $P$ wants to convince verifier $V$ that he knows $s_k$. The protocol is:
- $V$ uniformly generates $m$ and sends $c = Enc_{p_k}(m)$ to $P$
- $P$, receiving $c$, sends $m' = Dec_{s_k}(c)$ to $V$
- $V$ checks whether $m = m'$. If so, accept. Else, reject.
Completeness and soundness are obvious. Intuitively decryption shouldn't leak information about the secret key $s_k$ if this scheme is CCA-secure. But I just haven't come up with a proper simulator to argue this. If $V$ cheats, it's hard to get the correct plaintext without knowledge of $s_k$. If the simulator just guess, the probability is so low that exponentially many rounds are required. So the question is:
Is this protocol really zero knowledge? If so, how to construct the simulator?