1 \documentclass[a4paper,
10pt
]{article
}
3 \usepackage[francais
]{babel
}
4 \usepackage[utf8
]{inputenc}
5 \usepackage[T1]{fontenc}
14 \title{ICR - Labo \
#2 :
\textit{Conception et implémentation d'un container sécurisé pour des données médicales
}}
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,
26 xleftmargin=
\parindent,
27 aboveskip=
\bigskipamount,
29 morecomment=
[l
][\color{greencomments
}]{///
},
30 morecomment=
[l
][\color{greencomments
}]{//
},
31 morecomment=
[s
][\color{greencomments
}]{{(*}{*)}},
33 showstringspaces=false,
35 stringstyle=
\color{redstrings
},
45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
46 \section{Introduction
}
48 \section{Choix des algorithmes et des paramètres
}
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é.
57 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58 \section{format du container
}
60 Le format est définit comme suit en
\emph{EBNF
}. Les valeurs entre crochets correspondent soit à une taille en bits soit à un type.
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
[vint
], content-utf8 ;
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.
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$.
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.
78 Le type
\texttt{vint
} correspond à un entier de taille variable, initialement occupant un octets.
81 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
84 \subsection{chiffrement
}
90 \item $k_
{pub
}$ : clef publique RSA
91 \item $k_
{signpriv
}$ : clef privé de signature RSA
98 \item Génération d'une clef
256 bits pour
\emph{AES
} $
\rightarrow k_c$.
99 \item Génération d'une clef
256 bits pour
\emph{MAC
} $
\rightarrow k_a$.
100 \item Génération d'un
\emph{IV
} 128 bits pour le mode
\emph{CBC
} $
\rightarrow iv$.
101 \item Construction du $plaintext$, voir format ci dessus.
102 \item Chiffrement du $plaintext$ avec
\emph{AES-CBC256
}, $k_c$ et $iv
\rightarrow ciphertext$.
103 \item Calcul de MAC de $ciphertext$ $
\rightarrow mac$.
104 \item Signature de $mac$ avec $k_
{signpriv
}$ $
\rightarrow sig$.
105 \item Chiffrement de $k_c + k_a + iv$ avec $k_pub
\rightarrow keys$.
106 \item Renvoie $mac + sig + keys + ciphertext$.
109 Où $+$ dénote la concaténation.
112 \subsection{déchiffrement
}
117 \item $c$ : container chiffrées
118 \item $k_
{priv
}$ : clef privée RSA
119 \item $k_
{signpub
}$ : la clef publique de signature RSA
125 \item Lecture de $mac$, calcul de $mac'$ sur $c$ comparaison des deux afin de vérifier l'intégrité.
126 \item Vérification de la signature avec $k_
{signpub
}$.
127 \item Déchiffrement de $k_c + k_a + iv$ avec $k_
{priv
}$.
128 \item Déchiffrement du reste des données ($ciphertext$).
131 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és.
134 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
135 \section{Implémentation
}
137 \subsection{Utilisation
}
139 \subsection{Organisation du code
}
142 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
143 \section{Niveaux de sécurité
}
145 \subsection{Quel est le niveau de sécurité que l'on souhaite atteindre ?
}
148 \item Confidentialité : les données chiffrées ne doivent pas pouvoir être décryptées par un attaquant.
149 \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.
150 \item Intégrité : il ne faut pas que les données chiffrées aient pu être altérées par un attaquant.
154 \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
}
156 Les méta-données ainsi que les données sont chiffrées ensemble. Voir le format du container décrit précédemment.
159 \subsection{Comment s'assure-t-on que les données stockées sont authentiques ? Quels sont les risques à prendre en compte ?
}
161 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.
164 \subsection{Comment s'assure-t-on que les données stockées sont intègres ?
}
166 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
}).
169 \subsection{Quels sont les clefs cryptographiques requises qu'il est nécessaire de gérer ?
}
171 \subsubsection{Clefs externes
}
173 Concerne les clefs externes à l'
\emph{API
}.
176 \item Une paire de clefs
\emph{RSA-
2048} pour la signature.
177 \item Une paire de clefs
\emph{RSA-
2048} pour le chiffrement des clefs
\emph{AES
}.
181 \subsubsection{Clefs internes
}
183 Concerne les clefs gérer à l'intérieur du container.
186 \item Une clef de
256 bits pour
\emph{AES
}.
187 \item Une clef de
256 bits pour
\emph{HMAC
}.
191 17 Mo de mémoire et
19 s pour chiffrer un fichier de
404 Mo
194 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
197 % http://stephenhaunts.com/2013/03/04/cryptography-in-net-advanced-encryption-standard-aes/
198 % http://stephenhaunts.com/2013/03/26/cryptography-in-net-rsa/
199 % http://en.wikipedia.org/wiki/Digital_signature
200 %\bibliographystyle{plain}