vuoi
o PayPal
tutte le volte che vuoi
Tutti questi attacchi mirano ad attaccare l’autenticità del messaggio e sono classificabili in 3
categorie in base alla caratteristica che si desidera evitare che questi attacchi abbiano successo: i
primi due sono attacchi alla riservatezza della comunicazione; la seconda categoria è quella degli
attacchi che possiamo combattere con l’autenticazione del messaggio (rientrano in questa
categoria il 3-4-5); la terza categoria di attacchi sono attacchi al ripudio e comprendono gli ultimi
due dove possiamo combatterli con la firma digitale.
Per fare l’autenticazione del messaggio ci sono 2 fasi:
- Ottenere un indicatore chiamato autenticatore che è un oggetto digitale che può essere
utilizzato per l’autenticazione del messaggio
- Utilizzare l’autenticatore tramite qualche procedura per effettuare l’autenticazione del
messaggio.
Ci sono 3 diversi metodi per effettuare l’autenticazione del messaggio:
- Applicare le funzioni hash (GIA’ VISTO)
- Applicare la cifratura del messaggio: in questo caso l’autenticatore è costituito dallo stesso
messaggio cifrato.
- MAC: si usa come input al meccanismo dove il messaggio stesso è una chiave e produce
una uscita di lunghezza fissa come l’hash. La differenza rispetto all’hash è che questo
impiega una chiave segreta.
Funzioni hash
GIA VISTO
Cifratura del messaggio
Qui i meccanismi di cifratura sono applicati non per nascondere il messaggio ma per effettuare
l’autenticazione del messaggio. Per quanto riguarda i meccanismi di cifratura a chiave simmetrica
si ottiene riservatezza ed autenticazione (tramite l’utilizzo della chiave segreta k perchè se
l’attaccante volesse modificare il messaggio e farlo arrivare al destinatario facendogli credere che
è il messaggio originario allora dovrebbe cifrarlo con la chiave k; l’attaccante però dovrebbe sapere
la chiave k e poiché la chiave k è per assunzione segreta e nota solo al mittente e destinatario
allora solo il mittente può aver cifrare quel messaggio e mandarlo); questo meccanismo non è un
meccanismo di firma digitale perché è vero che solo il mittente può aver mandato il messaggio con
la chiave k, ma questo è vero solo se il destinatario non lo ha fatto a sua volta nel senso che tutto
è legato alla conoscenza della chiave k.
Il problema di questo meccanismo è quello sapere, dopo aver decifrato il messaggio, che il
messaggio è effettivamente quello originario; se il messaggio di partenza è un messaggio che ha
una sua semantica corretta allora si può vedere se quello che arrivato ha un formato in una
qualche lingua allora può essere il messaggio originario; ma se si è cifrato il risultato ad esempio di
un algoritmo di compressione dopo che decifro riottengo un file compresso e chi ci dice che è il
messaggio corretto? questo può essere risolto usando un sottoinsieme dei possibili messaggi
oppure se il messaggio ha una sua semantica può essere affidabile oppure si può appendere un
FCS (frame check sequence) oppure usare qualche altra informazione di struttura che l’attaccante
non sa come modificare.
Vediamo ora come queste tecniche di controllo degli errori si possono applicare:
Il controllo degli errori che utilizza un FCS attaccato al messaggio si può applicare nei due modi
dello schema superiore:
- Nel primo schema (controllo degli errori interni) del messaggio viene calcolato l’FCS e lo si
concatena (quindi viene trasmesso il messaggio e il FCS tutti cifrati insieme): quindi la
cifratura avviene in blocco per messaggio + blocco di controllo degli errori. A destinazione
si decifra; questo restituisce sia il messaggio e sia il blocco di controllo degli errori; dal
messaggio ci si ricalcola l’FCS e questi devono coincidere. Se non coincidono vuol dire che
il messaggio non è quello che inizialmente era stato mandato. Si chiama controllo degli
errori interno perché l’FCS si calcola prima della cifratura.
- Nel secondo schema (controllo degli errori esterni) si cifra subito il messaggio e si calcola
l’FCS sul messaggio cifrato; poi lo si concatena. A destinazione abbiamo direttamente
l’FCS e poi dal messaggio cifrato ci si ricava l’FCS; se sono uguali allora non è stata fatta
nessuna modifica. Per decifrare il messaggio si fa una decifratura con la chiave k. Si
chiama controllo degli errori esterno perché l’FCS viene fatto a valle della cifratura.
Per quanto riguarda invece i meccanismi a chiave pubblica si cifra on la chiave pubblica e decifra
con la chiave privata; qui si garantisce la riservatezza ma non l’autenticità del messaggio. Per
garantire entrambe basta utilizzare entrambe le chiavi andando ad operare in cascata: un
problema è che si devono usare il doppio dei meccanismi di computazione ossia utilizzare 4
meccanismi di cifratura/decifratura al posto di 2.
A volte si desidera fare l’autenticazione senza la cifratura perché:
- L’architettura del sistema che è stata pensata ha dei meccanismi di cifratura e decifratura
che devono essere svolti con meccanismi diversi;
- Se il messaggio viene mandato a diverse destinazioni, allora non è conveniente chiedere a
tutti i destinatari di fare l’autenticazione del messaggio; si desidera avere solo uno dei
destinatari per l’autenticazione e poi di comunicare a tutti gli altri se l’autenticazione è
andata a buon fine;
- Poiché l’autenticazione è un meccanismo oneroso, si può decidere, in situazioni di carico
pesante, di rilasciare il requisito sull’autenticazione ed non effettuarlo su tutti i messaggi
(questo è possibile farlo solo se l’autenticazione è separata dalla cifratura).
MAC
Ci possono essere diverse forme di MAC:
- La prima è la forma base. Qui il messaggio viene combinato con una chiave segreta e
quello che si ottiene lo si appende al messaggio originario e questo viene mandato sul
canale. Si può dire che il messaggio qui viaggia in chiaro con appeso un blocco che
corrisponde al MAC. A destinazione si ricalcola il codice MAC usando la stessa chiave
segreta, e lo si confronta con quello che è arrivato attraverso il canale; se sono uguali
significa che il messaggio è quello originario. L’autenticatore in questo caso è il codice
MAC.
- Nel secondo schema si prende il messaggio, si calcola il codice MAC con una chiave K1;
poi si concatena il codice MAC con il messaggio e si cifra con l’altra chiave k2. A
destinazione si fa l’operazione inversa ossia si decifra con la chiave k2, si riottiene l’insieme
di messaggio + MAC e poi ci si ricalcola il MAC; se il MAC che otteniamo è uguale al MAC
che ci è arrivato il messaggio non è stato corrotto.
- Nel terzo schema si cifra il messaggio con k2; poi si applica il codice MAC sul messaggio
cifrato; si concatena e si manda sul canale; a questo punto si ha il messaggio cifrato ed il
MAC calcolato sul messaggio cifrato. A destinazione, si può prima calcolare il codice MAC
sul messaggio cifrato e confrontarlo e se il risultato è corretto allora si decifra.
Tipicamente si preferisce lavorare sul secondo schema.
I requisiti sul MAC sono:
- Si vuole evitare che l’attaccante sia in grado di ricostruire un messaggio nuovo che ha lo
stesso MAC del messaggio originario in modo da evitare le collisioni;
- Si vuole che dal punto di vista statistico, il codice MAC abbia una distribuzione uniforme.
- Riguarda il caso in cui il MAC sia sottoposto a qualche funzione/trasformazione: si deve
evitare che se si sottopone il MAC a qualche operazione di trasformazione, questo renda la
distribuzione di probabilità delle configurazioni in uscita disuniforme.
Un attacco a forza bruta consiste come nell’hash nel trovare collisioni ossia trovare degli input che
applicandogli il MAC coincidano. L’attacco a forza bruta può dirigersi verso 2 obiettivi: attaccare lo
spazio delle chiavi; attaccare il valore di uscita del MAC.
Le caratteristiche degli attacchi a forza bruta sono:
- C’è una chiave k più lunga di n;
- Al primo giro si provano tutte le chiavi per trovare quelle che corrispondono al codice MAC;
k-n
- Ci saranno 2 CHIAVI per ogni possibile codice MAC k-2n
- Al secondo giro il numero di chiavi che danno luogo allo stesso MAC è 2
k-alfa
- Dopo un numero di giri pari ad alfa si vuole arrivare ad 2 = 1
k
Il numero medio di tentativi/giri per trovare la chiave è 2 .
HMAC
Un codice MAC importante è HMAC (dove H sta per hash). In questo caso il MAC viene costruito
partendo da una funzione hash crittografica.
Il motivo è che funzioni di hash crittografiche come MD5 ed SHA sono realizzate con software più
veloci rispetto alla cifratura simmetrica a blocchi come DES; inoltre c’è una vasta libreria di codici
software.
Gli obiettivi dell’HMAC sono:
- Usare funzioni hash già disponibili;
- Permettere una facile sostituzione delle funzioni hash;
- Le prestazioni della funzione hash non devono essere peggiori;
- Le chiavi devono essere gestite in maniera semplice;
- Deve essere possibile valutare la robustezza del meccanismo MAC a partire da quello della
funzione hash.
L’implementazione dell’HMAC è la seguente:
Bisogna dire che il problema principale di usare una funzione hash dentro MAC è che la funzione
hash non ha chiavi segrete mentre la funzione MAC prevede chiavi segrete, quindi bisogna trovare
un metodo per usare funzioni hash ma allo stesso tempo usare una chiave segreta. Il precedente
schema riesce a farlo. In questo schema notiamo che la chiave k viene trattata in modo da farla
diventare un numero di bit pari a b ossia viene allungata per renderla coerente con la scelta fatta
per b; poi viene fatto un XOR con una stringa di 8 bit (chiamata ipad) costituita da 4 bit di zeri e 4
bit di uno. Il compito di questa stringa ipad è quello di cambiare metà dei bit della chiave iniziale
usando le caratteristiche della pseudo casualità. Alla stringa che si ottiene viene appeso il
messaggio e di questo viene fatto un hash; la funzione hash che si ottiene viene a sua volta
appesa ad un altro termine che deriva sempre dalla chiave ma fatta in XOR con un’altra stringa di
8 bit (con un altro ipad).
A questo punto si fa un’altra funzione di hash e si ottiene infine il codice HMAC di n bit. In questo
modo si riesce ad ottenere il codice MAC desiderato.
Questa è una struttura abbastanza complessa e si può fare una modifica per avere una struttura
più veloce. La modifica consiste nel fare offline le attività che non riguardano strettamente il
messaggio cioè la parte f è la modifica di compressione che sta dentro il modulo hash; qu