MokaByte Numero 31  - Giugno 1999
La Crittografia per la protezione
delle informazioni sulla rete
di 
Ugo Chirico
"Le informazioni che invio sono protette da sguardi indiscreti ? Sono sicure ?" "Chi è il mio interlocutore ?"


 

Una utile panoramica sui concetti di base e sulle tecniche di crittografazione utilizzabili in internet.

Introduzione

Il crescente utilizzo di internet come mezzo per lo scambio rapido di informazioni, ha enfatizzato la necessità di comunicazioni sicure, private, protette da sguardi indiscreti. 
Sfortunatamente la rete, così come è stata concepita, non supporta un buon livello di sicurezza e di privacy. Le informazioni viaggianti sono trasmesse in chiaro e potrebbero essere intercettate e lette da qualsiasi individuo. Pertanto, è stato necessario creare dei metodi che, rendano le informazioni indecifrabili in modo che solo il mittente e il destinatario possano leggerle, che ne assicurino l’integrità e che consentano l'autenticazione degli interlocutori.
La crittografia si propone di ricercare algoritmi capaci di proteggere, con un considerevole grado di sicurezza, le informazioni ad alto valore contro possibili attacchi da parte di criminali, della concorrenza o di chiunque possa usarle per arrecare danno. Comprende tutti gli aspetti relativi alla sicurezza dei messaggi, all'autenticazione degli interlocutori, alla verifica dell’integrità.
Sistemi crittografici sono presenti un pò dovunque nella storia anche se, finora, sono stati usati principalmente in ambito  militare. Già Giulio Cesare, quando inviava un messaggio riservato, non fidandosi del messaggero, sostituiva ad ogni A una D, ad ogni B una E e così via per le altre lettere.  Solo chi conosceva la regola "Sposta di  tre" poteva decifrare il messaggio. Inoltre, durante la seconda guerra mondiale alcuni successi alleati sono riconducibili alla scoperta della regola di cifratura usata dai tedeschi per nascondere i loro messaggi.
Attualmente la crittografia non è più circoscritta all'ambito strettamente militare. Si sta cercando di sfuttarne tutti i vantaggi per  creare una rete sicura a disposizione della società moderna che richiede, ogni giorno, algoritmi sempre piu potenti e sicuri per la protezione delle informazioni e per l'autenticazione degli utenti.
Terminologia

Per meglio familiarizzare con i concetti nell'ambito della crittografia diamo alcune definizioni:

  • la crittografia è definita come l'arte o la scienza di rendere segreti i messaggi;
  • l'analisi crittografica è l'arte di violare un sistema crittografico e decifrarne i messaggi;
  • la crittologia è il ramo della matematica che studia i fondamenti matematici della crittografia.
  • il messaggio in chiaro è chiamato plaintext o cleartext;
  • il messaggio cifrato è detto ciphertext. Esso si presenta come una sequenza casuale si simboli ed  è quindi incomprensibile;
  • la cifratura e decifratura sono rispettivamente le trasformazioni del messaggio da plaintext a ciphertext a viceversa. Esse avvengono solitamente per mezzo di una chiave. In tal caso la decifratura può avvenire solo se si conosce la chiave usata nella cifratura;
  • l’autenticazione è la verifica dell'identità dell'individuo coinvolto in una comunicazione;
  • la verifica dell'integrità  è la prova che il messaggio non ha subito modifiche durante la rasmissione;
  • la firma digitale è una stringa cifrata ricavata dal messaggio che consente di identificare il mittente e di verificare l'integrità del messaggio;
  • un certificato digitale è un documento di identità virtuale che consente di identificare entità sulla rete. 

 
 

La Crittografia

