123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- \chapter{Wiener's Attack \label{chap:wiener}}
- Wiener's attack was first published in 1989 as a result of cryptanalysis on the
- use of short RSA secret keys ~\cite{wiener}. It exploited the fact that it is
- possible to find the private key in \emph{polynomial time} using continued fractions
- expansions whenever a good estimate of the fraction $\frac{e}{N}$ is known.
- More specifically, given $d < \frac{1}{3} \sqrt[4]{N}$ one can efficiently
- recover $d$ only knowing $\angular{N, e}$.
- The scandalous implication behind Wiener's attack is that, even if there are
- situations where having a small private exponent may be
- particularly tempting with respect to performance (for example, a smart card
- communication with a computer), they represent a threat to the security of the
- cipher.
- Fortunately, ~\cite{wiener} \S 6 presents a couple of precautions that make a
- RSA key-pair immune to this attack, namely
- (i) making $e > \sqrt{N}$ and
- (ii) $gcd(p-1, q-1)$ large.
- \section{A background on Continued Fractions \label{sec:wiener:cf}}
- Let us call \emph{continued fraction} any expression of the form:
- %% why \cfrac sucks this much. |-------------------------|
- \begin{align*}
- a_0 + \frac{1}{a_1
- + \frac{1}{a_2
- + \frac{1}{a_3
- + \frac{1}{a_4 + \ldots}}}}
- \end{align*}
- Consider now any \emph{finite continued fraction}, conveniently represented with
- the sequence
- $\angular{a_0, a_1, a_2, a_3, \ \ldots, a_n}$.
- Any number $x \in \mathbb{Q}$ can be represented as a finite continued fraction,
- and for each $i < n$ there exists a fraction $\rfrac{h_i}{k_i}$ approximating
- $x$.
- By definition, each new approximation is recursively defined as:
- \begin{align}
- \label{eq:wiener:cf}
- \begin{cases}
- a_{-1} = 0 \\
- a_i = h_i // k_i \\
- \end{cases}
- \quad
- \begin{cases}
- h_{-2} = 0 \\
- h_{-1} = 1 \\
- h_i = a_i h_{i-1} + h_{i-2}
- \end{cases}
- \quad
- \begin{cases}
- k_{-2} = 1 \\
- k_{-1} = 0 \\
- k_i = a_i k_{i-1} + k_{i-2}
- \end{cases}
- \end{align}
- Among the prolific properties of such objects, firstly Wiener ~\cite{wiener}
- and later Boneh ~\cite{20years} discovered that, if a continued fraction $f'$ is
- an underestimate of another one $f$, i.e.
- \begin{align}
- f' = f(1-\delta)
- \end{align}
- then it is possible to recover $f$, having $f'$, if $\delta$ is ``small
- enough'', where small enough means:
- \begin{align}
- \label{eq:wiener:cf_approx}
- \delta = 1 - \frac{f'}{f} < \frac{1}{\rfrac{3}{2}{h_1}{k_1}}
- \end{align}
- \\
- The \emph{continued fraction algorithm} allowing us to recover $f$ is the
- following:
- \begin{enumerate}[(i)]
- \setlength{\itemsep}{1pt}
- \setlength{\parskip}{0pt}
- \setlength{\parsep}{0pt}
- \item generate the next $a_i$ of the continued fraction expansion of $f'$;
- \item use ~\ref{eq:wiener:cf} to generate the next fraction $\rfrac{h_i}{k_i}$
- equal to $\angular{a_0, a_1, \ldots, a_{i-1}, a_i}$ %% non e` proprio cosi`
- \item check whether $\rfrac{h_i}{k_i}$ is equal to $f$
- \end{enumerate}
- \section{Constructing the attack}
- As we saw in ~\ref{sec:preq:rsa}, by construction the two exponents are such that
- $ed \equiv 1 \pmod{\varphi(N)}$. This implies that there exists a
- $k \in \naturalN \mid ed = k\varphi(N) + 1$. This can be formalized to be
- the same problem we formalized in ~\ref{sec:wiener:cf}:
- \begin{align*}
- ed = k\varphi(N) + 1 \\
- \abs{\frac{ed - k\eulerphi{N}}{d\eulerphi{N}}} = \frac{1}{d\eulerphi{N}} \\
- \abs{\frac{e}{\eulerphi{N}} - \frac{k}{d}} = \frac{1}{d\eulerphi{N}} \\
- \end{align*}
- Now we proceed by substituting $\eulerphi{N}$ with $N$, since for large $N$, one
- approximates the other. We consider also the difference of the two, limited by
- $\abs{\cancel{N} + p + q - 1 - \cancel{N}} < 3\sqrt{N}$.
- For the last step, remember that $k < d < \rfrac{1}{3}\sqrt[4]{N}$:
- \begin{align*}
- \abs{\frac{e}{N} - \frac{k}{d}} &= \abs{\frac{ed - kN}{Nd}} \\
- &= \abs{\frac{\cancel{ed} -kN - \cancel{k\eulerphi{N}} + k\eulerphi{N}}{Nd}} \\
- &= \abs{\frac{1-k(N-\eulerphi{N})}{Nd}} \\
- &\leq \abs{\frac{3k\sqrt{N}}{Nd}}
- = \frac{3k}{d\sqrt{N}}
- < \frac{3(\rfrac{1}{3}\ \sqrt[4]{N})}{d\sqrt{N}}
- = \frac{1}{d\sqrt[4]{N}} < \frac{1}{2d^2}
- \end{align*}
- This demonstrates the conditions of ~\ref{eq:wiener:cf_approx} holds, and allows
- us to proceed with the continued fraction algorithm to converge to a solution
- ~\cite{20years}.
- \paragraph{}
- We start by generating the $\log N$ continued fraction expansions of
- $\frac{e}{N}$, and for each convergent $\frac{k}{d}$,
- %% XXX. verify this
- which by contruction is already at the lowest terms, we verify if it produces a
- factorization of $N$.
- First we check that $\eulerphi{N} = \frac{ed-1}{k}$ is
- an integer. Then we solve ~\ref{eq:wiener:pq} in $x$ in order to find $p, q$:
- \begin{align}
- \label{eq:wiener:pq}
- x^2 - (N - \eulerphi{N} + 1)x + N = 0
- \end{align}
- The above equation is constructed so that the $x$ coefficient is the sum of the
- two primes, while the constant term $N$ is the product of the two. Therefore, if
- $\eulerphi{N}$ has been correctly guessed, the two roots will be $p$ and $q$.
- \section{Again on the engine™}
- The algorithm is pretty straightforward by itself: we just need to apply the
- definitions provided in ~\ref{eq:wiener:cf} and test each convergent until
- $\log N$ iterations have been reached.
- %% XXX. questo viene da 20 years, ma non e` spiegato perche`.
- A Continued fraction structure may look like this:
- \begin{minted}{c}
- typedef struct cf {
- bigfraction_t fs[3]; /* holding h_i/k_i, h_i-1/k_i-1, h_i-2/k_i-2 */
- short i; /* cycling in range(0, 3) */
- bigfraction_t x; /* pointer to the i-th fraction in fs */
- BIGNUM* a; /* current a_i */
- BN_CTX* ctx;
- } cf_t;
- \end{minted}
- where \texttt{bigfraction\_t} is just a pair of \texttt{BIGNUM} \!s
- $\angular{h_i, k_i}$. Whenever we need to produce a new convergent, we increment
- $i \pmod{3}$ and apply the definitions given. The fresh convergent must be
- tested with very simple algebraic operations. It is worth noting here that
- \ref{eq:wiener:pq} can be solved using the reduced discriminant formula, as
- $p, q$ are odd primes:
- \begin{align*}
- \Delta = \left( \frac{N-\eulerphi{N} + 1}{2} \right)^2 - N \\
- x_{\angular{p , q}} = - \frac{N - \eulerphi{N} + 1}{2} \pm \sqrt{\Delta}
- \end{align*}
- Assuming the existence of the procedures \texttt{cf\_init}, initializing a
- continued fraction structure, and \texttt{cf\_next} producing the next
- convergent, we provide an algorithm for attacking the RSA cipher via Wiener:
- \begin{algorithm}[H]
- \caption{Wiener's Attack}
- \label{alg:wiener}
- \begin{algorithmic}[1]
- \State $f \gets \texttt{cf\_init}(e, N)$
- \State $i \gets \ceil{\log N}$
- \While{$i-- > 0$}
- \State $k, d \gets \texttt{cf\_next}(f)$
- \If{$k \nmid ed-1$} \strong{continue} \EndIf
- \State $\eulerphi{N} \gets (ed - 1)\ //\ k$
- \If{$\eulerphi{N}$ is odd} \strong{continue} \EndIf
- %% XXX. it could be that calling 'b' b/2 and 'delta' sqrt(delta/4) is
- %% misleading.
- \State $b \gets (N - \eulerphi{N} + 1) \gg 1$
- \State $\Delta, r \gets \dsqrt{b^2 - N}$
- \If{$r \neq 0$} \strong{continue} \EndIf
- \State $p, q \gets b \pm \Delta$
- \State \strong{break}
- \EndWhile
- \State \Return p, q
- \end{algorithmic}
- \end{algorithm}
- \section{Building a distributed version}
- %%% Local Variables:
- %%% mode: latex
- %%% TeX-master: "question_authority"
- %%% End:
|