\documentclass[a4paper,french,12pt]{article}

\title{Théorie de l'information et Cryptologie}
\author{}
\date{Dernière compilation~: \today{} à \currenttime}

\usepackage{styles}

\begin{document}

\maketitle
\tableofcontents

\clearpage

\section{Chiffrement symétrique}

    L'algorithme de chiffrement est \emph{connu publiquement}.
    C'est le principe de Kirshoff.
    Il faut se baser sur la qualité de l'algorithme et la taille des clés.
    Un algorithme gardé secret finira tôt ou tard par être rendu publique (sur un forum par exemple).

    \subsection{Cas d'usage}

        \begin{itemize}
            \item Clé à usage unique
            \item Chiffrement de fichiers
            \item Signatures numériques
            \item Communication anonyme
            \item Monnaie numérique
            \item Élection privée
            \item Enchère
        \end{itemize}

\section{Une science rigoureuse}

    \paragraph{Les trois étapes de la cryptographie}

        \begin{itemize}
            \item spécifier avec précision le \emph{modèle de menace}
            \item proposer une construction
            \item prouver que briser la construction résoudra un problème difficile sous-jacent
        \end{itemize}

    \paragraph{Choses à retenir}

        La cryptographie est un outil formidable et à la base de nombreux mécanismes de sécurité.
        Mais elle n'est \emph{pas}~:

        \begin{itemize}
            \item la solution à tous les problèmes
            \item fiable à moins d'être implémentée et utilisée correctement
            \item quelque chose à essayer d'inventer soi-même
        \end{itemize}

\section{Chiffrement de César}

\section{Chiffrement monoalphabétique}

\section{Chiffres de substitution polygrammiques}

\section{Chiffrement polyalphabétique}

\section{Chiffrement de Vigénère}

    Le chiffrement de Vigénère utilise non pas un mais 26 alphabets décalés pour chiffrer un message.
    Cela réduit les possibilités d'analyse fréquentielle.

    \subsection{Déchiffrement}

        \paragraph{Méthode Babage-Kasiski}

            On cherche des séquences de lettres qui apparaissent plus d'une fois dans le texte.
            Deux cas se présentent~:

            \begin{itemize}
                \item soit la même séquence de lettres du texte clair a été chiffrée avec la même partie de la clef
                \item soit deux suites de lettres différentes dans le texte clair ont par pure coïncidence engendré la même suite dans le texte chiffré
            \end{itemize}

            Comme le premier cas est le plus probable, il permettra de deviner la longueur de la clef.

        \paragraph{Méthode Bazeries}

            Cette méthode se base sur l'existence d'un mot \emph{probable} et préconise la recherche du mot-clef.

        \paragraph{Méthode Friedman}

            L'indice de coïncidence (IC) est la probabilité que deux lettres choisies aléatoirement dans un texte soient identiques.

            \begin{align*}
                IC = \frac{n_A(n_A - 1) + n_B(n_B - 1) + \cdots + n_Z(n_Z -1)}{n(n-1)}
            \end{align*}

            \begin{tabularx}{\linewidth}{lllllllll}
                \textbf{Langue} & allemand & anglais & espagnol & esperanto & français & italien & norvégien & suédois \\
                \textbf{IC} & $0.072$ & $0.065$ & $0.074$ & $0.069$ & $0.074$ & $0.075$ & $0.073$ & $0.071$ \\
            \end{tabularx}

            Cet indice a des propriétés très intéressantes~:

            \begin{itemize}
                \item Pour une langue avec un alphabet de 26 lettres où chaque lettre a la même fréquence ($\frac{1}{26}$), $IC=0.038$.
                \item Pour toute substitution monoalphabétique et pour toute transposition, la distribution des fréquences est invariante, donc l'IC sera la même que pour le texte clair.
                \item Donc, si l'on calcule l'IC d'un texte chiffré avec un chiffrement monoalphabétique, on devrait trouver un IC égal environ à 0.074 en français.
                    Si l'IC est beaucoup plus petit (par exemple 0.050), le chiffrement est probablement polyalphabétique.
            \end{itemize}

            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{Stéganographie}

\section{Cryptographie appliquée au WiFi}

    \subsection{Les attaques sur WiFi}

        Le WiFi fonctionne en half-duplex.

        \paragraph{L'espionnage}

            Il est plus facile avec les communications radio, typiquement dans les 30 mètres.

        \paragraph{Wardriving}

            Il s'agit de la découverte des réseaux WiFi.
            Cela nécessite une la bonne carte WiFi, logiciel, GPS, voiture.
            On génère une carte géographique qui recense les réseaux WiFi (voir \url{www.wigle.net} et \url{www.wardriving.com}).

        \paragraph{DoS}

        On peut émettre des ondes radio et envoyer un paquet de \emph{désassociation}, pour déconnecter les utilisateurs et les forcer à se reconnecter quelques instants après.
        Pour cela, on envoie des paquets CTS sans arrêt en se faisant passer pour le point d'accès.

        Il n'y a pas de solution dans le standard 802.11 au problème DoS.
        Il faut donc un mécanisme de détection et réagir dès qu'une attaque a lieu.

    \subsection{Premières solutions}

        \begin{itemize}
            \item Planification radio pour limiter les débordements.
            \item Éviter les AP pirates (rogue AP)~: par exemple en utilisant des controlleurs WiFi.
            \item Masquer le SSID~: fausse bonne idée, car l'attaque le trouvera de toute façon dans toutes les trames.
            \item Filtrage par adresse MAC~: lourd à mettre en \oe{}uvre, et pas très utile (on peut faire du spoofing).
            \item Créer un réseau WiFi isolé avec des VLANs~: pas productif.
        \end{itemize}

    \subsection{Chronologie}

        \begin{itemize}

            \item 1999, \emph{802.11} d'origine --- authentification 802.11 \emph{native}, chiffrement \emph{WEP statique}.
                L'objectif était de fournir le même niveau de sécurité que le filaire (donc aucune sécurité).
                Aussi, la cryptographie était limitée par la puissance des appareils et par la loi (interdiction d'avoir des clés trop grandes, interdiction d'exporter les algorithmes).

            \item 2001, \emph{802.1X} avec WEP (LEAP) --- authentification \emph{802.1X} avec gestion des clés, protection des données par \emph{WEP}.
                Le protocole 802.1X, au niveau MAC, va contacter un serveur d'authentification.
                Ces serveurs sont appelés AAA (Authentication, Authorisation, Accounting).
                802.1X permet également de changer les clés, contrairement au \emph{WEP statique}.

            \item 2003, \emph{WPA} --- authentification \emph{802.1X} avec une gestion des clés améliorée, protection des données par \emph{TKIP}.
                On a patché le WEP avec TKIP parce que WEP avait été cassé.

            \item 2004, \emph{WPA2} --- \emph{standard IEEE 802.11i}, authentification 802.1X avec une gestion des clés améliorée, protection des données par \emph{AES} et \emph{pré-authentification}.

            \item 2018, \emph{WPA3} --- handshake \emph{dragonfly}, \emph{PFS} (Perfect Forward Secrecy), management frames protection (obligatoire).
                Deux chercheurs ont trouvé une faille dans WPA2 en 2017.
                Le consortium WiFi (des industriels) ont développé WPA3, mais ce n'est pas un organisme de standardisation, donc le standard n'est pas encore sorti.

        \end{itemize}

    \subsection{Résumé}

        \begin{tabularx}{\linewidth}{YYYYY}
            \toprule
            & \textbf{WEP} & \textbf{WPA} & \textbf{WPA2} & \textbf{WPA23} \\
            \toprule
            \textbf{Acronyme} & Wired Equivalent Privacy & WiFi Protected Access & WiFi Protected Access 2 & WiFi Protected Access 3 \\
            \midrule
            \textbf{Année de développement} & 1997 & 2003 & 2004 & 2018 \\
            \midrule
            \textbf{Niveau de sécurité} & Très faible & Faible & Élevé & Très élevé \\
            \midrule
            \textbf{Chiffrement} & RC4 & TKIP et RC4 & AES-CCMP & AES-CCMP et AES-GCMP \\
            \midrule
            \textbf{Taille de clé} & 64bit, 128bit & 128bit & 128bit & 128bit, 256bit \\
            \midrule
            \textbf{Authentification} & Open System et clé partagée & clé pré-partagée et 802.1X avec EAP & clé pré-partagée et 802.1X avec EAP & AES-CCMP et AES-GCMP \\
            \midrule
            \textbf{Intégrité} & CRC-32 & MIC 64bit & CCMP avec AES & SHA-2 \\
            \bottomrule
        \end{tabularx}

    \subsection{WEP}

        Wired Equivalent Privacy~: l'objectif est de rendre le LAN sans fil aussi sécurisé qu'un LAN filaire.

        Fonctionnalités~:

        \begin{itemize}
            \item pas de gestion de clés
            \item pas de protection contre les attaques par rejeu
            \item \emph{confidentialité} (RC4 stream cipher encryption)
            \item \emph{intégrité}~: mécanisme CRC-32
            \item \emph{authentification} par clé utilisateur partagée
        \end{itemize}

        La confidentialité est assurée par un chiffrement grâce à un algorithme à flot continu.

        \begin{center}
        \begin{tikzpicture}
            \node [rectangle,draw,thick,fill=cyan!30] (plain) at (0,1.5) {plaintext};
            \node [rectangle,draw,thick,fill=cyan!30] (key) at (-4,1.5) {secret key};
            \node [circle,draw,thick,fill=purple!30,minimum height=0.5cm,minimum width=0.5cm] (xor) at (0,0) {};
            \node [rectangle,draw,thick,fill=purple!30] (stream) at (-4,0) {stream cipher};
            \draw (0,0.22) -- (0,-0.22);
            \draw (-0.22,0) -- (0.22,0);
            \draw [-latex](key) -- (stream);
            \draw [-latex,thick](stream) -- (xor) node[above,midway]{keystream};
            \node [rectangle,draw,thick,fill=cyan!30] (cipher) at (0,-1.5) {ciphertext};
            \draw [-latex,thick](plain) -- (xor);
            \draw [-latex,thick](xor) -- (cipher);
        \end{tikzpicture}
        \end{center}

        \paragraph{RC4}

            Conçu par Ron Rivest en 1987 pour RSA Labs.
            L'algorithme a été gardé secret jusqu'en 1994, puis a été communiqué sur la liste de diffusion de Cypherpunks.

            Il est \emph{bytes-oriented}~: il génère caractère par caractère (un seul octet à chaque étape).
            Un secret partagé est nécessaire (par mot de passe par exemple), souvent de 40 bits (5 caractères) ou 128 bits (13 caractères).

            Les algorithmes stream cipher n'utilisent que des opérations basiques avec des XOR (pas d'exponentielle, de factorielle, de multiplication\ldots).
            Ils sont donc simples à implémenter et à déchiffrer.
            Par ailleurs, pas besoin de faire de bourrage (rendre la taille des blocs identiques).

        \paragraph{Attaque sur RC4}

    \subsection{WPA}

        L'objectif, urgent, était de remplacer WEP\@.
        Le standard est WPA2.

        On a ajouté un compteur pour empêcher les attaques par rejeu.
        Le vecteur d'initialisation a une taille de 48 bits.
        Les clés sont actualisées dynamiquement grâce à TKIP\@.
        Dans WPA2, on utilise AES à la place de RC4.

        \paragraph{WPA Personnel et Entreprise}

            Il y a deux façons d'utiliser WPA\@.

            \begin{enumerate}

                \item Personnel --- Utilise des clés pré-partagées (PSK).
                    Chaque appareil connecté à l'AP utilise le même secret.
                    L'utilisateur doit entrer une clé de 256 bits.

                \item Entreprise --- Authentification par serveur IEEE 802.1X, qui distribue différentes clés aux utilisateurs.
                    Souvent le serveur utilisé est Radius, ce qui permet de centraliser la gestion des informations d'identification des utilisateurs.

            \end{enumerate}

        \paragraph{Robust Security Network (RSN)}

            \begin{itemize}
                \item Contrôle d'accès~: on se base sur 802.1.
                    Le contrôle d'accès est basé sur le port.
                    Quand on est branché cela ne veut donc pas dire qu'on est authentifié.
                \item Authentification et génération des clés~: on utilise Extensible Authentication Protocol (EAP).
                \item Confidentialité, authenticité, intégrité et protection anti rejeu~: on utilise TKIP et CCMP\@.
            \end{itemize}

        \paragraph{Le modèle 802.1X}

            \begin{center}
            \begin{tikzpicture}
                \node [rectangle,draw,thick,minimum height=3cm] (supplicant) at (0,0) {Système Supplicant};
                \node [rectangle,draw,thick] at (0,-1) {Client PAE};
                \node [rectangle,draw,thick] at (4,-1) {Controlleur PAE};
                \node [rectangle,draw,thick] (radius) at (8,0) {\parbox{3.1cm}{\centering Serveur \\ d'authentification \\ (Radius)}};
            \end{tikzpicture}
            \end{center}

        \paragraph{Phases opérationnelles de 802.11i}

            \begin{enumerate}

                \item Politique de sécurité ---

                \item Authentification ---
                    Le probe request (Open System 802.11) renvoie toujours un ``Authentication Success'', pour des raisons de compatibilité des équipements.
                    La véritable authentification se fait dans la phase 2.

                    Après avoir détecté qu'on est en WPA Entreprise (pas de PSK), on va joindre un client Radius, qui demande une identité, \emph{Request Identity}, à laquelle sera répondue une \emph{Response Identity} (802.1X/EAP).
                    Le client Radius fait alors une \emph{Request Identity} au serveur Radius.
                    Ce serveur Radius va alors dériver la clé maîtresse dans un message EAP spécifique.
                    Puis un \emph{Radius Accept} est envoyé au client Radius, qui renvoie un \emph{802.1X Success} au Supplicant.

                    Le client Radius (AP), ne décapsule pas toute la trame reçue.
                    Il s'arrête à EAP, ce qui le rend plus léger~: il n'a qu'un protocole à implémenter.

                    EAP propose plusieurs méthodes de chiffrement pour permettre une négociation.
                    \texttt{md5} n'est pas utilisé, car il ne génère pas de clé maîtresse.
                    \texttt{TLS} nécessite un certificat.
                    Le plus utilisé est PEAP (Protected EAP).
                    On crée un tunnel SSL avec le certificat du serveur Radius.
                    C'est dans ce tunnel que l'on authentifie le client.

                    On peut aussi utiliser EAP/TTLS (Tunneled TLS), ce qui permet de supporter d'anciennes méthodes non supportées par EAP, car on les encapsule dans un tunnel.
                    On peut alors par exemple utiliser \texttt{md5}, même s'il ne génère pas de clé maîtresse.

                \item Dérivation et distribution des clés ---
                    Une fois que le client est authentifié, le point d'accès initie un 4-way handshake.
                    Il permet de~:

                    \begin{itemize}
                        \item confirmer la connaissance de la PMK par le client
                        \item dériver une nouvelle PTK
                        \item installer les clés de chiffrement et d'intégrité
                        \item
                    \end{itemize}

                    \begin{enumerate}
                        \item L'AP envoie un ANonce (Nonce = Number used Once), aléatoire.
                        \item Le client dérive la PTK et envoie un SNonce aléatoire.
                        \item L'AP dérive la PTK, initialise la GMK et calcule la GTK\@.
                            Puis il envoie la GTK chiffrée.
                        \item Les deux entités sont synchronisées avant le chiffrement, puis le client envoie un ACK\@.
                    \end{enumerate}

                    Le port 802.1X est alors ouvert, le client et l'AP installent la PTK et la GTK\@.

                    \begin{itemize}
                        \item MK --- Master Key.
                            C'est une PSK pour WPA Personnel.
                        \item PMK --- Pairwise Master Key.
                        \item PTK --- Pairwise Transient Key (pour l'unicast).
                        \item GTK --- Group Transient Key (pour le multicast).
                    \end{itemize}

            \end{enumerate}

    \subsection{AES}

        \url{https://formaestudio.com/rijndaelinspector/archivos/Rijndael_Animation_v4_eng-html5.html}

\end{document}
