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.


Figura 2-3: Cifratura e decifratura

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:

C = E(P,k)

e che normalmente si indica come:

C = Ek(P)

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:

P = Dk(C)

Ovviamente, si dovrà avere che:

Dk(Ek(P)) = P

Come vedremo, non è detto che si debba usare la stessa chiave nelle due fasi.

Il modello risultante è il seguente:


Figura 2-4: Cifratura e decifratura basate su chiave

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.


Figura 2-5: Crittografia a chiave segreta

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.


Figura 2-6: Triple DES

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:


Figura 2-7: Riservatezza mediante crittografia a chiave pubblica

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:


Figura 2-8: Autenticazione mediante crittografia a chiave pubblica

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ì:

  1. scegliere due grandi numeri primi p e q (tipicamente maggiori di 10100);
  2. calcolare n = p*q e z = (p - 1)*(q - 1);
  3. scegliere un numero d primo relativamente a z;
  4. trovare il numero e tale che e*d = 1 modulo z;

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:

x(p-1)(q-1) = 1 modulo p*q

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:

  1. trovare p e q, e da questi z;
  2. una volta determinati z ed e (anch'esso noto a tutti), trovare d con l'algoritmo di Euclide.

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.


Figura 2-9: Calcolo del riassunto del messaggio

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:


Figura 2-10: Uso del digest per il controllo di integrità del messaggio

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.


Figura 2-11: Firma digitale

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:

  1. Bob invia la sua chiave pubblica ad Alice;
  2. Alice genera una nuova chiave segreta, la cifra con la chiave pubblica di Bob e la invia a Bob;
  3. Bob riceve la chiave segeta (cifrata) e la decifra con la propria chiave privata;
  4. Alice e Bob a questo punto condividono la chiave segreta di sessione per mezzo della quale possono comunicare in tutta sicurezza.


Figura 2-12: Determinazione della chiave segreta di sessione

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).


Figura 2-13: Trudy si interpone fra Alice e Bob

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.


Figura 2-14: Ricorso ad una CA per avere la chiave pubblica di Bob

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:


Figura 2-15: Funzionamento del protocollo SSL

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.


Figura 2-16: Formato di un messaggio S-HTTP

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.


Torna al sommario | Vai avanti