Aller au contenu principal

6. HMAC-MD5-96 Authentication Protocol (Protocole d'authentification HMAC-MD5-96)

6. HMAC-MD5-96 Authentication Protocol (Protocole d'authentification HMAC-MD5-96)

Cette section décrit le protocole d'authentification HMAC-MD5-96. Ce protocole d'authentification est le premier défini pour le modèle de sécurité basé sur l'utilisateur. Il utilise la fonction de hachage MD5 décrite dans RFC 1321, en mode HMAC décrit dans RFC 2104, tronquant la sortie à 96 bits.

Ce protocole est identifié par usmHMACMD5AuthProtocol.

Au fil du temps, d'autres protocoles d'authentification peuvent être définis soit en remplacement de ce protocole, soit en complément de celui-ci.

6.1. Mechanisms (Mécanismes)

Le protocole d'authentification HMAC-MD5-96 fournit les mécanismes suivants:

Data Integrity Support (Support d'intégrité des données)

Pour prendre en charge l'intégrité des données, un algorithme de résumé de message est requis. Un résumé est calculé sur une portion appropriée d'un message SNMP et inclus dans le message envoyé au destinataire.

Data Origin Authentication (Authentification de l'origine des données)

Pour prendre en charge l'authentification de l'origine des données et l'intégrité des données, une valeur secrète est ajoutée au message SNMP avant de calculer le résumé; le résumé calculé est partiellement inséré dans le message SNMP avant la transmission, et la valeur ajoutée n'est pas transmise. La valeur secrète est partagée par tous les moteurs SNMP autorisés à générer des messages au nom de l'utilisateur approprié.

6.1.1. Digest Authentication Mechanism (Mécanisme d'authentification par résumé)

Le mécanisme d'authentification par résumé défini dans ce mémo fournit:

Integrity Verification (Vérification d'intégrité)

La vérification de l'intégrité d'un message reçu, c'est-à-dire que le message reçu est le message envoyé.

L'intégrité du message est protégée en calculant un résumé sur une portion appropriée du message. Le résumé est calculé par l'émetteur du message, transmis avec le message et vérifié par le destinataire du message.

User Verification (Vérification de l'utilisateur)

La vérification de l'utilisateur au nom duquel le message a été généré.

Une valeur secrète connue uniquement des moteurs SNMP autorisés à générer des messages au nom d'un utilisateur est utilisée en mode HMAC (voir RFC 2104). Il recommande également que la sortie de la fonction de hachage utilisée comme code d'authentification de message soit tronquée.

6.1.2. Algorithm Details (Détails de l'algorithme)

Ce protocole utilise l'algorithme de résumé de message MD5 (RFC 1321):

  • Un résumé MD5 de 128 bits est calculé de manière spéciale (HMAC) sur la portion désignée d'un message SNMP
  • Les 96 premiers bits de ce résumé sont inclus dans le message envoyé au destinataire
  • La taille du résumé transporté dans un message est de 12 octets
  • La taille de la clé d'authentification privée (le secret) est de 16 octets

Pour les détails, voir la section 6.3.

6.2. Elements of the Digest Authentication Protocol (Éléments du protocole d'authentification par résumé)

Cette section contient les définitions requises pour réaliser le module d'authentification défini dans cette section de ce mémo.

6.2.1. Users (Utilisateurs)

L'authentification utilisant ce protocole d'authentification utilise un ensemble défini de userName. Pour tout utilisateur au nom duquel un message doit être authentifié sur un moteur SNMP particulier, ce moteur SNMP doit avoir connaissance de cet utilisateur. Un moteur SNMP qui souhaite communiquer avec un autre moteur SNMP doit également avoir connaissance d'un utilisateur connu de ce moteur, y compris la connaissance des attributs applicables de cet utilisateur.

Un utilisateur et ses attributs sont définis comme suit:

<userName> (Nom d'utilisateur)

Une chaîne représentant le nom de l'utilisateur.

<authKey> (Clé d'authentification)

La clé secrète d'un utilisateur à utiliser lors du calcul d'un résumé. Elle DOIT avoir une longueur de 16 octets pour MD5.

6.2.2. msgAuthoritativeEngineID (ID du moteur autoritaire)

La valeur msgAuthoritativeEngineID contenue dans un message authentifié spécifie le moteur SNMP autoritaire pour ce message particulier (voir la définition de SnmpEngineID dans le document d'architecture SNMP RFC 3411).

La clé d'authentification (privée) de l'utilisateur est normalement différente sur chaque moteur SNMP autoritaire et donc le snmpEngineID est utilisé pour sélectionner la clé appropriée pour le processus d'authentification.

6.2.3. SNMP Messages Using this Authentication Protocol (Messages SNMP utilisant ce protocole d'authentification)

Les messages utilisant ce protocole d'authentification transportent un champ msgAuthenticationParameters dans le cadre de msgSecurityParameters.

Pour ce protocole, le champ msgAuthenticationParameters est l'OCTET STRING sérialisé représentant les 12 premiers octets de la sortie HMAC-MD5-96 effectuée sur wholeMsg.

Le résumé est calculé sur wholeMsg donc si un message est authentifié, cela signifie également que tous les champs du message sont intacts et n'ont pas été altérés.

6.2.4. Services provided by the HMAC-MD5-96 Authentication Module (Services fournis par le module d'authentification HMAC-MD5-96)

Cette section décrit les entrées et sorties que le module d'authentification HMAC-MD5-96 attend et produit lorsque le module de sécurité basé sur l'utilisateur appelle le module d'authentification HMAC-MD5-96 pour des services.

6.2.4.1. Services for Generating an Outgoing SNMP Message (Services pour générer un message SNMP sortant)

Le protocole d'authentification HMAC-MD5-96 suppose que la sélection de authKey est effectuée par l'appelant et que l'appelant transmet la clé secrète à utiliser.

À la fin, le module d'authentification retourne statusInformation et, si le résumé du message a été correctement calculé, le wholeMsg avec le résumé inséré à l'endroit approprié.

La primitive de service abstraite est:

statusInformation =              -- succès ou échec
authenticateOutgoingMsg(
IN authKey -- clé secrète pour l'authentification
IN wholeMsg -- message complet non authentifié
OUT authenticatedWholeMsg -- message complet authentifié
)

Paramètres (Parameters):

  • statusInformation: Une indication de la réussite du processus d'authentification. Sinon, c'est une indication du problème.

  • authKey: La clé secrète à utiliser par l'algorithme d'authentification. La longueur de cette clé DOIT être de 16 octets.

  • wholeMsg: Le message à authentifier.

  • authenticatedWholeMsg: Le message authentifié en sortie.

6.2.4.2. Services for Processing an Incoming SNMP Message (Services pour traiter un message SNMP entrant)

Le protocole d'authentification HMAC-MD5-96 suppose que la sélection de authKey est effectuée par l'appelant et que l'appelant transmet la clé secrète à utiliser.

À la fin, le module d'authentification retourne statusInformation pour indiquer si le message était authentique ou non.

La primitive de service abstraite est:

statusInformation =              -- succès ou échec
authenticateIncomingMsg(
IN authKey -- clé secrète pour l'authentification
IN authParameters -- tel que reçu sur le réseau
IN wholeMsg -- tel que reçu sur le réseau
OUT authenticatedWholeMsg -- vérifié pour l'authentification
)

Paramètres (Parameters):

  • statusInformation: Une indication de la réussite du processus d'authentification. Sinon, c'est une indication du problème.

  • authKey: La clé secrète à utiliser par l'algorithme d'authentification. La longueur de cette clé DOIT être de 16 octets.

  • authParameters: Le msgAuthenticationParameters du message entrant.

  • wholeMsg: Le message à authentifier.

  • authenticatedWholeMsg: Le message authentifié en sortie.

6.3. Elements of Procedure (Éléments de procédure)

Cette section décrit les procédures pour le protocole d'authentification HMAC-MD5-96.

6.3.1. Processing an Outgoing Message (Traitement d'un message sortant)

Cette section décrit la procédure suivie par un moteur SNMP lorsqu'il génère un message contenant des informations de gestion au nom d'un utilisateur avec un securityLevel qui spécifie que l'authentification doit être utilisée.

Étape 1: Définir msgAuthenticationParameters

Le champ msgAuthenticationParameters est défini sur la sérialisation selon les règles de RFC 3417 d'un OCTET STRING contenant 12 octets nuls.

Étape 2: Calculer le MAC

En utilisant l'authKey secrète de l'utilisateur et le message avec msgAuthenticationParameters défini sur 12 octets nuls, calculer le MAC (Message Authentication Code) selon l'algorithme HMAC-MD5:

MAC = HMAC-MD5(authKey, wholeMsg)

Où:

  • authKey est la clé secrète de 16 octets
  • wholeMsg est le message entier avec msgAuthenticationParameters défini sur 12 octets nuls

Étape 3: Tronquer et insérer le MAC

Prendre les 12 premiers octets de la valeur MAC de 16 octets et les placer dans le champ msgAuthenticationParameters.

Étape 4: Retourner le résultat

Retourner authenticatedWholeMsg au module appelant.

6.3.2. Processing an Incoming Message (Traitement d'un message entrant)

Cette section décrit la procédure suivie par un moteur SNMP lorsqu'il traite un message contenant des informations de gestion avec un securityLevel qui spécifie que l'authentification a été utilisée.

Étape 1: Extraire les paramètres

Extraire msgAuthenticationParameters du message entrant et le sauvegarder.

Étape 2: Définir msgAuthenticationParameters à zéro

Remplacer le champ msgAuthenticationParameters dans le message par un OCTET STRING de 12 octets nuls.

Étape 3: Calculer le MAC attendu

En utilisant l'authKey secrète de l'utilisateur et le message avec msgAuthenticationParameters défini sur 12 octets nuls, calculer le MAC attendu:

expectedMAC = HMAC-MD5(authKey, wholeMsg)

Étape 4: Tronquer le MAC attendu

Prendre les 12 premiers octets de la valeur expectedMAC de 16 octets.

Étape 5: Comparer les MAC

Comparer le msgAuthenticationParameters extrait (de l'étape 1) avec le MAC de 12 octets calculé (de l'étape 4).

S'ils sont égaux, le message est authentifié. S'ils ne sont pas égaux, le message n'est pas authentique et doit être rejeté.

Étape 6: Retourner le résultat

Retourner statusInformation indiquant le succès ou l'échec.

Implementation Notes (Notes d'implémentation)

  1. Longueur de clé (Key Length): L'authKey DOIT être exactement de 16 octets pour HMAC-MD5-96

  2. Troncature MAC (MAC Truncation): Seuls les 96 premiers bits (12 octets) de la sortie MD5 de 128 bits sont utilisés

  3. Comparaison à temps constant (Constant-Time Comparison): Lors de la comparaison des MAC, les implémentations doivent utiliser une comparaison à temps constant pour éviter les attaques temporelles

  4. Mode HMAC (HMAC Mode): Le protocole utilise le mode HMAC tel que spécifié dans RFC 2104, pas MD5 simple

Security Considerations (Considérations de sécurité)

  • Faiblesses de MD5 (MD5 Weaknesses): MD5 présente des faiblesses cryptographiques connues. Bien que HMAC-MD5 soit plus résistant aux attaques que MD5 simple, les implémentations devraient envisager de migrer vers HMAC-SHA-96 pour une meilleure sécurité

  • Gestion des clés (Key Management): L'authKey de 16 octets doit être gardée secrète et correctement gérée

  • Troncature (Truncation): Tronquer le MAC de 128 bits à 96 bits réduit légèrement la sécurité mais est considéré comme acceptable pour les applications SNMP