La crittografia fornisce una serie di algoritmi e di metodi per rendere il messaggio indecifrabile. Alcuni di essi sono molto potenti ed hanno resistito ai più svariati attacchi, altri meno sicuri ma altrettanto importanti. 
L'obiettivo di ogni algoritmo di cifratura è quello di rendere il più complicato possibile la decifratura di un messaggio senza la conoscenza della chiave. Se l'algoritmo di cifratura è buono, l'unica possibilità  per decifrare il messaggio è di provare, una per volta, tutte le possibili chiavi fino a trovare quella giusta, ma tale numero cresce esponenzialmente con la lunghezza della chiave. Quindi, se la chiave è lunga soltanto 40 bit saranno necessari al più 240 differenti tentativi.
Se ne deduce che l'operazione più delicata in un sistema crittografico è proprio la generazione della chiave. 
Affinchè esso sia effettivamente sicuro, deve prevedere chiavi di considerevole lunghezza; inoltre, le chiavi devono essere generate in maniera realmente casuale e dunque assolutamente imprevedibile per un ipotetico decifratore. Per tale motivo vengono scartati i generatori di numeri pseudo-casuali forniti dal computer, di solito adottati per giochi e simulazioni, e si preferisce adottare sistemi più complessi che sfruttano il rumore di fondo del mondo fisico che non può in nessun modo essere predetto. Buone sorgenti di numeri casuali risultano essere i processi di decadimento radioattivo, il rumore di fondo in un semiconduttore, o gli intervalli di tempo che intercorrono tra le azioni dell'operatore sulla tastiera. La sorgente più comunemente utilizzata sfrutta il movimento del mouse o la misura in millisecondi  del tempo di battitura dell'operatore.

Risulta tuttavia molto difficile determinare la bontà di un algoritmo. Talvolta algoritmi che sembravano molto promettenti si sono rivelati estremamante semplici da violare lanciando l'opportuno attacco. E' comunque preferibile affidarsi a quegli algoritmi che sembrano resistere da più tempo.
Gli algoritmi di cifratura sono suddivisi in due classi: 
- algoritmi a chiave privata, o algoritmi simmetrici; 
- algoritmi a chiave pubblica.
La differenza tra di essi è che i primi usano la stessa chiave per la cifratura e la decifratura, mentre i secondi usano due chiavi differenti, una pubblica e una privata.
 
 
 

Algoritmi a chiave privata

Gli algoritmi a chiave privata, o algoritmi simmetrici sono i più comunemente utilizzati. Essi usano la stessa chiave per cifratura e decifratura. Entrambi gli interlocutori conoscono la chiave usata per la cifratura, detta chiave privata, o chiave simmetrica, e soltanto loro possono cifrare e decifrare il messaggio (Figura 1).
 
 
 


Figura 1 Algoritmi a chiave pubblica
 
 
 
 

Sulla base del tipo di computazione si individuano due tipi di cifratura:

  • stream cipher (cifratura sequenziale), Il messaggio è visto come una sequenza di bit e viene cifrato un bit alla volta. Sono sicuramente i più veloci ma sono considerati poco sicuri, sebbene la sicurezza dipenda dall'algoritmo utilizzato;
  • block cipher (cifratura a blocchi)
Il messaggio è suddiviso in blocchi di lunghezza fissa e cifrato un blocco per volta.  Sebbene siano più lenti dei precedenti, sono considerati più sicuri perché ogni blocco è cifrato mescolandolo opportunamente al blocco precedente;

Tra i primi menzioniamo:

  • RC4, sviluppato da RSA Data Security Inc. [RSA]. E' un algoritmo molto veloce che accetta chiavi a lunghezza variabile. La sua sicurezza non stata è ancora ben accertata ma, finora, ha resisitito molto bene a diversi tipi di attacchi. Usa essenzialmente un generatore di numeri casuali, il numero generato è poi applicato mediante XOR alla sequenza di bit. 
