3  MESSAGE AUTENTICATION CODE

Uno schema di autenticazione dei messaggi consente a individui in possesso di una chiave segreta condivisa di realizzare l’obiettivo dell’integrità dei dati. 

3.1   INTRODUZIONE

Supponiamo di trovarci di fronte al seguente scenario: S è un  messaggio inviato all'entità A e contenente dei dati che lo identificano come proveniente da B. Nell'ambito da noi preso in considerazione B ed  A, possono essere: persone reali, gruppi, indirizzi di rete o altro. A deve essere in grado di verificare in maniera sicura la provenienza del messaggio; questo può essere fatto mediante l'uso di un repository pubblico dove vengono abbinati identificativi e identità, il meccanismo appena indicato non rende possibile rinnegare la paternità dei messaggi inviati. Una esigenza stringente è che sia sempre possibile verificare che il messaggio non è stato alterato; per meglio comprendere questo immaginiamo il seguente scenario: B invia alla sua banca una richiesta di pagamento a favore di A per una data cifra firmando la richiesta, se A riesce a modificare il messaggio in modo da aumentare questa cifra, la banca non ha modo di verificare se quella fosse la richiesta originariamente spedita da A e quindi A riesce ad ottenere più di quanto gli spettasse.  

 

 

 

 

 

L'autenticazione dei dati trasmessi attraverso una rete è più importante rispetto alla  privacy dei dati quando questi ultimi interessano operazioni commerciali. Se lo schema proposto non garantisce un'autenticazione affidabile, un eventuale nemico non ha bisogno di effettuare un attacco attivo. Il nemico in questo caso per creare danni può modificare le comunicazioni, oppure  introdurne delle nuove. Una situazione del genere è un opportunità in più fornita al nemico ed è perciò preferibile non dargliela. 

Il problema dell’autenticazione è molto differente dal problema della cifratura. In questo caso non ci preoccupiamo della segretezza delle informazioni, ma della capacità del nemico di modificarle.

3.2  SCHEMI DI AUTENTICAZIONE DEI MESSAGGI

Quando viene usata una chiave privata per fornire l’integrità dei dati si fa uso di uno schema di autenticazione dei messaggi. Questo è uno schema specificato da tre algoritmi: 

Il mittente ed il destinatario sono in possesso di una chiave K generata attraverso l'algoritmo K e non conosciuta dal nemico. Quando il mittente vuole inviare un messaggio M in modo autenticato a B, egli calcola una etichetta  per M come una funzione di M e della chiave segreta K condivisa tra il mittente ed il destinatario, nel modo specificato dall’algoritmo di etichettatura T ; vale a dire . Questa etichetta accompagna il messaggio nella trasmissione; cioè, S trasmette la coppia (M, ) a B. (Si noti che il messaggio è inviato in chiaro. Inoltre la lunghezza della trasmissione è più lunga del messaggio originario della lunghezza dell’etichetta ). Quando il destinatario B riceve una trasmissione (M’, ) supposta provenire da S,  verifica l'autenticità dell’etichetta usando la procedura di verifica specificata, che dipende dal messaggio, dall’etichetta, e dalla chiave condivisa. Cioè egli calcola , il cui risultato è o il valore vero o il valore falso.  Se questo valore è vero, i dati letti sono ritenuti autentici e così B li accetta come provenienti da S. Altrimenti  li scarta come dati non autentici.

 

 

 

 

 

Definizione Uno schema di autenticazione dei messaggi MA=(K,T,V)  consiste di tre algoritmi, come segue:

Associato allo schema c’è lo spazio di tutti i possibili messaggi MsgSp.  Si richiede che  per ogni K  e per tutti gli M appartenenti a MsgSp.

L’ultima parte della definizione dice che se le etichette sono correttamente generate allora passeranno l’algoritmo di verifica. Questo semplicemente assicura che l’autenticità dei dati sarà accettata dal ricevente.

L’algoritmo di etichettatura può essere randomizzato, vale a dire che una moneta al suo interno è lanciata e  usa questi lanci per determinare i suoi output. In questo caso, ci possono essere molte etichette corrette per un singolo messaggio M

