Wlan 4 Wege Handshake: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
=Begriffe=
+
=Grundidee=
==MAC==
+
;Beim 4-Wege-Handshake schickt der Client eine Nachricht mit einer Prüfsumme (MIC). Diese MIC kann nur bilden, wer das WLAN-Passwort (PSK) kennt.
*MAC-Adresse : Hardware-Adresse
+
;In der gesamten Berechnungskette ist alles bekannt oder mitschneidbar – bis auf eine einzige Unbekannte: den PSK.
==SSID==
+
;Wir setzen nacheinander Passwörter aus einer Liste als PSK ein, rechnen die MIC nach und vergleichen sie mit der mitgeschnittenen MIC. Passt sie, ist das Passwort gefunden.
*Service Set Identifier : Name des WLAN-Netzwerkes
+
 
==Supplicant==
+
=Was wir brauchen=
*WPA-Supplicant : Bittsteller im Normalfall der Client
+
==Extern ablesbar (aus dem Beacon)==
==Wlan Access-Point==
+
*SSID – Name des Netzes
*Wlan Access Point : drahtloser Zugangspunkt
+
*MAC ACCESSPOINT (BSSID)
==Nonce==
+
*MAC CLIENT
*Number Used Once : vorläufige Zeichenfolge, soll kurzfristig durch etwas Besseres ersetzt werden
+
*Kanal
==PSK==
+
 
*Preshared Key : Gemeinsamer Schlüssel
+
==Aus dem 4-Wege-Handshake mitschneiden==
==PMK==
+
;Jede Handshake-Nachricht ist ein EAPOL-Frame (ein Paket). Für den Angriff schneiden wir '''Nachricht 2''' (Client → AP) mit. Darin steckt:
*Pairwise Master Key : Mehrfachanwendung einer Hashfunktion (z.B. SHA1 / 4096 Durchgänge) auf PSK und SSID
+
*<span style="color:#008000;">NONCE-A</span> – Zufallszahl des Access Points (aus Nachricht 1)
==PTK==
+
*<span style="color:#008000;">NONCE-S</span> – Zufallszahl des Clients (in Nachricht 2)
*Pairwise Transient Key : Sitzungsschlüssel, aus dem PMK und weiteren Werten abgeleitet
+
*<span style="color:#008000;">EAPOL-Frame</span> – der komplette Frame von Nachricht 2 (Bytes, über die die MIC gebildet wird)
*Er wird aus verschiedenen Komponenten abgeleitet:
+
*<span style="color:#c07000;">MIC</span> – die Prüfsumme im MIC-Feld dieses Frames → '''unser Vergleichswert'''
**PMK
 
**NONCE-A
 
**NONCE-S
 
**MAC ACCESSPOINT
 
**MAC CLIENT
 
*Besteht aus (bei CCMP/AES, heutiger Standard):
 
*Schlüsselbestätigungsschlüssel (`KCK`) Erzeugt die MIC (den Nachrichtenintegritätscode) der Handshake-Nachrichten. '''Genau dieser Wert wird beim Angriff nachgerechnet und verglichen.'''
 
*Key Encryption Key (`KEK`) - Verschlüsselt Schlüsseldaten im Handshake, z.B. den GTK in Nachricht 3.
 
*Temporaler Schlüssel (`TK`) - Wird für die Ver- und Entschlüsselung der Datenpakete verwendet.
 
  
 
=Vier Wege Handshake=
 
=Vier Wege Handshake=
[[Datei:handshake-4wege.svg|800px]]
+
[[Datei:wpa2-handshake-eapol.svg|800px]]
  
=Berechnungen=
+
=Wie die MIC entsteht=
 +
;Der Client leitet aus dem Passwort einen Sitzungsschlüssel (PTK) ab und bildet damit die MIC über den EAPOL-Frame.
 
==PMK==
 
==PMK==
;Verfahren ist bekannt - Einzige Unbekannte ist der PSK. Durch Bruteforce errechnen wir den PMK
+
*PMK = HASH( PSK | <span style="color:#008000;">SSID</span> )
*PMK = HASH(PSK | <span style="color:#008000;">SSID</span>)
 
 
==PTK==
 
