Zum Hauptinhalt springen

6. HMAC-MD5-96 Authentication Protocol (HMAC-MD5-96 Authentifizierungsprotokoll)

6. HMAC-MD5-96 Authentication Protocol (HMAC-MD5-96 Authentifizierungsprotokoll)

Dieser Abschnitt beschreibt das HMAC-MD5-96 Authentifizierungsprotokoll. Dieses Authentifizierungsprotokoll ist das erste, das für das benutzerbasierte Sicherheitsmodell definiert wurde. Es verwendet die in RFC 1321 beschriebene MD5-Hash-Funktion im HMAC-Modus, der in RFC 2104 beschrieben ist, wobei die Ausgabe auf 96 Bits gekürzt wird.

Dieses Protokoll wird durch usmHMACMD5AuthProtocol identifiziert.

Im Laufe der Zeit können andere Authentifizierungsprotokolle entweder als Ersatz für dieses Protokoll oder zusätzlich zu diesem Protokoll definiert werden.

6.1. Mechanisms (Mechanismen)

Das HMAC-MD5-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 vor der Übertragung teilweise in die SNMP-Nachricht eingefügt, und der vorangestellte Wert wird nicht übertragen. Der geheime Wert wird von allen SNMP-Engines geteilt, die berechtigt sind, Nachrichten im Namen des entsprechenden Benutzers zu generieren.

6.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.

6.1.2. Algorithm Details (Algorithmusdetails)

Dieses Protokoll verwendet den MD5 (RFC 1321) Message-Digest-Algorithmus:

  • Ein 128-Bit-MD5-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 16 Oktetts

Für Details siehe Abschnitt 6.3.

6.2. Elements of the Digest Authentication Protocol (Elemente des Digest-Authentifizierungsprotokolls)

Dieser Abschnitt enthält Definitionen, die zur Realisierung des in diesem Abschnitt dieses Memos definierten Authentifizierungsmoduls erforderlich sind.

6.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 MD5 16 Oktetts lang sein.

6.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.

6.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-MD5-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.

6.2.4. Services provided by the HMAC-MD5-96 Authentication Module (Von dem HMAC-MD5-96 Authentifizierungsmodul bereitgestellte Dienste)

Dieser Abschnitt beschreibt die Eingaben und Ausgaben, die das HMAC-MD5-96 Authentifizierungsmodul erwartet und produziert, wenn das benutzerbasierte Sicherheitsmodul das HMAC-MD5-96 Authentifizierungsmodul für Dienste aufruft.

6.2.4.1. Services for Generating an Outgoing SNMP Message (Dienste zum Generieren einer ausgehenden SNMP-Nachricht)

Das HMAC-MD5-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 16 Oktetts betragen.

  • wholeMsg: Die zu authentifizierende Nachricht.

  • authenticatedWholeMsg: Die authentifizierte Nachricht bei der Ausgabe.

6.2.4.2. Services for Processing an Incoming SNMP Message (Dienste zur Verarbeitung einer eingehenden SNMP-Nachricht)

Das HMAC-MD5-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 16 Oktetts betragen.

  • authParameters: Die msgAuthenticationParameters aus der eingehenden Nachricht.

  • wholeMsg: Die zu authentifizierende Nachricht.

  • authenticatedWholeMsg: Die authentifizierte Nachricht bei der Ausgabe.

6.3. Elements of Procedure (Prozesselemente)

Dieser Abschnitt beschreibt die Verfahren für das HMAC-MD5-96 Authentifizierungsprotokoll.

6.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-MD5-Algorithmus berechnen:

MAC = HMAC-MD5(authKey, wholeMsg)

Wobei:

  • authKey der 16-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 16-Oktett-MAC-Werts nehmen und in das msgAuthenticationParameters-Feld einfügen.

Schritt 4: Ergebnis zurückgeben

authenticatedWholeMsg an das aufrufende Modul zurückgeben.

6.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-MD5(authKey, wholeMsg)

Schritt 4: Erwarteten MAC kürzen

Die ersten 12 Oktetts des 16-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)

  1. Schlüssellänge (Key Length): Der authKey MUSS für HMAC-MD5-96 genau 16 Oktetts lang sein

  2. MAC-Kürzung (MAC Truncation): Nur die ersten 96 Bits (12 Oktetts) der 128-Bit-MD5-Ausgabe werden verwendet

  3. Konstanter Zeitvergleich (Constant-Time Comparison): Beim Vergleich von MACs sollten Implementierungen einen konstanten Zeitvergleich verwenden, um Timing-Angriffe zu vermeiden

  4. HMAC-Modus (HMAC Mode): Das Protokoll verwendet den in RFC 2104 spezifizierten HMAC-Modus, nicht einfaches MD5

Security Considerations (Sicherheitsüberlegungen)

  • MD5-Schwächen (MD5 Weaknesses): MD5 hat bekannte kryptografische Schwächen. Während HMAC-MD5 widerstandsfähiger gegen Angriffe ist als einfaches MD5, sollten Implementierungen eine Migration zu HMAC-SHA-96 für bessere Sicherheit in Betracht ziehen

  • Schlüsselverwaltung (Key Management): Der 16-Oktett-authKey muss geheim gehalten und ordnungsgemäß verwaltet werden

  • Kürzung (Truncation): Das Kürzen des MAC von 128 Bits auf 96 Bits verringert die Sicherheit geringfügig, wird aber für SNMP-Anwendungen als akzeptabel angesehen