7. HMAC-SHA-96 Authentication Protocol (HMAC-SHA-96 Authentifizierungsprotokoll)
7. HMAC-SHA-96 Authentication Protocol (HMAC-SHA-96 Authentifizierungsprotokoll)
Dieser Abschnitt beschreibt das HMAC-SHA-96 Authentifizierungsprotokoll. Dieses Protokoll verwendet die in SHA-NIST beschriebene SHA-Hash-Funktion im HMAC-Modus, der in RFC 2104 beschrieben ist, wobei die Ausgabe auf 96 Bits gekürzt wird.
Dieses Protokoll wird durch usmHMACSHAAuthProtocol identifiziert.
Im Laufe der Zeit können andere Authentifizierungsprotokolle entweder als Ersatz für dieses Protokoll oder zusätzlich zu diesem Protokoll definiert werden.
7.1. Mechanisms (Mechanismen)
Das HMAC-SHA-96 Authentifizierungsprotokoll bietet folgende Mechanismen:
Data Integrity Support (Datenintegritätsunterstützung)
Zur Unterstützung der Datenintegrität ist ein Message-Digest-Algorithmus erforderlich. Ein Digest wird über einen geeigneten Teil einer SNMP-Nachricht berechnet und als Teil der an den Empfänger gesendeten Nachricht eingefügt.
Data Origin Authentication (Datenursprungsauthentifizierung)
Zur Unterstützung der Datenursprungsauthentifizierung und Datenintegrität wird vor der Berechnung des Digests ein geheimer Wert der SNMP-Nachricht vorangestellt; der berechnete Digest wird dann vor der Übertragung teilweise in die Nachricht eingefügt. Das vorangestellte Geheimnis wird nicht übertragen. Der geheime Wert wird von allen SNMP-Engines geteilt, die berechtigt sind, Nachrichten im Namen des entsprechenden Benutzers zu generieren.
7.1.1. Digest Authentication Mechanism (Digest-Authentifizierungsmechanismus)
Der in diesem Memo definierte Digest-Authentifizierungsmechanismus bietet:
Integrity Verification (Integritätsüberprüfung)
Überprüfung der Integrität einer empfangenen Nachricht, d.h. die empfangene Nachricht ist die gesendete Nachricht.
Die Integrität der Nachricht wird durch Berechnung eines Digests über einen geeigneten Teil der Nachricht geschützt. Der Digest wird vom Ursprung der Nachricht berechnet, mit der Nachricht übertragen und vom Empfänger der Nachricht überprüft.
User Verification (Benutzerüberprüfung)
Überprüfung des Benutzers, in dessen Namen die Nachricht generiert wurde.
Ein geheimer Wert, der nur SNMP-Engines bekannt ist, die berechtigt sind, Nachrichten im Namen eines Benutzers zu generieren, wird im HMAC-Modus verwendet (siehe RFC 2104). Es wird auch empfohlen, die als Message Authentication Code verwendete Hash-Funktionsausgabe zu kürzen.
7.1.2. Algorithm Details (Algorithmusdetails)
Dieser Mechanismus verwendet den SHA (SHA-NIST) Message-Digest-Algorithmus:
- Ein 160-Bit-SHA-Digest wird auf spezielle (HMAC) Weise über den bezeichneten Teil einer SNMP-Nachricht berechnet
- Die ersten 96 Bits dieses Digests werden als Teil der an den Empfänger gesendeten Nachricht eingefügt
- Die Größe des in einer Nachricht enthaltenen Digests beträgt 12 Oktetts
- Die Größe des privaten Authentifizierungsschlüssels (des Geheimnisses) beträgt 20 Oktetts
Für Details siehe Abschnitt 7.3.
7.2. Elements of the HMAC-SHA-96 Authentication Protocol (Elemente des HMAC-SHA-96 Authentifizierungsprotokolls)
Dieser Abschnitt enthält Definitionen, die zur Realisierung des in diesem Abschnitt dieses Memos definierten Authentifizierungsmoduls erforderlich sind.
7.2.1. Users (Benutzer)
Die Authentifizierung mit diesem Authentifizierungsprotokoll verwendet einen definierten Satz von userName. Für jeden Benutzer, in dessen Namen eine Nachricht bei einer bestimmten SNMP-Engine authentifiziert werden muss, muss diese SNMP-Engine Kenntnis von diesem Benutzer haben. Eine SNMP-Engine, die mit einer anderen SNMP-Engine kommunizieren möchte, muss auch Kenntnis von einem Benutzer haben, der dieser Engine bekannt ist, einschließlich Kenntnis der anwendbaren Attribute dieses Benutzers.
Ein Benutzer und seine Attribute sind wie folgt definiert:
<userName> (Benutzername)
Eine Zeichenkette, die den Namen des Benutzers darstellt.
<authKey> (Authentifizierungsschlüssel)
Der geheime Schlüssel eines Benutzers, der bei der Berechnung eines Digests verwendet wird. Er MUSS für SHA 20 Oktetts lang sein.
7.2.2. msgAuthoritativeEngineID (Autoritative Engine-ID)
Der in einer authentifizierten Nachricht enthaltene msgAuthoritativeEngineID-Wert gibt die autoritative SNMP-Engine für diese bestimmte Nachricht an (siehe die Definition von SnmpEngineID im SNMP-Architekturdokument RFC 3411).
Der (private) Authentifizierungsschlüssel des Benutzers ist normalerweise bei jeder autoritativen SNMP-Engine unterschiedlich, und daher wird die snmpEngineID verwendet, um den richtigen Schlüssel für den Authentifizierungsprozess auszuwählen.
7.2.3. SNMP Messages Using this Authentication Protocol (SNMP-Nachrichten mit diesem Authentifizierungsprotokoll)
Nachrichten, die dieses Authentifizierungsprotokoll verwenden, enthalten ein msgAuthenticationParameters-Feld als Teil von msgSecurityParameters.
Für dieses Protokoll ist das msgAuthenticationParameters-Feld der serialisierte OCTET STRING, der die ersten 12 Oktetts der über wholeMsg durchgeführten HMAC-SHA-96-Ausgabe darstellt.
Der Digest wird über wholeMsg berechnet, sodass, wenn eine Nachricht authentifiziert ist, dies auch bedeutet, dass alle Felder in der Nachricht intakt sind und nicht manipuliert wurden.
7.2.4. Services Provided by the HMAC-SHA-96 Authentication Module (Von dem HMAC-SHA-96 Authentifizierungsmodul bereitgestellte Dienste)
Dieser Abschnitt beschreibt die Eingaben und Ausgaben, die das HMAC-SHA-96 Authentifizierungsmodul erwartet und produziert, wenn das benutzerbasierte Sicherheitsmodul das HMAC-SHA-96 Authentifizierungsmodul für Dienste aufruft.
7.2.4.1. Services for Generating an Outgoing SNMP Message (Dienste zum Generieren einer ausgehenden SNMP-Nachricht)
Das HMAC-SHA-96 Authentifizierungsprotokoll geht davon aus, dass die Auswahl des authKey vom Aufrufer durchgeführt wird und dass der Aufrufer den zu verwendenden geheimen Schlüssel übergibt.
Nach Abschluss gibt das Authentifizierungsmodul statusInformation zurück und, wenn der Message-Digest korrekt berechnet wurde, die wholeMsg mit dem an der richtigen Stelle eingefügten Digest.
Die abstrakte Dienstprimitive lautet:
statusInformation = -- Erfolg oder Misserfolg
authenticateOutgoingMsg(
IN authKey -- geheimer Schlüssel für die Authentifizierung
IN wholeMsg -- nicht authentifizierte vollständige Nachricht
OUT authenticatedWholeMsg -- vollständige authentifizierte Nachricht
)
Parameter (Parameters):
-
statusInformation: Eine Anzeige, ob der Authentifizierungsprozess erfolgreich war. Wenn nicht, ist es eine Anzeige des Problems.
-
authKey: Der geheime Schlüssel, der vom Authentifizierungsalgorithmus verwendet werden soll. Die Länge dieses Schlüssels MUSS 20 Oktetts betragen.
-
wholeMsg: Die zu authentifizierende Nachricht.
-
authenticatedWholeMsg: Die authentifizierte Nachricht bei der Ausgabe.
7.2.4.2. Services for Processing an Incoming SNMP Message (Dienste zur Verarbeitung einer eingehenden SNMP-Nachricht)
Das HMAC-SHA-96 Authentifizierungsprotokoll geht davon aus, dass die Auswahl des authKey vom Aufrufer durchgeführt wird und dass der Aufrufer den zu verwendenden geheimen Schlüssel übergibt.
Nach Abschluss gibt das Authentifizierungsmodul statusInformation zurück, um anzuzeigen, ob die Nachricht authentisch war oder nicht.
Die abstrakte Dienstprimitive lautet:
statusInformation = -- Erfolg oder Misserfolg
authenticateIncomingMsg(
IN authKey -- geheimer Schlüssel für die Authentifizierung
IN authParameters -- wie über die Leitung empfangen
IN wholeMsg -- wie über die Leitung empfangen
OUT authenticatedWholeMsg -- auf Authentifizierung überprüft
)
Parameter (Parameters):
-
statusInformation: Eine Anzeige, ob der Authentifizierungsprozess erfolgreich war. Wenn nicht, ist es eine Anzeige des Problems.
-
authKey: Der geheime Schlüssel, der vom Authentifizierungsalgorithmus verwendet werden soll. Die Länge dieses Schlüssels MUSS 20 Oktetts betragen.
-
authParameters: Die msgAuthenticationParameters aus der eingehenden Nachricht.
-
wholeMsg: Die zu authentifizierende Nachricht.
-
authenticatedWholeMsg: Die authentifizierte Nachricht bei der Ausgabe.
7.3. Elements of Procedure (Prozesselemente)
Dieser Abschnitt beschreibt die Verfahren für das HMAC-SHA-96 Authentifizierungsprotokoll.
7.3.1. Processing an Outgoing Message (Verarbeitung einer ausgehenden Nachricht)
Dieser Abschnitt beschreibt das Verfahren, dem eine SNMP-Engine folgt, wenn sie eine Nachricht mit Verwaltungsinformationen im Namen eines Benutzers mit einem securityLevel generiert, der angibt, dass Authentifizierung verwendet werden soll.
Schritt 1: msgAuthenticationParameters setzen
Das msgAuthenticationParameters-Feld wird auf die Serialisierung gemäß den Regeln in RFC 3417 eines OCTET STRING gesetzt, der 12 Null-Oktetts enthält.
Schritt 2: MAC berechnen
Mit dem geheimen authKey des Benutzers und der Nachricht mit msgAuthenticationParameters auf 12 Null-Oktetts gesetzt, den MAC (Message Authentication Code) gemäß dem HMAC-SHA-Algorithmus berechnen:
MAC = HMAC-SHA(authKey, wholeMsg)
Wobei:
- authKey der 20-Oktett-Geheimschlüssel ist
- wholeMsg die gesamte Nachricht mit msgAuthenticationParameters auf 12 Null-Oktetts gesetzt ist
Schritt 3: MAC kürzen und einfügen
Die ersten 12 Oktetts des 20-Oktett-MAC-Werts nehmen und in das msgAuthenticationParameters-Feld einfügen.
Schritt 4: Ergebnis zurückgeben
authenticatedWholeMsg an das aufrufende Modul zurückgeben.
7.3.2. Processing an Incoming Message (Verarbeitung einer eingehenden Nachricht)
Dieser Abschnitt beschreibt das Verfahren, dem eine SNMP-Engine folgt, wenn sie eine Nachricht mit Verwaltungsinformationen mit einem securityLevel verarbeitet, der angibt, dass Authentifizierung verwendet wurde.
Schritt 1: Parameter extrahieren
msgAuthenticationParameters aus der eingehenden Nachricht extrahieren und speichern.
Schritt 2: msgAuthenticationParameters auf Null setzen
Das msgAuthenticationParameters-Feld in der Nachricht durch einen OCTET STRING von 12 Null-Oktetts ersetzen.
Schritt 3: Erwarteten MAC berechnen
Mit dem geheimen authKey des Benutzers und der Nachricht mit msgAuthenticationParameters auf 12 Null-Oktetts gesetzt, den erwarteten MAC berechnen:
expectedMAC = HMAC-SHA(authKey, wholeMsg)
Schritt 4: Erwarteten MAC kürzen
Die ersten 12 Oktetts des 20-Oktett-expectedMAC-Werts nehmen.
Schritt 5: MACs vergleichen
Die extrahierten msgAuthenticationParameters (aus Schritt 1) mit dem berechneten 12-Oktett-MAC (aus Schritt 4) vergleichen.
Wenn sie gleich sind, ist die Nachricht authentifiziert. Wenn sie nicht gleich sind, ist die Nachricht nicht authentisch und sollte verworfen werden.
Schritt 6: Ergebnis zurückgeben
statusInformation zurückgeben, das Erfolg oder Misserfolg anzeigt.
Implementation Notes (Implementierungshinweise)
-
Schlüssellänge (Key Length): Der authKey MUSS für HMAC-SHA-96 genau 20 Oktetts lang sein
-
MAC-Kürzung (MAC Truncation): Nur die ersten 96 Bits (12 Oktetts) der 160-Bit-SHA-Ausgabe werden verwendet
-
Konstanter Zeitvergleich (Constant-Time Comparison): Beim Vergleich von MACs sollten Implementierungen einen konstanten Zeitvergleich verwenden, um Timing-Angriffe zu vermeiden
-
HMAC-Modus (HMAC Mode): Das Protokoll verwendet den in RFC 2104 spezifizierten HMAC-Modus, nicht einfaches SHA
Security Considerations (Sicherheitsüberlegungen)
-
SHA-Stärke (SHA Strength): SHA-1 bietet stärkere kryptografische Sicherheit als MD5. HMAC-SHA-96 wird gegenüber HMAC-MD5-96 für bessere Sicherheit empfohlen
-
Schlüsselverwaltung (Key Management): Der 20-Oktett-authKey muss geheim gehalten und ordnungsgemäß verwaltet werden
-
Kürzung (Truncation): Das Kürzen des MAC von 160 Bits auf 96 Bits verringert die Sicherheit geringfügig, wird aber für SNMP-Anwendungen als akzeptabel angesehen
-
Algorithmusauswahl (Algorithm Selection): Für neue Bereitstellungen sollten HMAC-Varianten auf Basis von SHA-2 oder SHA-3 in Betracht gezogen werden, falls verfügbar