Tra i secondi menzioniamo:
  • DES, sviluppato nel 1970, è divenuto poi lo standard per il governo americano. Adotta blocchi da 64 bit ed una chiave a 56 bit. Data la ridotta lunghezza della chiave risulta essere facilmente violabile dai computer moderni. Recentemente è stata sviluppata una variante detta Triple-DES o 3DES che cifra il messaggio tre volte con altrettante differenti chiavi. [Sc94]
  • Blowfish, sviluppato da Bruce Schneier. Adotta una blocco a 64 bit ed una chiave fino a 448 bit. Ha ottenuto grandi consensi da parte della comunità internazionale e finora non si conoscono attacchi vincenti. Usato in alcuni famosi sistemi come Nautilus a PGPfone
  • IDEA (International Data Encryption Algorithm), sviluppato in Svizzera, usa una chiave a 128 bit ed è generalmente considerato molto sicuro. 
Gli algoritmi a chiave privata hanno il vantaggio di essere molto veloci, idonei per cifrare grandi moli di dati, ma hanno lo svantaggio di richiedere la distribuzione della chiave privata a tutti i destinatari. Necessitano quindi di un ulteriore canale sicuro attraverso cui distribuire la chiave. Tale contraddizione, nel recente passato, ha posto dei limiti allo sviluppo della crittografia fino alla scoperta degli algoritmi a chiave pubblica.
 

Algoritmi a chiave pubblica

Gli algoritmi a chiave pubblica usano due chiavi complementari, dette chiave pubblica e chiave privata, create in modo che la chiave privata non può assolutamente essere ricavata dalla chiave pubblica. 
Il paradigma di comunicazione è il seguente: i due interlocutori A e B hanno entrambi una coppia di chiavi. A richiede a B la sua chiave pubblica con la quale cifra il messggio e spedisce il risultante messaggio cifrato a B. 
Il messaggio cifrato con una chiave pubblica può essere decifrato solo con la corrispondente chiave privata. Pertanto B, mediante la sua chiave privata, può decifrare il messaggio e leggerlo in tutta sicurezza.
Con questo metodo solo la chiave privata deve essere tenuta segreta mentre la chiave pubblica può essere distribuita a chiunque voglia spedire un messaggio al possessore della chiave. Qualora finisse nelle mani di un pirata, egli non potrà fare altro che cifrare messaggi senza poterli poi decifrare (Figura 2).
 
 
 


Figura 2 Algoritmi a chiave privata
 
 
 
 

La crittografia a chiave pubblica si basa su algoritmi molto astuti facilmente calcolabili in un senso ma estremamente complicati da risolvere in senso inverso. L'algoritmo di Diffie-Hellman [He80], ad esempio, si basa sul principio dei logaritmi. I due interlocutori A e B hanno ciascuno un numero segreto, rispettivamente x e y ed entrambi conoscono un numero pubblico g. A calcola gx ed invia il risultato a B che può calcolare il valore (gx)y . Tale numero è comune ad entrambi (allo stesso modo A può calcolare (gy)x) e diventa pertanto la loro comune chiave segreta di cifratura. Qualcuno potrebbe obbiettare e dire che intercettando gx e gy e conoscendo g è possibile risalire a (gx)y , allora, per scoraggiare anche la più astuta delle spie, A usa la funzione modulo e invia a B il valore gx mod p, poichè, come la matematica suggerisce, è quasi impossibile ricavare x da gx mod p anche conoscendo g e p [He79] [He80]. Successivamente, l'algoritmo di Diffie-Hellman è stato perfezionato con ulteriori integrazioni metematiche dando origine ai sistemi crittografici moderni basati su di una coppia di chiavi complementari, una privata, il valore di x, e una pubblica composta da g, p, e dal valore di gx mod p [He80] [Re94].
Gli algoritmi più diffusi sono:
- Diffie-Hellman, di cui sopra, è generalmente considerato sicuro, soprattuto nello scambio di chiavi simmetriche, quando usato con chiavi abbastanza lunghe preferibilmente di almeno 1024 bit.
- RSA, è il piu usato, sia per cifratura di messaggi  che per apporre la firma digitale. E' generalmente considerato sicuro quando usato con chiavi di almeno 1024 bit (512 insicuro, 768 moderatamente sicuro, 1024 sicuro). E' basato sulla difficoltà di scomporre un numero nei suoi fattori primi. Difatti presi due numeri sufficientemente grandi x e y è estremamente semplice calcolare il loro prodotto p = x * y ma risulta estremamente complicato scomporre p ricavando proprio i due numeri di partenza [RSA].
- Curve ellittiche, è un algoritmo emergente relativamente giovane, ma molto lento. E' considerato estremamente sicuro ma non è stato ancora sottoposto agli stessi test a cui è stato sottoposto RSA.
- DSS (Digital Signature Standard) usato principalmente per la firma digitale è stato adottatto dal governo USA.
 
 
 

