Cap6


Home
Su
Presentazione
Cap1
Cap2
Cap3
Cap4
Cap5
Cap6
Cap7
Cap8
Appendice

PARTE II

SVILUPPO DI APPLICATIVI PER LA REALIZZAZIONE DI UNA PUBLIC KEY INFRASTRUCTURE UNIVERSITARIA

 

6 - APPLICATIVI SVILUPPATI

In questa seconda parte vengono descritti gli applicativi realizzati per l’implementazione del progetto di una PKI universitaria sviluppato nella capitolo precedente.

Vengono discussi gli standard adottati tra quelli precedentemente evidenziati, e vengono commentate le caratteristiche tecniche e le scelte implementative del software sviluppato.

 

6.1 - IL PROGETTO

Allo scopo di avviare e testare l’intero ciclo di funzionamento della PKI in progetto, si è proceduto allo sviluppo:

 

· del Client che consente di utilizzare i servizi di cifratura e firma dei documenti, e i servizi di posta elettronica sicura in standard S/MIME

· del server CA che implementa le funzionalità più importanti e quelle indispensabili al corretto funzionamento del nostro progetto, ossia l’emissione di un certificato autofirmato che identifica la CA, la validazione delle certification request, l’emissione di certificati di chiave pubblica.

 

Il Client

E’ l’elemento chiave del progetto, ed è lo strumento che consente di sfruttare le potenzialità offerte dalle PKI. Il rispetto degli standard internazionali e normativi è il requisito fondamentale per garantire la sua portabilità all’interno di proposte PKI diverse da quella qui affrontata in via sperimentale.

Il modulo Client si compone di:

1) una procedura guidata (“wizard”) per la generazione della coppia di chiavi pubblica/privata e per la emissione di una richiesta di certificazione della chiave pubblica da inoltrare alla CA competente;

2) menu e bottoni per lo svolgimento delle operazioni di

· Firma di un documento

· Cifratura di un documento

· Firma+Cifratura di un documento

· Invio di messaggi S/MIME

E delle corrispondenti funzioni di

· Verifica della firma

· Decifratura

· Ricezione e verifica di messaggi S/MIME

 

Il funzionamento di questo applicativo è riportato in dettaglio nel capitolo 7.

 

Il Server

Lo sviluppo di un server CA, ossia di un applicativo che svolge il ruolo di certificatore di chiavi pubbliche, si è reso necessario per utilizzare i servizi implementati nel modulo Client. Come è già stato notato infatti molti di questi servizi non possono funzionare senza che il client sia in possesso di certificati di chiave pubblica regolarmente emessi.

Alla data attuale non è stato possibile reperire software con licenze shareware o freeware che consentano di svolgere le funzioni di certificazione di cui si ha bisogno, inoltre il livello di personalizzazione dei certificati emessi è un fattore importante per l’impostazione della PKI proposta.

Si è dunque proceduto allo sviluppo di una Certification Authority su misura per le esigenze individuate che supporta un insieme limitato di funzionalità, ossia quelle necessarie per la dimostrazione dei servizi proposti.

 

Il modulo Server CA si compone di:

1) una procedura guidata (“wizard”) per la generazione della coppia di chiavi pubblica/privata e per la emissione di un certificato autofirmato che identifica la root-CA.

2) una procedura guidata (“wizard”) per l’accoglimento delle richieste di certificazione presentate dai Client, per la valutazione dei dati forniti dagli utenti e per la emissione del certificato firmato dalla CA.

 

Il funzionamento di questo applicativo è riportato in dettaglio nel capitolo 8.

 

6.2 - GLI STANDARD ADOTTATI

E’ stata posta grande cura per il rispetto degli standard internazionali e particolare attenzione per l’accoglimento delle proposte di interoperabilità suggerite dall’AIPA.

 

Standard Internazionali

Gli standard pienamente supportati sono:

 

1) Tutti i certificati e le richieste di certificazione rispettano lo standard X.509 ver.3;