==PTK==
;Verfahren ist bekannt - Einzige Unbekannte ist der PSK. Durch Bruteforce errechnen wir den PTK mit dem zuvor "gebruteforced" PMK
+
*PTK = HASH( PMK + <span style="color:#008000;">NONCE-A</span> + <span style="color:#008000;">NONCE-S</span> + <span style="color:#008000;">MAC-AP</span> + <span style="color:#008000;">MAC-CLIENT</span> )
*PTK = HASH(PMK + <span style="color:#008000;">NONCE-A</span> + <span style="color:#008000;">NONCE-S</span> + <span style="color:#008000;">MAC ACCESSPOINT</span> + <span style="color:#008000;">MAC CLIENT</span>)
+
==KCK==
;Einsetzverfahren
+
*KCK = die ersten 128 Bit des PTK
*PTK = HASH(HASH(PSK | <span style="color:#008000;">SSID</span>) + <span style="color:#008000;">NONCE-A</span> + <span style="color:#008000;">NONCE-S</span> + <span style="color:#008000;">MAC ACCESSPOINT</span> + <span style="color:#008000;">MAC CLIENT</span>)
+
==MIC==
*Ergebnis ist ein 384Bit langer Container
+
*MIC = HMAC-SHA1( KCK , <span style="color:#008000;">EAPOL-Frame</span> )
*PTK = KCK + KEK + TK
+
;Hinweis: Beim Bilden der MIC ist das MIC-Feld im Frame auf Null gesetzt. Zum Nachprüfen zieht man die mitgeschnittene MIC heraus, setzt das Feld wieder auf Null und rechnet neu.
{| class="wikitable"
 
!colspan="3"|PTK
 
|-
 
|<span style="color:#c07000;">'''KCK'''</span>
 
|KEK
 
|TK
 
|-
 
|128Bit
 
|128Bit
 
|128Bit
 
|}
 
*MIC=FUNCTION(KEC)
 
 
 
'''Alles was <span style="color:#008000;">grün</span> ist, ist bekannt.'''
 
;Der <span style="color:#c07000;">KCK</span> (erste 128 Bit) erzeugt die Handshake-MIC – das ist der Wert, um den es beim Angriff geht.
 
 
 
=Ziel=
 
;Wir wollen durch Iteration herausbekommen, welcher PSK die mitgeschnittene MIC erzeugt. Die MIC ist das Key-MIC-Feld aus dem EAPOL-Frame des Handshakes und wird mit dem KCK gebildet. Stimmt unsere berechnete MIC mit der mitgeschnittenen überein, haben wir den PSK "gebruteforced".
 
  
=Angriff=
+
=Einsetzverfahren=
==Wir brauchen==
+
;Wir setzen alle Schritte ineinander ein. Übrig bleibt eine Formel mit nur einer Unbekannten – dem PSK:
===Zum Bilden des PTK===
+
*<span style="color:#c07000;">MIC</span> = HMAC-SHA1( KCK( HASH( HASH( PSK | <span style="color:#008000;">SSID</span> ) + <span style="color:#008000;">NONCE-A</span> + <span style="color:#008000;">NONCE-S</span> + <span style="color:#008000;">MAC-AP</span> + <span style="color:#008000;">MAC-CLIENT</span> ) ) , <span style="color:#008000;">EAPOL-Frame</span> )
*CHANNEL (Ablesen)
+
;<span style="color:#008000;">Grün</span> = bekannt / mitgeschnitten. Nur '''PSK''' ist unbekannt.
*SSID (Ablesen)
 
*MAC Client (Ablesen)
 
*BSSID - MAC Accesspoint (Ablesen)
 
*NONCE-A (Mitschneiden)
 
*NONCE-S (Mitschneiden)
 
===Zum Vergleichen===
 
*EAPOL-Frame des Handshakes (Mitschneiden) – meist Nachricht 2
 