La tecnica adottata nella pratica

Gli algoritmi a chiave pubblica sono considerevolmente più' lenti di quelli a chiave privata, in particolare nella cifratura di grosse moli di dati. Pertanto, nei sistemi crittografici si preferisce adottare algoritmi simmetrici per la cifratura dei messaggi e algoritmi a chiave pubblica per la cifratura delle chiavi simmetriche. 
Il mittente genera una chiave simmetrica, cifra il messaggio, cifra la chiave generata con la chiave pubblica del destinatario e invia insieme il messaggio e la chiave generata.  Il destinatario decifra la chiave simmetrica con la propria chiave privata ed infine decifra il messaggio. 
 
 
 

La firma digitale

Grazie alla complementarità' delle chiavi pubblica e privata, una stringa cifrata con una chiave può essere decifrata solo mediante l'altra chiave. Pertanto, la decifratura di un testo mediante una chiave assicura che esso è stato cifrato con la chiave complementare. 
Gli algoritmi di firma digitale sfruttano questa caratteristica per verificare la reale provenienza del messaggio (autenticazione del mittente).
La firma digitale è una stringa ricavata dal messaggio applicando un particolare algoritmo, cifrata mediante la chiave privata del mittente e spedita insieme al messaggio. La decifratura della firma mediante la chiave pubblica prova che è stata cifrata dal mittente o da qualcuno in possesso della sua chiave privata. Inoltre, il confronto della stringa decifrata con una stringa ricavata ex-novo dal messagio applicando lo stesso algoritmo, consente di verificare l’integrità: se le due stringhe coincidono il messaggio è integro.

Il paradigma è il seguente: il mittente, unico possessore della chiave privata, produce un’impronta del messaggio, detta hash o message-digest, e la cifra con la sua chiave privata. L'hash cifrato rappresenta la firma digitale.
Il destinatario riceve il messaggio insieme alla firma. Dal messaggio, eventualmente cifrato, ricostruisce l'impronta, mentre dall'hash, dopo averlo decifrato con la chiave pubblica del mittente, ricava l'impronta del messaggio com’era al momento della sua spedizione. Se le due impronte così ottenute coincidono si è certi che la firma è stata apposta mediante la chiave privata del mittente e che il messaggio non è stato modificato durante la trasmissione.
 
 
 


Figura 3 Algoritmo di firma digitale
 
 
 
 


Figura 4 Algoritmo di verifica della firma digitale 
 
 
 
 
 

Gli algoritmi di hashing

Gli algoritmi di firma digitale si affidano principalmente sulla potenza degli algoritmi di hashing. Essi sono algoritmi one-way che producono, a partire da una stringa a lunghezza variabile, una stringa a lunghezza fissa (tipicamente tra 64 e 255 bit) che è caratteristica della stringa data. 
La loro potenza è dovuta alle seguenti peculiarità: data una stringa di hash è computazionalmente impossibile ricavare il messaggio dal quale è stata generata; è computazionalmente impossibile determinare due messaggi che producono la stessa stringa di hash; qualsiasi messaggio, sottoposto allo stesso algoritmo qualsivoglia numero di volte produce sempre lo stesso valore di hash.
Gli algoritmi più diffusi sono:
- MD5 (Message Digest Algorithm 5), sviluppato da RSA Data Security inc. [RSA], è il successore di MD2, e MD4, algoritmi ormai in disuso. Produce hash di 128 bit da stringhe di lunghezza arbitraria, è largamente usato ed è considerato ragionevolmente sicuro [Sc94].
- SHA (Secure Hash Algorithm), sviluppato dal NIST (National Institute of Standards and Technology) e dal NSA (National Security Agency), è usato dal governo USA e produce stringhe di hash a 160 bit da stringhe di lunghezza arbitraria. E' considerato abbastanza sicuro. Usato solitamente insieme al DSS.
 
 
 

