4.3.1. Key Derivation Algorithm (Schlüsselableitungsalgorithmus)
4.3.1. Key Derivation Algorithm (Schlüsselableitungsalgorithmus)
Unabhängig von der verwendeten Verschlüsselungs- oder Nachrichtenauthentifizierungstransformation (es kann sich um eine SRTP-vordefinierte Transformation oder eine neu eingeführte gemäß Abschnitt 6 handeln) MÜSSEN interoperable SRTP-Implementierungen die SRTP-Schlüsselableitung verwenden, um Sitzungsschlüssel zu generieren. Sobald die Schlüsselableitungsrate zu Beginn der Sitzung ordnungsgemäß signalisiert wurde, ist keine zusätzliche Kommunikation zwischen den Parteien erforderlich, die SRTP-Schlüsselableitung verwenden.
packet index ---+
|
v
+-----------+ master +--------+ session encr_key
| ext | key | |---------->
| key mgmt |-------->| key | session auth_key
| (optional | | deriv |---------->
| rekey) |-------->| | session salt_key
| | master | |---------->
+-----------+ salt +--------+
Abbildung 5: SRTP-Schlüsselableitung.
Mindestens eine anfängliche Schlüsselableitung MUSS von SRTP durchgeführt werden, d. h., die erste Schlüsselableitung ist ERFORDERLICH. Weitere Anwendungen der Schlüsselableitung KÖNNEN entsprechend dem Wert key_derivation_rate im kryptografischen Kontext durchgeführt werden. Die Schlüsselableitungsfunktion MUSS anfänglich vor dem ersten Paket aufgerufen werden und dann, wenn r größer als Null ist, wird eine Schlüsselableitung durchgeführt, wann immer index mod r gleich Null ist. Dies kann als "Auffrischung" der Sitzungsschlüssel betrachtet werden. Der Wert von key_derivation_rate MUSS für die Lebensdauer des zugehörigen Hauptschlüssels fest bleiben.
Interoperable SRTP-Implementierungen KÖNNEN auch Sitzungs-Salting-Schlüssel für Verschlüsselungstransformationen ableiten, wie es bei beiden vordefinierten Transformationen der Fall ist.
Seien m und n positive Ganzzahlen. Eine Pseudozufallsfunktionsfamilie ist eine Menge von schlüsselabhängigen Funktionen PRF_n(k,x), so dass für den (geheimen) Zufallsschlüssel k, bei gegebenem m-Bit x, PRF_n(k,x) eine n-Bit-Zeichenkette ist, die rechnerisch nicht von zufälligen n-Bit-Zeichenketten unterscheidbar ist, siehe [HAC]. Für den Zweck der Schlüsselableitung in SRTP MUSS eine sichere PRF mit m = 128 (oder mehr) verwendet werden, und eine Standard-PRF-Transformation ist in Abschnitt 4.3.3 definiert.
Sei "a DIV t" die ganzzahlige Division von a durch t, abgerundet, und mit der Konvention, dass "a DIV 0 = 0" für alle a gilt. Wir treffen auch die Konvention, "a DIV t" als Bitfolge derselben Länge wie a zu behandeln, und somit wird "a DIV t" im Allgemeinen führende Nullen haben.
Die Schlüsselableitung MUSS wie folgt definiert werden in Bezug auf <label>, eine 8-Bit-Konstante (siehe unten), master_salt und key_derivation_rate, wie im kryptografischen Kontext bestimmt, und index, den Paketindex (d. h. das 48-Bit ROC || SEQ für SRTP):
-
Sei
r = index DIV key_derivation_rate(mit DIV wie oben definiert). -
Sei
key_id = <label> || r. -
Sei
x = key_id XOR master_salt, wobeikey_idundmaster_saltso ausgerichtet sind, dass ihre niedrigstwertigen Bits übereinstimmen (Rechtsausrichtung).
<label> MUSS für jeden abzuleitenden Schlüsseltyp eindeutig sein. Wir definieren derzeit <label> 0x00 bis 0x05 (siehe unten), und zukünftige Erweiterungen KÖNNEN neue Werte im Bereich 0x06 bis 0xff für andere Zwecke spezifizieren. Der n-Bit-SRTP-Schlüssel (oder Salt) für dieses Paket MUSS dann aus dem Hauptschlüssel k_master wie folgt abgeleitet werden:
PRF_n(k_master, x).
(Die PRF kann intern zusätzliche Formatierung und Auffüllung von x spezifizieren, siehe z. B. Abschnitt 4.3.3 für die Standard-PRF.)
Die Sitzungsschlüssel und das Salt MÜSSEN nun unter Verwendung von Folgendem abgeleitet werden:
-
k_e(SRTP-Verschlüsselung): <label> = 0x00,n = n_e. -
k_a(SRTP-Nachrichtenauthentifizierung): <label> = 0x01,n = n_a. -
k_s(SRTP-Salting-Schlüssel): <label> = 0x02,n = n_s.
wobei n_e, n_s und n_a aus dem kryptografischen Kontext stammen.
Der Hauptschlüssel und das Haupt-Salt MÜSSEN zufällig sein, aber das Haupt-Salt KANN öffentlich sein.
Beachten Sie, dass für einen key_derivation_rate von 0 die Anwendung der Schlüsselableitung genau einmal erfolgen MUSS.
Die obige Definition von DIV dient rein der notationellen Bequemlichkeit. Für ein von Null verschiedenes t aus der Menge der zulässigen Schlüsselableitungsraten kann "a DIV t" als Rechtsverschiebung um den Logarithmus zur Basis 2 von t implementiert werden. Die Ableitungsoperation wird weiter erleichtert, wenn die Raten als Potenzen von 256 gewählt werden, aber diese Granularität wurde als zu grob angesehen, um eine Anforderung dieser Spezifikation zu sein.
Die Obergrenze für die Anzahl der Pakete, die mit demselben Hauptschlüssel gesichert werden können (siehe Abschnitt 9.2), ist unabhängig von der Schlüsselableitung.