Copyright ©2000Università di Firenze. All rights reserved.

license available.

Implementazione Operativa di protocolli Sicuri

di Ilario Nocentini e Filippo Salucco

revisori: Ing. Maurizio Lunghi, Prof. Franco Pirri


Capitolo1: Introduzione alla sicurezza

 

Introduzione alla sicurezza

1 Introduzione alla crittografia

1.1Algoritmo generale di crittografia

1.2Algoritmi a chiave simmetrica
           1.2.1 Cifratori a blocco
           1.2.2 Cifratori a flusso

1.3 Algoritmi a chiave asimmetrica
       1.3.1 Algoritmi di generagione di coppie pubblica/privata
           1.3.2 Utilizzazione della  chiave pubblica
           1.3.2.1 Firma digitale
           1.3.2.2 Busta digitale

1.4 Certificazione
           1.4..1 Contenuti di un certificato
           1.4.2 Uso di un certificato
           1.4.3 Verifica di un certificato

Riferimenti

1 Introduzione alla crittografia

La vertiginosa esplosione commerciale delle  tecnologie di rete e delle architetture distribuite a cui abbiamo assistito in questi ultimi anni ha fatto sì che "Internet" diventasse qualcosa di uso familiare, addirittura domestico: un semplice, ma efficace, mezzo per scambiarsi dati e informazioni indipendentemente dal fatto di essere una multinazionale, una piccola azienda o un privato cittadino.
Di pari passo ci siamo trovati davanti ad un nuovo problema, ovvero la facilità di accesso a tali tecnologie rende più difficile conservare una certa "privacy" nelle informazioni che si scambiano, in un tale contesto, lo spionaggio informatico non è più un affare estremamente costoso o qualcosa che solo pochi riescono a perpetrare.
Per esempio, un ipotetico "hacker" utilizzando un comunissimo software commerciale come Windows NT™ Network Monitor, potrebbe, con poco sforzo, intercettare e visionare i pacchetti in transito nella rete in modo da leggere i dati che si stanno scambiando due  macchine appartenenti a due filiali di una stessa ditta. Questo, tuttavia, è solo un aspetto di un problema più vasto: in realtà lo stesso ipotetico "hacker" potrebbe non limitarsi a carpire le informazioni in questione, ma potrebbe manipolarle, o peggio ancora,  potrebbe sostituirsi a una delle due parti, che si stanno scambiando i dati, spacciandosi per l'altra.
Una delle possibili risposte alla serie di violazioni appena descritte risiede in un metodo molto antico: la crittografia.
Gli obiettivi che devono essere garantiti dalla crittografia sono essenzialmente quattro:
il primo, e più evidente, è quello della segretezza, per cui il messaggio inviato deve essere decodificato e quindi compreso, solo e soltanto dal destinatario; poi l'autenticazione, è necessario che colui che riceve sia sicuro del mittente; quindi l'integrità cioè bisogna assicurarsi che il contenuto di quanto ricevuto non sia stato manipolato da nessuno; infine, quello che  potrebbe essere vista come la firma, un qualcosa che impedisca al mittente di negare il fatto di essere l'autore del messaggio cioè la non ripudiabilità.



1.1 Algoritmo generale di crittografia

Ogni algoritmo di crittografia può essere ricondotto al seguente (Fig.1):

Una prima e generale classificazione degli algoritmi può essere fatta distinguendo i due possibili casi: la chiave K1 è uguale alla chiave K2, in questo caso gli algoritmi prendono il nome di algoritmi a chiave simmetrica; la chiave K1 è diversa dalla K2 e allora avremo i così detti algoritmi a chiave asimmetrica.
Un fatto da tenere ben presente quando si valuta la robustezza di tutti gli algoritmi crittografici è che l'efficacia di questi non deve dipendere dalla segretezza dell'algoritmo, bensì da quella della chiave.



1.2 Algoritmi a chiave simmetrica

