7e2c28054d2ad42f47d00a409ed599717cd852e5
[crypto_lab2.git] / rapport / main.tex
1 \documentclass[a4paper,10pt]{article}
2
3 \usepackage[francais]{babel}
4 \usepackage[utf8]{inputenc}
5 \usepackage[T1]{fontenc}
6 \usepackage{lmodern}
7
8 \usepackage{graphicx}
9 \usepackage{listings}
10 \usepackage{url}
11 \usepackage{upquote}
12 \usepackage{color}
13
14 \title{ICR - Labo \#2 : \textit{Conception et implémentation d'un container sécurisé pour des données médicales}}
15 \author{G.Burri}
16
17 \lstdefinelanguage{FSharp}%
18 {morekeywords={let, new, match, with, rec, open, module, namespace, type, of, member, %
19 and, for, while, true, false, in, do, begin, end, fun, function, return, yield, try, %
20 mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit, finally },
21 otherkeywords={ let!, return!, do!, yield!, use!, var, from, select, where, order, by },
22 keywordstyle=\color{blue}\bfseries,
23 sensitive=true,
24 basicstyle=\ttfamily,
25 breaklines=true,
26 xleftmargin=\parindent,
27 aboveskip=\bigskipamount,
28 tabsize=4,
29 morecomment=[l][\color{greencomments}]{///},
30 morecomment=[l][\color{greencomments}]{//},
31 morecomment=[s][\color{greencomments}]{{(*}{*)}},
32 morestring=[b]",
33 showstringspaces=false,
34 literate={`}{\`}1,
35 stringstyle=\color{redstrings},
36 }
37
38 \begin{document}
39
40 \nocite{*}
41
42 \maketitle
43
44
45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
46 \section{Introduction}
47
48 \section{Choix des algorithmes et des paramètres}
49
50 \begin{itemize}
51 \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é ;
52 \item \emph{HMAC-SHA256} pour la vérification de l'intégrité ;
53 \item \emph{AES-CBC256} pour le chiffrement symétrique du contenu du fichier et des méta-données associées. Le padding \emph{PKCS7} est utilisé.
54 \end{itemize}
55
56
57 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58 \section{format du container}
59
60 Le format est définit comme suit en \emph{EBNF}. Les valeurs entre crochets correspondent soit à une taille en bits soit à un type.
61
62 \begin{lstlisting}[frame=single, breaklines, basicstyle=\ttfamily\footnotesize]
63 container = header, ciphertext ;
64 header = mac[256], signature[2048], keys[2048] ;
65 ciphertext = AES(plaintext) ;
66 plaintext = meta-data, file-content ;
67 meta-data = meta-data-size[int32], { key-value-pair } ;
68 key-value-pair = key[string], value[string] ;
69 string = size[8], content-utf8 ;
70 \end{lstlisting}
71
72 \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.
73
74 \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$.
75
76 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.
77
78
79 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80 \section{processus}
81
82 \subsection{chiffrement}
83
84 Entrées :
85
86 \begin{itemize}
87 \item $f$ : contenu du fichier
88 \item $metas$ : métas données associées au fichier
89 \item $k_{pub}$ : clef publique RSA
90 \item $k_{signpriv}$ : clef privé de signature DSA
91 \end{itemize}
92
93
94 Processus :
95
96 \begin{enumerate}
97 \item Génération d'une clef 256 bits pour \emph{AES} $\rightarrow k_c$.
98 \item Génération d'une clef 256 bits pour \emph{MAC} $\rightarrow k_a$.
99 \item Génération d'un \emph{IV} 128 bits pour le mode \emph{CBC} $\rightarrow iv$.
100 \item Construction du $plaintext$, voir format ci dessus.
101 \item Chiffrement du $plaintext$ avec \emph{AES-CBC256}, $k_c$ et $iv \rightarrow ciphertext$.
102 \item Calcul de MAC de $ciphertext$ $\rightarrow mac$.
103 \item Signature de $mac$ avec $k_{signpriv}$ $\rightarrow sig$.
104 \item Chiffrement de $k_c + k_a + iv$ avec $k_pub \rightarrow keys$.
105 \item Renvoie $mac + sig + keys + ciphertext$.
106 \end{enumerate}
107
108 Où $+$ dénote la concaténation.
109
110
111
112 \subsection{déchiffrement}
113
114
115 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
116 \section{Implémentation}
117
118 \subsection{Utilisation}
119
120 \subsection{Organisation du code}
121
122
123 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
124 \section{Niveaux de sécurité}
125
126 \subsection{Quel est le niveau de sécurité que l'on souhaite atteindre ?}
127
128 \begin{itemize}
129 \item Confidentialité : les données chiffrées ne doivent pas pouvoir être décryptées par un attaquant.
130 \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.
131 \item Intégrité : il ne faut pas que les données chiffrées aient pu être altérées par un attaquant.
132 \end{itemize}
133
134
135 \subsection{Comment s'assure-t-on que les données sont stockées de manière confidentielle ? En particulier ce qui concerne les méta-données}
136
137 Les méta-données ainsi que les données sont chiffrées ensemble. Voir le format du container décrit précédemment.
138
139
140 \subsection{Comment s'assure-t-on que les données stockées sont authentiques ? Quels sont les risques à prendre en compte ?}
141
142 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 donnée puis utilisée pour déchiffrer l'empreinte qui est comparée à l'empreinte des données.
143
144
145 \subsection{Comment s'assure-t-on que les données stockées sont intègres ?}
146
147 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}).
148
149
150 \subsection{Quels sont les clefs cryptographiques requises qu'il est nécessaire de gérer ?}
151
152 \subsubsection{Clefs externes}
153
154 Concerne les clefs externes à l'\emph{API}.
155
156 \begin{itemize}
157 \item Une paire de clefs \emph{RSA-2048} pour la signature.
158 \item Une paire de clefs \emph{RSA-2048} pour le chiffrement des clefs \emph{AES}.
159 \end{itemize}
160
161
162
163 \subsubsection{Clefs internes}
164
165 Concerne les clefs gérer à l'intérieur du container.
166
167 \begin{itemize}
168 \item Une clef de 256 bits pour \emph{AES}.
169 \item Une clef de 256 bits pour \emph{HMAC}.
170 \end{itemize}
171
172
173 17 Mo de mémoire et 19 s pour chiffrer un fichier de 404 Mo
174
175
176 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
177 \section{Conclusion}
178
179 % http://stephenhaunts.com/2013/03/04/cryptography-in-net-advanced-encryption-standard-aes/
180 % http://stephenhaunts.com/2013/03/26/cryptography-in-net-rsa/
181 % http://en.wikipedia.org/wiki/Digital_signature
182 %\bibliographystyle{plain}
183 %\bibliography{main}
184
185 \end{document}