2) Le Certification Request, ossia le richieste di certificazione delle chiavi pubbliche sottoposte dal Client alla CA, rispettano lo standard PKCS#10;

3) I certificati emessi dalla CA rispettano lo standard X.509 ver 3 e PKCS#7 secondo le estensioni classiche;

4) La gestione delle chiavi private sia dei Client che del server CA è protetta da password di accesso (PIN) e la memorizzazione su supporti digitali avviene in forma cifrata secondo lo standard PKCS #8;

5) Le operazioni di cifratura e firma di documenti rispettano gli standard PKCS #1;

6) I messaggi di posta elettronica S/MIME rispettano le specifiche definite per questo standard negli RFC 2311 e 2312.

 

Raccomandazioni AIPA

I suggerimenti di interoperabilità AIPA accolti sono:

 

1) I certificati emessi seguono le norme per la formattazione dei campi identificativi e prevedono che il campo “Common Name” sia formattato secondo lo schema “CN= nome/ cognome/ codice fiscale/ numero identificativo presso la CA”.

2) In particolare il numero indicativo la cui composizione è a discrezione della CA sarà strutturato come “matricola-qualifica del ruolo-facoltà o dipartimento di appartenenza”, dove per “qualifica del ruolo” si intende se studente, professore, o altro ruolo.

 

 

6.3 - LA LIBRERIA DELLE FUNZIONI DI CRITTOGRAFIA

L’implementazione degli algoritmi di crittografia è un elemento cruciale nello sviluppo di applicativi per la sicurezza.

Gli algoritmi matematici di crittografia sono generalmente di pubblico dominio, ma la loro implementazione può variare notevolmente a seconda dell’algoritmo informatico scelto per realizzare l’algoritmo matematico, del linguaggio di programmazione utilizzato, della struttura della libreria e dei tipi di dati utilizzati per svolgere le operazioni.

 

Considerazioni sulla velocità e sulla portabilità delle funzioni di crittografia

Un aspetto fondamentale nell’utilizzo di una libreria di crittografia è la velocità con cui le funzioni disponibili vengono eseguite. Diverse implementazioni di uno stesso algoritmo matematico possono portare a differenze nei tempi di calcolo ed esecuzione dell’ordine dei secondi e a volte addirittura dei minuti.

Queste differenze vengono evidenziate soprattutto nelle operazioni ad alto contenuto computazionale quali quelle di cifratura e di generazione delle chiavi.

Nelle applicazioni che fanno uso soprattutto di operazioni di firma digitale e verifica, o di emissione di certificati, il carico computazionale è piuttosto ridotto, e le considerazioni sulle prestazioni e sull’efficienza della libreria passano in secondo piano.

Per avere buone prestazioni in termini di efficienza è necessario che la libreria sfrutti al massimo le capacità dell’hardware su cui viene utilizzata. Questo è il motivo per cui l’efficienza di una libreria va spesso a scapito della sua portabilità, ed è necessario trovare un delicato equilibrio tra i due.

 

Considerazioni sulla sicurezza di una libreria di funzioni

La sicurezza degli algoritmi di crittografia è sottoposta ad un continuo processo di verifica internazionale, e la sua validità non è in discussione allo stato attuale.

La realizzazione informatica di questi algoritmi tuttavia potrebbe essere soggetta ad errori di programmazione, ed offrire a soggetti malintenzionati degli appigli per scavalcare i meccanismi di sicurezza della crittografia a chiave pubblica ed entrare direttamente in possesso di dati riservati.

La protezione da questo tipo di errori informatici, spesso presenti, è stata per molto tempo quella di mantenere la massima segretezza sul codice sorgente. Questo approccio però non ha impedito numerosi ed eclatanti episodi di reverse engineering del software, che hanno rivelato in molti casi gravi falle di sicurezza nel codice di applicazioni importanti.

