<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://xinux.net/index.php?action=history&amp;feed=atom&amp;title=PMKID-Angriff</id>
	<title>PMKID-Angriff - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://xinux.net/index.php?action=history&amp;feed=atom&amp;title=PMKID-Angriff"/>
	<link rel="alternate" type="text/html" href="https://xinux.net/index.php?title=PMKID-Angriff&amp;action=history"/>
	<updated>2026-08-23T23:21:52Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://xinux.net/index.php?title=PMKID-Angriff&amp;diff=72702&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „=Grundidee= ;Beim 4-Wege-Handshake mussten wir Nachricht 2 des Clients mitschneiden und über den KCK die MIC nachrechnen. Beim PMKID-Angriff geht es kürzer:…“</title>
		<link rel="alternate" type="text/html" href="https://xinux.net/index.php?title=PMKID-Angriff&amp;diff=72702&amp;oldid=prev"/>
		<updated>2026-08-14T12:08:58Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „=Grundidee= ;Beim 4-Wege-Handshake mussten wir Nachricht 2 des Clients mitschneiden und über den KCK die MIC nachrechnen. Beim PMKID-Angriff geht es kürzer:…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Grundidee=&lt;br /&gt;
;Beim 4-Wege-Handshake mussten wir Nachricht 2 des Clients mitschneiden und über den KCK die MIC nachrechnen. Beim PMKID-Angriff geht es kürzer: Der Access Point liefert den &amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PMKID&amp;lt;/span&amp;gt; freiwillig schon in der ersten Handshake-Nachricht (&amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;M1&amp;lt;/span&amp;gt;) – noch bevor sich ein Client vollständig verbunden hat.&lt;br /&gt;
;Der PMKID wird direkt aus dem &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;PMK&amp;lt;/span&amp;gt; gebildet. Und der PMK ist – genau wie beim Handshake – nur aus &amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt; und &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;SSID&amp;lt;/span&amp;gt; abgeleitet. Die einzige Unbekannte bleibt also wieder der &amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt;.&lt;br /&gt;
;Wir setzen nacheinander Passwörter als &amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt; ein, rechnen den PMKID nach und vergleichen ihn mit dem mitgeschnittenen. Passt er, ist das Passwort gefunden.&lt;br /&gt;
&lt;br /&gt;
=Einleitung=&lt;br /&gt;
*Der PMKID-Angriff wurde 2018 von Jens &amp;quot;atom&amp;quot; Steube (Entwickler von hashcat) veröffentlicht und quasi durch Zufall beim Untersuchen des 802.11r-Roamings entdeckt.&lt;br /&gt;
*Der entscheidende Unterschied zum klassischen Handshake-Angriff liegt nicht im Cracken, sondern im '''Mitschneiden''': Man braucht keinen verbundenen Client und keinen Deauth mehr.&lt;br /&gt;
*Kernziel dieses Artikels ist zu zeigen, dass hinter dem PMKID dieselbe Rechenkette steckt wie beim 4-Wege-Handshake – nur deutlich kürzer.&lt;br /&gt;
&lt;br /&gt;
=Begriffe=&lt;br /&gt;
==PSK==&lt;br /&gt;
*Preshared Key : gemeinsamer Schlüssel (das WLAN-Passwort) – die einzige Unbekannte.&lt;br /&gt;
==SSID==&lt;br /&gt;
*Service Set Identifier : Name des WLAN-Netzwerkes.&lt;br /&gt;
==PMK==&lt;br /&gt;
*Pairwise Master Key : Mehrfachanwendung einer Hashfunktion (SHA1 / 4096 Durchgänge) auf &amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt; und SSID. '''Exakt derselbe Wert wie beim 4-Wege-Handshake.'''&lt;br /&gt;
==PMKID==&lt;br /&gt;
*Pairwise Master Key Identifier : eindeutige Kennung für einen zwischengespeicherten PMK. Eigentlich fürs schnelle Roaming gedacht (PMK-Caching / 802.11r), damit sich ein Client bei einem AP-Wechsel nicht komplett neu authentifizieren muss.&lt;br /&gt;
==PMK Name==&lt;br /&gt;
*Feste ASCII-Zeichenkette &amp;quot;PMK Name&amp;quot; (8 Byte). Geht als Konstante in die Berechnung ein – überall gleich, also bekannt.&lt;br /&gt;
==Association Request==&lt;br /&gt;
*Anmelde-Anfrage einer Station beim AP. Unterstützt der AP PMKID-Caching, antwortet er mit einem &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;M1&amp;lt;/span&amp;gt;, das das PMKID-Feld enthält.&lt;br /&gt;
==M1 (erste EAPOL-Nachricht)==&lt;br /&gt;
*Erste Nachricht des 4-Wege-Handshakes (AP → Client). Enthält im RSN-Element optional den PMKID. Für den Angriff reicht diese eine Nachricht.&lt;br /&gt;
&lt;br /&gt;
=Wo steckt der PMKID?=&lt;br /&gt;
[[Datei:pmkid-m1.svg|800px]]&lt;br /&gt;
;Der PMKID sitzt im RSN-Element der ersten EAPOL-Nachricht (&amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;M1&amp;lt;/span&amp;gt;), die der AP verschickt. Er ist '''optional''' – der AP füllt das Feld nur, wenn er PMKID-Caching unterstützt. Genau deshalb funktioniert der Angriff nicht gegen jeden AP.&lt;br /&gt;
&lt;br /&gt;
=Berechnungen=&lt;br /&gt;
==PMK==&lt;br /&gt;
;Verfahren ist bekannt – einzige Unbekannte ist der &amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt;. Identisch zum Handshake-Artikel.&lt;br /&gt;
*PMK = HASH(&amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt; | &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;SSID&amp;lt;/span&amp;gt;)   (PBKDF2-HMAC-SHA1, 4096 Runden, 256 Bit)&lt;br /&gt;
&lt;br /&gt;
==PMKID==&lt;br /&gt;
;Der PMKID ist ein HMAC-SHA1 über eine feste Konstante und zwei MAC-Adressen – mit dem PMK als Schlüssel. Es werden die ersten 128 Bit verwendet.&lt;br /&gt;
*PMKID = HMAC-SHA1( &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;PMK&amp;lt;/span&amp;gt; , &amp;quot;&amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;PMK Name&amp;lt;/span&amp;gt;&amp;quot; + &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;MAC-AP&amp;lt;/span&amp;gt; + &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;MAC-CLIENT&amp;lt;/span&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
'''Alles was &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;grün&amp;lt;/span&amp;gt; ist, ist bekannt oder mitgeschnitten:'''&lt;br /&gt;
*&amp;quot;PMK Name&amp;quot; = feste Konstante → bekannt&lt;br /&gt;
*MAC-AP = BSSID des Access Points → mitgeschnitten&lt;br /&gt;
*MAC-CLIENT = eigene MAC (die des Angreifers) → bekannt&lt;br /&gt;
*PMKID = aus M1 → mitgeschnitten&lt;br /&gt;
&lt;br /&gt;
;Nur der &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;PMK&amp;lt;/span&amp;gt; ist unbekannt – und der hängt allein am &amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Iterationsformel=&lt;br /&gt;
;Alles in eine Formel eingesetzt. Nur der &amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt; ist unbekannt:&lt;br /&gt;
*PMKID = HMAC-SHA1( HASH(&amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt; | &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;SSID&amp;lt;/span&amp;gt;) , &amp;quot;&amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;PMK Name&amp;lt;/span&amp;gt;&amp;quot; + &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;MAC-AP&amp;lt;/span&amp;gt; + &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;MAC-CLIENT&amp;lt;/span&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
;Zum Vergleich die Handshake-Formel:&lt;br /&gt;
*MIC = HMAC-SHA1( ⌊HASH( HASH(&amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt;|&amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;SSID&amp;lt;/span&amp;gt;) + &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;NONCE-A&amp;lt;/span&amp;gt; + &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;NONCE-S&amp;lt;/span&amp;gt; + &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;MAC-AP&amp;lt;/span&amp;gt; + &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;MAC-CLIENT&amp;lt;/span&amp;gt; )⌋&amp;lt;sub&amp;gt;128&amp;lt;/sub&amp;gt; , &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;2. EAPOL-Frame&amp;lt;/span&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
;Man sieht direkt: Beim PMKID fallen '''beide Nonces''' und der '''ganze EAPOL-Frame''' weg. Kürzere Formel, weniger mitzuschneiden – aber der teure PBKDF2-Teil (HASH(PSK|SSID), 4096 Runden) steht in beiden drin.&lt;br /&gt;
&lt;br /&gt;
=Angriff (Ablauf)=&lt;br /&gt;
;Alles außer dem &amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt; haben wir. Jetzt iterieren wir:&lt;br /&gt;
*Association Request an den Ziel-AP senden&lt;br /&gt;
*AP antwortet mit &amp;lt;span style=&amp;quot;color:#008000;&amp;quot;&amp;gt;M1&amp;lt;/span&amp;gt; inkl. PMKID (falls er es unterstützt)&lt;br /&gt;
*PMKID, BSSID, Client-MAC und SSID mitschneiden&lt;br /&gt;
*Passwort aus der Liste als &amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;PSK&amp;lt;/span&amp;gt; einsetzen&lt;br /&gt;
*PMKID berechnen (nach der Formel oben)&lt;br /&gt;
*berechneten PMKID mit dem mitgeschnittenen vergleichen&lt;br /&gt;
*gleich? → Passwort gefunden. Sonst → nächstes Passwort.&lt;br /&gt;
&lt;br /&gt;
=Vergleich zum 4-Wege-Handshake=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Merkmal !! 4-Wege-Handshake !! PMKID&lt;br /&gt;
|-&lt;br /&gt;
| Verbundener Client nötig || ja || '''nein'''&lt;br /&gt;
|-&lt;br /&gt;
| Deauth nötig || meist ja || '''nein'''&lt;br /&gt;
|-&lt;br /&gt;
| Nonces in der Rechnung || ja (NONCE-A, NONCE-S) || nein&lt;br /&gt;
|-&lt;br /&gt;
| EAPOL-Frame in der Rechnung || ja (2. Frame) || nein&lt;br /&gt;
|-&lt;br /&gt;
| Voraussetzung || Handshake muss stattfinden || AP muss PMKID mitsenden&lt;br /&gt;
|-&lt;br /&gt;
| Rechenaufwand pro Passwort || hoch (PBKDF2 4096) || '''gleich hoch''' (PBKDF2 4096)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;'''Wichtig:''' Das Cracken selbst ist '''nicht''' schneller. Der teure Teil ist der PMK (PBKDF2 mit 4096 Runden) – und der ist bei beiden Angriffen identisch. PMKID macht nur das Einsammeln leichter, nicht das Knacken.&lt;br /&gt;
&lt;br /&gt;
=Grenzen=&lt;br /&gt;
*Funktioniert nur, wenn der AP den PMKID im M1 mitsendet (PMKID-Caching). Viele APs tun das nicht.&lt;br /&gt;
*'''WPA3 / SAE ist immun''': Dort wird der PMK nicht mehr direkt per PBKDF2 aus dem PSK abgeleitet – den offline-angreifbaren Wert gibt es schlicht nicht mehr.&lt;br /&gt;
*Der Rechenaufwand pro Passwort bleibt unverändert. Lange, zufällige Passwörter bleiben praktisch sicher – die Länge und der Zeichenraum entscheiden, nicht der Angriffsweg.&lt;br /&gt;
&lt;br /&gt;
=Praxis=&lt;br /&gt;
;Der eigentliche Werkzeug-Ablauf steht im [[hcxdumptool|Kapitel zu hcxdumptool / hashcat]]. Kurzform:&lt;br /&gt;
*Mitschneiden: &amp;lt;code&amp;gt;hcxdumptool -i wlan0 -w dump.pcapng&amp;lt;/code&amp;gt;&lt;br /&gt;
*Umwandeln: &amp;lt;code&amp;gt;hcxpcapngtool -o hash.hc22000 dump.pcapng&amp;lt;/code&amp;gt;&lt;br /&gt;
*Cracken: &amp;lt;code&amp;gt;hashcat -m 22000 hash.hc22000 password.lst&amp;lt;/code&amp;gt;&lt;br /&gt;
;Im hashcat-Format (Mode 22000) hat der PMKID den Typ '''01''':&lt;br /&gt;
 WPA*01*&amp;lt;PMKID&amp;gt;*&amp;lt;MAC-AP&amp;gt;*&amp;lt;MAC-CLIENT&amp;gt;*&amp;lt;SSID hex&amp;gt;***&lt;br /&gt;
;(ein voller EAPOL-Handshake bekäme dagegen Typ 02).&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
*https://hashcat.net/forum/thread-7717.html&lt;br /&gt;
*https://github.com/ZerBea/hcxdumptool&lt;br /&gt;
*https://www.kali.org/tools/hcxtools/&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>