From f704549d66e764b5ea1223a80509b2c8e6061355 Mon Sep 17 00:00:00 2001 From: Ummon Date: Mon, 1 Dec 2014 00:12:50 +0100 Subject: [PATCH] Clean up. --- labo2-fsharp/CryptoFile/Crypto.fs | 19 +++++++++++-------- rapport/main.tex | 10 +++++----- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/labo2-fsharp/CryptoFile/Crypto.fs b/labo2-fsharp/CryptoFile/Crypto.fs index c81475b..8ea0629 100644 --- a/labo2-fsharp/CryptoFile/Crypto.fs +++ b/labo2-fsharp/CryptoFile/Crypto.fs @@ -11,6 +11,9 @@ module internal Crypto = let rsaKeySize = 2048 let aesKeySize = 128 + exception KeySizeError + exception IVSizeError + /// Returns a cryptographically strong sequence of bytes. let rand size : byte[] = let result = Array.zeroCreate size @@ -47,27 +50,27 @@ module internal Crypto = /// Returns an encrypted output stream. let encryptAES (key: byte[]) (iv: byte[]) (outputStream: Stream) : CryptoStream = - assert (key.Length = aesKeySize / 8 && iv.Length = 16) - use aes = new AesCryptoServiceProvider () // Default mode is CBC. - aes.KeySize <- aesKeySize + if key.Length <> aesKeySize / 8 then raise KeySizeError + if iv.Length <> 16 then raise IVSizeError + use aes = new AesCryptoServiceProvider (KeySize = aesKeySize) // Default mode is CBC. let encryptor = aes.CreateEncryptor (key, iv) new CryptoStream (outputStream, encryptor, CryptoStreamMode.Write) /// Returns a decrypted input stream. let decryptAES (key: byte[]) (iv: byte[]) (inputStream: Stream) : CryptoStream = - assert (key.Length = aesKeySize / 8 && iv.Length = 16) - use aes = new AesCryptoServiceProvider () - aes.KeySize <- aesKeySize + if key.Length <> aesKeySize / 8 then raise KeySizeError + if iv.Length <> 16 then raise IVSizeError + use aes = new AesCryptoServiceProvider (KeySize = aesKeySize) let decryptor = aes.CreateDecryptor (key, iv) new CryptoStream (inputStream, decryptor, CryptoStreamMode.Read) // Create a stream to compute the HMAC-SHA256 against all data being written. let HMACStream (key: byte[]) (outputStream: Stream) : Stream * HMACSHA256 = - assert (key.Length = 32) + if key.Length <> 32 then raise KeySizeError let hmac = new HMACSHA256 (key) new CryptoStream (outputStream, hmac, CryptoStreamMode.Write) :> Stream, hmac let ComputeHMAC (key: byte[]) (inputStream: Stream) : byte[] = - assert (key.Length = 32) + if key.Length <> 32 then raise KeySizeError let hmac = new HMACSHA256 (key) hmac.ComputeHash inputStream \ No newline at end of file diff --git a/rapport/main.tex b/rapport/main.tex index 36571ff..9f803c3 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -116,7 +116,7 @@ Ces clefs sont générées aléatoirement à chaque création d'un container. D'après \cite{wiki-key-size}, la société \emph{RSA Security}\footnote{\rsasecurity} annonce qu'une taille de clefs \emph{RSA} de 2048 bits est suffisante jusqu'en 2030. Cela dépend également du niveau d'importance des documents que l'on souhaite chiffrer dans la mesure ou une attaque demande énormément de moyens. -Toujours d'après \cite{wiki-key-size}, une taille de clef \emph{AES} de 128 bits reste actuellement hors de portée d'une attaque. +Toujours d'après \cite{wiki-key-size}, une taille de clef \emph{AES} de 128 bits reste, actuellement, hors de portée de toutes attaques. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -136,7 +136,7 @@ string = size[vint], content-utf8 ; \texttt{nb-meta-data} est le nombre de paires clef-valeur des méta-données. -\texttt{keys} correspond aux clefs $k_c$ et $k_a$ ainsi qu'à l'\emph{IV}, le tout chiffré avec \emph{RSA-2048}. La taille des données chiffrées est égale à $k_c + k_a + iv = 128 + 256 + 128 = 640\,bits$. +\texttt{keys} correspond aux clefs $k_c$ et $k_a$ ainsi qu'à l'\emph{IV}, le tout chiffré avec \emph{RSA-2048}. La taille des données chiffrées est égale à $k_c + k_a + iv = 128 + 256 + 128 = 512\,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 toutes autres données associées. @@ -266,15 +266,15 @@ module API = Quelques mesures sur un fichier de 871 MiB ont été effectuées sous \emph{Linux} avec \emph{Mono} 3.10.0 ainsi que sous \emph{Windows 8} avec \emph{Visual Studio 2012}. Il est a noter que l'implémentation \emph{AES} de \emph{Mono} est en \emph{C\#} et n'utilise évidemment pas l’accélération matérielle d'\emph{Intel} présente sur la machine : \emph{AES-NI}. -Les tests sous \emph{Windows 8} ont été fait sur une machine ne possédant pas \emph{AES-NI}. Cette fonctionnalité est normalement utilisée par la version de \emph{Microsoft} du \emph{runtime} \emph{.NET}. +Les tests sous \emph{Windows 8} ont été fait sur une machine ne possédant pas \emph{AES-NI}. Cette fonctionnalité est normalement utilisée par l’implémentation du \emph{runtime} \emph{.NET} de \emph{Microsoft} . \begin{tabular}{ l | r | r | r | r } & \multicolumn{2}{c|}{Chiffrement} & \multicolumn{2}{|c}{Déchiffrement} \\ \cline{2-5} & \multicolumn{1}{c}{\emph{Mono}} & \multicolumn{1}{|c|}{\emph{MS .NET}} & \multicolumn{1}{|c|}{\emph{Mono}} & \multicolumn{1}{c}{\emph{MS .NET}} \\ \cline{2-5} - Temps & 39 s & 21 s & 55 s & 22 s \\ - Mémoire utilisée & 7.0 MiB & 14 MiB & 14.3 MiB & 13.9 MiB \\ + Temps & 39 s & 20 s & 48 s & 20 s \\ + Mémoire utilisée & 7.0 MiB & 14 MiB & 15.2 MiB & 13.9 MiB \\ Taux \emph{CPU} & 1 x 100 \% & 1 x 100 \% & 1 x 100 \% & 1 x 100 \% \\ \end{tabular} -- 2.43.0