Sie haben eine gute Frage gestellt. Die Frage scheint sehr einfach zu sein, aber tatsächlich ist die Antwort etwas komplexer. Ich werde mein Bestes tun, um es kurz und bündig zu beantworten. Da Sie ISAKMP erwähnt haben, gehe ich davon aus, dass Sie an IKEv1 interessiert sind. Für IKEv2 ändern sich die Dinge ein wenig (na ja, sehr viel), aber ich wollte erwähnen, dass die folgende Antwort nur mit IKEv1 korreliert.
Phase 1 kann in zwei verschiedenen Mods durchgeführt werden: Hauptmodus und Aggressivmodus. In beiden Modi wird die erste Nachricht vom Initiator und die zweite Nachricht vom Responder gesendet. Beide Nachrichten enthalten das, was in der Kryptografiewelt als Nonce bekannt ist . Ein Nonce ist einfach eine zufällig generierte Zahl, die bei der Schlüsselgenerierung verwendet wird. (Der Begriff Nonce stammt von _N_umber used _Once_) . Nach Nachricht 1 und Nachricht 2 kennen beide Seiten die Nonces des anderen.
Die Nonces werden mit dem Pre-Shared-Key kombiniert, um einen Seed-Wert zum Generieren geheimer Schlüssel zu erstellen. Der relative Teil des IKE RFC ist hier:
For pre-shared keys: SKEYID = prf(pre-shared-key, Ni_b | Nr_b)
SKEYID ist der Seed-Wert, der später zum Generieren zusätzlicher geheimer Schlüssel verwendet wird. Der Pre-Shared-Key und beide Nonce-Werte (Ni_b ist das Nonce des Initiators und Nr_B ist das Nonce des Responders) werden mithilfe einer PRF- oder Psuedo-Zufallsfunktion kombiniert. Ein PRF ist wie ein Hashing-Algorithmus, außer dass das Ergebnis so viele Bits sein kann, wie Sie benötigen.
Wenn Sie jetzt den Hauptmodus ausgeführt haben, teilen sich die Nachrichten 3 und 4 die öffentlichen Diffie-Hellman-Schlüssel des Initiators und des Responders. Beide verwenden diese Werte, um das gemeinsame Geheimnis von Diffie-Hellman zu generieren . Wenn Sie den aggressiven Modus ausgeführt haben, sind diese DH Public-Werte auch in Nachricht 1 und Nachricht 2 (zusammen mit den Nonces) enthalten.
Der Seed-Wert wird dann mit dem DH Shared Secret (und einigen anderen Werten) kombiniert, um drei Sitzungsschlüssel zu erstellen : einen Derevativschlüssel, einen Authentifizierungsschlüssel und einen Verschlüsselungsschlüssel. Der RFC gibt es als solches an:
Das Ergebnis des Hauptmodus oder des aggressiven Modus sind drei Gruppen von authentifiziertem Schlüsselmaterial:
SKEYID_d = prf(SKEYID, g^xy | CKY-I | CKY-R | 0)
SKEYID_a = prf(SKEYID, SKEYID_d | g^xy | CKY-I | CKY-R | 1)
SKEYID_e = prf(SKEYID, SKEYID_a | g^xy | CKY-I | CKY-R | 2)
SKEYID_d, _a und _e sind die drei oben genannten Sitzungsschlüssel. SKEYID
ist der Seed-Wert. g^xy
ist das DH Shared Secret. CKY-I
und CKI-R
sind die Initiator- und Responder-Cookies. Dies sind nur zusätzliche zufällig generierte Werte, die später verwendet werden, um diese bestimmte ISAKMP-Austausch- und Sicherheitszuordnung zu identifizieren. 0 1 2
sind die Literalzahlen 0, 1 und 2. Das Pipe-Symbol steht |
für Verkettung.
In jedem Fall werden alle diese Werte mithilfe eines PRF kombiniert, der drei Sitzungsschlüssel erstellt:
- Abgeleiteter Schlüssel - Dieser Schlüssel wird von ISAKMP nicht verwendet und stattdessen an IPSec übergeben, damit IPSec seine eigenen geheimen Schlüssel erstellen kann
- Authentifizierungsschlüssel - Dieser Schlüssel wird von ISAKMP in seinem HMAC verwendet (auch bekannt als Hashing-Algorithmus, der mit einem geheimen Schlüssel gesichert ist).
- Verschlüsselungsschlüssel - Dieser Schlüssel wird von ISAKMP verwendet, um alles, was ISAKMP möchte, symmetrisch für den anderen Peer zu verschlüsseln. Wenn der für Phase1 ausgewählte Verschlüsselungsalgorithmus AES ist, verwendet AES diesen Schlüssel zum symmetrischen Verschlüsseln von Daten. AES generiert kein eigenes Schlüsselmaterial.
Der Authentifizierungsschlüssel und der Verschlüsselungsschlüssel werden zum Sichern / Verschlüsseln der folgenden Phase2-Aushandlung verwendet. Im Hauptmodus sind die Nachrichten 5 und 6 von Phase1 ebenfalls durch diese Tasten geschützt. Darüber hinaus ist jeder zukünftige ISAKMP-Informationsaustausch (DPD, Rekey-Ereignisse, Löschen von Nachrichten usw.) durch diese beiden Schlüssel geschützt.
Der abgeleitete Schlüssel wird an IPSec übergeben, und IPSec generiert aus diesem Schlüssel ein eigenes Schlüsselmaterial. Wenn Sie sich erinnern, enthält IPSec von Natur aus keinen Schlüsselaustauschmechanismus. Die einzige Möglichkeit, geheime Schlüssel zu erhalten, besteht darin, sie entweder manuell festzulegen (was archaisch ist und nie mehr wirklich durchgeführt wird) oder von einem externen Dienst abhängig zu sein Stellen Sie das Schlüsselmaterial wie ISAKMP bereit.
Der RFC sagt es so:
SKEYID_e ist das Schlüsselmaterial, das von der ISAKMP SA zum Schutz der Vertraulichkeit ihrer Nachrichten verwendet wird.
SKEYID_a ist das Schlüsselmaterial, das von der ISAKMP SA zur Authentifizierung ihrer Nachrichten verwendet wird.
SKEYID_d ist das Schlüsselmaterial, das zum Ableiten von Schlüsseln für Nicht-ISAKMP-Sicherheitszuordnungen verwendet wird.
Nach alledem können wir auf Ihre Frage zurückgreifen: Mit welchem Schlüssel wird der Pre-Shared-Key gesichert?
Im Hauptmodus wird der Pre-Shared-Key (PSK) in den Nachrichten 5 und 6 überprüft. Die Nachrichten 5 und 6 werden durch die oben beschriebenen Sitzungsschlüssel geschützt, die ISAKMP generiert.
Im aggressiven Modus wird keine der Nachrichten in der Aushandlung verschlüsselt. Und die PSK wird in den Nachrichten 2 und 3 überprüft. Beachten Sie, dass ich in beiden Fällen gesagt habe, dass die PSK überprüft wurde , und ich habe nie gesagt, dass die PSK ausgetauscht wird . Wenn im aggressiven Modus nichts verschlüsselt ist und Sie den Pre-Shared-Key einfach unverschlüsselt über das Kabel senden, liegt natürlich eine große Sicherheitslücke vor.
Zum Glück haben die Autoren von ISAKMP bereits daran gedacht. Infolgedessen haben sie eine spezielle Methode entwickelt, um zu überprüfen, ob jede Partei über die richtige PSK verfügt, ohne diese tatsächlich über das Kabel zu teilen. Es gibt zwei Elemente, mit denen jeder Peer überprüft, ob beide dieselbe PSK haben: die Identitätsmethode und der Identitäts-Hash .
VPN-Peers können sich anhand verschiedener Methoden identifizieren. Am häufigsten verwenden Peers einfach ihre Quell-IP-Adresse. Sie haben jedoch die Möglichkeit, einen vollqualifizierten Domänennamen oder einen Hostnamen zu verwenden. Jedes dieser Elemente bildet zusammen mit dem Korrelationswert für die ausgewählte Methode die Identitätsmethode. Wenn ich beispielsweise die IP 5.5.5.5 hätte und meine IP-Adresse verwenden wollte, um mich zu identifizieren, wäre meine ID-Methode effektiv [IP-Adresse, 5.5.5.5] . (Hinweis: BEIDE Werte bilden die gesamte ID-Methode.)
Die ID-Methode wird dann (unter Verwendung eines PRF) mit dem zuvor diskutierten Seed-Wert (SKEYID) und einigen anderen Werten kombiniert, um den Identitäts-Hash zu erstellen . Denken Sie daran, dass bei der Erstellung von SKEYID in erster Linie der Pre-Shared-Key verwendet wurde.
Die ID-Methode und der ID-Hash werden dann über die Leitung gesendet, und die andere Partei versucht, den ID-Hash nach derselben Formel neu zu erstellen. Wenn der Empfänger in der Lage ist, denselben ID-Hash neu zu erstellen, beweist er dem Empfänger, dass der Absender über den richtigen Pre-Shared-Key verfügen muss.
Dies wird im RFC hier beschrieben:
Um einen Austausch zu authentifizieren, generiert der Initiator des Protokolls HASH_I und der Responder generiert HASH_R, wobei:
HASH_I = prf(SKEYID, g^xi | g^xr | CKY-I | CKY-R | SAi_b | IDii_b )
HASH_R = prf(SKEYID, g^xr | g^xi | CKY-R | CKY-I | SAi_b | IDir_b )
IDii und IDir sind die ID-Methode. Und HASH_I und HASH_R sind die Initiator- und Responder-Hashs. Beide werden in Phase 1 gemeinsam genutzt. Aus dem RFC:
Bei einer vorinstallierten Schlüsselauthentifizierung wird der Hauptmodus wie folgt definiert:
Initiator Responder
---------- -----------
HDR, SA -->
<-- HDR, SA
HDR, KE, Ni -->
<-- HDR, KE, Nr
HDR*, IDii, HASH_I -->
<-- HDR*, IDir, HASH_R
Der aggressive Modus mit einem vorinstallierten Schlüssel wird wie folgt beschrieben:
Initiator Responder
----------- -----------
HDR, SA, KE, Ni, IDii -->
<-- HDR, SA, KE, Nr, IDir, HASH_R
HDR, HASH_I -->
Und jetzt können wir Ihre Frage endlich vollständig beantworten:
Der Pre-Shared-Key wird mithilfe eines PRF mit Nonces und einer Reihe anderer Werte kombiniert, die allen anderen Verhandlungspartnern bekannt sind. Das Ergebnis ist ein Wert, der nur von zwei Parteien gemeinsam erreicht werden kann, wenn beide Parteien mit denselben Werten begonnen haben - auch bekannt als derselbe Pre-Shared-Key. Der resultierende Wert wird auf dem Kabel geteilt, sodass zwei Parteien überprüfen können, ob sie über übereinstimmende Pre-Shared-Keys verfügen, ohne tatsächlich Informationen über den Pre-Shared-Key selbst preiszugeben.
Der Hauptmodus geht einen Schritt sicherer, indem auch der oben beschriebene Austausch des "resultierenden Werts" verschlüsselt wird, was es noch schwieriger macht, nützliche Informationen über den Pre-Shared-Key zu extrahieren.
(Es scheint, als hätte ich es kläglich versäumt, dies kurz und bündig zu beantworten.)