I want to design a zero-knowledge proof (ideally a NIZK, but could be a sigma protocol) so that Alice can prove that a certain encryption contains a value that has been signed by a certain key.
ek be an encryption key (e.g., ElGamal) and
dk the corresponding decryption key.
sk be a signing key (say DSA or Schnorr) and
vk the corresponding verification key.
Alice wants to prove that she knows private values
s such that public values
e = Enc_ek(x) and
Verify_vk(x, s) = True.
(Here, x is a plaintext value, s is the signature on x, e is the encryption of x. Perhaps I also need a private value for the randomness in the encryption. Alice does not know dk or sk. I suggested using ElGamal/Schnorr, but I'd also be happy if it is in the RSA framework, or a different one.)