Ultimamente si va diffondendo la convinzione che la sicurezza nell’implementazione del software è legata non alla segretezza del codice ma alla sua attenta ed approfondita analisi. Le soluzioni affidabili sono allora quelle cosiddette Open Source, ossia quelle che mettono a disposizione di chiunque tutto il codice sorgente, perché questo sia approfonditamente esaminato e testato.

 

La libreria scelta: cryptlib

Alla luce di queste ed altre considerazioni è stata scelta la libreria di funzioni di crittografia Cryptlib (<http://www.cryptlib.com>).

Le sue principali caratteristiche:

· Supporta i più importanti standard internazionali di cifratura e autenticazione: RSA public-key encryption, DES, triple DES, IDEA, RC2, RC4, RC5, MD2, MD4, MD5, RIPEMD-160 and SHA hash algorithms, S/MIME.

· È multipiattaforma e ampiamente portabile, e supporta i più diffusi sistemi operativi: Windows 95/98,Windows NT/2000, Unix, MacOS, BeOS, Dos, OS/2.

· E’ Open Source e tutto il codice sorgente è disponibile per l’analisi e la modifica.

· E’ stata sviluppata al di fuori degli Stati Uniti, pertanto non è soggetta alle restrizioni sull’esportazione imposte negli U.S.A.

· E’ molto efficiente e la sua velocità è stata testata in molti contesti indipendenti.

· E’ dotata di una architettura di sicurezza interna che previene l’accesso non “ortodosso” ad informazioni sensibili quali le chiavi private e i parametri più importanti.

· Presenta un’interfaccia unificata per l’accesso a tutte le funzioni disponibili.

 

 

6.4 - LE SCELTE REALIZZATIVE

In fase realizzativa si è scelto di sviluppare le applicazioni in ambiente Microsoft Windows, con particolari accorgimenti per garantire la portabilità del codice e degli algoritmi usati a costi ridotti.

 

Si è cercato di trovare un equilibrio tra la semplicità e la rapidità di sviluppo che offre un ambiente come Visual Basic, e la portabilità e l’efficienza garantite dalla programmazione in ANSI C, linguaggio in cui è scritta la libreria cryptlib.

Si è dunque scelto di concentrare tutti gli aspetti specifici di algoritmi e procedure di crittografia all’interno di un modulo, e di sfruttare la grande flessibilità nella definizione dell’interfaccia utente che Visual Basic consente.

 

La libreria è stata compilata in forma di DLL, e le sue funzioni sono state richiamate dall’interno di programmi Visual Basic. L’interfacciamento tra la DLL e Visual Basic è avvenuto sviluppando una apposito modulo di dichiarazione delle funzioni e di definizione dei tipi di dati necessari per l’uso della libreria.

 

Per quanto riguarda il supporto S/MIME la scelta implementativa è stata quella di provvedere alla costruzione completa del messaggio da inviare, in tutte le sue caratteristiche; mentre si è ricorsi all’uso di un set di API standard fornito con tutte le versioni di Windows che va sotto il nome di MAPI (Messaging API) per provvedere all’effettivo invio del messaggio.

MAPI fornisce un insieme di chiamate standard che provvedono automaticamente allo stabilimento di una connessione Internet, all’avvio di una sessione SMTP con il Mail-Server, all’invio di un messaggio di posta elettronica, il tutto in modo trasparente.

I servizi implementati con MAPI si appoggiano di volta in volta al particolare programma di posta elettronica installato, sia esso Outlook Express, Netscape Messanger o un altro software freeware, che forniscono il servizio vero e proprio.

Questa scelta garantisce dunque che le funzioni utilizzate siano indipendenti dal contesto, ed allo stesso tempo consente di scegliere il client di posta che più si preferisce.

 

 

Sebbene il codice funzioni in modo del tutto equivalente sia su sistemi Windows 95/98 che su sistemi Windows NT/2000, l’uso di sistemi operativi come Windows NT/2000 è fortemente consigliato per le doti di maggior robustezza e per le capacità di protezione delle informazioni che questa scelta garantisce.