Gli algoritmi di questo tipo sono caratterizzati dal fatto che sia la codifica che la decodifica vengono effettuate per mezzo della medesima chiave, tutto ciò li rende semplici e veloci ma poco robusti (Fig.2).

Per quanto riguarda gli obiettivi conseguibili, si vede che, mentre si riesce a garantire sicurezza, autenticazione e integrità non si può garantire la non ripudiabilità. Un altro problema connesso a questo tipo di algoritmi è quello di gestione della chiave: poichè, in teoria, chi ottiene la chiave con mezzi più o meno leciti è capace di decifrare i messaggi,  diventa critico il passaggio della chiave tra il mittente ed il destinatario.
Le due tecniche più usate per la realizzazione di algoritmi a chiave simmetrica sono quelle di cifratura a blocchi e a flusso.



1.2.1 Cifratori a blocco

Molti algoritmi comuni di crittografia sono cifratori a blocchi, ad es. IDEA, DES. Ciò significa che prendono un blocco di dati di dimensione fissata, di solito 64 bit, e lo trasformano in un altro blocco di 64 bit usando una funzione selezionata dalla chiave. Se lo stesso blocco è cifrato con la stessa chiave per due volte dà lo stesso risultato, e questo potrebbe essere utile per un hacker. Quindi si cerca di evitare questo inconveniente principalmente con due metodi:

CFB mode: l'n-simo blocco cifrato è ottenuto criptando l'(n-1)-simo blocco cifrato tramite parte della chiave simmetrica e poi facendo lo XOR con l'n-simo blocco non cifrato(Fig.3).

CBC mode: l'n-simo blocco cifrato è ottenuto facendo prima lo XOR dell'n-simo blocco non cifrato con l'(n-1)-simo blocco precedentemente cifrato, poi cifrando ciò che risulta tramite parte della chiave simmetrica (Fig.4).

Il blocco precedentemente cifrato in entrambi i casi è memorizzato in un Initialization Vector (IV).

DES è un algoritmo sviluppato negli anni 70. Fu standardizzato dal governo USA ed è stato anche adottato da molti altri governi. E' usato specialmente nel mondo della finanza. DES è un cifratore a blocchi con dimensione di 64 bit. Usa chiavi di 56 bit e ciò lo rende vulnerabile data l'attuale potenza di calcolo disponibile: può scoraggiare hacker individuali, ma può essere facilmente eluso da associazioni, governi o istituzioni militari con adeguate risorse hardware disponibili. Sta quindi diventando troppo debole e non sarà incluso nei nuovi progetti di sicurezza. Una sua variante, 3DES è basata sull'uso ripetuto 3 volte di DES.

IDEA (International Data Encryption Algorithm) è un algoritmo sviluppato alla ETH Zurich in Svizzera. Usa una chiave di 128 bit ed è generalmente considerato molto sicuro. E' attualmente uno degli algoritmi più conosciuti. E' abbastanza recente (1990) ma da quando è stato realizzato non si ha notizia di attacchi che siano riusciti a renderlo vano. L'uso non commerciale di IDEA è free, altrimenti è necessario contattare la Ascom-Tech: idea@ascom.ch.

Altri algoritmi che operano in questo modo sono:
AES, RC2, RC5



1.2.2 Cifratori a flusso

Ogni simbolo del messaggio è cifrato in maniera diversa dipendentemente dalla sua posizione. L'algoritmo è molto veloce e può accettare chiavi di lunghezza arbitraria. Il generatore della chiave è essenzialmente un generatore di numeri pseudo casuali, la cui uscita è usata per fare lo XOR con il flusso di dati; per questo motivo è necessario che la stessa chiave non sia usata per cifrare due diversi flussi di dati. Dopo, che il messaggio è stato criptato, la chiave, viene trasmessa su un canale sicuro, ed è necessario sottolineare proprio questo fatto che costituisce  il limite di tutti gli algoritmi a chiave simmetrica: la chiave deve essere trasmessa per via sicura (Fig.5).

