Attack implementation.
[crypto_lab3.git] / rapport / main.tex
index f2e5ba5..f8ebe68 100644 (file)
@@ -5,6 +5,8 @@
 \usepackage[T1]{fontenc}
 \usepackage{lmodern}
 
+\usepackage{amssymb,amsmath,amsthm}
+
 \usepackage{graphicx}
 \usepackage{listings}
 \usepackage{url}
@@ -69,7 +71,27 @@ La génération de signature avec \emph{RSA CRT} est en moyenne 3.25 fois plus r
 
 \subsubsection*{Question 1.3 : Quels sont les valeurs que l'on peut pré-calculer est stocker hormis $n$ et $d$ afin d'améliorer la vitesse de calcul d'une signature avec \emph{RSA-CRT} ?}
 
-[TODO]
+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.
+
+\begin{flalign*}
+   e &= 65537 \\
+   \mathbf{p, q} &&\text{deux nombres premiers de 512 bits choisis de manière aléatoire} \\
+   n &= p * q \\
+   \varphi(n) &= (p - 1) * (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.
+
+\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*}
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -77,15 +99,54 @@ La génération de signature avec \emph{RSA CRT} est en moyenne 3.25 fois plus r
 
 \subsection{Fonctionnement}
 
-http://crypto.stanford.edu/~dabo/abstracts/faults.html
+D'après le document \cite{Boneh-DeMillo-Lipton-attack} :
 
-(maths)
+\begin{flalign*}
+   q &= gcd(m - sign'^e, n) &
+\end{flalign*}
+
+Où :
+
+\begin{itemize}
+   \item $m$ : le message signé avec $sign'$
+   \item $sign'$ : la signature calculé avec un $p$ altéré.
+\end{itemize}
+
+
+Nous pouvons alors facilement retrouver $p$:
+
+\begin{flalign*}
+   p &= n / q &
+\end{flalign*}
+
+Il est alors trivial de reconstituer la clef privée à partir de $p$ et $q$.
 
 \subsubsection*{Question 2.1 : En pratique, comment est-il possible d'introduire des fautes dans l'implémentation d'un algorithme cryptographique ?}
 
+Voici une liste de techniques issues du document \cite{Barenghi-Breveglieri-Koren-Naccache-fault-injection} :
 
+\begin{itemize}
+   \item Variation du niveau de voltage de l'alimentation électrique ;
+   \item Injection d’irrégularités dans le \emph{clock} de l'horloge ;
+   \item Champs magnétique ;
+   \item Émission de radiations ;
+   \item Surchauffe de l'appareil ;
+   \item Exposition à une lumière intense.
+\end{itemize}
+
+
+\subsubsection*{Est-ce que cette attaque fonctionne dans le cas d'un bourrage non déterministe ?}
 
-\subsubsection*{Est-ce que cette attaque fonctionne dans le cas d'un bourrage non détérministe ?}
+
+
+
+\subsection{Implémentation}
+
+Cette attaque est illustrée dans la fonction \texttt{Tests::doAttack()}. Pour tester cette attaque :
+
+\begin{verbatim}
+qbs run -- attack 
+\end{verbatim}
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -99,9 +160,11 @@ http://crypto.stanford.edu/~dabo/abstracts/faults.html
 \section{Conclusion}
 
 
-% http://en.wikipedia.org/wiki/RSA_%28cryptosystem%29
+%                       
+% Fault Injection Attacks on Cryptographic Devices: Theory, Practice and Countermeasures
+
 
-%\bibliographystyle{plain}
-%\bibliography{main}
+\bibliographystyle{plain}
+\bibliography{main}
 
 \end{document}