Passa al contenuto principale

6. HMAC-MD5-96 Authentication Protocol (Protocollo di autenticazione HMAC-MD5-96)

6. HMAC-MD5-96 Authentication Protocol (Protocollo di autenticazione HMAC-MD5-96)

Questa sezione descrive il protocollo di autenticazione HMAC-MD5-96. Questo protocollo di autenticazione è il primo definito per il modello di sicurezza basato sull'utente. Utilizza la funzione hash MD5 descritta in RFC 1321, in modalità HMAC descritta in RFC 2104, troncando l'output a 96 bit.

Questo protocollo è identificato da usmHMACMD5AuthProtocol.

Nel tempo, altri protocolli di autenticazione possono essere definiti sia come sostituzione di questo protocollo sia in aggiunta a questo protocollo.

6.1. Mechanisms (Meccanismi)

Il protocollo di autenticazione HMAC-MD5-96 fornisce i seguenti meccanismi:

Data Integrity Support (Supporto per l'integrità dei dati)

A supporto dell'integrità dei dati, è richiesto un algoritmo di message digest. Un digest viene calcolato su una porzione appropriata di un messaggio SNMP e incluso come parte del messaggio inviato al destinatario.

Data Origin Authentication (Autenticazione dell'origine dei dati)

A supporto dell'autenticazione dell'origine dei dati e dell'integrità dei dati, un valore segreto viene anteposto al messaggio SNMP prima di calcolare il digest; il digest calcolato viene parzialmente inserito nel messaggio SNMP prima della trasmissione e il valore anteposto non viene trasmesso. Il valore segreto è condiviso da tutti i motori SNMP autorizzati a originare messaggi per conto dell'utente appropriato.

6.1.1. Digest Authentication Mechanism (Meccanismo di autenticazione del digest)

Il meccanismo di autenticazione del digest definito in questo memo fornisce:

Integrity Verification (Verifica dell'integrità)

Verifica dell'integrità di un messaggio ricevuto, cioè il messaggio ricevuto è il messaggio inviato.

L'integrità del messaggio è protetta calcolando un digest su una porzione appropriata del messaggio. Il digest è calcolato dall'originatore del messaggio, trasmesso con il messaggio e verificato dal destinatario del messaggio.

User Verification (Verifica dell'utente)

Verifica dell'utente per conto del quale è stato generato il messaggio.

Un valore segreto noto solo ai motori SNMP autorizzati a generare messaggi per conto di un utente viene utilizzato in modalità HMAC (vedere RFC 2104). Raccomanda inoltre che l'output della funzione hash utilizzato come Message Authentication Code venga troncato.

6.1.2. Algorithm Details (Dettagli dell'algoritmo)

Questo protocollo utilizza l'algoritmo di message digest MD5 (RFC 1321):

  • Un digest MD5 a 128 bit viene calcolato in modo speciale (HMAC) sulla porzione designata di un messaggio SNMP
  • I primi 96 bit di questo digest vengono inclusi come parte del messaggio inviato al destinatario
  • La dimensione del digest trasportato in un messaggio è di 12 ottetti
  • La dimensione della chiave di autenticazione privata (il segreto) è di 16 ottetti

Per i dettagli vedere la sezione 6.3.

6.2. Elements of the Digest Authentication Protocol (Elementi del protocollo di autenticazione del digest)

Questa sezione contiene le definizioni necessarie per realizzare il modulo di autenticazione definito in questa sezione di questo memo.

6.2.1. Users (Utenti)

L'autenticazione utilizzando questo protocollo di autenticazione fa uso di un insieme definito di userName. Per qualsiasi utente per conto del quale un messaggio deve essere autenticato presso un particolare motore SNMP, quel motore SNMP deve avere conoscenza di quell'utente. Un motore SNMP che desidera comunicare con un altro motore SNMP deve anche avere conoscenza di un utente noto a quel motore, inclusa la conoscenza degli attributi applicabili di quell'utente.

Un utente e i suoi attributi sono definiti come segue:

<userName> (Nome utente)

Una stringa che rappresenta il nome dell'utente.

<authKey> (Chiave di autenticazione)

La chiave segreta di un utente da utilizzare quando si calcola un digest. DEVE essere lunga 16 ottetti per MD5.

6.2.2. msgAuthoritativeEngineID (ID del motore autorevole)

Il valore msgAuthoritativeEngineID contenuto in un messaggio autenticato specifica il motore SNMP autorevole per quel particolare messaggio (vedere la definizione di SnmpEngineID nel documento di architettura SNMP RFC 3411).

La chiave di autenticazione (privata) dell'utente è normalmente diversa presso ogni motore SNMP autorevole e quindi lo snmpEngineID viene utilizzato per selezionare la chiave appropriata per il processo di autenticazione.

6.2.3. SNMP Messages Using this Authentication Protocol (Messaggi SNMP che utilizzano questo protocollo di autenticazione)

I messaggi che utilizzano questo protocollo di autenticazione trasportano un campo msgAuthenticationParameters come parte di msgSecurityParameters.

Per questo protocollo, il campo msgAuthenticationParameters è l'OCTET STRING serializzato che rappresenta i primi 12 ottetti dell'output HMAC-MD5-96 eseguito su wholeMsg.

Il digest è calcolato su wholeMsg quindi se un messaggio è autenticato, ciò significa anche che tutti i campi nel messaggio sono intatti e non sono stati manomessi.

6.2.4. Services provided by the HMAC-MD5-96 Authentication Module (Servizi forniti dal modulo di autenticazione HMAC-MD5-96)

Questa sezione descrive gli input e gli output che il modulo di autenticazione HMAC-MD5-96 si aspetta e produce quando il modulo di sicurezza basato sull'utente chiama il modulo di autenticazione HMAC-MD5-96 per i servizi.

6.2.4.1. Services for Generating an Outgoing SNMP Message (Servizi per generare un messaggio SNMP in uscita)

Il protocollo di autenticazione HMAC-MD5-96 presuppone che la selezione di authKey sia effettuata dal chiamante e che il chiamante passi la chiave segreta da utilizzare.

Al completamento il modulo di autenticazione restituisce statusInformation e, se il message digest è stato calcolato correttamente, il wholeMsg con il digest inserito nel posto appropriato.

La primitiva di servizio astratta è:

statusInformation =              -- successo o fallimento
authenticateOutgoingMsg(
IN authKey -- chiave segreta per l'autenticazione
IN wholeMsg -- messaggio completo non autenticato
OUT authenticatedWholeMsg -- messaggio completo autenticato
)

Parametri (Parameters):

  • statusInformation: Un'indicazione se il processo di autenticazione ha avuto successo. In caso contrario, è un'indicazione del problema.

  • authKey: La chiave segreta da utilizzare dall'algoritmo di autenticazione. La lunghezza di questa chiave DEVE essere di 16 ottetti.

  • wholeMsg: Il messaggio da autenticare.

  • authenticatedWholeMsg: Il messaggio autenticato in output.

6.2.4.2. Services for Processing an Incoming SNMP Message (Servizi per elaborare un messaggio SNMP in entrata)

Il protocollo di autenticazione HMAC-MD5-96 presuppone che la selezione di authKey sia effettuata dal chiamante e che il chiamante passi la chiave segreta da utilizzare.

Al completamento il modulo di autenticazione restituisce statusInformation per indicare se il messaggio era autentico o meno.

La primitiva di servizio astratta è:

statusInformation =              -- successo o fallimento
authenticateIncomingMsg(
IN authKey -- chiave segreta per l'autenticazione
IN authParameters -- come ricevuto sulla rete
IN wholeMsg -- come ricevuto sulla rete
OUT authenticatedWholeMsg -- controllato per l'autenticazione
)

Parametri (Parameters):

  • statusInformation: Un'indicazione se il processo di autenticazione ha avuto successo. In caso contrario, è un'indicazione del problema.

  • authKey: La chiave segreta da utilizzare dall'algoritmo di autenticazione. La lunghezza di questa chiave DEVE essere di 16 ottetti.

  • authParameters: Il msgAuthenticationParameters dal messaggio in entrata.

  • wholeMsg: Il messaggio da autenticare.

  • authenticatedWholeMsg: Il messaggio autenticato in output.

6.3. Elements of Procedure (Elementi di procedura)

Questa sezione descrive le procedure per il protocollo di autenticazione HMAC-MD5-96.

6.3.1. Processing an Outgoing Message (Elaborazione di un messaggio in uscita)

Questa sezione descrive la procedura seguita da un motore SNMP quando genera un messaggio contenente informazioni di gestione per conto di un utente con un securityLevel che specifica che l'autenticazione deve essere utilizzata.

Passo 1: Impostare msgAuthenticationParameters

Il campo msgAuthenticationParameters è impostato sulla serializzazione secondo le regole in RFC 3417 di un OCTET STRING contenente 12 ottetti zero.

Passo 2: Calcolare il MAC

Utilizzando l'authKey segreto dell'utente e il messaggio con msgAuthenticationParameters impostato su 12 ottetti zero, calcolare il MAC (Message Authentication Code) secondo l'algoritmo HMAC-MD5:

MAC = HMAC-MD5(authKey, wholeMsg)

Dove:

  • authKey è la chiave segreta di 16 ottetti
  • wholeMsg è l'intero messaggio con msgAuthenticationParameters impostato su 12 ottetti zero

Passo 3: Troncare e inserire il MAC

Prendere i primi 12 ottetti del valore MAC di 16 ottetti e posizionarli nel campo msgAuthenticationParameters.

Passo 4: Restituire il risultato

Restituire authenticatedWholeMsg al modulo chiamante.

6.3.2. Processing an Incoming Message (Elaborazione di un messaggio in entrata)

Questa sezione descrive la procedura seguita da un motore SNMP quando elabora un messaggio contenente informazioni di gestione con un securityLevel che specifica che l'autenticazione è stata utilizzata.

Passo 1: Estrarre i parametri

Estrarre msgAuthenticationParameters dal messaggio in entrata e salvarlo.

Passo 2: Impostare msgAuthenticationParameters a zero

Sostituire il campo msgAuthenticationParameters nel messaggio con un OCTET STRING di 12 ottetti zero.

Passo 3: Calcolare il MAC previsto

Utilizzando l'authKey segreto dell'utente e il messaggio con msgAuthenticationParameters impostato su 12 ottetti zero, calcolare il MAC previsto:

expectedMAC = HMAC-MD5(authKey, wholeMsg)

Passo 4: Troncare il MAC previsto

Prendere i primi 12 ottetti del valore expectedMAC di 16 ottetti.

Passo 5: Confrontare i MAC

Confrontare il msgAuthenticationParameters estratto (dal passo 1) con il MAC di 12 ottetti calcolato (dal passo 4).

Se sono uguali, il messaggio è autenticato. Se non sono uguali, il messaggio non è autentico e dovrebbe essere scartato.

Passo 6: Restituire il risultato

Restituire statusInformation che indica successo o fallimento.

Implementation Notes (Note di implementazione)

  1. Lunghezza della chiave (Key Length): L'authKey DEVE essere esattamente di 16 ottetti per HMAC-MD5-96

  2. Troncamento MAC (MAC Truncation): Vengono utilizzati solo i primi 96 bit (12 ottetti) dell'output MD5 di 128 bit

  3. Confronto a tempo costante (Constant-Time Comparison): Quando si confrontano i MAC, le implementazioni dovrebbero utilizzare un confronto a tempo costante per evitare attacchi temporali

  4. Modalità HMAC (HMAC Mode): Il protocollo utilizza la modalità HMAC come specificato in RFC 2104, non MD5 semplice

Security Considerations (Considerazioni sulla sicurezza)

  • Debolezze di MD5 (MD5 Weaknesses): MD5 ha note debolezze crittografiche. Sebbene HMAC-MD5 sia più resistente agli attacchi rispetto a MD5 semplice, le implementazioni dovrebbero considerare la migrazione a HMAC-SHA-96 per una migliore sicurezza

  • Gestione delle chiavi (Key Management): L'authKey di 16 ottetti deve essere mantenuto segreto e gestito correttamente

  • Troncamento (Truncation): Troncare il MAC da 128 bit a 96 bit riduce leggermente la sicurezza ma è considerato accettabile per le applicazioni SNMP