Tous les protocoles de sécurité WiFi qui protègent les trames échangées entre AP et stations utilisent uniquement la cryptographie à clé secrète.
Remarque : ceci n'est qu'une rapide introduction à la cryptographie symétrique (à clé secrète); la description des propriétés de sécurité est très simplifiée.
Petite introduction à la cryptographie à clé secrèteEn cryptographie à clé secrète plusieurs participants partagent des données secrètes utilisées dans un protocole cryptographique, principalement les clefs secrètes :
étant donné
- un message M (appelé le cleartext ou texte clair) d'une longueur quelconque (ou multiple de la taille de bloc dans le cas des fonctions de chiffrement par blocs);
- une clé K;
- EK : une fonction de chiffrement (ou chiffre) E paramétrée par une clé K; c'est une fonction bijective des séquences de longueur n sur les séquences de longueur n (n étant quelconque ou bien multiple de la taille de bloc dans le cas des fonctions de chiffrement par blocs)
- DK : la fonction réciproque de EK
le contenu
M est transformé par E
K en un chiffré c :
c = EK(M)
Le message
c peut en principe être transmis sur un média non sûr.
Quand un récepteur légitime (qui connait la clé
K) reçoit un chiffré
c' il applique D pour retrouver le texte clair :
M' = EK (c')
si
c' =
c, alors
M' = E
K (E
K(
M)) =
MUn espion n'ayant par hypothèse pas la clé
K ne peut pas déterminer
M à partir de
c (ni même une partie de
M ni un seul bit ni la moindre information sauf la taille de
M).
Dans la notation, le transmetteur envoie
c et le récepteur reçoit
c' : on ne peut pas faire l'hypothèse qu'un message, s'il arrive, arrive inchangé. Un adversaire pourrait non seulement écouter les messages mais aussi les intercepter, les transformer, et les réinjecter.
On suppose habituellement que l'adversaire voit tous les messages envoyés, les intercepte tous, et qu'il réinjecte les messages qu'il veut de telle façon qu'ils semblent
a priori avoir été envoyés par un participant légitime; autrement dit, il n'y a aucun canal qui échappe à coup sûr à l'adversaire.
Par contre, les participants partagent avant de commencer des secrets cryptographiques qui leur permettent d'utiliser les outils cryptographiques. Un secret de nature cryptographique est une donnée qui est comme issue d'un tirage aléatoire, et qui comporte suffisamment de bits pour qu'une exploration systématique soit impossible en pratique quels que soient les moyens informatiques de l'adversaire.
Intégrité des messages; insertion de faux messagesMême en supposant que la primitive cryptographique E est sure, si la clé
K est bien de taille suffisante, générée de façon aléatoire et gardée secrète (transmise uniquement de façon sure), on voit qu'il reste un problème : le remplacement d'un chiffré par un autre ne peut pas être détecté au niveau du protocole cryptographique, la fonction E étant bijective, à toute séquence est associée une autre séquence. (Cela ne veut pas forcèment dire que le problème ne sera pas détecté à un autre niveau : si p.ex. le remplacement de
c par le chiffré
c' est fait n'importe comment,
M' sera n'importe quoi et vraisemblablement ne sera pas décodable, et le récepteur ne sera pas induit en erreur.)
Avec certaines fonctions de chiffrement, étant donné un message chiffré et sans connaitre la clef, il est absolument impossible (dans l'état des connaissances actuelles) de produire un autre chiffré qui une fois déchiffré donne un résultat prévisible : changer un bit du chiffré provoquera des modifications sur à peu près 1 bit de texte clair sur 2; autrement dit, le moindre changement dans le chiffré remplace le texte clair par une suite aléatoire de bits. Aucun intérêt pour l'adversaire.
Mais cela n'est pas toujours vrai : pour certaines fonctions de chiffrement, l'inversion d'un bit dans le chiffré produit un résultat très prévisible dans le texte clair, ce qui peut rendre possible des attaques si une protection n'est pas mise en place.
On utilise donc toujours dans les protocoles cryptographique un code d'intégrité des messages, afin de pouvoir vérifier que l'èmetteur d'un message connaissait bien la clé secrète (ou un secret quelconque); si une partie du message est modifiée en route, la vérification du code d'intégrité échouera, et le message sera ignoré (éventuellement des contre-mesures seront initiées pour rendre encore plus difficile une attaque : p.ex. installer de nouvelles clefs secrètes; dans un système solide, ces contre-mesures font partie de la défense en profondeur et ne sont pas indispensables si les primitives sont aussi solides que prévu).
Bien sûr, un adversaire ignorant la clé ne doit avoir aucun moyen de rétablir le code d'intégrité d'un message qu'il a altéré, sinon c'est une perte de temps : le code d'intégrité est un outil cryptographique, et non un détecteur d'erreurs sur le média.
Le code d'intégrité ne remplace
pas les codes FEC/CRC qui servent à corriger et détecter les erreurs. La couche de codage/décodage correspondant au média doit évidemment utiliser ces codages contre les perturbations électromagnétiques. La couche cryptographique intervient seulement quand les simples erreurs de transmission ont été corrigées ou éliminées (les trames non récupérables par la correction d'erreurs sont ignorées).