Wie wird der vorinstallierte Schlüssel in IPsec VPN verschlüsselt?


11

Ich habe IPsec VPN unter ASA 8.0 ausgeführt und verstehe ein wenig darüber. Der Initiator sendet zunächst seine ISAKMP-Richtlinie an den Responder, und der Responder sendet die übereinstimmende Richtlinie zurück. Danach wird der Diffie-Hellman-Schlüssel ausgetauscht, und beide senden den vorinstallierten Schlüssel zur Authentifizierung an den anderen.

Jetzt haben wir zwei Schlüssel:

  • Eine wird durch AES-Verschlüsselung generiert
  • Eine wird von der Diffie-Hellman-Gruppe generiert

Mit welchem ​​Schlüssel wird der vorinstallierte Schlüssel verschlüsselt?

Antworten:


16

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. SKEYIDist der Seed-Wert. g^xyist das DH Shared Secret. CKY-Iund CKI-Rsind 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 2sind 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.)


und als letztes .wie aes Verschlüsselung keinen Schlüssel erzeugt, ich lerne ccnp vpn Buch, und es wird in diesem Buch geschrieben, dass symmetrischer Schlüsselalgorithmus eine einzelne Schlüsselfeindverschlüsselung erzeugt und verwendet, Beispiel für symetrischen Schlüssel algo ist aes, des
user3347934

Wenn AES den Schlüssel zufällig generiert hat, besteht weiterhin das Problem, diesen Schlüssel sicher über die Leitung an die andere Partei zu übertragen. Aus diesem Grund benötigen Sie eine Methode zum Schlüsselaustausch . AES selbst ist kein Schlüsselaustauschalgorithmus, sondern lediglich ein symmetrischer Verschlüsselungsalgorithmus. In der Regel verwendet AES den Schlüssel, der von einem anderen Protokoll wie ISAKMP bereitgestellt wird. Was die Funktionsweise von AES betrifft, gefällt mir diese Flash-Animation am besten, um sie zu erklären. PS: Wenn meine Antwort Ihre Frage beantwortet hat, markieren Sie sie bitte als akzeptierte Antwort.
Eddie

Vielen Dank, es hat mir wirklich geholfen zu verstehen, wie VPN wirklich mit Pre-Shared Key
funktioniert

Ich habe ein Problem auch bitte werfen Sie einen Blick auf diese auch networkengineering.stackexchange.com/questions/13484/…
user3347934

Eigentlich habe ich nicht verstanden, welcher Schlüssel verwendet wird, um den gemeinsamen geheimen Schlüssel von diffi-helmen zu bewerten
user3347934

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.