\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}
\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}
\urldef{\rsasecurity}\url{http://en.wikipedia.org/wiki/RSA_Security}
\urldef{\wikiml}\url{http://en.wikipedia.org/wiki/ML_%28programming_language%29}
\urldef{\rsasecurity}\url{http://en.wikipedia.org/wiki/RSA_Security}
\urldef{\wikiml}\url{http://en.wikipedia.org/wiki/ML_%28programming_language%29}
\begin{itemize}
\item Confidentialité : les données chiffrées ne doivent pas pouvoir être décryptées par un attaquant.
\item Authenticité : un attaquant ne doit pas pouvoir forger un container. Une signature est réalisée à l'aide d'une paire de clefs \emph{RSA} publique-privée.
\begin{itemize}
\item Confidentialité : les données chiffrées ne doivent pas pouvoir être décryptées par un attaquant.
\item Authenticité : un attaquant ne doit pas pouvoir forger un container. Une signature est réalisée à l'aide d'une paire de clefs \emph{RSA} publique-privée.
-L'empreinte des données est signée à l'aide d'une clef privée donnée en paramètre de l'\emph{API} : ceci représente la signature qui est placée dans le container. Lors du déchiffrement, la clef publique correspondante est fournie puis utilisée pour déchiffrer l'empreinte qui est comparée à l'empreinte des données.
+L'empreinte des données chiffrées est signée à l'aide d'une clef privée donnée en paramètre de l'\emph{API} : ceci représente la signature qui est placée dans le container. Lors du déchiffrement, la clef publique correspondante est fournie puis utilisée pour vérifier la signature avec l'empreinte des données chiffrées.
- \item Une paire de clefs \emph{RSA-2048} pour la signature.
- \item Une paire de clefs \emph{RSA-2048} pour le chiffrement des clefs \emph{AES}.
+ \item Une paire de clefs \emph{RSA-3072} pour la signature.
+ \item Une paire de clefs \emph{RSA-3072} pour le chiffrement des clefs \emph{AES}.
\item \emph{HMAC-SHA256} pour la vérification de l'intégrité ;
\item \emph{AES-CBC128} pour le chiffrement symétrique du contenu du fichier et des méta-données associées. Le bourrage \emph{PKCS7} est utilisé.
\end{itemize}
\item \emph{HMAC-SHA256} pour la vérification de l'intégrité ;
\item \emph{AES-CBC128} pour le chiffrement symétrique du contenu du fichier et des méta-données associées. Le bourrage \emph{PKCS7} est utilisé.
\end{itemize}
-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.
+D'après \emph{Wikipedia}~\cite{wiki-key-size}, la société \emph{RSA Security}\footnote{\rsasecurity} annonce qu'une taille de clefs \emph{RSA} de 3072 bits est suffisante pour une utilisation au delà de 2030. Cela dépend également du niveau d'importance des documents que l'on souhaite chiffrer dans la mesure où 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 de toutes attaques.
+Toujours d'après \emph{Wikipedia}~\cite{wiki-key-size}, une taille de clef \emph{AES} de 128 bits reste, actuellement, hors de portée de toutes attaques.
Le format est défini comme suit en \emph{EBNF}. Les valeurs entre crochets correspondent soit à une taille en bits soit à un type.
\begin{lstlisting}[frame=single, breaklines, basicstyle=\ttfamily\footnotesize]
container = header, ciphertext ;
Le format est défini comme suit en \emph{EBNF}. Les valeurs entre crochets correspondent soit à une taille en bits soit à un type.
\begin{lstlisting}[frame=single, breaklines, basicstyle=\ttfamily\footnotesize]
container = header, ciphertext ;
ciphertext = AES(plaintext) ;
plaintext = meta-data, file-content ;
meta-data = nb-meta-data[byte], { key-value-pair } ;
ciphertext = AES(plaintext) ;
plaintext = meta-data, file-content ;
meta-data = nb-meta-data[byte], { key-value-pair } ;
-\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$.
+\texttt{keys} correspond aux clefs $k_c$ et $k_a$ ainsi qu'à l'\emph{IV}, le tout chiffré avec \emph{RSA-3072}. La taille des données à chiffrer 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.
Le type \texttt{vint} correspond à un entier de taille variable, initialement occupant un octet.
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.
Le type \texttt{vint} correspond à un entier de taille variable, initialement occupant un octet.
-Comme les clefs (\emph{AES} et \emph{HMAC-SHA256}) sont différentes à chaque chiffrement, que le \emph{MAC} dépend de sa clef et des données chiffrées et que la signature dépend du \emph{MAC} alors l'ensemble des octets des différentes parties du fichier résultat va être fortement différent d'un chiffrement à l'autre pour le même fichier en entrée.
+Comme les clefs (\emph{AES} et \emph{HMAC-SHA256}) sont différentes à chaque chiffrement, que le \emph{MAC} dépend de sa clef et des données chiffrées et que la signature dépend du \emph{MAC}, alors l'ensemble des octets des différentes parties du fichier résultat va être fortement différent d'un chiffrement à l'autre pour le même fichier en entrée.
Processus :
\begin{enumerate}
\item Génération d'une clef 128 bits pour \emph{AES} $\rightarrow k_c$.
\item Génération d'une clef 256 bits pour \emph{MAC} $\rightarrow k_a$.
\item Génération d'un \emph{IV} 128 bits pour le mode \emph{CBC} $\rightarrow iv$.
Processus :
\begin{enumerate}
\item Génération d'une clef 128 bits pour \emph{AES} $\rightarrow k_c$.
\item Génération d'une clef 256 bits pour \emph{MAC} $\rightarrow k_a$.
\item Génération d'un \emph{IV} 128 bits pour le mode \emph{CBC} $\rightarrow iv$.
\item Chiffrement du $plaintext$ avec \emph{AES-CBC128}, $k_c$ et $iv \rightarrow ciphertext$.
\item Calcul du \emph{HMAC-SHA256} de $ciphertext$ $\rightarrow mac$.
\item Signature de $mac$ avec $k_{signpriv}$ $\rightarrow sig$.
\item Chiffrement de $k_c + k_a + iv$ avec $k_{pub} \rightarrow keys$.
\item Chiffrement du $plaintext$ avec \emph{AES-CBC128}, $k_c$ et $iv \rightarrow ciphertext$.
\item Calcul du \emph{HMAC-SHA256} de $ciphertext$ $\rightarrow mac$.
\item Signature de $mac$ avec $k_{signpriv}$ $\rightarrow sig$.
\item Chiffrement de $k_c + k_a + iv$ avec $k_{pub} \rightarrow keys$.
\item Vérification de la signature avec $k_{signpub}$.
\item Déchiffrement de $k_c + k_a + iv$ avec $k_{priv}$.
\item Vérification de la signature avec $k_{signpub}$.
\item Déchiffrement de $k_c + k_a + iv$ avec $k_{priv}$.
\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ées.
\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ées.
\item \emph{Types.fs} : Quelques types publics.
\item \emph{Crypto.fs} : Toutes les primitives cryptographiques nécessaires.
\item \emph{UnitTests.fs} : Quelques tests unitaires du module \emph{Crypto}.
\item \emph{Types.fs} : Quelques types publics.
\item \emph{Crypto.fs} : Toutes les primitives cryptographiques nécessaires.
\item \emph{UnitTests.fs} : Quelques tests unitaires du module \emph{Crypto}.
-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}.
+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.1} avec \emph{Visual Studio 2012}. Il est à 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}.
\begin{tabular}{ l | r | r | r | r }
& \multicolumn{2}{c|}{Chiffrement} & \multicolumn{2}{|c}{Déchiffrement} \\
\begin{tabular}{ l | r | r | r | r }
& \multicolumn{2}{c|}{Chiffrement} & \multicolumn{2}{|c}{Déchiffrement} \\