X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=rapport%2Fmain.tex;h=2addf9208a66ea8341211f7791122957e28f09a3;hb=cec3ba87beeee522369d8f6fe85aa05cb9c78175;hp=1c25220cd3a3cac0090e6d87659eacf0ad48ded6;hpb=19a9446e4042d5e451f1ae0534ffba242d33879e;p=crypto_lab2.git diff --git a/rapport/main.tex b/rapport/main.tex index 1c25220..2addf92 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -14,6 +14,7 @@ %%% URLs %%% \urldef{\dotnetcrypto}\url{http://msdn.microsoft.com/en-us/library/System.Security.Cryptography%28v=vs.110%29.aspx} \urldef{\monodevelop}\url{http://www.monodevelop.com/} +\urldef{\rsacryptoserviceprovider}\url{http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider%28v=vs.110%29.aspx} \title{ICR - Labo \#2 : \textit{Conception et implémentation d'un container sécurisé pour des données médicales}} \author{G.Burri} @@ -122,18 +123,18 @@ container = header, ciphertext ; header = mac[256], signature[2048], keys[2048] ; ciphertext = AES(plaintext) ; plaintext = meta-data, file-content ; -meta-data = meta-data-size[int32], { key-value-pair } ; +meta-data = nb-meta-data[byte], { key-value-pair } ; key-value-pair = key[string], value[string] ; string = size[vint], content-utf8 ; \end{lstlisting} -\texttt{meta-data-size} permet de connaître la taille des méta-données afin de les déchiffrer au préalable du contenu du fichier. +\texttt{nb-meta-data} est le nombre de pair clef-valeur des méta-données. \texttt{keys} correspond aux clefs $k_c$ et $k_a$ ainsi qu'a l'\emph{IV} le tout chiffré avec \emph{RSA-2048}. La taille des données chiffrées est égale à $k_c + k_a + iv = 256 + 256 + 128 = 640\,bits$. Les méta-données (\texttt{meta-data}) peuvent contenir, par exemple, le nom du fichier, sa date de création, ses droits, ou tout autres données associées. -Le type \texttt{vint} correspond à un entier de taille variable, initialement occupant un octets. +Le type \texttt{vint} correspond à un entier de taille variable, initialement occupant un octet. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -198,17 +199,17 @@ 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. + \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}. Le script \emph{Bash} \texttt{labo2-fsharp/run\_tests.sh} montre un exemple de compilation à la ligne de commande, puis de chiffrement d'un fichier suivit du déchiffrement du container ainsi créé. +Il est possible de compiler la solution à l'aide de \emph{MonoDevelop}\footnote{\monodevelop}. 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 un série de tests. + \item \texttt{CryptoFileTests/bin/Release/CryptoFileTests.exe tests} : Réalise une série de tests. \item \texttt{CryptoFileTests/bin/Release/CryptoFileTests.exe encrypt } : Chiffre le fichier \texttt{} ver le container \texttt{}. \item \texttt{CryptoFileTests/bin/Release/CryptoFileTests.exe decrypt } : Déchiffre le container \texttt{} dans le dossier \texttt{}. \end{itemize} @@ -222,9 +223,9 @@ La \emph{ĺibrary} \emph{CryptoFile} est composé de trois fichiers : \begin{itemize} \item \emph{Types.fs} : Quelques types publics. - \item \emph{Crypto.fs} : Contient toutes les primitives cryptographique nécessaire. - \item \emph{Tests.fs} : Contient quelques tests unitaires du module \emph{Crypto}. - \item \emph{API.fs} : Contient l'interface publique de la \emph{library}. Elle est détaillée ci après. + \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} @@ -245,20 +246,39 @@ module API = \end{lstlisting} +\subsection{Mesures de performance} -17 Mo de mémoire et 19 s pour chiffrer un fichier de 404 Mo +Quelques mesures sur un fichier de 871 MiB. +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 ?} +\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{System.Security.Cryptography.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{Comment s'est-on assuré que ces parties soient correctement implémentées ?} -\subsection{Quels sont les points-faibles restants ?} +\subsection{Quels sont les points-faibles restants et quelles sont les possibilités de les corriger ?} -\subsection{Quels sont les possibilités pour corriger ces points faibles ?} +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é. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%