La Certificazione

I certificati digitali svolgono una funzione essenziale nella crittografia a chiave pubblica. Il loro obiettivo è di autenticare un individuo certificando che la chiave pubblica, in esso contenuta, appartiene realmente al soggetto per il quale è stato rilasciato. Assume pertanto un ruolo determinante nello scambio della chiave pubblica.
Un certificato è, a tutti gli effetti, un documento di identità digitale. Come un documento reale, esso contiene un insieme di attributi che identificano il possessore del certificato ed è rilasciato da un’organismo ufficiale, detto Autorità di Certificazione, ufficialmente riconosciuto dalla società, che garantisce l'autenticità delle informazioni in esso contenute. 
Solitamente, oltre alle informazioni relative al soggetto, contiene la sua chiave pubblica, alcune informazioni relative all’autorità di certificazione che lo ha rilasciato, la firma digitale apposta dall’autorità di certificazione ed il periodo di validità. 
Il paradigma è il seguente: un’individuo compila una richiesta di certificazione con i suoi dati e la sua chiave pubblica e la invia ad una autorità di certificazione. Quest’ultima verifica l’autenticità dei dati e, se il responso è positivo, produce un certificato e lo rilascia al richiedente firmandolo con la propria chiave privata. Il richiedente può ora inviare il proprio certificato ad un altro individuo per farsi autenticare e per consegnargli la propria chiave pubblica. 
La verifica dell’identità dell’individuo avviene mediante il controllo della firma apposta sul certificato dall'autorità di certificazione che, pertanto, mette a disposizione di tutti la propria chiave pubblica. In realtà mette a disposizione il proprio certificato auto-firmato, o firmato da un'altra autorità di certificazione.
 
 

Conclusioni

Attualmente la crittografia sta ricevendo grande attenzione da parte del mondo scientifico dovuta al grande sviluppo dell'e-commerce. Grazie ad essa sono stati sviluppati protocolli per la navigazione sicura sul WEB, come il protocollo https basato su SSL (Secure Socket Layer), protocolli per la riservatezza della posta elettronica, come S/MIME e server di posta che supportano i protocolli  SMTP, POP3 o IMAP attraverso un canale reso sicuro mediante SSL. 
Inoltre, stanno riscuotendo grande successo le tecniche di firma digitale. Il comune di Bologna è stato il primo in Italia ad adottare questa nuova tecnologia ed ha aperto degli sportelli virtuali sul web mediante i quali i cittadini, con il proprio certificato digitale e la propria chiave privata, possono richiedere il rilascio di documenti e altri certificati. 
La coppia certificato-chiave privata, detta talvolta PSE (Personal Security Environment) [PKCS#12], reppresenterà la nostra futura carta d'identità.
 
 

Bibliografia 


[He79] Hellman, M.E., La crittografia a chiave pubblica in: "Le Scienze", n. 136, dicembre 1979

[He80] Hellman, M.E., Merkle R. C., Public Key Cryptographic Apparatus and Method. US Patent 4,218,582, 1980

[PKCS#12] Public Key Cryptography Standard, RSA Data Security Inc., http://www.rsa.com

[Re94] Man Young Rhee, Cryptography and Secure Data Communications. Mc Graw-Hill, 1994

[RSA] RSA Data Security Inc,  http://www.rsa.com

[Sc94] Schneire B., Applied Cryptography. John Wiley & Sons, 1994

 


 
 

MokaByte rivista web su Java

MokaByte ricerca nuovi collaboratori
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it