+\subsection{déchiffrement}
+
+Entrée :
+
+\begin{itemize}
+ \item $c$ : container chiffrées
+ \item $k_{priv}$ : clef privée RSA
+ \item $k_{signpub}$ : la clef publique de signature RSA
+\end{itemize}
+
+Processus :
+
+\begin{enumerate}
+ \item Lecture de $mac$, calcul de $mac'$ sur $c$ comparaison des deux afin de vérifier l'intégrité.
+ \item Vérification de la signature avec $k_{signpub}$.
+ \item Déchiffrement de $k_c + k_a + iv$ avec $k_{priv}$.
+ \item Déchiffrement du reste des données ($ciphertext$).
+\end{enumerate}
+
+Ce processus nécessite deux cycles de lecture des données, le premier pour le calcul de $mac'$ et le deuxième pour le déchiffrement. Le deuxième cycle n'est effectué que si l'intégrité et l'authenticité ont été validés.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Implémentation}
+
+Nous utilisons ici la plate-forme \emph{.NET} ainsi que le langage \emph{F\#}. L'ensemble des éléments cryptographiques requis sont fournit par \emph{.NET}\footnote{\dotnetcrypto}.
+
+Deux \emph{assemblies} sont crées :
+
+\begin{itemize}
+ \item \emph{CryptoFile} : \emph{Library} mettant à disposition l'\emph{API} de chiffrement de fichier et de déchiffrement de container.
+ \item \emph{CryptoFileTests} : Exécutable utilisant la \emph{library} \emph{CryptoFile} et permettant d'utiliser l'\emph{API} à l'aide d'arguments fournis par la ligne de commande.
+\end{itemize}
+
+\subsection{Utilisation}
+
+Il est possible de compiler la solution à l'aide de \emph{MonoDevelop}\footnote{\monodevelop} ou de \emph{Visual Studio 2012}. Le script \emph{Bash} \texttt{labo2-fsharp/run\_tests.sh} permet de compiler la solution puis d'exécuter un certain nombre de tests.
+
+À partir du dossier \texttt{labo2-fsharp} et après avoir compiler en \emph{release} la solution, voici ce qu'il est possible d'effectuer :
+
+\begin{itemize}
+ \item \texttt{CryptoFileTests/bin/Release/CryptoFileTests.exe tests} : Réalise une série de tests.
+ \item \texttt{CryptoFileTests/bin/Release/CryptoFileTests.exe encrypt <file> <container>} : Chiffre le fichier \texttt{<file>} ver le container \texttt{<container>}.
+ \item \texttt{CryptoFileTests/bin/Release/CryptoFileTests.exe decrypt <container> <output directory>} : Déchiffre le container \texttt{<container>} dans le dossier \texttt{<output directory>}.
+\end{itemize}
+
+Les clefs publiques et privées pour le chiffrement ainsi que pour la réalisation de la signature se trouvent dans les fichiers \texttt{keys-crypt.priv}, \texttt{keys-crypt.pub}, \texttt{keys-sign.priv} et \texttt{keys-sign.pub}. Ceux-ci sont automatiquement générés dans le cas où ils sont introuvables.
+
+
+\subsection{Organisation du code}
+
+La \emph{ĺibrary} \emph{CryptoFile} est composée de trois fichiers :
+
+\begin{itemize}
+ \item \emph{Types.fs} : Quelques types publics.
+ \item \emph{Crypto.fs} : Toutes les primitives cryptographique nécessaire.
+ \item \emph{UnitTests.fs} : Quelques tests unitaires du module \emph{Crypto}.
+ \item \emph{API.fs} : L'interface publique de la \emph{library}. Elle est détaillée ci-après.
+\end{itemize}
+
+\subsubsection{API}
+
+\begin{lstlisting}[language=FSharp, frame=single, basicstyle=\ttfamily\footnotesize]
+module API =
+ let generatKeysPair : Key * Key
+
+ let encryptFile (inputFilePath : string)
+ (outputFilePath : string)
+ (signaturePrivKey: Key)
+ (cryptPubKey : Key)
+
+ let decryptFile (sourceFilePath : string)
+ (targetDirPath : string)
+ (signaturePubKey: Key)
+ (decryptPrivKey : Key)
+\end{lstlisting}
+
+
+\subsection{Mesures de performance}
+
+Quelques mesures sur un fichier de 871 MiB. Sous \emph{Linux} avec \emph{Mono} 3.10.0. Des résultats similaire ont été obtenus sous \emph{Windows 8} avec \emph{Visual Studio 2012}.
+
+Chiffrement :
+
+\begin{itemize}
+ \item Temps : 42 s.
+ \item Mémoire utilisée : 15 MiB.
+ \item Taux \emph{CPU} : un cœur à 100 \%
+\end{itemize}
+
+Déchiffrement :
+
+\begin{itemize}
+ \item Temps : 55 s.
+ \item Mémoire utilisée : 20 MiB.
+ \item Taux \emph{CPU} : un cœur à 100 \%
+\end{itemize}
+
+
+\section{Analyse de la sécurité de l'implémentation}
+
+\subsection{Quelles sont les parties critiques du code et comment s'assure-t-on que ces parties soit correctement implémentées ?}
+
+La génération des clefs \emph{AES} doit être faite avec un générateur cryptographique. Dans notre cas nous utilisons \emph{RSACryptoServiceProvider}\footnote{\rsacryptoserviceprovider}.
+
+La mémoire correspondant aux clefs générées devrait être effacé, dans notre cas si un attaquant a accès à la mémoire de notre programme alors il a accès au contenu des fichiers à chiffrer, il n'y a donc pas de précautions prise en particulier à ce sujet.
+
+
+\subsection{Quels sont les points faibles restants et quelles sont les possibilités de les corriger ?}
+
+Les deux clefs privées \emph{RSA} doivent absolument rester secrètes, pour ce faire il faudrait chiffrer les fichiers contenant ces clefs à l'aide d'une \emph{passphrase} robuste et garder celle-ci en sécurité.