Uno degli algoritmi più famosi è l'RC4 un algoritmo realizzato da RSA Data Security, Inc. Era rimasto protetto dal segreto commerciale finché qualcuno spedì il codice sorgente di un algoritmo "equivalente" a RC4 nelle Usenet News. Il governo USA ha approvato l'esportazione di RC4 con chiavi di 40 bit: chiavi cosi piccole possono essere facilmente forzate da istituzioni come il governo, l'esercito etc. E' interessante notare che SSL, versione export, che usa RC4 con chiavi di 40 bit è stato recentemente forzato da almeno due gruppi indipendenti in circa otto giorni di attività.
Altri algoritmi dello stesso tipo sono: SEAL e VRA.



1.3 Algoritmi a chiave asimmetrica

In questo tipo di algoritmi la chiave è composta da due sottochiavi, una pubblica nota a tutti e una privata che deve essere tenuta segreta. La notevole forza,  di questo tipo di algoritmi, consiste proprio nella presenza di questa coppia. Infatti ciò che è criptato con una chiave può essere decifrato solo con l'altra: questo fatto anulla completamente il problema dello scambio della chiave, che invece costituiva un problema di sicurezza importantissimo con l'altro tipo di algoritmi(Fig.6).

Di contro, usando chiavi asimmetriche si va incontro ad un onere di calcolo tale da renderli più  lenti dei precedenti.



1.3.1 Algoritmi di generagione di coppie pubblica/privata

Prima di illustrare brevemente i più famosi algoritmi di criptazione a chiave pubblica vediamo come, in linea teorica, uno di questi,  l'RSA , generi le sue coppie di chiavi: E' da notare come la difficoltà di calcolare la chiave pubblica basandosi su quella privata risiede nel fatto che non esistono algoritmi efficienti per calcolare la scomposizione in fattori primi di un numero. Per cui,  se n è grande, diventa estremamente oneroso dal punto di vista numerico trovare tutti i suoi fattori primi.

RSA (Rivest-Shamir-Adelman) è il più comune algoritmo a chiave pubblica. Può essere usato sia per cifrare sia per la firma digitale. E' considerato sicuro se sono usate chiavi abbastanza lunghe: con 512 bit  non sicuro, con 768 bit moderatamente sicuro e con 1024 è considerato OK.  L'algoritmo è free tranne negli USA. Per ulterori informazioni consultare: Bruce Schneier: "Applied Cryptography." John Wiley & Sons, 1994.
Diffie-Hellman è una algoritmo comunemente usato per lo scambio delle chiavi. E' generalmente considerato sicuro se usato con chiavi sufficientemente lunghe; la sua sicurezza si basa sulla difficoltà dei problemi logaritmici, ritenuta computazionalmente equivalente a quella del problema della fattorizzazione dei grandi numeri interi.
DSS (Digital Signature Standard). E' un mezzo per la sola firma elaborato dal Governo USA. Il suo progetto non è stato reso pubblico e molta gente ha avuto problemi con esso. Non c'è ragione di preferirlo a molti altri algoritmi sicuramente più affidabili.
PGP (Pretty Good Privacy). E' un pacchetto freeware che realizza la crittografia a chiave pubblica; permette l'interscambio di documenti elettronici realizzando segretezza, autenticità, integrità dei dati su un canale non sicuro. PGP è principalmente pensato per lo scambio di documenti via Internet, ma può essere usato su un qualsiasi canale non sicuro; è indubbiamente un prodotto di qualità, e non c'è da dubitare dell'integrità morale del suo autore (che potrebbe come sempre aver lasciato delle trap-door), Philip Zimmerman. Egli infatti lo ha sviluppato con il chiaro intento di permettere la privacy nell'interscambio di posta elettronica su Internet, con un approccio fortemente critico verso la politica di NSA e del Congresso Americano di progettare un monopolio dei sistemi di crittografia; P. Zimmerman è stato sotto inchiesta per due anni e mezzo, accusato di esportazione non autorizzata di materiale crittografico, ed è recente la notizia che le autorità federali statunitensi hanno deciso di non perseguirlo penalmente.



 1.3.2 Utilizzazione della  chiave pubblica

