1.6. Abstract Service Interfaces (Interfacce di servizio astratte)
1.6. Abstract Service Interfaces (Interfacce di servizio astratte)
Il modello di sicurezza basato sull'utente è progettato per integrarsi con l'architettura SNMPv3 attraverso interfacce di servizio astratte ben definite. Queste interfacce consentono all'USM di funzionare indipendentemente da altri sottosistemi fornendo al contempo i servizi di sicurezza necessari.
Security Model Interface (Interfaccia del modello di sicurezza)
L'USM implementa l'interfaccia del modello di sicurezza definita nella RFC 3411. Questa interfaccia è composta da due primitive principali:
1. generateRequestMsg (Genera messaggio di richiesta)
Scopo (Purpose): Elaborare un messaggio SNMP in uscita aggiungendo informazioni relative alla sicurezza.
Input (Inputs):
messageProcessingModel: La versione SNMP (3 per SNMPv3)globalData: Informazioni di intestazione del messaggio globalemaxMessageSize: Dimensione massima del messaggio supportatasecurityModel: Identificatore del modello di sicurezza (3 per USM)securityEngineID: L'identificatore del motore SNMP autorevolesecurityName: Il principale per conto del quale viene generato il messaggiosecurityLevel: Il livello di sicurezza desiderato (noAuthNoPriv, authNoPriv o authPriv)scopedPDU: Il payload del messaggio da proteggere
Output (Outputs):
securityParameters: Parametri di sicurezza specifici dell'USM (engineID, engineBoots, engineTime, userName, parametri di autenticazione, parametri di privacy)wholeMsg: Il messaggio protetto completo pronto per la trasmissionestatusInformation: Indicazione di successo o errore
Elaborazione (Processing):
- Validare gli input
- Recuperare le chiavi di autenticazione e privacy dell'utente
- Incrementare e includere engineBoots ed engineTime
- Applicare il protocollo di privacy se securityLevel include la privacy
- Calcolare il digest di autenticazione se securityLevel include l'autenticazione
- Assemblare il messaggio completo
2. processIncomingMsg (Elabora messaggio in entrata)
Scopo (Purpose): Elaborare un messaggio SNMP in entrata verificando le informazioni relative alla sicurezza.
Input (Inputs):
messageProcessingModel: La versione SNMPmaxMessageSize: Dimensione massima del messaggio supportatasecurityParameters: I parametri di sicurezza USM ricevutisecurityModel: Identificatore del modello di sicurezzasecurityLevel: Il livello di sicurezza attesowholeMsg: Il messaggio completo ricevutosecurityEngineID: L'identificatore del motore autorevole (dal messaggio)
Output (Outputs):
securityName: Il principale autenticatoscopedPDU: Il payload del messaggio decriptato e verificatomaxSizeResponseScopedPDU: Dimensione massima per la rispostasecurityStateReference: Riferimento per generare rispostestatusInformation: Indicazione di successo o errore
Elaborazione (Processing):
- Analizzare securityParameters
- Verificare che msgAuthoritativeEngineID corrisponda al motore locale (per i risponditori di comandi)
- Verificare che userName esista in usmUserTable
- Controllare la finestra temporale (engineBoots ed engineTime)
- Decriptare il messaggio se è stata applicata la privacy
- Verificare il digest di autenticazione se è stata applicata l'autenticazione
- Estrarre e restituire scopedPDU
Integration with Message Processing Subsystem (Integrazione con il sottosistema di elaborazione dei messaggi)
Il sottosistema di elaborazione dei messaggi invoca l'USM attraverso queste interfacce in punti specifici dell'elaborazione dei messaggi:
Per i messaggi in uscita (For Outgoing Messages):
Applicazione → Dispatcher → Elaborazione messaggi → Modello di sicurezza (USM) → Trasporto
Per i messaggi in entrata (For Incoming Messages):
Trasporto → Dispatcher → Elaborazione messaggi → Modello di sicurezza (USM) → Applicazione
Interaction with Access Control (Interazione con il controllo degli accessi)
L'USM fornisce il securityName autenticato al sottosistema di controllo degli accessi (VACM), che lo utilizza per determinare l'autorizzazione:
- L'USM autentica l'utente e fornisce
securityName - Il VACM utilizza
securityName,securityModelesecurityLevelper determinare i diritti di accesso - Il VACM concede o nega l'accesso in base alle policy configurate
Questa separazione assicura che:
- L'USM si concentra su: "Chi sei?" (Autenticazione) e "Il messaggio è intatto?" (Integrità)
- Il VACM si concentra su: "Cosa ti è permesso fare?" (Autorizzazione)
Error Handling and Reports (Gestione degli errori e rapporti)
Quando l'USM rileva un errore di sicurezza, può generare un Report-PDU:
Scenari di errore comuni (Common Error Scenarios):
-
ID motore sconosciuto (Unknown Engine ID): Contatore
usmStatsUnknownEngineIDsincrementato- Utilizzato durante il processo di scoperta
- Il rapporto contiene l'engineID del motore locale
-
Violazione della finestra temporale (Time Window Violation): Contatore
usmStatsNotInTimeWindowsincrementato- Utilizzato durante la sincronizzazione temporale
- Il rapporto contiene gli engineBoots ed engineTime correnti
-
Fallimento dell'autenticazione (Authentication Failure): Contatore
usmStatsWrongDigestsincrementato- Indica password/chiave errata o manomissione del messaggio
- Rapporto inviato allo stesso livello di sicurezza del messaggio ricevuto
-
Fallimento della decrittazione (Decryption Failure): Contatore
usmStatsDecryptionErrorsincrementato- Indica chiave di privacy errata o corruzione del messaggio
- Rapporto inviato allo stesso livello di sicurezza del messaggio ricevuto
-
Utente sconosciuto (Unknown User): Contatore
usmStatsUnknownUserNamesincrementato- Indica che userName non è in usmUserTable
- Rapporto inviato senza autenticazione
Service Primitive Sequences (Sequenze di primitive di servizio)
Discovery Sequence (Sequenza di scoperta)
1. L'applicazione invia una richiesta con engineID vuoto
2. L'USM genera un messaggio con securityLevel = noAuthNoPriv
3. Il motore autorevole riceve il messaggio
4. L'USM rileva un engineID sconosciuto
5. L'USM genera un rapporto con usmStatsUnknownEngineIDs
6. L'applicazione riceve il rapporto, apprende l'engineID
Time Synchronization Sequence (Sequenza di sincronizzazione temporale)
1. L'applicazione invia una richiesta con engineID memorizzato, engineBoots/Time a zero
2. L'USM genera un messaggio autenticato
3. Il motore autorevole riceve il messaggio
4. L'USM rileva una violazione della finestra temporale
5. L'USM genera un rapporto con usmStatsNotInTimeWindows e valori temporali correnti
6. L'applicazione riceve il rapporto, aggiorna i valori temporali memorizzati
7. L'applicazione riprova la richiesta originale con il tempo sincronizzato
Authenticated Communication Sequence (Sequenza di comunicazione autenticata)
1. L'applicazione invia una richiesta
2. L'USM genera un messaggio autenticato con gli engineBoots/Time correnti
3. L'USM calcola il digest di autenticazione
4. Il motore autorevole riceve il messaggio
5. L'USM verifica la finestra temporale
6. L'USM verifica il digest di autenticazione
7. L'USM estrae scopedPDU
8. L'applicazione elabora la richiesta
9. L'applicazione genera una risposta
10. L'USM genera un messaggio di risposta autenticato
11. Il motore non autorevole riceve la risposta
12. L'USM verifica il digest di autenticazione
13. L'USM estrae scopedPDU
14. L'applicazione elabora la risposta
Asynchronous vs. Synchronous Operation (Operazione asincrona vs. sincrona)
Le interfacce di servizio astratte sono progettate per supportare entrambe:
Operazione sincrona (Synchronous Operation):
- L'applicazione attende la risposta
- Tipico per il modello generatore/risponditore di comandi
Operazione asincrona (Asynchronous Operation):
- L'applicazione non attende
- Tipico per il modello iniziatore/ricevitore di notifiche
L'USM non detta il modello operativo; fornisce semplicemente servizi di sicurezza indipendentemente da come l'applicazione sceglie di operare.