cronokirby

Notes on Chosen Generator Discrete Logarithms

Consider the basic discrete logarithm game:

DLogb x$FqPub(): return xGWin(x^): return b=0x^=x\boxed{ \begin{aligned} &\colorbox{#FBCFE8}{\large $\text{DLog}_b$ }\cr \cr &x \xleftarrow{\$} \mathbb{F}_q\cr \cr &\underline{\mathtt{Pub}():}\cr &\ \texttt{return } x \cdot G \cr \cr &\underline{\mathtt{Win}(\hat{x}):}\cr &\ \texttt{return } b = 0 \land \hat{x} = x\cr \end{aligned} }

Here, the generator is fixed as part of the configuration of the group. One natural question is whether or not allowing the adversary to choose the generator helps them. This variant with a chosen generator could be described as follows:

CLogb P,xSetP(P): assert P0 PP x$Fq return xPWin(x^): assert P return b=0x^=x\boxed{ \begin{aligned} &\colorbox{#FBCFE8}{\large $\text{CLog}_b$ }\cr \cr &P, x \gets \bot\cr \cr &\underline{\mathtt{SetP}(P):}\cr &\ \texttt{assert } P \neq 0\cr &\ P \gets P\cr &\ x \xleftarrow{\$} \mathbb{F}_q\cr &\ \texttt{return } x \cdot P \cr \cr &\underline{\mathtt{Win}(\hat{x}):}\cr &\ \texttt{assert } P \neq \bot\cr &\ \texttt{return } b = 0 \land \hat{x} = x\cr \end{aligned} }

[!note] Note: It is convenient to assume that the adversary cannot send a PP equal to the identity point, which makes the rest of the proofs smoother. Sending the identity point also forces the adversary to guess randomly, so it's not a good strategy anyhow.

Now, clearly DLogCLog\text{DLog} \leq \text{CLog}. The question is, if DLog\text{DLog} is hard, what can we say about CLog\text{CLog}? Does being able to choose the generator help?

A little bit, at least with the techniques I've managed to gather together.

In particular, we can show that:

CLogDLog\text{CLog} \leq \sqrt{\text{DLog}}

If anyone knows how to get a tighter bound, I'm all ears!

[!note] Note: I'm assuming that we're working in a group of prime order qq, and thus that all points besides the identity are generators.

Reduction from Multi-CLog

Instead of reducing directly from CLog\text{CLog}, we instead reduce from a variant where the adversary needs to solve multiple challenges on their provided generator:

CLogbn P,x1,,xnSetP(P): assert P0 PP x1,,xn$Fq return x1P,Win(x^1,,x^n): assert P return b=0i[n] x^i=xi\boxed{ \begin{aligned} &\colorbox{#FBCFE8}{\large $\text{CLog}_b^n$ }\cr \cr &P, x_1, \ldots, x_n \gets \bot\cr \cr &\underline{\mathtt{SetP}(P):}\cr &\ \texttt{assert } P \neq 0\cr &\ P \gets P\cr &\ x_1, \ldots, x_n \xleftarrow{\$} \mathbb{F}_q\cr &\ \texttt{return } x_1 \cdot P, \ldots \cr \cr &\underline{\mathtt{Win}(\hat{x}_1, \ldots, \hat{x}_n):}\cr &\ \texttt{assert } P \neq \bot\cr &\ \texttt{return } b = 0 \land \forall i \in [n]\ \hat{x}_i = x_i\cr \end{aligned} }

Later in this post, we show that CLogCLognn\text{CLog} \leq \sqrt[n]{\text{CLog}^n}.

In this section, we show that CLog2DLog\text{CLog}^2 \leq \text{DLog}, which gives us the aforementioned result that CLogDLog\text{CLog} \leq \sqrt{\text{DLog}}, combining the two reductions.

Lemma: CLog2DLog\text{CLog}^2 \leq \text{DLog}

The basic idea is that two queries are enough to learn the discrete logarithm of GG with respect to PP, and some point XX with respect to PP. We combine these two pieces of information to learn the discrete logarithm of XX with respect to GG.

In more detail, consider the following game:

Γ0 PXsuper.Pub()r$FqRrGSetP(P): assert P0 PP return R,XWin(r^,x^): assert P return r^P=Rsuper.Win(x^rr^)\boxed{ \begin{aligned} &\colorbox{#FBCFE8}{\large $\Gamma^0$ }\cr \cr &P \gets \bot\cr &X \gets \texttt{super}.\text{Pub}()\cr &r \xleftarrow{\$} \mathbb{F}_q\cr &R \gets r \cdot G\cr \cr &\underline{\mathtt{SetP}(P):}\cr &\ \texttt{assert } P \neq 0\cr &\ P \gets P\cr &\ \texttt{return } R, X \cr \cr &\underline{\mathtt{Win}(\hat{r}, \hat{x}):}\cr &\ \texttt{assert } P \neq \bot\cr &\ \texttt{return } \hat{r} \cdot P = R \land \texttt{super}.\text{Win}\left(\hat{x} \cdot \frac{r}{\hat{r}}\right)\cr \end{aligned} }

I claim that Γ0DLogb=CLogb2\Gamma^0 \circ \text{DLog}_b = \text{CLog}^2_b

First, note that the adversary's perspective is the same. They see two uniformly random group elements (thanks to our obligation that PP is a generator). So, it boils down to whether or not our check is equivalent First, note that the check we're supposed to be doing is that:

r^P=rGx^P=xG\begin{aligned} \hat{r} \cdot P &= r \cdot G\cr \hat{x} \cdot P &= x \cdot G\cr \end{aligned}

Or, considering PP to have discrete logarithm pp, that:

r^p=rx^p=x\begin{aligned} \hat{r} \cdot p &= r\cr \hat{x} \cdot p &= x\cr \end{aligned}

Note that we manually check the first equation, and so if that's false, we behave in the same way, by rejecting.

So, assume that r^p=r\hat{r} p = r. In this case, p=rr^p = \frac{r}{\hat{r}}, and so applying that to the second equation gives us x^rr^=?x\hat{x} \frac{r}{\hat{r}} \stackrel{?}{=} x, and so our discrete logarithm game will tell us that correctly.

\blacksquare

Reducing CLog to Multi-CLog

In this section, we prove that CLogCLognn\text{CLog} \leq \sqrt[n]{\text{CLog}^n}.

The idea is simple, although unfortunately not a straight line reduction. (I should encapsulate this into one of "my" "state-separable proof gadgets")

The idea is that given an adversary A\mathcal{A} for CLog\text{CLog}, you create an adversary B\mathcal{B} for CLogn\text{CLog}^n by repeatedly rewinding the adversary back to the point after sending PP, you then feed them a different XiX_i each time, getting back x^1,,x^n\hat{x}_1, \ldots, \hat{x}_n across the different forks. Because each XiX_i has the same distribution as in CLog\text{CLog}, the probability of succeeding is bounded below by CLogn\text{CLog}^n, since we have nn forked instances which need to succeed.

This gives us our result.

Putting everything together

To recap, we have:

CLogCLog2CLog2DLog\begin{aligned} \text{CLog} &\leq \sqrt{\text{CLog}^2}\cr \text{CLog}^2 &\leq \text{DLog} \end{aligned}

which implies:

CLogDLog\text{CLog} \leq \sqrt{\text{DLog}}

I have a hunch that the square root loss in security is essential, but getting this tighter would be quite interesting, imo.