3.3  CBC-MAC

Sia  un cifrario a blocchi. Il CBC-MAC con funzione di base F è lo schema di autenticazione dei messaggi nel quale l’etichetta di un messaggio è l’ultimo blocco del testo cifrato ottenuto cifrando il messaggio in modalità CBC con vettore di inizializzazione zero IV. Più in dettaglio, lo schema è CBC-MAC =(K,T,V) dove K è l’algoritmo che fornisce una chiave K di k-bit lanciando k monete e ritornando le loro uscite. Il messaggio M di input agli algoritmi prima devono avere una lunghezza multipla di l bit.

 

Algoritmo

Dividi M in blocchi di l bit, M=

For i=1,…,n do

Return

Algoritmo

Dividi M in blocchi di l bit, M=

For i=1,…,n do

If = then return true else return false

Poiché l’algoritmo di etichettatura è deterministico, l’algoritmo di verifica semplicemente controlla se è o non è l’etichetta corretta come discusso precedentemente.

La scelta dello spazio dei messaggi è importante per la sicurezza del CBC-MAC. Se sono permessi messaggi di varia lunghezza lo schema è insicuro, ma se la lunghezza dei messaggi è ristretta a qualche valore singolo fissato e prespecificato, lo schema diventa più sicuro.

Quando DES  è usato come cifrario a blocchi F,  i blocchi avranno lunghezza pari a 64 bit, e la chiave del MAC è una chiave DES di 56 bit.

 

3.4  MAC BASATI SU FUNZIONI HASH

 

Recentemente c’è stato un grande interesse nel campo della autenticazione dei messaggi con l’uso di funzioni hash come MD5 ed SHA, particolarmente per i protocolli di sicurezza di Internet. Nel software queste funzioni hash sono significativamente più veloci del DES; il codice di libreria è largamente e liberamente disponibile; e non ci sono restrizioni di esportazione sulle funzioni hash. Le  funzioni hash non sono state originariamente progettate per il MAC. (Una delle molte difficoltà è che esse non sono esattamente delle primitive con chiave, cioè, non forniscono la nozione di chiave segreta). 

Considereremo alcune proposte di costruzioni di MAC basate su funzioni hash. 

Le difficoltà delle costruzioni precedenti nell'analisi della sicurezza, hanno indotto alla progettazione di HMAC che intende riempire questo vuoto. Essa ha prestazioni che sono essenzialmente quelle delle funzioni hash utilizzate. Essa usa la funzione hash in modo black-box così che può essere implementata con il codice disponibile, e anche il rimpiazzamento della funzione hash  a causa della sicurezza o delle prestazioni si può effettuare agevolmente. Il suo vantaggio principale, naturalmente, è che può essere provata la sicurezza fornita dalla funzione hash utilizzata che ha qualche ragionevole forza crittografica. Le caratteristiche di sicurezza possono essere riassunte così: se HMAC fallisce ad essere un MAC sicuro, significa che ci sono sufficienti punti deboli nella funzione hash utilizzata che ha bisogno di essere esclusa non solo da questo particolare uso ma da un ampio raggio di altri usi popolari ai quali essa è attualmente soggetta.

Sia H la funzione hash, per semplicità di descrizione assumiamo H essere MD5 o SHA-1. H prende input di qualsiasi lunghezza e produce output ad l bit ( l=128 per MD5 ed l=160 per SHA-1).  Sia Text il messaggio al quale la funzione MAC deve essere applicata e sia K la chiave segreta e condivisa dell’autenticazione del messaggio delle due parti. ( La chiave non dovrebbe essere  più lunga di 64 byte la dimensione di un blocco hash e se più corta degli zero sono aggiunti per rendere la lunghezza esattamente di 64 byte).  Noi fissiamo inoltre due differenti stringhe di 64 byte ipad e opad  come segue:

ipad= il byte 0x36 ripetuto 64 volte

opad= il byte 0x5c ripetuto 64volte.

La funzione HMAC prende la chiave K e Text , e produce

 

Cioè:

(1)   Appendi zero alla fine di K per creare una stringa di 64 byte