*Key-MIC aus diesem Frame (Mitschneiden)
 
  
=Berechnen=
+
=Angriff (Iteration)=
;Wir holen nun nacheinander die Passwörter aus einer Datei und setzen diese in PSK-geraten ein
+
;Wir gehen eine Passwortliste durch und setzen jedes Passwort als PSK-geraten ein:
*Aus dem PSK-geraten und der SSID bilden wir den PMK-geraten
+
*PSK-geraten + <span style="color:#008000;">SSID</span> → PMK-geraten
*Aus dem PMK-geraten bilden wir mit NONCE-A, NONCE-S, MAC ACCESSPOINT und MAC CLIENT den PTK-geraten
+
*PMK-geraten + <span style="color:#008000;">NONCE-A</span> + <span style="color:#008000;">NONCE-S</span> + <span style="color:#008000;">MAC-AP</span> + <span style="color:#008000;">MAC-CLIENT</span> → PTK-geraten
*Aus dem PTK-geraten nehmen wir den KCK (die ersten 128 Bit)
+
*aus PTK-geraten KCK-geraten (erste 128 Bit)
*Mit dem KCK berechnen wir die MIC-geraten über den mitgeschnittenen EAPOL-Frame (HMAC-SHA1 bei WPA2)
+
*HMAC-SHA1( KCK-geraten , <span style="color:#008000;">EAPOL-Frame</span> ) → <span style="color:#c07000;">MIC-geraten</span>
*Stimmt die MIC-geraten mit der mitgeschnittenen MIC überein, ist der PSK erraten
+
*<span style="color:#c07000;">MIC-geraten</span> = <span style="color:#c07000;">MIC-mitgeschnitten</span> ?  → '''ja: Passwort gefunden''' / nein: nächstes Passwort
  
 
=Links=
 
=Links=

Version vom 13. August 2026, 16:50 Uhr

Grundidee

Beim 4-Wege-Handshake schickt der Client eine Nachricht mit einer Prüfsumme (MIC). Diese MIC kann nur bilden, wer das WLAN-Passwort (PSK) kennt.
In der gesamten Berechnungskette ist alles bekannt oder mitschneidbar – bis auf eine einzige Unbekannte
den PSK.
Wir setzen nacheinander Passwörter aus einer Liste als PSK ein, rechnen die MIC nach und vergleichen sie mit der mitgeschnittenen MIC. Passt sie, ist das Passwort gefunden.

Was wir brauchen

Extern ablesbar (aus dem Beacon)

  • SSID – Name des Netzes
  • MAC ACCESSPOINT (BSSID)
  • MAC CLIENT
  • Kanal

Aus dem 4-Wege-Handshake mitschneiden

Jede Handshake-Nachricht ist ein EAPOL-Frame (ein Paket). Für den Angriff schneiden wir Nachricht 2 (Client → AP) mit. Darin steckt
  • NONCE-A – Zufallszahl des Access Points (aus Nachricht 1)
  • NONCE-S – Zufallszahl des Clients (in Nachricht 2)
  • EAPOL-Frame – der komplette Frame von Nachricht 2 (Bytes, über die die MIC gebildet wird)
  • MIC – die Prüfsumme im MIC-Feld dieses Frames → unser Vergleichswert

Vier Wege Handshake

Wpa2-handshake-eapol.svg

Wie die MIC entsteht

Der Client leitet aus dem Passwort einen Sitzungsschlüssel (PTK) ab und bildet damit die MIC über den EAPOL-Frame.

PMK

  • PMK = HASH( PSK | SSID )

PTK

  • PTK = HASH( PMK + NONCE-A + NONCE-S + MAC-AP + MAC-CLIENT )

KCK

  • KCK = die ersten 128 Bit des PTK

MIC

  • MIC = HMAC-SHA1( KCK , EAPOL-Frame )
Hinweis
Beim Bilden der MIC ist das MIC-Feld im Frame auf Null gesetzt. Zum Nachprüfen zieht man die mitgeschnittene MIC heraus, setzt das Feld wieder auf Null und rechnet neu.

Einsetzverfahren

Wir setzen alle Schritte ineinander ein. Übrig bleibt eine Formel mit nur einer Unbekannten – dem PSK
  • MIC = HMAC-SHA1( KCK( HASH( HASH( PSK | SSID ) + NONCE-A + NONCE-S + MAC-AP + MAC-CLIENT ) ) , EAPOL-Frame )
Grün = bekannt / mitgeschnitten. Nur PSK ist unbekannt.

Angriff (Iteration)

Wir gehen eine Passwortliste durch und setzen jedes Passwort als PSK-geraten ein
  • PSK-geraten + SSID → PMK-geraten
  • PMK-geraten + NONCE-A + NONCE-S + MAC-AP + MAC-CLIENT → PTK-geraten
  • aus PTK-geraten → KCK-geraten (erste 128 Bit)
  • HMAC-SHA1( KCK-geraten , EAPOL-Frame ) → MIC-geraten
  • MIC-geraten = MIC-mitgeschnitten ? → ja: Passwort gefunden / nein: nächstes Passwort

Links