Put the API in an seperate library assembly and create an assembly for testing.
[crypto_lab2.git] / rapport / main.tex
index 97745a2..22e7f92 100644 (file)
@@ -45,15 +45,80 @@ mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{Introduction}
 
+\section{Choix des algorithmes et des paramètres}
+
+\begin{itemize}
+   \item \emph{RSA-2048} pour la signature ainsi que pour le chiffrage des clefs \emph{AES} et \emph{HMAC}. Le padding \emph{PKCS\#1 v1.5}  est utilisé ;
+   \item \emph{HMAC-SHA256} pour la vérification de l'intégrité ;
+   \item \emph{AES-CBC256} pour le chiffrement symétrique du contenu du fichier et des méta-données.
+\end{itemize}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{format du container}
+
+Le format est définit 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 ;
+header = file-content-size[int64], mac[256], signature[2048], keys[2048] ;
+ciphertext = AES(plaintext) ;
+plaintext = meta-data, file-content ;
+meta-data = meta-data-size[int32], { key-value-pair } ;
+key-value-pair = key[string], value[string] ;
+string = size[8], 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{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.
+
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{processus}
 
 \subsection{chiffrement}
 
+Entrées :
+
+\begin{itemize}
+   \item $f$ : contenu du fichier
+   \item $metas$ : métas données associées au fichier
+   \item $k_{pub}$ : clef publique RSA
+   \item $k_{signpriv}$ : clef privé de signature DSA
+\end{itemize}
+
+
+Processus :
+
+\begin{enumerate}
+   \item Génération d'une clef 256 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 Construction du $plaintext$, voir format ci dessus.
+   \item Chiffrement du $plaintext$ avec \emph{AES-CBC256}, $k_c$ et $iv \rightarrow ciphertext$.
+   \item Calcul de MAC 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 Renvoie $mac + sig + keys + ciphertext$.
+\end{enumerate}
+
+Où $+$ dénote la concaténation.
+
+
+
 \subsection{déchiffrement}
 
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\section{format du container}
+\section{Implémentation}
+
+\subsection{Utilisation}
+
+\subsection{Organisation du code}
+
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{Niveaux de sécurité}
@@ -63,7 +128,7 @@ mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit
 \begin{itemize}
    \item Confidentialité : les données chiffrées ne doivent pas pouvoir être décryptées par un attaquant.
    \item Authentification : un attaquant ne doit pas pouvoir forger un container, une signature est réalisée à l'aide d'une paire de clef publique-privée.
-   \item Intégrité : il ne faut pas que les données chiffrée aient pu être altérées par un attaquant.
+   \item Intégrité : il ne faut pas que les données chiffrées aient pu être altérées par un attaquant.
 \end{itemize}
 
 
@@ -82,7 +147,27 @@ L'empreinte des données est signée à l'aide d'une clef privée donnée en par
 Cela est réalisé avec un \emph{MAC}, dans notre nous utilisons \emph{HMAC-SHA256} sur les données chiffrées (\emph{Encrypt-then-MAC}).
 
 
-\subsection{}
+\subsection{Quels sont les clefs cryptographiques requises qu'il est nécessaire de gérer ?}
+
+\subsubsection{Clefs externes}
+
+Concerne les clefs externes à l'\emph{API}.
+
+\begin{itemize}
+   \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}.
+\end{itemize}
+
+
+
+\subsubsection{Clefs internes}
+
+Concerne les clefs gérer à l'intérieur du container.
+
+\begin{itemize}
+   \item Une clef de 256 bits pour \emph{AES}.
+   \item Une clef de 256 bits pour \emph{HMAC}.
+\end{itemize}
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%