(2)   XOR della stringa di 64 byte calcolata nel passo (1) con ipad

(3)   Appendi il messaggio Text alla stringa risultante al passo (2)

(4)   Applica H alla stringa generata al passo (3)

(5)   XOR della stringa di 64 byte calcolata al passo (1) con opad

(6)   Appendi il risultato hash di H dal passo (4) alla stringa di 64 byte risultante dal passo (5)

(7)   Applica H alla stringa generata nel passo (6) ed restituisci il risultato in output.

 

La lunghezza raccomandata della chiave è almeno di l bit. Una chiave più lunga non aggiunge nulla di significativo alla sicurezza della funzione.

HMAC opzionalmente  consente il troncamento dell’output finale diciamo a 80 bit.

Il costo totale per l’autenticazione di un messaggio Text è prossimo a quello del calcolo della funzione hash del messaggio, specialmente se Text è grande. Inoltre,  l'hashing delle chiavi aggiunte può essere precancolato per un miglioramento dell’efficienza.

Nota che HMAC usa la funzione hash H come un black box e nessuna modifica al codice per H è richiesta per implementare HMAC. Questo rende facile usare librerie di codice per H e anche rimpiazzare una particolare funzione hash, tale come MD5, con un’altra come SHA.  HMAC è stato recentemente scelto come obbligatorio per implementare l’autenticazione per i protocolli di sicurezza Internet che sono stati progettati per IPSEC dal gruppo di lavoro dell’IETF. Per questo scopo HMAC è descritto in una RFC. Altri protocolli Internet stanno adottando HMAC come per esempio s-http, SSL.

Come abbiamo già menzionato le funzioni hash non sono originariamente progettate per essere usate per l’autenticazione dei messaggi. In particolare esse non sono delle primitive con chiavi, e non è chiaro quale sia la chiave migliore per loro. In questo modo è necessario essere attenti particolarmente nell’adottare una funzione hash per il MAC. La massima che guida la costruzione di  HMAC è stata che l’assenza di attacchi oggi non implica la sicurezza per il futuro. Le assunzioni sulla sicurezza delle funzioni hash non dovrebbero essere troppo forti, poiché non è stata ancora raggiunta un sufficiente collaudo con le candidate (come MD5 ed SHA). Ciò che si è mostrato è che se la funzione hash ha proprietà di sicurezza allora il MAC è sicuro: l’unico modo in cui il MAC potrebbe fallire è se la funzione hash fallisce. La sicurezza del MAC significa sicurezza contro le contraffazioni. Il MAC è considerato rotto se un nemico non avendo la chiave K può trovare qualche messaggio Text  insieme con il suo corretto valore MAC . Il nemico si assume possa avere a disposizione un certo numero di coppie di messaggi e del loro corretto valore MAC osservando il traffico tra il mittente ed il destinatario. Inoltre al nemico è consentito di poter influenzare la scelta dei messaggi di cui conosce il corretto valore MAC. La sicurezza è classificata in termini della probabilità di una contraffazione con successo sotto tali attacchi.

3.5  ATTACCHI CONTRO HMAC

Gli attacchi del compleanno che stanno alla base della ricerca delle collisioni per le funzioni hash possono essere applicati anche agli schemi MAC basati su funzioni iterate (incluso anche CBC-MAC, ed altri schemi).  In particolare essi costituiscono il miglior modo conosciuto di attacco per la contraffazione contro HMAC. Tuttavia, la loro rilevanza pratica contro queste funzioni è trascurabile data la lunghezza tipica dei valori hash come 128 o 160 bit.

Inoltre questi attacchi richiedono la collezione del valore MAC (per una data chiave)  di circa  messaggi (dove l è la lunghezza del valore hash). Per valori di l >128 l’attacco diviene totalmente impraticabile. Per esempio, quando si usa MD5 un tale attacco dovrebbe richiedere l’autenticazione di blocchi di dati usando la stessa chiave. Su di un link di comunicazione a 1Gbit/sec, ci vorrebbero 250.000 anni per computare tutti i dati richiesti da un simile attacco.