Sei sulla pagina 1di 1

Numerose comunicazioni che avvengono in rete sono di capitale importanza (come lo scambio delle

tabelle di instradamento negli algoritmi di routing) e si impongono come necessarie una serie di qualità
della comunicazione per preservarne la correttezza. Le più importanti sono la riservatezza, il
mantenimento dell’integrità del messaggio, l’autenticazione dei partecipanti e la sicurezza operativa.
Le tecniche di crittografia sono necessarie per il mantenimento della riservatezza della comunicazione, dal
momento che consentono al mittente di secretare i dati in modo che essi siano comprensibili solo al
destinatario (negando quindi l’accesso alle informazioni a eventuali terze parti in ascolto).
Esiste un grande numero di algoritmi di cifratura, ma i più utilizzati sono di dominio pubblico, di
conseguenza sono necessarie delle informazioni aggiuntive per preservare la segretezza delle
comunicazioni. Queste prendono il nome di chiavi e sono delle stringhe alfanumeriche, note solo ai
partecipanti alla sessione, che servono da base per il processo di cifratura.
La forma cifrata del messaggio in chiaro m ottenuta utilizzando la chiave Ka si indica con la notazione
Ka(m). Il destinatario utilizzerà un algoritmo di decifratura, che a sua volta necessita di una chiave Kb. Il
processo di decodifica si può quindi scrivere come Kb (Ka(m)) = m. I sistemi di crittografia a chiave
simmetrica sono caratterizzati da Kb = Ka ; ovvero le chiavi sono uguali tra mittente e destinatario.
Una delle tecniche più importanti afferenti ai sistemi a chiave simmetrica è il cifrario a blocchi. In questo
algoritmo il flusso di bit che compone il messaggio è partizionato in blocchi di k bit e ognuno di essi è
cifrato in maniera indipendente mediante una tabella di conversione. Siccome il numero delle entry scala
come O(2k), valori di k che garantirebbero una buona sicurezza, come 64, necessiterebbero di una tabella
di dimensioni improponibili, di conseguenza si utilizzano delle funzioni che mimano la cifratura tramite
tabella.
La maggiore criticità di questo cifrario è nel fatto che a input uguali nel testo in chiaro corrispondono
output sempre uguali nel testo cifrato. Di conseguenza un malintenzionato a conoscenza del protocollo di
comunicazione in uso può rilevare blocchi di testi ripetuti (come l’intestazione del protocollo HTTP) e
sfruttarli per ricostruire la chiave simmetrica utilizzata e quindi decodificare il messaggio.

Per risolvere questo inconveniente si utilizza la tecnica dei cifrari a blocchi concatenati. Dato m(i) come
l'i-esimo blocco del messaggio, c(i) la sua versione cifrata e r(i) un numero casuale, la procedura di
cifratura vien modificata come segue: il mittente genera una sequenza casuale di k bit e calcola
c(i) = Ks(m(i) XOR r(i)). A questo punto, a trasmetterà per ogni blocco la coppia (c(i), r(i)). Notare che
per ogni blocco viene generato un diverso r(i). Questa procedura garantisce che se dati blocchi (i, j) tali
che m(i) == m(j), avverrà con altissima probabilità che c(i) != c(j).

Il maggior inconveniente di questa modalità è il dimezzamento del throughput. Per ovviare a questo
problema la soluzione consiste nel generare un valore, detto initialization vector (cui corrisponde c(0)),
che all’inizio della trasmissione è una stringa di k bit generata dal mittente e inviata in chiaro al
destinatario.

Il mittente poi calcola e invia al destinatario il cipher text c(1) = Ks( m(1) XOR c(0) ); tutti i blocchi inviati
in seguito saranno cifrati come c(i) = Ks ( m(i) XOR c(i-1) ). L’idea pertanto è di inviare un numero
casuale solo con il primo messaggio e di usare i blocchi cifrati come chiave per la codifica del blocco
successivo.

Potrebbero piacerti anche