X-Git-Url: http://git.euphorik.ch/?p=crypto_lab2.git;a=blobdiff_plain;f=rapport%2Fmain.tex;h=22e7f9207e0ea214b50b068b9e0ff31b0b63c713;hp=97745a2980d2174410aba4829ab350ee4a6b9101;hb=beda8d83dc421c479bdcf5ee626ec85ee8555a80;hpb=8ba0c13cac9a84ef690dd09b92b846e85b7b02dd diff --git a/rapport/main.tex b/rapport/main.tex index 97745a2..22e7f92 100644 --- a/rapport/main.tex +++ b/rapport/main.tex @@ -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} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%