contributions
Se connecter avec
S'enregistrer | Connectez-vous

Comprendre le WPA/WPA2

WiFi : le WPA est-il sûr ?
Par

Hachage, salage et transformations

WPA/WPA2, WinZip, WinRAR, l’API de chiffrement de données Microsoft Data Encryption, Apple FileVault, TruCrypt et OpenOffice utilisent tous la fonction PBKDF2 (Password-Based Key Derivation Function 2.0). Son avantage ? Il ne suffit pas de posséder le mot de passe pour avoir accès à ce qu’il protège ; il faut également générer une clé (un code de déchiffrement) à partir de celui-ci.

Il s’agit de l’une des différences les plus critiques entre le WEP et le WPA. Le WEP ne masque pas votre mot de passe, ce qui constitue un risque énorme car les hackers peuvent l’extraire directement des paquets envoyés durant l’authentification. Il leur suffit donc de rester confortablement assis dans leur voiture, voire dans un centre commercial, pour pénétrer dans le réseau de leur choix : dès qu’ils ont suffisamment de paquets, en extraire la clé et se connecter au réseau est un jeu d’enfant. Le WPA est différent car le mot de passe est codé (« haché »), ce qui oblige les hackers à adopter un autre tactique : l’attaque par force brute.

Nous nous sommes récemment rendus compte qu’il existait chez beaucoup de nos lecteurs une certaine confusion concernant les concepts liés au chiffrement des connexions sans fil : rainbow tables, hachage, salage, transformations…

La conversion d’un mot de passe en clé de déchiffrement se fait essentiellement en deux parties. La première est le salage (salting en anglais). Il s’agit d’une méthode utilisée en cryptographie et destinée à éviter que deux système ayant le même mot de passe n’aient la même clé. Sans salage, deux machines utilisant le même mot de passe (même s’il s’agit d’une coïncidence) se retrouveraient avec la même clé, ce qui constituerait une faille de sécurité en raison de l’existence de « rainbow tables », d’énormes tableaux permettant de trouver énormément de mots de passe pour autant que l’on connaisse la clé. Le salage rend les rainbow tables à peu près inutiles car il ajoute à chaque mot de passe une valeur aléatoire avant de générer la clé. Cela fait également de la génération de la clé une fonction unidirectionnelle, car il est impossible de retrouver le mot de passe original à partir de la clé. Il arrive par exemple fréquemment que le SSID soit utilisé pour saler les mots de passe WPA ; par conséquent, même si votre voisin utilise le même mot de passe que vous, sa clé de chiffrement sera différente si son réseau a un nom différent.

PBKDF2 pousse les choses encore plus loin en faisant appel à une fonction de dérivation de clé (key derivation function ou KDF). L’idée est simple, mais sa mise en œuvre nécessite de bonnes connaissances en mathématiques. Elle se compose de deux étapes :

  1. Générer deux jeux de données (data1 et data2) à partir du mot de passe et du salage.
  2. Calculer la clé de chiffrement à l’aide d’une transformation en boucle qui ressemble à ce qui suit :

        for (int i=0; i<iteration_count; i++)
                {
                data1 = SHA1_Transform(data1, data2);
                data2 = SHA1_Transform(data2, data1);
                  }

Au départ, le mot de passe et le salage (les bits aléatoires) servent à générer le premier jeu de données, c’est-à-dire la clé de chiffrement non définitive. Celle-ci est ensuite continuellement hachée, de manière cyclique : chaque calcul repose sur le résultat du calcul précédent et la clé change donc en permanence. Cette opération est répétée plusieurs milliers de fois, jusqu’à obtention de la clé de chiffrement définitive. Étant donné qu’il est impossible d’inverser le processus, les hackers doivent effectuer une attaque par force brute pour recréer la clé à chaque tentative de saisie du mot de passe.

Cette suite de transformations représente 99 % du temps de traitement nécessaire lors d’une attaque par force brute ; les pirates se trouvent donc face à un véritable mur. Il existe malheureusement d’autres techniques, comme le hash cracking, qui permet d’essayer simultanément plusieurs mots de passe et est considérablement plus rapide car le processus de chiffrement ne fait appel ni à la fonction de dérivation de clé ni au salage, mais les attaques de ce type ont une portée bien plus limitée, dans la mesure où tout chiffrement réellement sécurisé emploie à la fois le salage et la fonction de dérivation de clé.

Pour vous donner une idée des différences d’échelles entre les diverses techniques de chiffrement utilisables, sachez que WinZip procède à 2002 transformations SHA-1 pour générer une clé. Cette valeur est constante quelle que soit la longueur du mot de passe, qui peut comporter jusqu’à 64 caractères, raison pour laquelle un mot de passe de 10 caractères est aussi facile à cracker en AES-256 qu’en AES-128. Le WPA, par contre, procède à 16 388 transformations pour transformer une clé primaire (master key ou MK) en clé PMK (Pairwise Master Key), ce qui rend les attaques par force brute huit fois plus longues qu’avec WinZip/AES.

Le WPA repose sur un mécanisme à clé pré-partagée (pre-shared key ou PSK) : l’utilisateur légitime saisit une clé primaire (via l’interface de configuration de son routeur et celle de sa carte WiFi), mais les pirates ne peuvent renifler que la clé PTK (Pairwise Transient Key) durant l’établissement de la connexion, appelée « four-way handshake ».

L’authentification repose quant à elle sur la dérivation de la clé PTK au départ de la clé PMK, elle-même dérivée de la clé primaire (MK). Il faut cinq ou six transformations supplémentaires pour passer de la clé PMK à la clé PTK, mais on représente généralement les vitesses de crackage de clé WPA en clés PMK par seconde car il s’agit de la portion la plus lourde de l’attaque par force brute.