2.3) Protezione delle informazioni durante il transito sull rete |
Esistono ulteriori problemi legati alla sicurezza,
che non si possono risolvere semplicemente con meccanismi basati
sull'uso di password.
Essi possono essere divisi nelle seguenti aree, collegate fra loro:
Nel campo dell'informatica e soprattutto delle reti, dove da un
lato è possibile facilmente creare copie (e anche modificarle)
di documenti e dall'altro non si può escludere che Trudy
(ovvero un intruso) intercetti le informazioni in transito sulla
rete, tutto è più difficile che nella vita quotidiana,
dove esistono al proposito meccanismi consolidati (buste sigillate,
documenti di identità, autenticazione dei documenti).
E ciò è soprattutto vero in una rete come Internet, dove:
I problemi precedenti possono essere risolti con un protocollo crittografico, che consiste in una serie di passi nei quali si utilizzano le tecnologie seguenti:
2.3.1) Crittografia |
La crittografia (o scrittura nascosta) è
la disciplina che si occupa di studiare le tecniche per scrivere
un messaggio in modo tale che solo il legittimo destinatario sia
in grado di leggerlo. Si occupa dunque del problema della segretezza.
I requisiti principali di tale tecnica sono:
Una prima possibilità è stabilire un metodo di trasformazione
(cifratura o encryption)
del messaggio originale e un corrispondente metodo di interpretazione
(decifratura o decryption)
che vengono tenuti gelosamente segreti, e sono noti solo alle
persone autorizzate.
Ad esempio, un banale metodo di trasformazione (segreto) può
essere il seguente: sostituire ogni carattere con quello che,
nell'alfabeto, lo segue immediatamente (con wrap-around).
Questo approccio però non soddisfa il terzo requisito, perché per cambiare metodo lo si deve riprogettare completamente. Per questo motivo, si ricorre invece a uno schema diverso, che consiste in:
Di fatto il metodo di cifratura è una funzione
E che accetta in ingresso il testo in
chiaro (plaintext)
P e una chiave k, producendo il testo
cifrato (ciphertext)
C:
e che normalmente si indica come:
Quindi, per ogni valore possibile della chiave si ottiene un diverso
metodo di cifratura.
A titolo di sempio:
Il metodo di decifratura è un'altra funzione (ovviamente
collegata alla prima) che accetta in ingresso il testo cifrato
C, una chiave k e restituisce il testo in chiaro originale P:
Ovviamente, si dovrà avere che:
Come vedremo, non è detto che si debba usare la stessa chiave nelle due fasi.
Il modello risultante è il seguente:
Trudy può essere passiva (ascolta solamente) o attiva (ascolta
ed altera i messaggi che riesce ad intercettare).
La crittografia, come abbiamo detto, si occupa di trovare buoni
metodi per effettuare la cifratura e la decifratura. La cryptoanalisi
(cryptoanalysis) invece
si occupa di scoprire modi per decifrare i messaggi pur non conoscendo
le regole note alle persone autorizzate (in particolare, la chiave).
Questa operazione può essere portata avanti in due modi:
Ci sono due principi fondamentali che ogni metodo di cifrature deve rispettare:
2.3.1.1) Crittografia a chiave segreta (o simmetrica) |
In questo tipo di crittografia, il mittente
e il destinatario (Alice e Bob) si accordano, ad esempio incontrandosi
di persona lontano da occhi indiscreti, su una singola chiave
che verrà usata sia in fase di cifratura che di decifratura.
L'algoritmo più diffuso in questa categoria è il
DES (Data
Encryption Standard), inventato dall'IBM e adottato
come standard del governo U.S.A. nel 1977.
Il testo in chiaro è codificato in blocchi di 64 bit, che
producono ciascuno 64 bit di testo cifrato (cifratura
a blocchi).
L'algoritmo è parametrizzato da una chiave di 56 bit e
consiste di ben 19 stadi, in ciascuno dei quali si opera una trasformazione
dell'output dello stadio precedente.
Inoltre, in 16 dei 19 stadi la trasformazione effettuata è
funzionalmente identica, ma è parametrizzata da opportune
trasformazioni della chiave.
Il DES è stato al centro di controversie sin dal giorno in cui è nato:
Una sua variante, il Triple DES,
è però a tutt'oggi considerato sicuro, in quanto
non si conosce alcun modo di romperlo. Il meccanismo è
il seguente.
Questo schema, ponendo k1=k2, garantisce
la compatibilità all'indietro col normale DES.
Effettivamente il Triple DES costituisce un codice per il quale
l'approccio della forza bruta richiede 2112 tentativi:
anche con un miliardo di chip che effettuano un miliardo di operazioni
al secondo, ci vorrebbero 100 milioni di anni per la ricerca esaustiva.
Il DES funziona alla velocità di 2,5 MBps su un Pentium
Pro a 200 MHz, e fino a 64 MBps su hardware specializzato.
Un altro importante algoritmo a chiave segreta è IDEA
(International Data Encryption Algorithm).
Esso fu progettato nel '90 in Svizzera, e per questa ragione non
è soggetto alle limitazioni sull'uso e sull'esportazione
che esistono in U.S.A. (dove gli algoritmi di cifratura sono a
tutti gli effetti di legge considerati armi da guerra).
Come il DES, IDEA effettua una cifratura a blocchi (di 64 bit),
ma usa una chiave di 128 bit e consiste di otto stadi, nei quali
ogni bit di output dipende da tutti i bit in input (il che non
vale per il DES).
Non sono noti risultati di criptanalisi che lo indeboliscono.
IDEA funziona alla velocità di 2 MBps su un Pentium Pro
a 200 MHz e a 22 MBps su hardware specializzato.
2.3.1.2) Crittografia a chiave pubblica |
Un problema di fondo affligge la crittografia
a chiave segreta quando aumenta il numero di persone che vogliono
essere in grado di comunicare fra loro.
Poiché ogni coppia di persone deve essere in possesso di
una corrispondente chiave, se N persone desiderano comunicare
fra loro ci vogliono N(N-1)/2 chiavi, cioè una per ogni
coppia.
Ciò rende estremamente difficile il problema della distribuzione
delle chiavi, che resta il punto debole di tutto il sistema.
Nella seconda metà degli anni '70 fu introdotto (Diffie
e Hellmann, Stanford University) un tipo di crittografia radicalmente
nuovo, detto a chiave pubblica
(o asimmetrica).
L'idea è questa:
Dunque, per un gruppo di N persone sono necessarie solo 2N chiavi.
Il funzionamento, per ottenere la segretezza, è questo:
La crittografia a chiave pubblica fornisce anche un meccanismo
per garantire l'autenticazione del mittente,
cioè la garanzia che esso provenga veramente dall'autore
e non da qualcun altro, e l'integrità
del messaggio, cioè la garanzia che il messaggio
non sia stato alterato.
In questo caso si opera alla rovescia:
In questo caso non c'è segretezza, dato che chiunque può
decifrare il messaggio, ma nessuno se non Alice avrebbe potuto
costruirlo, ed inoltre nessuno può averlo alterato.
L'algoritmo a chiave pubblica piu noto ed usato è l'algoritmo
RSA (dalle iniziali degli
autori Rivest, Shamir e Adleman), nato nel 1978.
Esso trae la sua efficacia dalla enorme difficoltà di trovare
la fattorizzazione di un grande numero (si stima che serva un
miliardo di anni di tempo macchina per fattorizzare un numero
di 200 cifre, e 1025 anni per un numero di 500 cifre).
Schematicamente, l'algoritmo funziona così:
La base matematica di questo procedimento è il teorema
di Eulero, che in un particolare sottocaso afferma
che, dati due numeri primi p e q, vale la relazione:
per tutti gli x tali che gcd(x, p*q) = 1.
A questo punto il procedimento prevede di porre:
Si noti che se non fosse difficile fattorizzare n (che è noto a tutti), Trudy potrebbe facilmente:
La cifratura e la decifratura vengono effettuate nel seguente modo:
Può essere dimostrato che, per tutti i blocchi nel range
specificato, le due funzioni sono inverse.
Quindi, si può anche cifrare con la chiave privata e decifrare
con quella pubblica.
Nel 1994 RSA è stato rotto, in risposta ad una sfida degli
autori pubblicata su Scientific American. Il procedimento si riferì
a una chiave di 129 cifre (426 bit), e furono impiegati 1600 elaboratori
su Internet per 8 mesi, per un totale di 5000 anni di calcolo
a 1 MIPS (milione di istruzioni al secondo).
D'altronde, poiché RSA lavora con i numeri, la dimensione
della chiave è variabile e può essere aumentata
a piacere, per controbilanciare gli effetti derivanti dal miglioramento
delle prestazioni degli elaboratori.
Infine, poiché gli algoritmi a chiave pubblica sono molto
più onerosi computazionalmente di quelli a chiave segreta
(di un fattore da 100 a 1000), essi sono usati soprattutto per
negoziare in modo sicuro (come vedremo fra breve) una chiave segreta,
detta chiave di sessione,
da usare nel corso della comunicazione vera e propria la cui riservatezza
viene protetta con un algoritmo quale DES o IDEA.
2.3.2) Funzioni hash e firme digitali |
Come abbiamo visto, la crittografia a chiave
pubblica può essere usata per autenticare l'origine di
un messaggio e per garantirne l'integrità, ossia di fatto
per firmare un messaggio.
Però, a causa del costo computazionale, questo approccio
sembra eccessivo: cifrare tutto il messaggio solo per firmarlo
è poco efficiente. Inoltre, è scomodo rendere l'intero
documento illeggibile ove solo una firma sia richiesta.
Ambedue i problemi si risolvono con una tecnica diversa e più
efficiente, che però introduce un piccolo rischio in termini
di sicurezza.
La tecnica in questione si basa sull'uso delle funzioni
hash (dette anche funzioni
digest, cioè funzioni riassunto) che vengono
applicate al messaggio e ne producono, appunto, un riassunto (message
digest).
Tale riassunto è in generale di dimensioni ridotte, tipicamente
fra i 10 e i 20 byte, indipendentemente dalla lunghezza del messaggio
originario.
Per essere adatta allo scopo, la funzione hash deve possedere i seguenti requisiti:
Per soddisfare l'ultimo requisito il riassunto deve essere piuttosto
lungo, almeno 128 bit. Ad ogni modo, è chiaro che dal punto
di vista teorico non è possibile garantire che il requisito
sia sempre soddisfatto, poiché in generale la cardinalità
dello spazio dei messaggi è molto superiore a quella dello
spazio dei riassunti.
L'algoritmo più diffuso per la generazione del message
digest è MD5 (Message
Digest 5, Rivest 1992), il quinto di una serie.
definito nell'rfc 1321. Produce digest di 128 bit, ognuno dei
quali è funzione di tutti i bit del messaggio. Funziona
a circa 7 MBps su un Pentium Pro a 200 MHz.
Un primo e semplice schema di utilizzo del message digest è
il seguente, volto a garantire l'integrità
del messaggio, ovvero a garantire che il messaggio
che giunge a destinazione sia identico a quello che è stato
inviato:
Alice invia il messaggio corredato del riassunto; quando Bob riceve
il tutto, ricalcola il riassunto e lo confronta con quello ricevuto.
Ovviamente, questa semplice modalità è esposta all'attacco
di Trudy, che potrebbe intercettare il messaggio, sostituirlo
con uno diverso correlato del relativo digest, e inviarlo a Bob
come se fosse quello proveniente da Alice.
Per risolvere questo problema si ricorre a uno schema leggermente
più complesso, che fa uso anche della crittografia a chiave
pubblica: il riassunto, prima di essere spedito, viene cifrato
dal mittente con la propria chiave privata e decifrato dal destinatario
con la chiave pubblica del mittente. Un riassunto cifrato in questo
modo si dice firma digitale
(digital signature) del
mittente, perché assicura sia l'integrità del messaggio
che l'autenticità del mittente, proprio come una firma
apposta (in originale) in calce a un documento cartaceo.
2.3.3) Protocolli crittografici |
Quello visto sopra è un esempio di
protocollo crittografico,
cioè di una serie di regole che le parti debbono seguire
per assicurarsi una conversazione conforme ai requisiti desiderati.
Un protocollo crittografico in generale non specifica gli algoritmi da usare nei vari passi, ma piuttosto:
Esistono vari protocolli crittografici, che si differenziano per:
Vedremo ora alcuni protocolli che rivestono un particolare interesse in un contesto come quello del Web, dove:
2.3.3.1) Chiave segreta di sessione |
Un primo problema da affrontare e risolvere
mediante un protocollo crittografico è il seguente: poiché
la crittografia a chiave segreta è molto più efficiente
di quella a chiave pubblica, si vuole usare la prima nel corso
della comunicazione effettiva che deve essere portata avanti.
Però, in un contesto distribuito come il Web, è
impensabile che ogni potenziale coppia di fruitori disponga di
una chiave segreta. Dunque, bisogna trovare un protocollo per
concordare, all'inizio della sessione, la chiave segreta da usare
durante il resto della sessione, detta per questo chiave segreta
di sessione.
Un primo protocollo è di per se molto semplice, e sfrutta la crittografia a chiave pubblica:
Per evitare problemi derivanti dalla possibilità che Trudy
esegua un replay attack
(cioè invii duplicati di tutto ciò che intercetta)
la chiave segreta di sessione dev'essere ogni volta diversa. Di
norma la si calcola per mezzo di un generatore di numeri casuali,
che deve essere progettato molto accuratamente (si veda in proposito
il clamore suscitato da un bug contenuto in Netscape Navigator,
riportato anche sul New York Times del 19/9/95).
2.3.3.2) Centro di distribuzione delle chiavi |
Il protocollo precedente però ha un
problema di fondo molto serio. Infatti, Trudy può riuscire
a fare in modo che Alice riceva, al posto della chiave pubblica
di Bob, quella di Trudy, e quindi interporsi nella successiva
comunicazione e decifrare tutto (man
in the middle attack).
Per risolvere questo problema si introduce sulla scena una nuova
entità, il centro di distribuzione
delle chiavi.
Esso è un ente, di norma governativo o comunque dotato di credibilità internazionale, che:
Per questa ragione, il centro viene anche detto
Certificate Authority (CA).
In generale il software usato da Alice ha cablata al suo interno
la chiave pubblica della CA, per cui è in grado di verificare
la firma dei certificati provenienti dalla CA, e quindi di essere
sicuro della loro autenticità e integrità.
Il protocollo visto precedentemente per stabilire la chiave segreta
di sessione viene quindi modificato nel senso che la chiave pubblica
di Bob viene consegnata ad Alice sotto forma di un certificato
rilasciato a Bob da una CA; in questo modo Alice ha la garanzia
che si tratta proprio della chiave di Bob e non di quella di Trudy.
2.3.3.3) Secure Socket Layer e Secure-HTTP |
I certificati prodotti da una CA possono essere
conservati dove si desidera. Ad esempio, Bob può tenere
una copia del proprio certificato, ed Alice può chiederlo
direttamente a lui invece che alla CA.
Questo è precisamente quanto avviene sul Web quando si
incontra un link gestito col metodo
https://
che viene gestito dal protocollo chiamato Secure
Socket Layer (SSL),
introdotto da Netscape.
Esso protegge l'intero stream di dati che fluisce sulla connessione
TCP, per cui può essere usato sia con HTTP che con FTP
o TELNET.
Ad esempio, una form HTML che consente l'ordine di beni da acquistare
fornendo il numero della propria carta di credito potrà
essere riferita col link:
https://www.server.com/order.html
Quando l'utente del client decide di seguire tale link, si sviluppa
questa catena di eventi:
Nell protocollo SSL è previsto l'utilizzo di:
Per via delle leggi americane, le versioni internazionali del
Navigator usano RC4 a soli 40 bit per la cifratura a chiave segreta.
Peraltro, una recentissima legge ha diminuito le restrizioni esistenti
relativamente all'uso del DES a 56 bit, che verrà quindi
incorporato anche nei prodotti destinati all'esportazione.
Infine va citato un altro protocollo sicuro per il Web, Secure-HTTP
(S-HTTP). Esso si basa
su principi analoghi a SSL, ma si applica solo al traffico HTTP.
Infatti, nella sostanza, si cifrano i singoli messaggi HTTP e
non lo stream TCP sottostante.
Nell'header S-HTTP, all'inizio, è contenuta la chiave di
sessione cifrata con la chiave pubblica del server. Il certificato
del server, invece, è incorporato dentro ogni pagina HTML
sicura.