Passa al contenuto principale

6.4. Data Integrity (Integrità dei dati)

6.4. Data Integrity (Integrità dei dati)

L'integrità dei dati è protetta includendo con ogni pacchetto un MAC che viene calcolato da un segreto condiviso, numero di sequenza del pacchetto e contenuto del pacchetto.

L'algoritmo di autenticazione del messaggio e la chiave vengono negoziati durante lo scambio di chiavi. Inizialmente, nessun MAC sarà in vigore e la sua lunghezza DEVE essere zero. Dopo lo scambio di chiavi, il mac per l'algoritmo MAC selezionato sarà calcolato prima della crittografia dalla concatenazione dei dati del pacchetto:

mac = MAC(key, sequence_number || unencrypted_packet)

dove unencrypted_packet è l'intero pacchetto senza mac (i campi di lunghezza, payload e random padding), e sequence_number è un numero di sequenza del pacchetto implicito rappresentato come uint32. Il sequence_number viene inizializzato a zero per il primo pacchetto e viene incrementato dopo ogni pacchetto (indipendentemente dal fatto che la crittografia o il MAC siano in uso). Non viene mai reimpostato, anche se le chiavi/algoritmi vengono rinegoziati successivamente. Si ripete a zero dopo ogni 2^32 pacchetti. Il sequence_number del pacchetto stesso non è incluso nel pacchetto inviato attraverso la rete.

Gli algoritmi MAC per ogni direzione DEVONO funzionare indipendentemente, e le implementazioni DEVONO consentire di scegliere l'algoritmo indipendentemente per entrambe le direzioni. In pratica tuttavia, è RACCOMANDATO che lo stesso algoritmo sia utilizzato in entrambe le direzioni.

Il valore di mac risultante dall'algoritmo MAC DEVE essere trasmesso senza crittografia come ultima parte del pacchetto. Il numero di byte di mac dipende dall'algoritmo scelto.

Gli algoritmi MAC attualmente definiti sono i seguenti:

hmac-sha1    REQUIRED        HMAC-SHA1 (lunghezza digest = lunghezza chiave = 20)
hmac-sha1-96 RECOMMENDED primi 96 bit di HMAC-SHA1 (lunghezza digest = 12, lunghezza chiave = 20)
hmac-md5 OPTIONAL HMAC-MD5 (lunghezza digest = lunghezza chiave = 16)
hmac-md5-96 OPTIONAL primi 96 bit di HMAC-MD5 (lunghezza digest = 12, lunghezza chiave = 16)
none OPTIONAL nessun MAC; NON RACCOMANDATO

Gli algoritmi "hmac-" sono descritti in [RFC2104]. I MAC "-n" utilizzano solo i primi n bit del valore risultante.

SHA-1 è descritto in [FIPS-180-2] e MD5 è descritto in [RFC1321].

Metodi aggiuntivi possono essere definiti, come specificato in [SSH-ARCH] e in [SSH-NUMBERS].