2.6. Key Localization Algorithm (Schlüssel-Lokalisierungsalgorithmus)
2.6. Key Localization Algorithm (Schlüssel-Lokalisierungsalgorithmus)
Ein lokalisierter Schlüssel (localized key) ist ein geheimer Schlüssel, der zwischen einem Benutzer U und einer autoritativen SNMP-Engine E geteilt wird. Obwohl ein Benutzer möglicherweise nur ein Passwort und daher nur einen Schlüssel für das gesamte Netzwerk hat, werden die tatsächlichen Geheimnisse, die zwischen dem Benutzer und jeder autoritativen SNMP-Engine geteilt werden, unterschiedlich sein. Dies wird durch Schlüssel-Lokalisierung erreicht.
Purpose of Key Localization (Zweck der Schlüssel-Lokalisierung)
Die Schlüssel-Lokalisierung bietet mehrere wichtige Sicherheitsvorteile:
-
Eindeutige Schlüssel pro Engine (Unique Keys per Engine): Jede autoritative SNMP-Engine hat einen eindeutigen lokalisierten Schlüssel für jeden Benutzer, selbst wenn der Benutzer überall dasselbe Passwort verwendet.
-
Begrenzte Auswirkungen einer Schlüsselkompromittierung (Limited Key Compromise Impact): Wenn ein lokalisierter Schlüssel auf einer Engine kompromittiert wird, kompromittiert dies nicht die Schlüssel des Benutzers auf anderen Engines.
-
Engine-spezifischer Schutz (Engine-Specific Protection): Die Schlüssel sind kryptografisch an die spezifische Identität der Engine (snmpEngineID) gebunden.
Key Localization Process (Schlüssel-Lokalisierungsprozess)
Der Schlüssel-Lokalisierungsprozess konvertiert den Schlüssel Ku eines Benutzers (abgeleitet von seinem Passwort) in einen lokalisierten Schlüssel Kul, der spezifisch für eine autoritative SNMP-Engine E ist.
Schritt 1: Passwort-zu-Schlüssel-Konvertierung (Password to Key Conversion)
Zunächst wird, wenn ein Benutzer ein Passwort verwendet, das Passwort des Benutzers mit einem der beiden in den Anhängen A.2.1 und A.2.2 beschriebenen Algorithmen in einen Schlüssel Ku konvertiert:
- Für MD5-basierte Authentifizierung: Verwenden Sie den Passwort-zu-Schlüssel-Algorithmus in Anhang A.2.1
- Für SHA-basierte Authentifizierung: Verwenden Sie den Passwort-zu-Schlüssel-Algorithmus in Anhang A.2.2
Dies erzeugt einen Benutzerschlüssel Ku, der unabhängig von einer spezifischen SNMP-Engine ist.
Schritt 2: Schlüssel-Lokalisierung (Key Localization)
Um den Schlüssel Ku in einen lokalisierten Schlüssel Kul des Benutzers U bei der autoritativen SNMP-Engine E zu konvertieren, wird folgender Algorithmus verwendet:
-
snmpEngineID an Ku anhängen: Nehmen Sie den Schlüssel Ku und hängen Sie die snmpEngineID der autoritativen SNMP-Engine E daran an.
-
Ku erneut anhängen: Hängen Sie den Schlüssel Ku an das Ergebnis aus Schritt 1 an, wodurch die snmpEngineID innerhalb zweier Kopien des Benutzerschlüssels Ku eingehüllt wird.
-
Ergebnis hashen: Führen Sie eine sichere Hash-Funktion auf den verketteten Daten aus. Die verwendete Hash-Funktion hängt vom Authentifizierungsprotokoll ab, das für diesen Benutzer U bei der autoritativen SNMP-Engine E definiert ist:
- Bei Verwendung der HMAC-MD5-96-Authentifizierung: Verwenden Sie MD5-Hash
- Bei Verwendung der HMAC-SHA-96-Authentifizierung: Verwenden Sie SHA-1-Hash
-
Ergebnis ist lokalisierter Schlüssel: Die Ausgabe der Hash-Funktion ist der lokalisierte Schlüssel Kul für Benutzer U bei der autoritativen SNMP-Engine E.
Algorithm Pseudocode (Algorithmus-Pseudocode)
Eingabe:
Ku - Schlüssel des Benutzers (abgeleitet vom Passwort)
snmpEngineID - Eindeutige Kennung der Engine
Prozess:
Kul = Hash(Ku || snmpEngineID || Ku)
Wobei:
|| - Verkettung bezeichnet
Hash - ist MD5 für HMAC-MD5-96 oder SHA-1 für HMAC-SHA-96
Ausgabe:
Kul - Lokalisierter Schlüssel für Benutzer U bei Engine E
Example (Beispiel)
Angenommen:
- Benutzer U hat Passwort "myPassword"
- Passwort wird in Schlüssel Ku konvertiert (unter Verwendung des Passwort-zu-Schlüssel-Algorithmus)
- Autoritative Engine E hat snmpEngineID = 0x80001F8880...
Dann:
Kul = MD5(Ku || 0x80001F8880... || Ku)
Dieses Kul ist eindeutig für Benutzer U auf Engine E. Wenn derselbe Benutzer auf eine andere Engine E2 mit engineID 0x80001F8881... zugreift, würde ein anderer lokalisierter Schlüssel berechnet:
Kul2 = MD5(Ku || 0x80001F8881... || Ku)
Localized Key Usage (Verwendung lokalisierter Schlüssel)
Einmal berechnet, werden lokalisierte Schlüssel für zwei Zwecke verwendet:
-
Authentifizierungsschlüssel (Authentication Keys): Der lokalisierte Authentifizierungsschlüssel (authKey) wird von Kul abgeleitet und in HMAC-Operationen zur Nachrichtenauthentifizierung verwendet.
-
Datenschutzschlüssel (Privacy Keys): Der lokalisierte Datenschutzschlüssel (privKey) wird von Kul abgeleitet und zum Verschlüsseln/Entschlüsseln von Nachrichtennutzlasten verwendet.
Die Ableitung von authKey und privKey von Kul wird in den jeweiligen Authentifizierungs- und Datenschutzprotokollspezifikationen beschrieben (Abschnitte 6, 7 und 8).
Key Management Implications (Schlüsselverwaltungsimplikationen)
Key Storage (Schlüsselspeicherung)
Implementierungen sollten lokalisierte Schlüssel statt des ursprünglichen Passworts oder Benutzerschlüssels Ku speichern. Dies bietet bessere Sicherheit:
- Wenn das Gerät kompromittiert wird, werden nur die lokalisierten Schlüssel für dieses Gerät offengelegt
- Das Passwort des Benutzers und Schlüssel für andere Geräte bleiben sicher
Key Updates (Schlüsselaktualisierungen)
Wenn sich das Passwort eines Benutzers ändert:
- Ein neues Ku wird aus dem neuen Passwort berechnet
- Neue lokalisierte Schlüssel Kul müssen für alle Engines berechnet werden, auf die der Benutzer zugreift
- Alte lokalisierte Schlüssel sollten sicher gelöscht werden
Initial Configuration (Erstkonfiguration)
Für die Erstkonfiguration oder Schlüsselverteilung müssen Implementierungen entweder:
- Die Passwort-zu-Schlüssel- und Schlüssel-Lokalisierungsalgorithmen verwenden, um lokalisierte Schlüssel aus einem konfigurierten Passwort zu berechnen
- Direkt vorberechnete lokalisierte Schlüssel konfigurieren (wenn Out-of-Band-Schlüsselverteilung verwendet wird)
Security Considerations (Sicherheitsüberlegungen)
-
Einwegfunktion (One-way Function): Die Schlüssel-Lokalisierung ist eine Einwegfunktion. Gegeben Kul und snmpEngineID ist es rechnerisch nicht möglich, Ku abzuleiten.
-
Engine-Identitätsbindung (Engine Identity Binding): Der lokalisierte Schlüssel ist kryptografisch an die Identität der Engine gebunden, was die Wiederverwendung von Schlüsseln über Engines hinweg verhindert.
-
Hash-Funktionsstärke (Hash Function Strength): Die Sicherheit der Schlüssel-Lokalisierung hängt von der Stärke der verwendeten Hash-Funktion (MD5 oder SHA-1) ab.
References (Referenzen)
Das Konzept und der Algorithmus der Schlüssel-Lokalisierung werden weiter detailliert in:
- [Localized-key]: "Key Derivation for Network Management Applications" (Schlüsselableitung für Netzwerkverwaltungsanwendungen), U. Blumenthal, B. Wijnen, K. McCloghrie, Internet Draft (laufende Arbeit)
- Passwort-zu-Schlüssel-Algorithmen: Anhang A.2.1 (MD5) und A.2.2 (SHA) dieser RFC