+Le but de ce laboratoire et de mettre en œuvre l'attaque \emph{Boneh-DeMillo-Lipton} sur notre propre implémentation de \emph{RSA-CRT}~\footnote{\emph{Chinese remainder theorem}}. Puis de décrire et d'implémenter le \flqq truc\frqq\ de \emph{Shamir} afin de prévenir ce type d'attaque.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{RSA-CRT}
+
+\subsection{Implémentation}
+
+L'implémentation utilise le langage \emph{C++11}, le compilateur \emph{GCC} 4.9.1, la \emph{library} \emph{GMP} 6.0.0 ainsi que le système de \emph{build} \emph{QBS}~\footnote{\url{http://qt-project.org/wiki/qbs}}.
+
+Le fichier \emph{*.qbs} peut être ouvert à l'aide de l'environnement de développement \emph{Qt Creator}~\footnote{\url{http://qt-project.org/wiki/Category:Tools::QtCreator}}.
+
+
+\subsubsection*{Question 1.1 : Comment s'assure-t-on que les routines implémentées fonctionnent correctement ?}
+
+Pour chaque version, standard et restes chinois, une paire de clefs est générée puis trois messages sont testés avec des valeurs différentes correspondantes à $n$, $n-1$ et $n / 2$. Pour le premier cas la vérification de la signature ne doit pas fonctionner car le \emph{plaintext} est trop grand. Dans les deux autres cas, on vérifie la signature ainsi qu'une signature altérée (incrémentée de 1).
+
+Les tests peuvent être lancés avec la commande suivante :
+
+\begin{verbatim}
+qbs run -- tests
+\end{verbatim}
+
+
+\subsubsection*{Question 1.2 : Quel est le gain en terme de temps d'exécution lors de la création d'une signature avec \emph{RSA-CRT} par rapport à la version standard ?}
+
+Les mesures sont réalisées en générant $20'000$ signatures. Vingt paires de clefs différentes sont utilisées.
+
+Les temps sont mesurés à l'aide de la commande suivante :
+
+\begin{verbatim}
+qbs run release -- time-measures
+\end{verbatim}
+
+\begin{itemize}
+ \item \emph{RSA} standard : $14'800\, ms$ ($740\, \mu s$ par signature).
+ \item \emph{RSA CRT} : $4'466\, ms$ ($223, \mu s$ par signature).
+\end{itemize}
+
+La génération de signatures avec \emph{RSA CRT} est en moyenne 3.25 fois plus rapide.
+
+
+\subsubsection*{Question 1.3 : Quelles sont les valeurs que l'on peut pré-calculer et stocker hormis $n$ et $d$ afin d'améliorer la vitesse de calcul d'une signature avec \emph{RSA-CRT} ?}
+
+Les valeurs de $p$, $q$, $d_p$, $d_q$ et $q_{inv}$ sont mémorisées en tant que clef privée. Celles-ci sont calculées comme suit.
+
+{\setlength{\abovedisplayskip}{0pt}
+\begin{flalign*}
+ e &= 65537 \\
+ \mathbf{p, q} &&\text{deux nombres premiers de 512 bits choisis de manière aléatoire} \\
+ n &= p \cdot q \\
+ \varphi(n) &= (p - 1) \cdot (q - 1) \\
+ d &= e^{-1} ~(mod ~\varphi(n)) \\
+ \mathbf{d_p} &= d ~(mod ~p - 1) \\
+ \mathbf{d_q} &= d ~(mod ~q - 1) \\
+ \mathbf{q_{inv}} &= q^{-1} ~(mod ~p)
+\end{flalign*}
+
+
+La signature $sig$ du message $m$ peut être ensuite calculée comme suit.
+
+{\setlength{\abovedisplayskip}{0pt}
+\begin{flalign*}
+ s_p &= m^{d_p} ~(mod ~p) &\\
+ s_q &= m^{d_q} ~(mod ~q) \\
+ \mathbf{sig} &= s_q + ((q_{inv} \cdot (s_p - s_q)) ~mod ~p) \cdot q
+\end{flalign*}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{L'attaque de \emph{Boneh-DeMillo-Lipton}}
+
+\subsection{Fonctionnement}
+
+D'après le document \flqq On the Importance of Eliminating Errors in Cryptographic Computations\frqq~\cite{Boneh-DeMillo-Lipton-attack} $q$ peut être retrouvé comme suit :
+
+{\setlength{\abovedisplayskip}{0pt}
+\begin{flalign*}
+ q &= gcd(m - sig'^e, n) &
+\end{flalign*}
+
+Où :
+
+\begin{itemize}
+ \item $m$ : le message signé avec $sig'$.
+ \item $sig'$ : la signature calculée avec un $p$ altéré.
+ \item $e$ : l'exposant public.
+ \item $n$ : le module public.
+\end{itemize}
+