Supponiamo che due enti vogliano scambiarsi informazioni in maniera sicura con questo tipo di tecnica. Si deve seguire questo algoritmo dopo che le due parti hanno generato le loro coppie di chiavi: Per chiarezza è meglio sottolineare che i messaggi si codificano con la chiave pubblica ricevuta ovvero con quella  dell'ente con cui si desidera colloquiare e solo questo, poi, sarà in grado di decodificarli, possedendo la chiave privata duale di quella usata per la criptazione. Questa semplice procedura assicura segretezza, anche in assenza di un canale sicuro per il passaggio della chiave pubblica, ma per realizzare tutti e quattro gli obbiettivi che ci siamo prefissi di conseguire tramite la criptazione (segretezza, autenticazione, integrità e non repudiabilità) è necessario una infrastuttura che si faccia garante della chiave pubblica che si è ricevuta.
Uno dei possibili attachi che si potrebbero portare ad un sistema del genere  è quello di intercettare e sostituire le chiavi pubbliche dei due enti che stanno colloquiando, con un'altra di cui però si possieda la duale privata: in tale modo si riuscirebbe a decifrare tutto il colloquio segreto senza che i due enti se ne accorgano! Questo è possibile perchè non c'è un' autenticazione della chiave pubblica, cioè non è possibile effettuare un controllo che accerti la provenienza della chiave pubblica che si è ricevuta. E' quindi necessario qualcuno che, oltre a fungere da banca dati per le chiavi pubbliche ( in letteratura Pubblic Key Infrastructure PKI) possa produrre una sorta di garanzia, di "certificazione" che leghi univocamente e inequivocabilmente la chiave pubblica con l'ente a cui appartiene( si veda in tale proposito il paragrafo 1.4 certificazione). Un altro modo per garantire una sorta di autenticazione è quello della firma digitale che, unitamente all'uso delle funzioni di hash, provvede alla verifica di integrità del documento.



1.3.2.1 Firma digitale

Un modo per attestare la propria identità e la validità del messaggio che si sta inviando(integrità) è quello di "firmare" il documento (questo ci permette, inoltre, di conseguire la non ripudiabilità del documento). Non potendo ricorrere ad una vera e propria firma, si usa la propria chiave privata per criptare il testo, o parte di questo, poi si invia unitamente alla chiave pubblica(Fig.7).

