X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=rapport%2Fmain.tex;h=f02d7b6d6083ec5744e9c62a584948503798947e;hb=22aac262156e81085b22bdfcd0cc38950768be9b;hp=f2e5ba587a4ea78a0c6190848d945cbe2423693f;hpb=d061bc06b7e5681e9da4c2c0b7642f50d126ff76;p=crypto_lab3.git diff --git a/rapport/main.tex b/rapport/main.tex index f2e5ba5..f02d7b6 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -5,6 +5,8 @@ \usepackage[T1]{fontenc} \usepackage{lmodern} +\usepackage{amssymb,amsmath,amsthm} + \usepackage{graphicx} \usepackage{listings} \usepackage{url} @@ -69,7 +71,29 @@ 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. + +{\setlength{\abovedisplayskip}{-4pt} +\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. + +{\setlength{\abovedisplayskip}{-4pt} +\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 +101,71 @@ 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} : + +{\setlength{\abovedisplayskip}{-4pt} +\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ée avec un $p$ altéré. +\end{itemize} + + +Nous pouvons alors facilement retrouver $p$: + +{\setlength{\abovedisplayskip}{-4pt} +\begin{flalign*} + p &= n / q & +\end{flalign*} -(maths) +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} + +Il faut aussi ajouté qu'il est également possible d'utiliser des failles logicielles afin d'introduire des anomalies. + +\subsubsection*{Question 2.2 : 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 ?} +Oui, il est possible de récupérer $p$ ou $q$ s'il l'on possède une signature valide mais pas le message original : + +{\setlength{\abovedisplayskip}{-4pt} +\begin{flalign*} + q &= gcd(sign - sign'^e, n) & +\end{flalign*} + +Où : + +\begin{itemize} + \item $sign$ : la signature correctement calculée. + \item $sign'$ : la signature calculée avec un $p$ altéré. +\end{itemize} + + + +\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} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -93,15 +173,19 @@ http://crypto.stanford.edu/~dabo/abstracts/faults.html \subsection{Fonctionnement} -(maths) + + + + + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Conclusion} -% http://en.wikipedia.org/wiki/RSA_%28cryptosystem%29 - -%\bibliographystyle{plain} -%\bibliography{main} +\bibliographystyle{plain} +\bibliography{main} \end{document}