1
$\begingroup$

I'm looking for a zero-knowledge proof of knowledge of RSA decryption exponent.

More precisely, let as usual $p,q$ be prime numbers, $n = pq$, and $e,d \in (\mathbb{Z}/\varphi(n)\mathbb{Z})^*$ be the encryption and decryption exponent of RSA, that is, $de \equiv 1 \pmod{\varphi(n)}$, where $\varphi$ is the Euler function. Assume that $n$ and $e$ are public, while $p,q,d$ are secret.

Suppose that a prover wants to convince a verifier that the prover knows $d$, without revealing any information on $d$, that is, in a zero-knowledge way.

One obvious idea would be that the verifier sends $y = x^e$, for random $x \in (\mathbb{Z}/n\mathbb{Z})^*$, to the prover and the prover computes $x = y^d$ and send it back to the verifier, which checks if the received value is indeed equal to $x$.

Under the RSA assumption, the prover should not be able to pass this test with nonnegligible probability unless he knows $d$. However, this says nothing about zero-knowledge and I suspect it is fact not zero-knowledge (there is no commitment) or not currently proved to be so.

Is there some proved zero-knowledge proof of knowledge for $d$?

$\endgroup$

1 Answer 1

3
$\begingroup$

Your proposed protocol is, in fact, not zero-knowledge. For example, it can be used by an attacker as an RSA decryption oracle.

Now, with public $e$, the knowledge of $d$ and the knowledge of the factorization of $n$ are equivalent.

So, one obvious way is to create a zero-knowledge proof of the factorization, and call it a day. Since there are known zero-knowledge proofs of factorization, that answers your question.

On the other hand, if you want something more similar to the RSA problem (rather than just being mathematically equivalent to it), we can use the standard cut-and-choose protocol (note: updated):

  • The verifier proposes an $x$

  • The prover selects $y \ne 0$ and responds with $x^{dy}$ and $x^{y}$

  • The verifier verifies that $(x^{dy})^e = x^y$ and then asks either for $dy$ or $y$

  • The prover generates the requested output (that is, either $dy$ or $y$).

  • The verifier validates that output, by raising $x$ to that power.

It is easy to see that:

  • A prover with knowledge of $d$ can generate all requested output

  • The verifier can validate the requested output

  • The verifier cannot learn anything about either $d$ or $x^d$ from the output

  • Assuming that the verifier's choice of output is unpredictable and equiprobable, someone without knowledge of $d$ will fail to be able to generate the response with probability 1/2.

  • Someone else (without knowledge of $d$) can easily generate a valid-looking transcript of the output.

  • With both outputs, we could recover the value $d$. Actually, that's rather more subtle than it would appear at first, because the multiplication in $dy$ is modulo a secret (that is, $\bmod \text{lcm}( p-1, q-1)$, which we cannot assume access to). However, what they could do is compute the value $e(dy) - y = y(de-1)$ (which holds even if the modulus is unknown), and knowledge of that value yields an efficient factorization (and thus efficient recovery of $d$).

$\endgroup$
6
  • $\begingroup$ I don't see how this is a proof of knowledge of $d$. Assuming that the prover can provide both $z^d$ and $(yz)^d$, how do you build an extractor for $d$? $\endgroup$
    – rosan98
    Commented Nov 16 at 18:02
  • $\begingroup$ @rosan98: good point; it shows you can compute $y^d$, but that doesn't immediately give you $d$. On the other hand, there is no known way to compute $y^d$ (for arbitrary $y$) other than with knowledge of $d$ $\endgroup$
    – poncho
    Commented Nov 16 at 19:31
  • $\begingroup$ then it's not a zk proof of knowledge of $d$. Also, it is not better than the "obvious idea" I proposed (indeed it's the same in case of a malicious verifier always asking for $z^d$). $\endgroup$
    – rosan98
    Commented Nov 16 at 19:51
  • $\begingroup$ @rosan98: how about the updated zero-knowledge proof? $\endgroup$
    – poncho
    Commented Nov 17 at 17:38
  • $\begingroup$ Nice! Could you please expand on the last point? The integer $z = y(de - 1)$ is a multiple of $\varphi(n)$. Thus inverting $e$ modulo $z$ gives and integer $d^*$ such that $d^* \equiv d \pmod{\varphi(n)}$, but how to get $d$ is still unclear to me... $\endgroup$
    – rosan98
    Commented Nov 17 at 19:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.