Wirte crypto symétrique

This commit is contained in:
flyingscorpio@clevo 2022-10-11 23:51:30 +02:00
parent b257151d6e
commit a07db6f0f2

View file

@ -213,8 +213,6 @@
On va considérer les sous-chaînes de lettres obtenues en prenant les lettres à différents intervalles donnés.
À chaque fois, on calcule l'IC et on sélectionne l'intervalle dont l'IC correspond à la langue du texte.
\section{Cryptographie symmétrique}
\section{Stéganographie}
La stéganographie, en grec \emph{écriture couverte}, cache les messages dans un support.
@ -300,6 +298,112 @@
\item écrire les caractères correspondant aux codes ASCII obtenus
\end{enumerate}
\section{Cryptographie symétrique}
La clé qui chiffre le message sert aussi à le déchiffrer.
Ceci pose le problème du partage de clé, car les deux côtés de l'échange doivent posséder la même.
On va donc échanger la clé via un canal fiable, différent de celui utilisé pour la communication.
\subsection{Chiffrement par bloc}
Avec un chiffrement par bloc, on chiffre des blocs de taille fixe.
\begin{center}
\begin{tikzpicture}
\draw[latex-latex] (-4,2) -- (-2,2) node[above,midway]{$b$ bits};
\node[rectangle,draw,thick,minimum width=2cm] (plain1) at (-3,1.5) {plaintext};
\node (k1) at (-5.5,0) {clé (K)};
\node[rectangle,draw,thick,fill=gray!30] (encryption) at (-3,0) {\parbox{2.5cm}{\centering Algorithme de \\ chiffrement}};
\node[rectangle,draw,thick,minimum width=2cm] (cipher1) at (-3,-1.5) {ciphertext};
\draw[latex-latex] (-4,-2) -- (-2,-2) node[below,midway]{$b$ bits};
\draw[-latex] (k1) -- (encryption);
\draw[-latex] (plain1) -- (encryption);
\draw[-latex] (encryption) -- (cipher1);
\draw[latex-latex] (4,2) -- (2,2) node[above,midway]{$b$ bits};
\node[rectangle,draw,thick,minimum width=2cm] (cipher2) at (3,1.5) {ciphertext};
\node (k2) at (0.5,0) {clé (K)};
\node[rectangle,draw,thick,fill=gray!30] (decryption) at (3,0) {\parbox{2.5cm}{\centering Algorithme de \\ déchiffrement}};
\node[rectangle,draw,thick,minimum width=2cm] (plain2) at (3,-1.5) {plaintext};
\draw[latex-latex] (4,-2) -- (2,-2) node[below,midway]{$b$ bits};
\draw[-latex] (k2) -- (decryption);
\draw[-latex] (cipher2) -- (decryption);
\draw[-latex] (decryption) -- (plain2);
\draw[-latex] (cipher1) -- (-0.75,-1.5) -- (-0.75,1.5) -- (cipher2);
\end{tikzpicture}
\end{center}
\subsection{Chiffrement par flot}
Avec un chiffrement par flot, on chiffre des données de taille quelconque.
\begin{center}
\begin{tikzpicture}
\node[rectangle,draw,thick,fill=gray!30,text height=4cm,minimum width=3cm] (encryption) at (-3,0) {chiffrement};
\node[rectangle,draw,thick,fill=white] (bitstream1) at (-3,1) {\parbox{2cm}{bit-stream \\ generation}};
\node (k1) at (-6,1) {clé ($K$)};
\draw[-latex] (k1) -- (bitstream1);
\node (plain1) at (-6,-1) {\parbox{2cm}{\centering plaintext\\($p_i$)}};
\node[circle,draw,thick,fill=white,minimum width=0.5cm] (xor1) at (-3,-1) {};
\draw[thick] (-3.25,-1) -- (-2.75,-1); \draw[thick] (-3,-1.25) -- (-3,-0.75);
\draw[-latex] (bitstream1) -- (xor1) node[midway,left]{$k_i$};
\draw[-latex] (plain1) -- (xor1);
\node (cipher) at (0,-1) {\parbox{2cm}{\centering ciphertext\\($c_i$)}};
\node[rectangle,draw,thick,fill=gray!30,text height=4cm,minimum width=3cm] (decryption) at (3,0) {déchiffrement};
\node[rectangle,draw,thick,fill=white] (bitstream2) at (3,1) {\parbox{2cm}{bit-stream \\ generation}};
\node (k2) at (0,1) {clé ($K$)};
\draw[-latex] (k2) -- (bitstream2);
\node (plain2) at (6,-1) {\parbox{2cm}{\centering plaintext\\($p_i$)}};
\node[circle,draw,thick,fill=white,minimum width=0.5cm] (xor2) at (3,-1) {};
\draw[thick] (3.25,-1) -- (2.75,-1); \draw[thick] (3,-1.25) -- (3,-0.75);
\draw[-latex] (bitstream2) -- (xor2) node[midway,left]{$k_i$};
\draw[-latex] (xor1) -- (cipher);
\draw[-latex] (cipher) -- (xor2);
\draw[-latex] (xor2) -- (plain2);
\end{tikzpicture}
\end{center}
\subsection{Mode opératoire}
On parle de mode d'opération pour parler de la manière de traiter les blocs de texte clairs et chiffrés au sein d'un algorithme de chiffrement par bloc.
Chaque mode propage différemment les erreurs lors des différentes étapes de modification de données pendant le chiffrement.
Historiquement, on cherchait à garantir l'intégrité.
Aujourd'hui, il existe des mécanismes associant chiffrement et authentification.
\begin{tabularx}{\linewidth}{XXX}
\toprule
\textbf{Mode} & \textbf{Description} & \textbf{Application} \\
\toprule
Electronic Code Book (ECB) & Chaque bloc est chiffré indépendemment avec la même clé. & Transmission de valeurs uniques (comme une clé de chiffrement). \\
\midrule
Cipher Block Chaining (CBC) & Un XOR du ciphertext du bloc précédent et du plaintext du bloc suivant sert d'entrée à l'algorithme de chiffrement. & Transmission générique orientée par bloc, authentification. \\
\bottomrule
\end{tabularx}
\paragraph{Electronic Code Book (ECB)}
Le message à chiffrer est subdivisé en plusieurs blocs qui sont chiffrés séparément les uns après les autres.
L'avantage est qu'on peut paralléliser le chiffrement et le déchiffrement.
L'inconvénient est que deux blocs identiques seront chiffrés de la même manière.
On peut donc construire un dictionnaire (\emph{codebook}) associant texte chiffré et texte en clair.
Cela veut dire un produit non aléatoire et permet donc une attaque par rejeu.
\paragraph{Cipher Block Chaining (CBC)}
C'était le mode le plus largement déployé dans le passé.
Ses défauts~:
\begin{itemize}
\item Il nécessite un bourrage (\emph{padding}) pour produire un multiple de la taille du bloc.
\item Il est vulnérable aux \emph{padding oracle attacks} (comme POODLE sur SSL).
\end{itemize}
\section{Cryptographie appliquée au WiFi}
\subsection{Les attaques sur WiFi}