Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduzione
L’informazione è divenuta una risorsa preziosa che deve essere protetta da qualsiasi possibile attacco.
È necessario proteggerla da accessi non autorizzati (riservatezza o segretezza) e da modifiche non
autorizzate (integrità), al fine di poterla rendere disponibile quando necessario alle entità autorizzate
(accessibilità).
Minacce e contromisure
Le minacce alla sicurezza delle reti possono essere classificate tra attacchi alla comunicazione di rete,
intrusioni nelle reti.
Un attacco è un qualsiasi insieme di azioni che ha lo scopo di compromettere l’integrità, la confidenzialità, e
la disponibilità di una risorsa.
Un’intrusione è un’azione di più ampio spettro che mira a compromettere la sicurezza di una interna rete
LAN.
Per rendere sicura la comunicazione in rete, vengono impiegate tecniche di crittografia. Il termine
crittografia significa “scrittura segreta”. Oggi fa riferimento a tre meccanismi distinti, cifratura a chiave
simmetrica, cifratura a chiave asimmetrica e funzioni hash.
Un intrusion detection system cerca di prevenire qualsiasi azione intrusiva monitorando il traffico di rete.
I virus sono software dolosi che hanno lo scopo di compromettere la sicurezza dei sistemi. Raggiungono la
macchina obiettivo mediante un’azione di download dell’utente che inconsapevolmente scarica il file
dannoso sul proprio computer.
I worm, una volta infettata una macchina si replicano inviando copie di se stessi anche ad altre macchine
mediante la rete. I cavalli di Troia sono software apparentemente utili che quando vengono eseguiti
svolgono operazioni dannose mediante codice nascosto.
La strategia degli antivirus è basata sul tempestivo rilevamento del problema sull’identificazione del virus
che ha infettato il programma.
Purtroppo gli antivirus sono sempre un passo indietro ai virus: affrontano il problema una volta verificatosi
ma non eseguono prevenzione.
Attacchi all’accessibilità
Il più noto attacco all’accessibilità è il denial of service.
Denial of service. Il denial of service è una tipologia di attacco particolarmente diffusa, che può rallentare o
interrompere il servizio di un sistema. Per raggiungere lo scopo l’attaccante ha a disposizione diverse
strategie. Può inviare un numero di richieste fittizie talmente elevato da fare crollare il sistema sotto il peso
del traffico. Può intercettare ed eliminare le risposte del server a un client, facendo credere a quest’ultimo
che il server non sia operativo. Può anche intercettare le richieste dei client, inducendoli a inviare più
richieste e sovraccaricare il sistema.
Cifrario polialfabetico. In un cifrario polialfabetico le diverse occorrenze dello stesso carattere possono
corrispondere a un sostituto differente: la relazione fra un carattere nel testo in chiaro e il carattere
corrispondente nel testo cifrato è di uno-a-molti. I cifrari polialfabetici hanno il vantaggio di nascondere la
frequenza delle lettere del testo in chiaro.
Per creare un cifrario polialfabetico è necessario rendere ciascun carattere nel testo cifrato dipendente sia
dal carattere corrispondente nel testo in chiaro sia dalla sua posizione. Questo implica che la chiave sia
costituita da una sequenza di sotto-chiavi. È necessario quindi prevedere uno stream di chiavi k dove k i
viene utilizzato per codificare l’i-esimo carattere nel testo in chiaro ottenendo l’i-esimo carattere nel testo
cifrato.
Cifrari a trasposizione
Un cifrario a trasposizione non sostituisce un simbolo con un altro, ma ne cambia la posizione. In altre
parole un cifrario a trasposizione riordina, o traspone, i simboli.
Per la cifratura e la decifratura viene utilizzata la medesima chiave, ma l’algoritmo utilizza nel secondo caso
la chiave in ordine inverso.
Cifrario a flusso. In uno cifrario a flusso la cifratura e la decifratura vengono eseguite un simbolo (un
carattere o un bit) alla volta. Si hanno uno stream di testo in chiaro (P) e uno stream chiave (K).
Cifrario a blocchi. Un cifrario a blocchi cifra un intero gruppo di simboli del testo in chiaro per ottenere un
gruppo di testo cifrato della medesima dimensione. Secondo questa definizione un cifrario a blocchi utilizza
un’unica chiave per crittografare l’intero blocco.
In un cifrario di questo tipo un blocco di testo cifrato dipende dall’intero blocco di testo in chiaro.
Cifrari combinati. Nella pratica i blocchi di testo in chiaro vengono cifrati individualmente, ma utilizzano
una sequenza di chiavi per crittografare il messaggio blocco per blocco. Ogni blocco utilizza una chiave
differente che può essere generata prima o durante il processo di cifratura.
Componenti di un moderno cifrario a blocchi. I recenti cifrari a blocchi possono essere considerati cifrari a
sostituzione se visti come singola unità. Per renderli resistenti agli attacchi non vengono tuttavia progettati
come singola unità ma come combinazione di unità di trasposizione (P-box), unità di sostituzione ( S-box),
operazioni di OR esclusivo (XOR), scorrimento, scambio di elementi, suddivisione e ricombinazione di
elementi.
Una P-box è analoga ai cifrari a trasposizione tradizionali che operano su caratteri, ma traspone bit. Nei
cifrari attuali si impiegano tre tipi di P-box: P-box dirette, a espansione e a compressione. Una S-box può
essere immaginata come un cifrario a sostituzione in miniatura che sostituisce bit.
L’idea generale
La responsabilità di garantire la sicurezza ricade principalmente sul destinatario che deve creare due chiavi:
una privata e una pubblica. Questo canale non debba assicurare la riservatezza, deve garantire
autenticazione e integrità.
Un fatto importante spesso poco compreso è che l’avvento della crittografai asimmetrica non elimina
affatto la necessità della crittografia simmetrica. Infatti la crittografia asimmetrica, che utilizza funzioni
matematiche per la cifratura e la decifratura, è molto più lenta della crittografica simmetrica. La crittografia
simmetrica è tuttora necessaria per codificare messaggi di notevoli dimensioni. La crittografia asimmetrica
è necessaria per l’autenticazione, la firma digitale e lo scambio della chiave segreta.
La procedura
Gabriele sceglie due numeri grandi p e q per calcolare n = p x q e o = (p-1) x (q-1).
Gabriele sceglie poi e e d tali che (e x d) mod o = 1. Gabriele pubblicizza e ed n alla comunità come chiave
pubblica, mentre conserva d come chiave privata. Chiunque, può crittografare un messaggio e inviarne il
testo cifrato a Gabriele, usando C = (P e) mod n.
Message digest
Vi sono casi in cui pur non essendo richiesta la riservatezza, risulta di fondamentale importanza l’integrità: il
messaggio originale non deve poter essere modificato.
Un modo per preservare l’integrità è quella di inviare insieme al messaggio un codice generato dal mittente
e dipendente dal messaggio. Questo codice viene elaborato con un particolare algoritmo chiamato funzione
hash crittografica. Questa funzione crea un’immagine compressa del messaggio, chiamata digest, che può
essere utilizzata come verifica dell’integrità del messaggio Gabriele, per verificare che il messaggio ricevuto
e confronta il nuovo digest con quello inviato da Gaia: se risultano identici Gabriele ha la garanzia che il
messaggio originale non è stato modificato.
Si noti che il digest dipende dal messaggio ma viene inviato separatamente, per cui il messaggio viaggia in
chiaro e non è preservata la confidenzialità.
Funzioni hash
Una funzione hash crittografica riceve un messaggio di lunghezza arbitraria e produce un digest di
lunghezza fissa. Il modo migliore per raggiungere questo risultato è tramite un processo iterativo: si applica
una funzione con input di dimensioni fisse viene chiamata funzione di compressione. Essa comprime una
stringa di n bit per crearne una di m bit, dove n è solitamente maggiore di m. Questo schema viene
chiamato funzione hash crittografica iterata.
L’ultima versione, la MD5.
Per ovviare ai limiti di sicurezza degli algoritmi MD è stato inventato l’algoritmo SHA. Si tratta di uno
standard sviluppato dal NIST che produce un digest di 160 bit.
Firma digitale
Un altro modo per garantire l’integrità e l’autenticazione di un messaggio è la firma digitale.
Il concetto di firma è molto familiare: una persona firma un documento per garantire che ne è l’autore o
che lo approva. La firma costituisce la prove che il documento proviene da una determinata entità.
Funzionamento
Gaia firma il messaggio M cifrandolo con la sua chiave privata. La cifratura del messaggio M costituisce
proprio la firma S di Gaia. A questo punto Gaia invia sia il messaggio M sia la firma S a Gabriele, il quale
verifica l’autenticità del messaggio applicando la chiave pubblica di Gaia. Se il messaggio che Gabriele
ottiene è uguale a quello inviato da Gaia allora il messaggio è autentico.
La firma digitale richiede un sistema crittografico a chiave pubblica. Il firmatario firma con la propria chiave
privata; il destinatario verifica con la chiave pubblica del firmatario.
Si dovrebbe fare un distinzione fra l’impiego delle chiavi pubblica e privata nella firma digitale rispetto al
loro impiego nei sistemi crittografici per garantire la riservatezza.
Nella firma digitale vengono invece impiegate le chiave pubblica e privata del mittente: quest’ultimo utilizza
la propria chiave privata per firmare il messaggio, il destinatario, utilizza la chiave pubblica del mittente per
verificare l’autenticità del messaggio.
Un sistema crittografico utilizza le chiavi pubblica e privata del destinatario per garantire la riservatezza; la
firma digitale impiega le chiavi pubblica e privata del mittente.
Servizi
Autenticazione di messaggio. Uno schema di firma digitale fornisce l’autenticazione di messaggio in modo
analogo a quanto ottenibile con una firma sicura convenzionale.
Integrità del messaggio. L’integrità del messaggio viene garantita sia che si firmi il messaggio, sia che si
firmi il relativo digest.
Non-repudiation
Una possibile soluzione consiste nel fare intervenire una terza parte fidata, che faccia da tramite da Gaia e
Gabriele al fine di garantire che i messaggi inviati non possano essere disconosciuti dal mittente.
Il centro, dopo aver verificato l’autenticità del messaggio ricevuto da Gaia, salva quindi nel proprio archivio
una copia del messaggio con l’identità del mittente, l’identità del destinatario e un timestamp .
Riservatezza. La firma digitale non garantisce la riservatezza della comunicazione. Nel caso fosse richiesta è
necessario crittografare messaggio e firma con un cifrario a chiave simmetrica o asimmetrica.
Autenticazione di entità
L’autenticazione di entità è una tecnica progettata per consentire a una parte di verificare l’identità di una
seconda parte. L’entità può essere una persona, un processo, un client o un server.
Vi sono due differenze importanti fra autenticazione di entità e autenticazione di messaggio.
1. L’ autenticazione di messaggio potrebbe non avviene in tempo reale.
Quando Gaia richiede l’autenticazione di entità, invece, non vi è alcuna comunicazione di messaggi
fino a quando Gaia non sia autenticata da Gabriele. Gaia deve essere online e prendere parte attiva
nel processo.
Quando Gaia invia una e-mail a Gabriele è richiesta l’autenticazione di messaggio. Quando Gaia
esegue un pagamento su Internet è richiesta l’autenticazione di entità.
2. L’autenticazione di messaggio autentica semplicemente un particolare messaggio.
Nella autenticazione di entità il pretendente deve identificarsi al verificatore.
Se Gaia dovesse scambiare messaggi confidenziali con N persone, avrebbe bisogno di N chiavi differenti.
Oltre all’elevatissimo numero di chiavi esiste il problema della loro distribuzione. Se Gaia e Gabriele
desiderano comunicare fra di loro, devono trovare un modo per scambiarsi la chiave segreta.
KDC multipli. Quando il numero di utenti di un KDC diventa eccessivo, è necessario creare più KDC: la
comunità di utenti viene divisa in più domini, per ognuno dei quali vengono previsti uno o più KDC. Se Gaia
desidera inviare un messaggio confidenziale a Gabriele, che appartiene a un dominio differente, contatta il
proprio KDC il quale a sua volta contatta il KDC nel dominio di Gabriele; Si possono prevedere KDC locali,
nazionali e internazionali.
Chiavi di sessione. Un KDC crea una chiave segreta per ciascun utente. Questa chiave segreta deve essere
utilizzata esclusivamente fra l’utente e il KDC.
Il KDC può creare una chiave di sessione per Gaia e Gabriele con il centro e fra di loro prima che venga
stabilita la chiave di sessione. Una volta terminata la comunicazione, la chiave di sessione viene eliminata.
Protocollo Handshake
Il protocollo Handshake regola la prima parte di SSL e prevede opportuni messaggi per negoziare la
cipher suite, per autenticare il client al server e viceversa quando necessario, per scambiare
informazioni utili alla definizione dei parametri crittografici segreti.
Fase 1: prevede la scelta delle funzioni di sicurezza e lo scambio di valori necessari per la creazione
delle chiavi. Viene stabilito un ID di sessione e viene definita la cipher suite.
Al termine della prima fase il client e il server hanno concordato la versione di SSL, gli algoritmi
crittografici, il metodo di compressione e i due numeri casuali per la generazione delle chiavi.
Fase 2: Nella fase II, il server e il client si autenticano, inviando il proprio certificato. Al termine della
fase II il server e il client sono autenticati e conoscono le chiavi pubbliche l’uno dell’altro.
Fase 3: Il pre-master secret viene generato dal client e inviato al server. Per rendere sicura la
comunicazione, il client può usare RSA. Il client genera il pre-master secret, lo cifra con la chiave
pubblica del server e lo invia al server.
Protocollo Alert
SSL, utilizza il protocollo Alert per segnalare errori e condizioni anormali.
Protocollo Record
Il protocollo Record trasporta i messaggi dei livelli superiori
Modalità trasporto
Nella modalità trasporto, IPsec protegge ciò che viene fornito dal livello trasporto al livello rete.
Questa modalità protegge i dati incapsulati nei pacchetti di livello rete.
Si noti che la protezione è solo sui dati. L’intestazione e il trailer di IPsec vengono aggiunti ai dati
provenienti dal livello trasporto prima dell’intestazione IP.
L’host mittente sfrutta il protocollo IPsec per autenticare e/o cifrare i dati consegnati dal livello trasporto.
L’host destinatario sfrutta il protocollo IPsec per verificare l’autenticità dei dati e/o decifrarli, per poi
consegnarli al livello trasporto.
Modalità tunnel
Nella modalità tunnel IPsec permette di proteggere l’intero pacchetto IP. L’intero pacchetto IP, viene
incapsulato in un pacchetto IPsec. Il tutto deve essere poi inserito in un pacchetto IP: verrà quindi aggiunta
una nuova intestazione IP.
La modalità tunnel viene solitamente utilizzata fra due router, fra un host e un router o fra un router e un
host. L’intero pacchetto originale viene protetto da intrusioni fra il mittente e il destinatario.
Protocollo AH
Il protocollo AH è stato progettato per garantire l’autenticazione del mittente e l’integrità dei dati contenuti
nel pacchetto IP.
Vengono utilizzati una funzione hash e un algoritmo crittografico a chiave privata per creare un digest del
messaggio. Il digest viene quindi inserito in un’intestazione di autenticazione nella posizione appropriata in
funzione della modalità utilizzata.
Un campo all’interno dell’intestazione AH specifica il protocollo originale. Ecco i passi necessari per
aggiungere un’intestazione di autenticazione.
1. Si aggiunge un’intestazione di autenticazione al payload
2. Si effettua l’eventuale riempimento per rendere la lunghezza totale adatta allo specifico algoritmo
di hashing.
3. L’hashing si basa sull’intero pacchetto, tuttavia nel calcolo del digest del messaggio vengono
considerati solo i campi dell’intestazione IP.
4. I dati di autenticazione vengono inseriti nell’intestazione di autenticazione.
5. Viene aggiunta l’intestazione IP dopo aver reimpostato il valore del campo protocollo a 51.
Il protocollo AH garantisce l’autenticazione e l’integrità dei dati, ma non la riservatezza.
Protocollo ESP
Il protocollo AH non cifra i dati all’interno del pacchetto IP, fornisce solo servizi di integrità e autenticazione
del mittente. IPsec ha definito successivamente un altro protocollo, chiamato ESP, che fornisce
autenticazione di sorgente, integrità e riservatezza. Il protocollo ESP aggiunge un’intestazione e un trailer.
Si noti che i dati di autenticazione ESP sono aggiunti in coda al pacchetto, per facilitarne il calcolo. Quando
un datagram IP trasporta un pacchetto ESP, il valore del campo protocollo dell’intestazione IP è 50. Il campo
next header nel trailer di ESP specifica il protocollo originale.
Ecco come avviene la formazione del pacchetto ESP:
1. il trailer ESP viene aggiunto al payload;
2. payload e trailer vengono crittografati;
3. viene aggiunta l’intestazione ESP;
4. intestazione ESP, palyload ed ESP trailer vengono usati per generare i dati di autenticazione;
5. i dati di autenticazione vengono aggiunti al termine del trailer ESP;
6. viene aggiunta l’intestazione IP dopo averne impostato il valore del campo protocollo a 50.
I firewall
La prima misura di sicurezza adottata per proteggere una rete LAN è costituita dal firewall. Un firewall è un
dispositivo installato fra la rete interna di un’organizzazione e Internet. È progettato per inoltrare alcuni
pacchetti e filtrarne altri.
I firewall sono solitamente classificati in firewall a filtraggio di pacchetti o proxy.
Firewall proxy
Un firewall a filtraggio di pacchetti controlla il traffico in base alle informazioni disponibili nei livelli rete e
trasporto. A volte si ha la necessità di filtrare il traffico in base al contenuto dei messaggi. In questo caso un
firewall a filtraggio di pacchetti non è sufficiente poiché non è in grado di differenziare i pacchetti che
arrivano alla porta 80 (http) : è necessario esaminare il messaggio a livello applicazione.
Una possibile soluzione è l’utilizzo di un computer proxy che si interpone fra il computer del cliente e il
computer dell’azienda. Quando il processo client dell’utente richiede una pagina web, l’application gateway
esegue un processo server per ricevere la richiesta e che apre il pacchetto a livello applicazione per
determinare la legittimità della richiesta.
Un firewall proxy filtra i pacchetti a livello applicazione.