From cec3ba87beeee522369d8f6fe85aa05cb9c78175 Mon Sep 17 00:00:00 2001 From: Ummon Date: Sat, 29 Nov 2014 10:36:28 +0100 Subject: [PATCH] Clean up + report update. --- labo2-fsharp/CryptoFile/UnitTests.fs | 27 +++++++++++++------------ rapport/main.tex | 30 +++++++++++++++++++++------- 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/labo2-fsharp/CryptoFile/UnitTests.fs b/labo2-fsharp/CryptoFile/UnitTests.fs index fb46eb7..e43d7b4 100644 --- a/labo2-fsharp/CryptoFile/UnitTests.fs +++ b/labo2-fsharp/CryptoFile/UnitTests.fs @@ -8,23 +8,17 @@ module UnitTests = let testRSA () = let kpub, kpriv = generateRSAKeysPair - - let plaintext = "Hello, World!" - printfn "plaintext: %A" plaintext - + let plaintext = "Are you from the past?" let cipherdata = encryptRSA kpub (Encoding.UTF8.GetBytes plaintext) - printfn "cipherdata: (size: %A) %A" cipherdata.Length cipherdata - let decryptedData = decryptRSA kpriv cipherdata let decryptedText = Encoding.UTF8.GetString decryptedData - printfn "decryptedtext: %A" decryptedText assert (plaintext = decryptedText) printfn "testRSA OK" let testRSASignature () = let kpub, kpriv = generateRSAKeysPair - let plaintext = "Hello, World!" + let plaintext = "Lightspeed is too slow. We'll have to go right to ludicrous speed!" let sha256 = new SHA256Managed () let signature = signRSA kpriv (sha256.ComputeHash (Encoding.UTF8.GetBytes plaintext)) assert verifySignRSA kpub (sha256.ComputeHash (Encoding.UTF8.GetBytes plaintext)) signature @@ -33,17 +27,24 @@ module UnitTests = let testAES () = let plaintext = "There is no place like 127.0.0.1" - let output = new MemoryStream () - let sr = new StreamReader (output) + let memory = new MemoryStream () let key = Crypto.rand 32 let iv = Crypto.rand 16 - let input = encryptAES key iv output + let input = encryptAES key iv memory let sw = new StreamWriter (input) - sw.Write plaintext + sw.Flush () + input.FlushFinalBlock () + + memory.Position <- 0L + let output = decryptAES key iv memory + let sr = new StreamReader (output) + assert (sr.ReadToEnd () = plaintext) + printfn "testAES OK" let runAllUnitTests () = testRSA () - testRSASignature () \ No newline at end of file + testRSASignature () + testAES () \ No newline at end of file diff --git a/rapport/main.tex b/rapport/main.tex index 508355d..2addf92 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -123,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. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -223,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{UnitTests.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} @@ -246,9 +246,25 @@ 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} -- 2.43.0