Sommario
iii
sconsigliato se l’applicazione in questione deve garantire un livello di sicurezza medio-
alto.
Siccome la necessità di comunicare in modo sicuro è cresciuta parecchio, negli
ultimi anni sono stati implementati nuovi protocolli per dare alle applicazioni la
possibilità di usare algoritmi di cifratura standard; tali algoritmi si possono suddividere
in due grandi categorie:
1. algoritmi simmetrici
2. algoritmi asimmetrici
Entrambi hanno vantaggi e svantaggi, quindi in molte applicazioni spesso se ne
fa un uso misto al fine di usufruire dei vantaggi di entrambi. Gli algoritmi asimmetrici
(anche detti a chiave pubblica) prevedono che ogni utente debba possedere una coppia
di chiavi: una privata (che deve tenere segreta) ed una pubblica (che può, o meglio deve,
diffondere il più possibile se vuole che gli altri comunichino con lui in modo sicuro). Lo
standard che ormai si è affermato (e che continua ad evolvere) per la diffusione delle
chiavi pubbliche è basato su una struttura dati chiamata certificato digitale X.509: tale
struttura serve a garantire alla comunità che la chiave pubblica in essa contenuta
appartiene all’intestatario del certificato.
Un certificato digitale può essere quindi paragonato ad una sorta di carta
d’identità solo che al posto della foto (che servirebbe praticamente a nulla siccome non
potrebbe essere verificata) vi è la propria chiave pubblica; e proprio come una
comunissima carta d’identità, un certificato digitale deve essere emesso da un’autorità,
detta di certificazione (o più brevemente CA), che controlli e verifichi i dati da
certificare e che fornisca fiducia al resto della comunità1.
1
A dire il vero non è obbligatorio che le autorità di certificazione verifichino la vera identità del
soggetto; i certificati emessi da tali CA, però, di sicuro non potranno essere ammessi da applicazioni che
richiedono l’identificazione sicura del soggetto in termini di nome e cognome.
Sommario
iv
I compiti di un’autorità di certificazione possono essere riassunti come di
seguito:
1. raccogliere le varie richieste di certificazione che giungono;
2. vagliare ed approvare le richieste;
3. emettere i certificati relativi alle richieste approvate;
4. rendere possibile la distribuzione dei certificati emessi, per esempio
pubblicandoli su WEB, FTP o LDAP;
5. effettuare il backup di tutti i certificati emesse ed eventualmente delle chiavi
private (nel caso che queste siano state generate dalla CA);
6. gestire le richieste di revoca di un certificato: la revoca di un certificato si ha
quando le informazioni contenute nel certificato cambiano oppure quando la
segretezza della chiave privata associata al certificato viene meno; la CA
deve quindi prevedere un metodo tale per cui renda pubblico il fatto che un
certificato è stato revocato (ed eventualmente anche per quale motivo).
Ovviamente un’autorità di certificazione deve avere a disposizione un software
specifico per la sua gestione. Di questo tipo di software ne troviamo essenzialmente di
due tipi:
• Commerciale, sviluppato dalle grandi società che sviluppano software
specialistico nel campo della sicurezza (quali ad esempio Entrust, Secude,
Baltimore,…)
• Opensource, sviluppato principalmente da un piccolo “core team” (anche
una o due persone) il quale rilascia il codice sorgente affinché
programmatori interessati possano analizzarlo, modificarlo, ampliarlo e
correggerlo da bachi. Esempi di pacchetti software appartenenti a questa
categoria sono OpenCA e pyCA.
La nostra attenzione si è rivolta alla seconda categoria ed in particolare al
progetto OpenCA; a tale software sono state integrate funzioni che nella versione presa
in considerazione (la 0.2.0-4) mancavano e in seguito sono state inviate al core-team
affinché esse venissero integrate nella successiva versione ufficiale.
Sommario
v
Oltre all’ampliamento di OpenCA si è collaborato con il CSP s.c. a r.l. per
contribuire alla progettazione, allo sviluppo e all’installazione di un’autorità di
certificazione per l’emissione di certificati digitali ai cittadini del comune di Torino
affinché questi potessero accedere in modo sicuro ai servizi informatici offerti dal
comune stesso. (Si precisa che questo progetto è stato commissionato dal CSI
Piemonte.)
Ulteriori sviluppi di questa tesi possono essere svariati ed in particolare, sempre
riferendoci al progetto OpenCA, potrebbero essere:
• Integrazione del protocollo SCEP per la richiesta di certificati da parte dei
router (in particolare quelli Cisco);
• Integrazione di una time-stamping authoity;
• Emissione di certificati per dispositivi cellulari che fanno uso del WAP
(Wireless Application Protocol).
1
Capitolo 1 Introduzione
1.1 Perché la sicurezza?
Già da un paio d’anni a questa parte stiamo osservando ad un grande evento, e
cioè alla grandissima diffusione della rete di computer più grande del mondo: Internet.
Infatti, se solo fino a cinque o sei anni fa la percentuale di chi possedeva un computer
collegato ad internet era parecchio bassa, ora tale percentuale sta tendendo sempre più
velocemente al 100%; per rendersi conto di questo fenomeno ad esempio si può notare
che il modem è diventato oramai dotazione standard d’ogni personal computer, proprio
come la tastiera o il mouse.
Il motivo per cui la gente vuole sempre di più un collegamento ad Internet è che
essa offre sempre più servizi: elencarli tutti sarebbe impossibile, ma per citare i più
diffusi possiamo partire ad esempio da uno dei più “antichi”, e cioè la posta elettronica
(eMail) fino ad arrivare a quelli più recenti tipo il commercio elettronico (eCommerce)
oppure l’Home Banking.
Per stare nell’ambito di questi tre esempi che abbiamo fatto, possiamo notare che
questi servizi non sono nient’altro che l’evoluzione telematica di servizi di per se
antichissimi; se facciamo un paragone fra le versioni tradizionali e quelle elettroniche
possiamo notare che il risultato del servizio offerto non cambia, bensì cambiano i mezzi
e le procedure usate: per essere più chiari facciamo un esempio; se vogliamo effettuare
un bonifico bancario ora come ora abbiamo due alternative: o ci rechiamo fisicamente
in banca, o ci colleghiamo al sito della relativa banca (se questa offre tale servizio): nel
Capitolo 1-Introduzione
2
primo caso ci presentiamo davanti allo sportellista, gli mostriamo i documenti di
riconoscimento, e infine compiliamo e firmiamo un modulo cartaceo; nel secondo caso,
invece, dopo esserci collegati al sito, probabilmente ci verrà presentata una pagina WEB
in cui dobbiamo immettere tutti i dati e in seguito inoltrarli al server della banca dove
verranno svolte tutte le operazioni necessarie. In entrambi i casi, abbiamo raggiunto il
nostro scopo, ma usando mezzi diversi.
Posiamo subito notare che la versione elettronica di questa semplice operazione
ci mette subito di fronte ad un grande problema: quello della sicurezza; nel momento
che ci colleghiamo al sito della banca, vogliamo essere sicuri che effettivamente siamo
collegati con essa e non con un truffatore; inoltre le informazioni che vengono
scambiate sono sensibili e quindi vogliamo essere certi che tali informazioni non
vengano lette da soggetti estranei e infine vogliamo essere messi nella condizione di
provare in un secondo momento che l’operazione è stata effettivamente svolta. Nella
versione tradizionale di questo servizio, questi problemi vengono risolti mediante l’uso
di documenti cartacei, mentre nella versione elettronica questi non possono essere usati,
e quindi si deve sopperire a questa mancanza con l’uso di altri mezzi.
1.2 Proprietà di una comunicazione sicura
Tenendo sempre in mente l’esempio fatto nel paragrafo precedente, posiamo
affermare che le proprietà cui deve soddisfare una comunicazione sicura sono:
• Autenticazione
• Riservatezza
• Integrità
• Non ripudio
Tali proprietà si possono applicare ovviamente a qualunque forma di
comunicazione, sia essa verbale, scritta oppure telematica: ma mentre per le prime due
forme molte di queste al giorno d’oggi possono essere considerate scontate, per l’ultima
Capitolo 1-Introduzione
3
non lo sono affatto, quindi nel seguito intenderemo che la comunicazione sia instaurata
da due o più sistemi di elaborazione.
Inoltre, a seconda delle applicazioni, non è detto che tutte devono essere
soddisfatte, infatti molte volte si richiede, ad esempio, solo l’autenticazione e non la
riservatezza: sarebbe quindi un inutile spreco di risorse instaurare una comunicazione
cifrata quando il contesto non lo richiede.
Andiamo ora ad analizzare più nel dettaglio le caratteristiche delle proprietà
sopraccitate.
1.2.1 Autenticazione
Per autenticazione s’intende il riconoscimento di una o di entrambi le parti
coinvolte in una comunicazione.
Questa procedura, nella sua forma più semplice, è da sempre stata realizzata per
controllare l’acceso ad un sistema d’elaborazione multi utente: essa consiste
nell’immissione di un nome utente (username) e della sua relativa password.
Sebbene questo tipo d’autenticazione sia abbastanza datato, esso è ancora oggi
l’unico usato in modo veramente diffuso per l’acceso a diversi servizi: questo perché è
molto semplice da realizzare, ma la sua semplicità si paga in una serie d’inconvenienti.
Il maggiore inconveniente però non è attribuibile direttamente al sistema in se, ma
all’uso che ne fa l’utente: infatti l’utente medio sceglie password banali o scontate o
sempre uguali e di solito se le annota sulla propria agenda (quando va bene) o su un
foglietto dentro il cassetto della scrivania (quando va male!). Oltre a
quest’inconveniente però si hanno altri difetti più legati al funzionamento che all’uso
che se ne fa:
• Se non si usano sistemi di crittografia, le password immesse sono trasmesse in
chiaro sul canale di comunicazione e quindi possono essere lette da persone non
autorizzate (sniffing) senza grosse difficoltà;
• Questo sistema provvede ad autenticare solo l’utilizzatore (client): in molti casi
è necessario anche autenticare chi ci fornisce il servizio (server) in quanto questi
Capitolo 1-Introduzione
4
quasi sicuramente è localizzato in un luogo diverso da dove noi effettuiamo il
collegamento e quindi non possiamo avere alcuna garanzia che dall’altro capo
della comunicazione ci sia effettivamente chi pensiamo di trovare; è quindi
necessario prevedere anche dei meccanismi in cui sia possibile autenticare
entrambe le parti coinvolte in una comunicazione.
1.2.2 Riservatezza
La riservatezza consiste nel cifrare in modo opportuno i dati che sono trasmessi
al fine di non poterli fare leggere da persone non autorizzate. La scienza della
crittografia è molto antica (si può far risalire al tempo dei romani), ma solo negli ultimi
decenni si sono trovati algoritmi di cifratura praticamente inattaccabili: ho detto
praticamente perché in linea teorica ogni testo cifrato è decifrabile, basta infatti provare
in maniera esaustiva tutte le possibili chiavi di cifratura: utilizzando questo
procedimento però, coi si sistemi di calcolo attuale, si impiegherebbe troppo tempo2 e
troppe risorse monetarie: e di fatto tutto questo spreco di risorse non giustificherebbe
nessuna decifrazione abusiva.
1.2.3 Integrità
Per integrità s’intende avere la certezza che una comunicazione non sia
modificata in alcun modo durante il suo percorso. Durante una comunicazione, un
individuo potrebbe infatti:
• Modificare dei dati
• Cancellare dei dati
• Replicare dei messaggi (replay)
Quelli che seguono sono degli esempi di possibili attacchi:
2
I tempi medi sono dell’ordine degli anni