Zum Hauptinhalt springen

2.14. Erzeugung von Schlüsselmaterial für die IKE SA

2.14. Erzeugung von Schlüsselmaterial für die IKE SA​

Die gemeinsamen Schlüssel werden wie folgt berechnet. Eine als SKEYSEED bezeichnete Größe wird aus den während des IKE_SA_INIT-Austauschs ausgetauschten Nonces und dem während dieses Austauschs etablierten Diffie-Hellman-Teilgeheimnis berechnet. SKEYSEED wird verwendet, um sieben weitere Geheimnisse zu berechnen: SK_d, das zum Ableiten neuer Schlüssel für die mit dieser IKE-SA etablierten Child-SAs dient; SK_ai und SK_ar, die als Schlüssel für den Integritätsschutzalgorithmus zum Authentisieren der Bestandteile von Folgeaustauschen verwendet werden; SK_ei und SK_er, die zum Verschlüsseln (und selbstverständlich Entschlüsseln) aller Folgeaustausche verwendet werden; sowie SK_pi und SK_pr, die bei der Erzeugung eines AUTH-Payloads verwendet werden. Die Längen von SK_d, SK_pi und SK_pr MÜSSEN der bevorzugten Schlüssellänge der vereinbarten PRF entsprechen.

SKEYSEED und seine Abkömmlinge werden wie folgt berechnet:

SKEYSEED = prf(Ni | Nr, g^ir)

{SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr } = prf+ (SKEYSEED, Ni | Nr | SPIi | SPIr )

( was bedeutet, dass die Größen SK_d, SK_ai, SK_ar, SK_ei, SK_er, SK_pi und SK_pr der Reihe nach aus den von prf+ erzeugten Bits entnommen werden). g^ir ist das aus dem ephemeralen Diffie-Hellman-Austausch stammende Teilgeheimnis. g^ir wird als eine Big-Endian-Zeichenkette aus Oktetten dargestellt, die bei Bedarf mit Nullen aufgefüllt wird, damit sie die Länge des Modulus erreicht. Ni und Nr sind die Nonces, befreit von etwaigen Headern. Aus historischen Gründen der Rückwärtskompatibilität werden bei dieser Berechnung zwei PRFs besonders behandelt. Ist die ausgehandelte PRF AES-XCBC-PRF-128 [AESXCBCPRF128] oder AES-CMAC-PRF-128 [AESCMACPRF128], werden beim Berechnen von SKEYSEED nur die ersten 64 Bit von Ni und die ersten 64 Bit von Nr verwendet, aber alle Bits dienen als Eingabe für die prf+-Funktion.

Die zwei Richtungen des Datenflusses verwenden unterschiedliche Schlüssel. Die zum Schutz von Nachrichten vom ursprünglichen Initiator verwendeten Schlüssel sind SK_ai und SK_ei. Die zum Schutz von Nachrichten in der anderen Richtung verwendeten Schlüssel sind SK_ar und SK_er.