WPA2 en WPA3
WPA2
De finale oplossing voor het WEP-veiligheidsprobleem werd gegoten in WPA2 (de certificering op basis van de IEEE 802.11i standaard), waarvan AES het hart vormt. Toen de standaard werd ontwikkeld was AES net verschenen en het bleek de ideale keuze. Anders dan bij RC4 in WEP kan AES in counter mode elk pakket los van de andere ontcijferen (met een eigen tellerwaarde per pakket), wat perfect past bij een datagramnetwerk waar geregeld pakketjes verloren gaan.
WPA2 combineert twee toepassingen van AES, samen CCMP genoemd (Counter Mode Cipher Block Chaining Message Authentication Code Protocol):
- AES in counter mode voor de encryptie.
- AES in CBC-MAC mode voor integriteit en authenticatie.
Beide modes ken je al uit het hoofdstuk over blockciphers. Even opfrissen in de context van wifi:
- De counter mode encrypteert de payload. Zoals we bij de blockciphers zagen, encrypteert AES hier niet de data zelf, maar een teller, en het resultaat wordt ge-XOR’d met de data. Die teller krijgt als startwaarde onder andere een 48-bit packet number (PN): een uniek nummer per pakket dat bij ieder frame met 1 verhoogt. Het PN doet dus dienst als de nonce/IV van WPA2 én meteen als replay protection (een pakket met een al gezien PN wordt geweigerd).
- CBC-MAC berekent de integriteitscheck. Zoals we uit het crypto-hoofdstuk weten, start CBC een keten van encrypties waarbij ieder blok mee-XOR’t met de uitkomst van het vorige. Het finale blok van die keten is de MIC. Bij de minste bitfout in payload of header rolt er een totaal andere MIC uit. Belangrijk: de header wordt niét geëncrypteerd, maar wél meegenomen in de MIC-berekening.
Er blijft één belangrijk verschil tussen enterprise en personal mode. In personal mode deelt iedereen op het netwerk hetzelfde wachtwoord. Iedereen leidt daaruit dezelfde hoofdsleutel (de PMK) af, en dat betekent dat wie het wachtwoord kent (en de handshake van een ander heeft opgevangen) ook de trafiek van die andere gebruikers kan decrypteren. In enterprise mode heeft iedere gebruiker z’n eigen sleutels en is dat onmogelijk. Meer daarover in het subhoofdstuk over 802.1X.
De 4-way handshake
Voordat er ook maar één datapakket versleuteld wordt, moeten client en AP het eens worden over de sleutels. Dat gebeurt met de beroemde 4-way handshake. Je hoeft de details niet uit het hoofd te kennen, maar de grote lijn is belangrijk, want net hier ging het in 2017 mis.
Het startpunt is een gedeeld geheim dat client en AP allebei al kennen: de Pairwise Master Key (PMK). In personal mode wordt die uit het wifi-wachtwoord (de PSK) en de netwerknaam (de SSID) afgeleid; in enterprise mode komt hij uit de 802.1X-authenticatie. De PMK zelf wordt nooit rechtstreeks gebruikt om data te versleutelen. In de plaats leidt de handshake er een verse sessiesleutel uit af, de Pairwise Transient Key (PTK):
- Bericht 1 (AP → client): het AP stuurt een willekeurig getal, de ANonce.
- Bericht 2 (client → AP): de client heeft nu alles wat hij nodig heeft (de PMK, de ANonce, zijn eigen willekeurige SNonce en beide MAC-adressen) en berekent daaruit de PTK. Hij stuurt zijn SNonce terug, samen met een MIC zodat het AP kan controleren dat de client dezelfde PMK gebruikt.
- Bericht 3 (AP → client): het AP berekent nu zelf ook de PTK en bevestigt. In dit bericht zit ook de groepssleutel (GTK) voor broadcast- en multicasttrafiek.
- Bericht 4 (client → AP): de client bevestigt de ontvangst. Pas nu installeert hij de PTK en begint het versleutelen van data.
Twee nonces die aan beide kanten in de sleutelafleiding zitten, zorgen ervoor dat iedere sessie een andere PTK oplevert, ook al blijft het wachtwoord hetzelfde. En omdat een aanvaller de PMK niet kent, kan hij de PTK niet zelf berekenen. Tot 2017 leek dit waterdicht.
Waarom is WPA2-Personal dan toch te kraken? Een aanvaller die de handshake opvangt, kan die niet rechtstreeks lezen, maar hij kan wél offline wachtwoorden uitproberen: voor elk kandidaatwachtwoord leidt hij een PMK af, dan de PTK, en controleert of de MIC uit bericht 2 klopt. Klopt ze, dan heeft hij het wachtwoord. Dit is een klassieke offline dictionary-aanval, precies zoals bij gehashte wachtwoorden in het hoofdstuk over wachtwoordopslag. Ze bestond dus altijd al, ook toen WPA2 als veilig gold, en het enige verweer is een lang, willekeurig wachtwoord. In 2018 vond Jens Steube (de maker van hashcat) bovendien de PMKID-aanval: bij veel routers kan een aanvaller het benodigde materiaal rechtstreeks uit één enkel bericht van het AP halen, zonder dat er ook maar één client verbonden hoeft te zijn. Hij hoeft dus niet langer geduldig op een handshake te wachten.
KRACK: WEP komt terug spoken
AES zelf bleef een rots in de branding, en dat is nog steeds zo. Maar in oktober 2017 publiceerde de Belgische onderzoeker Mathy Vanhoef (toen aan de KU Leuven) samen met Frank Piessens de KRACK-aanval (Key Reinstallation Attack), op de ACM CCS-conferentie en op krackattacks.com. De fout zat niet in AES, maar in de 4-way handshake.
Herinner je dat de client de sleutel pas installeert bij bericht 4. Wat als bericht 4 verloren gaat? Dan hoort het AP niets terug en stuurt het bericht 3 gewoon opnieuw. De client herinstalleert dan de sleutel. Dat is normaal, want draadloos gaan er nu eenmaal pakketjes verloren.
Maar hier zit het venijn. Bij het installeren van de sleutel worden ook de teller (het packet number, de nonce voor AES-CTR) en de replay-teller teruggezet op hun beginwaarde. Een aanvaller die zich als man-in-the-middle tussen client en AP plaatst, kan bericht 3 opzettelijk vasthouden en op het juiste moment opnieuw afspelen. De client herinstalleert dan dezelfde sleutel én reset zijn teller. Vanaf dat moment gebruikt de client dezelfde sleutel met nonces die al eens gebruikt zijn.
En daar is onze oude bekende weer. Dezelfde sleutel plus dezelfde nonce geeft dezelfde keystream, en die keystream wordt nu over twee verschillende pakketjes gelegd. Dat is exact het probleem waaraan WEP ten onder ging (zie probleem 1), alleen zit het nu niet in RC4 maar in AES in counter mode. Het cipher is dus niet stuk; het is de sleutel-installatie die dezelfde fatale fout opnieuw introduceert. Wie de keystream reconstrueert, kan pakketjes decrypteren en (afhankelijk van de situatie) ook injecteren.
Dit is de rode draad van dit hele hoofdstuk. De les van WEP was nooit “RC4 is slecht”, maar “hergebruik nooit een keystream”. Twintig jaar later dook diezelfde fout op in het veel modernere WPA2, met een veel beter cipher. Een sterk algoritme kiezen is niet genoeg; je moet het ook correct gebruiken.
Bij sommige clients was de schade nog groter. Android 6+ en de Linux-tool wpa_supplicant installeerden bij een herhaalde bericht 3 zelfs een sleutel van allemaal nullen, waardoor de trafiek gewoon leesbaar werd.
Anders dan bij WEP was KRACK gewoon patchbaar, en zelfs op een backwards-compatibele manier: een gepatchte client praat nog vlot met een niet-gepatcht AP en omgekeerd. WPA3 is dus niet ontstaan als noodreactie op KRACK; de Wifi Alliance werkte er al aan en kondigde het in 2018 aan. Wel toonde KRACK dat het protocol zelf beter kon, en WPA3 pakt de handshake fundamenteel anders aan.
Een lek zoals KRACK vereist een snelle reactie van de vendors: hoe sneller de patch, hoe sneller het lek gedicht is. Maar wat als je een wifi-kaart hebt die al jaren oud is en waarvan de fabrikant misschien niet meer bestaat? Dit probleem zien we geregeld opduiken, en het wordt nog groter wanneer we beseffen dat ook de interne chips soms gepatcht moeten worden. In het hoofdstuk rond IoT Security gaan we hier dieper op in.
WPA3
In 2018 kondigde de Wifi Alliance de opvolger aan: WPA3. Sinds 1 juli 2020 is WPA3-ondersteuning zelfs verplicht voor elk toestel dat het “Wi-Fi CERTIFIED”-label wil dragen.
Je hoort weleens dat “WPA3 hetzelfde is als Wifi 6”. Dat klopt niet. Wifi 6 is een marketingnaam voor de snelheidsstandaard IEEE 802.11ax; het gaat over doorvoer en radiotechniek. WPA3 is een beveiligingscertificering en staat daar los van. Ze worden vaak in één adem genoemd omdat de Wifi Alliance WPA3-ondersteuning verplicht maakte voor Wifi 6-certificatie, maar het zijn twee verschillende dingen.
De belangrijkste verbeteringen:
SAE (Dragonfly): een betere personal mode
De grootste vernieuwing zit in personal mode. In plaats van de PMK rechtstreeks uit het wachtwoord af te leiden (waardoor de offline dictionary-aanval mogelijk was), gebruikt WPA3 SAE (Simultaneous Authentication of Equals), gebaseerd op het Dragonfly-handshakeprotocol.
De kern is eenvoudig uit te leggen als je de Diffie-Hellman-sleuteluitwisseling uit het crypto-hoofdstuk kent. Bij SAE mengen client en AP het wachtwoord in een Diffie-Hellman-achtige uitwisseling. Twee gevolgen:
- De aanvaller die de uitwisseling opvangt, kan er geen offline dictionary-aanval meer op loslaten. Wil hij een wachtwoord testen, dan moet hij dat online doen: telkens opnieuw effectief proberen verbinden. Na een paar foute pogingen kan het AP hem blokkeren. Een zwak wachtwoord blijft riskant, maar het “capteer één handshake en kraak thuis miljarden pogingen per seconde”-scenario is dicht.
- Elke sessie levert een verse sleutel op die niet uit het wachtwoord alleen te herberekenen is. Dat geeft forward secrecy: zelfs als een aanvaller vandaag jouw trafiek opneemt én later het wachtwoord te weten komt, kan hij die oude trafiek niet meer ontcijferen. Het aloude “store now, decrypt later” werkt dus niet tegen WPA3.
De eerste versie van SAE (hunting-and-pecking) bleek zelf een timing-zwakte te hebben (zie Dragonblood hieronder). De verbeterde variant hash-to-element (H2E) lost dat op en is verplicht in de 6 GHz-band.
Protected Management Frames verplicht
WPA3 maakt 802.11w / Protected Management Frames verplicht (zie het subhoofdstuk over de problemen van wifi). De klassieke deauthentication-flood, waarmee een aanvaller je zomaar van het netwerk kon schoppen, werkt daardoor niet meer op een WPA3-netwerk.
Enhanced Open (OWE)
Voor publieke hotspots (het café, de luchthaven) bestaat er Enhanced Open, gebaseerd op Opportunistic Wireless Encryption (OWE). Let op: dit is technisch een aparte certificering, geen onderdeel van WPA3 zelf, ook al worden ze samen uitgerold. Het netwerk blijft “open” (je hoeft geen wachtwoord in te tikken), maar client en AP spreken via een Diffie-Hellman-uitwisseling toch per verbinding een aparte sleutel af. Gedaan dus met je in de Starbucks zetten om de trafiek van omstaanders te sniffen. Wat Enhanced Open niét doet, is het AP authenticeren: een fake access point (evil twin) blijft mogelijk.
6 GHz en transition mode
Omdat er altijd oude toestellen zijn die enkel WPA2 kennen, draaien veel netwerken in transition mode: het AP biedt WPA2 én WPA3 tegelijk aan op dezelfde SSID. Handig, maar een aanvaller kan een toestel dan naar de zwakkere WPA2-modus downgraden. In de nieuwe 6 GHz-band (Wifi 6E en Wifi 7) is dat probleem in één klap opgelost: daar is enkel WPA3 (of Enhanced Open) toegelaten, en transition mode wordt er niet gebruikt. WEP, WPA1, WPA2 en open netwerken zijn er simpelweg verboden.
De Belgische saga gaat verder: Vanhoef na KRACK
KRACK was niet het eindpunt. Mathy Vanhoef bleef gaten prikken, ook in WPA3. Drie vervolgcases zijn de moeite waard, al was het maar om te tonen dat “de nieuwste standaard” niet gelijk is aan “onbreekbaar”.
Dragonblood (2019). Samen met Eyal Ronen ontdekte Vanhoef een reeks fouten in de SAE-handshake van WPA3, gepubliceerd in april 2019 (en gepresenteerd op IEEE S&P 2020). De belangrijkste: een downgrade-aanval in transition mode (het toestel terugduwen naar WPA2), en vooral side-channel-aanvallen. De eerste SAE-implementatie (hunting-and-pecking) verraadde via de duur en het geheugengebruik van de berekening informatie over het wachtwoord. Daarmee werd de offline dictionary-aanval, die SAE net moest tegenhouden, deels weer mogelijk: de onderzoekers schreven dat minder dan 1 dollar aan rekenkracht volstond om de grootste bekende woordenlijsten af te lopen. De naam is een knipoog naar KRACK en het Dragonfly-protocol. Bron: wpa3.mathyvanhoef.com.
FragAttacks (2021). Een verzameling fouten in fragmentatie en aggregatie van wifi-frames, gepubliceerd in mei 2021 (USENIX Security 2021). Een deel zijn ontwerpfouten die al sinds 1997 in wifi zitten, dus in WEP, WPA1, WPA2 én WPA3. Bij de aggregation attack misbruikt de aanvaller dat één vlaggetje in de frameheader (“dit frame is samengesteld”) niet mee beveiligd is: door dat te flippen kan hij een slachtoffer misleiden en zo eigen pakketjes injecteren, bijvoorbeeld om het naar een kwaadaardige DNS-server te sturen. Vanhoef benadrukte dat de ontwerpfouten moeilijk te misbruiken zijn (ze vragen gebruikersinteractie of ongewone instellingen), maar dat de bijkomende implementatiefouten in concrete producten vaak triviaal uit te buiten zijn, en dat is de grootste zorg. Bron: fragattacks.com.
SSID Confusion (2024). Samen met Héloïse Gollier toonde Vanhoef in 2024 (WiSec ’24, CVE-2023-52424) dat de netwerknaam (SSID) niet altijd mee geauthenticeerd wordt bij het verbinden. Bij WPA2/WPA3-Personal zit de SSID nog in de sleutelafleiding, maar bij enkele veelgebruikte scenario’s (waaronder enterprise-netwerken die dezelfde inloggegevens delen, zoals eduroam en de eduroam-netwerken van andere instellingen, of een netwerk dat op de 2.4 en 5 GHz-band een andere naam draagt) kan een aanvaller een slachtoffer laten verbinden met een ander netwerk dan het toont. Op je scherm staat “TrustedNet”, maar je hangt aan “WrongNet”. Dat is gevaarlijk omdat toestellen (en bijvoorbeeld VPN’s die zichzelf uitschakelen op een “vertrouwd” netwerk) beslissingen nemen op basis van die netwerknaam. Het verweer: beacon protection (verplicht sinds Wifi 7) en de SSID altijd mee in de sleutelafleiding stoppen. Bron: het WiSec 2024 paper.
KRACK, Dragonblood, FragAttacks en SSID Confusion komen uit dezelfde Belgische onderzoekshoek. Iedere fout werd eerst vertrouwelijk aan de fabrikanten gemeld en pas publiek gemaakt toen er patches klaarstonden.
Samenvatting
Draadloze netwerken vervangen de fysieke beveiliging van een kabel door cryptografische beveiliging, en dat is een harde les geweest:
- WEP faalde op alle fronten: verkeerd gebruik van RC4, te korte IV (24 bit), een CRC die geen MAC is, en geen sleutelbeheer. De kernfout: dezelfde keystream werd hergebruikt.
- WPA1/TKIP was een softwarepatch op dezelfde RC4-hardware: langere teller, key mixing en Michael voor integriteit. Een tussenoplossing die intussen is afgevoerd.
- WPA2 bracht CCMP op basis van AES en werd jarenlang als veilig beschouwd. De 4-way handshake leidt per sessie een verse sleutel af uit een gedeelde PMK. In 2017 legde KRACK (Mathy Vanhoef) bloot dat je die handshake een sleutel kon laten herinstalleren, waardoor de nonce reset en de keystream hergebruikt werd: de fout van WEP in een nieuw jasje. Patchbaar, dat wel.
- WPA2-Personal is bovendien altijd al gevoelig geweest voor offline dictionary-aanvallen op de gesnifte handshake (en sinds 2018 zelfs zonder client, via de PMKID-aanval). Kies dus een lang, willekeurig wachtwoord.
- WPA3 pakt dit aan met SAE (offline dictionary-aanvallen worden online), forward secrecy, verplichte PMF, Enhanced Open voor publieke hotspots, en enkel WPA3 (of Enhanced Open) op de nieuwe 6 GHz-band.
- Het onderzoek stopt nooit: Dragonblood (2019), FragAttacks (2021) en SSID Confusion (2024) toonden dat ook WPA3 en het wifi-ontwerp zelf nog scherpe randjes hebben.
Kort samengevat voor de praktijk: kies WPA3 waar mogelijk, vermijd WEP en WPA1, gebruik in een bedrijfscontext enterprise-mode (het volgende subhoofdstuk), en hou je access points gepatcht.