Questo fa si che il ricevente, tramite la chiave pubblica del mittente, possa decodificare la parte del messaggio codificata ed assicurarsi che chi ha inviato la chiave pubblica sia effettivamente chi dice di essere. Per problemi di calcolo (si ricorda che criptare il contenuto di un intero testo è computazionalmente oneroso) si preferisce codificare una parte di esso. In particolare si cripta, con la chiave privata, il risultato di una funzione di hash applicata all'intero testo(data la particolare struttura delle funzioni di hash queste risultano particolarmente difficili da invertire): in questa maniera, mettendosi d'accordo sull'algoritmo di hash usato, il ricevente usa la chiave pubblica del mittente per decifrare il risultato della funzione di hash usata, esegue il medesimo calcolo sul testo ricevuto, confronta i due risultati e, se questi sono uguali, il testo è integro e attendibile.
Riportiamo a seguito gli algoritmi di hashing più usati:
MD5 (Message Digest Algorithm 5) è un algoritmo hash sicuro sviluppato dalla RSA Data Security Inc(http://www.rsasecurity.com/).
Può essere usato con stringhe di arbitraria lunghezza rappresentabile con 128 bit. MD5 è molto usato e considerato ragionevolmente sicuro. MD5 è descritto in: Bruce Schneier: "Applied Cryptography", John Wiley & Sons, 1994.
MD2, MD4: sono versioni vecchie di algoritmi della RSA Data Security. Il loro uso non è più consigliato.
SHA (Secure Hash Algorithm, anche SHS, Secure Hash Standard): è un algoritmo hash pubblicato dal governo USA e produce un valore a 160 bit a partire da una stringa di lunghezza arbitraria. E' comunemente considerato abbastanza sicuro ed è relativamente nuovo.



1.3.2.2 Busta digitale

 Abbiamo visto come gli algoritmi a chiave asimmetrica riescono a garantire: integrità e non ripudiabilità, tramite l'uso della firma digitale e funzioni di hash; autenticazione, tramite certificazione ed ovviamente segretezza. In quest'ultimo caso, la lentezza di questo tipo di algoritmi non li rende adatti a criptare grandi quantità di informazioni; si preferisce usare, allora, un metodo misto chiave pubblica/privata e chiave simmetrica.
L'idea consiste nel criptare, attraverso un algoritmo a chiave simmetrica, tutte le informazioni che si vogliono trasmettere e inviarle insieme alla chiave simmetrica, a sua volta criptata con la chiave pubblica del destinatario(Fig.8).

In questo modo è possibile sfruttare la velocità degli algoritmi di tipo chiave simmetrica con l'affidabilità di quelli a chiave pubblica.



  1.4 Certificazione

Come già discusso nei paragrafi precedenti l'autentificazione della chiave pubblica, cioè il confermare che una chiave appartiene veramente all'ente con cui si stanno scambiando informazioni e non ad un impostore, è un nodo fondamentale per la costituzione di sistemi di comunicazione sicura.
Un primo modo di autenticare un certo messaggio è quello di usare la firma digitale, tuttavia il rischio di mistificazioni esiste sempre. E' necessario dunque un documento che leghi inequivocabilmente il proprietario della chiave pubblica con la stessa: questo documento è, appunto, il certificato.
Poichè non è possibile pensare che un singolo possa distribuire il proprio certificato, si ricorre ad una autorità di certificazione (Certification Autority detta  CA): questa deve essere una terza parte credibile (Thrusted Third Party detta TTP) incaricata del rilascio dei certificati e della verifica dell'identità richiedente, nonchè del mantenimento di quella che va sotto il nome di "lista di revoca dei certificati" (CRL cioè Certificate Revocation List) dove risiedono i certificati non validi.
Alcune delle maggiori società che si occupano del rilascio dei certificati dette CA sono: E' da notare come nessuno abbia incaricato direttamente una di queste società ad essere CA; tuttavia esse svolgono un ruolo davvero importante nella sicurezza delle reti, sebbene, naturalmente, non in maniera gratuita.



1.4.1 Contenuti di un certificato

Ecco, in breve, cosa un certificato deve contenere: Quando si decide di fidarsi di una CA si può usare la chiave pubblica di questa per verificarlo. Si ricorda che solo la CA può aver firmato il certificato in quanto solo lei possiede la sua chiave privata.



1.4.2 Uso di un certificato




 

1.4.3 Verifica di un certificato

Ogni CA che si autocertifichi viene detta "root" cioè radice di certificazione, in quanto ogni CA può certificare un altra CA creando così una catena di certificazione.
I certificati di CA accreditate, cioè credute dall'utente, sono memorizzate nel suo browser.
Quando si verifica un certificato si deve:


 

Riferimenti e indirizzi utili:

Per tutti coloro che volessero approfondire le tematiche appena trattate visitate l'ottimo sito della RSA:
http://www.rsasecurity.com
In particolare: se si desidera chiarire eventuali dubbi che questo documento possa avere prodotto o, più semplicemente, avere maggiori dettagli tecnici sugli algoritmi di criptazione,  gli autori consigliano caldamente: http://www.rsasecurity.com/rsalabs/faq o http://www.rsasecurity.com/rsalabs/cryptobytes/ da cui si possono "scaricare" documenti in formato PDF o PS (in questo caso è meglio procedere con il "download" da:
ftp://ftp.rsasecurity.com/pub/cryptobytes/)







Explore Telemat site!