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