Copyright ©2000Università
di Firenze. All rights reserved.
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):
-
generazione di una coppia di chiavi K1 e K2
-
codifica del documento per mezzo della chiave K1 da parte del mittente
-
invio del pacchetto codificato
-
decodifica tramite la chiave K2 da parte del ricevente.
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:
-
- Sono scelti due numeri primi molto grandi p e q
-
- Si calcola il loro prodotto n=pq
-
- Si sceglie un numero e<n tale che sia primo rispetto al prodotto (p-1)(q-1).
-
- Si trova d tale che (ed-1) sia divisibile per (p-1)(q-1).
-
- La chiave pubblica è (n,e) mentre quella privata è (n,d)
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:
-
- Scambio delle chiavi pubbliche.
-
- Codifica delle informazioni tramite la chiave pubblica ricevuta.
-
- Invio delle informazioni criptate tramite un canale che può essere
non sicuro.
-
- Decodifica del messaggio ricevuto tramite la propria chiave privata.
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:
-
VeriSign
-
BelSign
-
AT&T
-
Deusche Telekom
-
American Express
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:
-
Nome del richiedente
-
Data di rilascio
-
Data di scadenza
-
Nome dell' autorità che ha rilasciato il certificato
-
Un numero di serie
-
La chiave pubblica del richiedente
-
Firma digitale ottenuta tramite la criptazione di quanto sopra con la chiave
privata della CA.
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
-
Certificato Client: permette l'identificazione sicura da parte del
Server della persona che sta accedendo ai servizi.
-
Certificato Server: permette al Client di identificare sicuramente
il server a cui si sta per accedere, è usato per le comunicazioni
sicure e, in particolare, è previsto dal protocollo SSL.
-
Certificato di E-mail: permettono lo scambio sicuro di messaggi
tramite E-mail (S/MIME).
-
Certificati di applicazioni: permettono di garantire l'autenticità
e la sicurezza di una applicazione scaricata dalla rete.
-
Certificato della Autorità di Certificazione: permettono
di ottenere la chiave pubblica di una certa CA.
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:
-
Controllare il periodo di validità
-
Identificare la CA che ha rilasciato il certificato
-
Verificare se tale CA (o un membro della catena di certificazione) è
presente tra quelle che sono accreditate presso il nostro browser.
-
Verificare la firma tramite la chiave pubblica della CA che ha rilasciato
il certificato.
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!