Crittografia & VPN
Introduzione
Quando si parla di crittografia oggi ci si riferisce a quell’arte (o scienza) che fornisce uno strumento adatto a mantenere segrete tutte quelle informazioni che non si vogliono divulgare pubblicamente in maniera tale che la possibilità di accedervi sia data soltanto ad uno o ad un ristretto numero di persone autorizzate che “sappiano come farlo”.
L’operazione tramite la quale si nascondono le informazioni è chiamata cifratura oppure crittazione, ed è effettuata tramite un apposito algoritmo chiamato cifrario; l’informazione o il messaggio da cifrare è noto come testo chiaro ("plaintext"); la crittazione sfrutta come mezzo fondamentale una chiave detta chiave del cifrario per convertire il testo chiaro in testo cifrato o crittogramma ("ciphertext").
Con decrittazione si intende la conversione da testo cifrato a testo chiaro e anch’essa sfrutta la chiave del cifrario. L’ambito nel quale sono effettuate le operazioni di crittazione e di decrittazione è chiamato crittosistema. Con crittoanalisi invece si intende la pratica del rivelare ciò che la crittografia tenta di nascondere. Il termine crittologia, infine, include sia la crittografia che la crittoanalisi.
La storia
Storicamente l’utilizzo della crittografia è stato proprio di 4 diversi gruppi di persone: i militari, i corpi diplomatici, i diaristi e gli amanti.
I militari hanno sicuramente giocato il ruolo più importante in quanto la crittografia applicata a scopi bellici ha rappresentato per molti secoli un’arma determinante nelle mani di coloro che sapevano come usarla.
Una delle principali limitazioni al suo uso era rappresentata dal fatto che coloro che erano addetti alla cifratura (un gran numero di impiegati vista la mole dei messaggi da inviare) dovevano adoperare mezzi inadeguati (non erano ancora presenti i computer) e lavorare in condizioni oltremodo scomode, ad esempio in mezzo ad un campo di battaglia.
Come se non bastasse la crittografia poteva rivelarsi un arma a doppio taglio nel caso in cui un addetto alla codifica cadeva nelle mani del nemico: se ciò accadeva era necessaria una immediata modifica del metodo crittografico, e questo richiedeva, tra l’altro, il riaddestramento di un gran numero di persone.
Ma non si pensi che la crittografia sia una pratica attuata soltanto negli ultimi secoli; in verità essa è una delle scienze più note sin dai tempi remoti.
Criptare è una parola che viene dal greco “cryptos” (nascosto); si hanno traccia di applicazioni di crittografia (in special modo sulle comunicazioni) risalenti persino agli antichi egizi. Uno dei più antichi cifrari che si conoscano è il “Cesareo”, utilizzato dagli imperatori romani.
Cesare Augusto, ad esempio, scriveva i suoi messaggi sostituendo ogni lettera con quella successiva, cosi che “CESARE” diventava “DFTBSF”, mentre Giulio Cesare sostituiva ogni lettera con quella che la segue tre posti più in là nell’alfabeto codificando “CESARE” come “FHVDUH”. Questi semplici metodi fanno parte della categoria dei CIFRARI DI SOSTITUZIONE. Se ne vedranno di seguito alcuni tra i più importanti, che sono stati adoperati con una certa frequenza negli anni addietro ma ai quali oggi nessuno si sognerebbe di affidare i propri messaggi riservati.
Generalizzando il cifrario di Cesare se ne può costruire uno nel quale l’alfabeto del cifrario sia traslato di “k” lettere invece che sempre di tre.
Un miglioramento successivo consiste nello stabilire una corrispondenza arbitraria fra i simboli del testo chiaro (come le 26 lettere dell’alfabeto) ed i simboli del testo cifrato; ad esempio:
|
|
Questo sistema generale è noto come sostituzione monoalfabetica, in cui la chiave è la stringa di 26 lettere corrispondente all’alfabeto completo.
Tale cifrario potrebbe sembrare sicuro perché anche se il crittoanalista, scoprisse che è stato adottato il metodo di sostituzione lettera per lettera, sarebbe lo stesso difficile per lui trovare la chiave giusta fra tutte quelle possibili (che sono 26!=4*(10^26)).
In realtà è facile attaccare il cifrario: basta conoscere le proprietà statistiche del linguaggio con cui il testo chiaro è stato scritto, per esempio le lettere, i digrammi, i trigrammi più ricorrenti in quel particolare linguaggio e sostituire quindi queste lettere a quelle più ricorrenti nel testo cifrato. In questo modo non bisogna fare molta fatica per rivelare esattamente tutto il contenuto reale del crittogramma.
Si potrebbe a questo punto pensare di appianare le differenze nelle frequenze delle lettere del testo cifrato introducendo più alfabeti da usare a rotazione, ottenendo un cosiddetto cifrario polialfabetico.
Un esempio è il cosiddetto cifrario di Vigenére che consiste di una matrice quadrata contenente 26 alfabeti di Cesare.
La prime riga chiamata riga “A” contiene l’alfabeto reale; la seconda riga (riga “B”) contiene l’alfabeto traslato e ruotato di una posizione (BCDE….XYZA) e così via fino all’ultima riga detta riga “Z” che contiene la sequenza ZABC….WXY.
La chiave questa volta è una singola parola o frase, possibilmente facile da ricordare che viene ripetutamente scritta sopra il testo da cifrare. Ad esempio, con la chiave “lavorare”:
|
|
La lettera della chiave sopra la lettera del testo chiaro determina la riga da usare per la cifratura. In questo modo una lettera del testo chiaro sarà rappresentata da lettere diverse nel testo cifrato, a seconda della sua posizione nel testo chiaro.
Ma anche questi cifrari possono essere facilmente svelati: se per ipotesi si conoscesse la lunghezza “k” della chiave, si potrebbe spezzare il testo cifrato in blocchi aventi quella lunghezza, sovrapporli e ottenere così ogni colonna codificata secondo un cifrario monoalfabetico, che abbiamo visto essere facile da attaccare. Per conoscere il valore esatto di “k” si procede per tentativi fino a quando non si trova un valore per il quale le frequenze relative dei vari cifrari monoalfabetici sono uguali e approssimativamente corrispondenti a quelle del linguaggio con cui il messaggio è stato scritto.
Per cifrare con buona garanzia di sicurezza si può adoperare il metodo della “chiave di una sola volta”, che consiste nel generare una chiave che è composta da soli bit, più lunga dell’intero messaggio, trasformare quest’ultimo in un altra stringa di bit (ad esempio usando la corrispondente codifica ASCII) e facendo una operazione di “exclusive OR” tra le due stringhe di bit per ottenere il testo cifrato.
Questo metodo ha però delle ovvie difficoltà rappresentate dall’uso di una chiave troppo lunga per essere gestita e ancora più se il testo chiaro è molto lungo.
Se i cifrari di sostituzione conservano l’ordine dei simboli di testo chiaro ma li camuffano, esiste un altra categoria di cifrari detti CIFRARI DI TRASPOSIZIONE che riordinano le lettere senza alterarle. Per tale operazione si può eseguire una “trasposizione colonnare”: si trova una chiave che è una parola o frase che non contiene alcuna lettera ripetuta, e dopo aver disposto il messaggio da cifrare in righe sovrapposte di lunghezza uguale a quella della chiave, si numerano le colonne così ottenute assegnando il numero 1 a quella posta sotto la lettera della chiave che è più vicina all’inizio dell’alfabeto e così via fino al numero che corrisponde alla lunghezza della chiave.
Il testo cifrato viene successivamente letto dalle colonne, partendo da quella con il numero minimo.
Anche un cifrario del genere può essere svelato. Bisogna prima di tutto sapere che si ha a che fare con un cifrario di trasposizione, successivamente bisogna indovinare il numero di colonne (la lunghezza della chiave) e questo si può fare per tentativi se si sospetta che una determinata parola o frase può essere presente nel testo, e infine occorre ordinare le colonne nel corretto ordine, anche qui vagliando diverse combinazioni possibili (cosa semplice questa se “k” non è un numero molto grande).
Dall’analisi di questi metodi crittografici classici si evince che il computer sia un potente strumento nelle mani di un crittoanalista, attraverso il quale si può decifrare un testo crittato.
La crittografia moderna si basa sulle stesse idee di quella tradizionale, cioè sostituzione e trasposizione, ma la sua importanza è diversa.
Tradizionalmente i crittografi hanno utilizzato algoritmi molto semplici e si sono affidati a chiavi molto lunghe per la loro sicurezza. Oggi invece la tendenza si è invertita: si cerca di rendere l’algoritmo di cifratura così complicato che anche se il crittoanalista disponesse di enormi quantità di testo cifrato di sua propria scelta, non sarebbe in grado di trovarci alcun senso.
Tecniche di crittografia
Al giorno d’oggi la parola “crittografia” è usata per indicare una grande varietà di tecniche il cui obiettivo congiunto è quello di garantire la completa riservatezza delle informazioni consentendo applicazioni quali l’autenticazione, il denaro elettronico e molte altre ancora.
Alcuni metodi si basano sulla segretezza degli algoritmi utilizzati; tuttavia essi sono soltanto di interesse storico e non si adattano alle necessità del mondo odierno.
In effetti una regola fondamentale della crittografia moderna è che bisogna supporre che il crittoanalista conosca il metodo generale di cifratura impiegato. La quantità di sforzi necessari per inventare, collaudare e installare un nuovo metodo ogni volta che quello vecchio è compromesso (o si pensa che lo sia) ha sempre reso poco pratico il mantenimento di tale segreto, ed il fatto di pensare che esso sia un segreto quando in realtà non lo è fa più male che bene.
Entra quindi in gioco la chiave, che è una stringa di caratteri che seleziona una tra le molte cifrature potenziali. Tutti i moderni metodi utilizzano una chiave per eseguire la crittazione e la decrittazione; un messaggio può essere decrittato solo se la chiave di decifratura si “accoppia” con quella di cifratura. Per alcuni algoritmi le due chiavi sono uguali, mentre per altri esse sono diverse.
In base a questa sostanziale differenza gli algoritmi basati sull’utilizzo di chiavi si dividono in algoritmi simmetrici (detti anche a chiave simmetrica o a chiave segreta) e asimmetrici (detti anche a chiave asimmetrica o a chiave pubblica).
Gli algoritmi simmetrici sono quelli usati dalla crittografia classica ed essi permettono al mittente e al destinatario di usare la medesima chiave per
rispettivamente crittare e decrittare un messaggio. Questo tipo di algoritmi si dividono in cifrari a flusso e cifrari a blocco. I primi possono crittare un solo bit di testo chiaro alla volta, mentre i secondi prendono un certo numero di bit (tipicamente 64 bit nei moderni cifrari) e li crittano come una singola unità.
I sistemi a chiave simmetrica possono essere utilizzati per implementare servizi di sicurezza quali:
- Riservatezza, che protegge l’informazione da visione non autorizzata. Spesso la protezione riguardo solo il corpo del messaggio e non la testata, trasmessa in chiaro per semplificare l’instradamento del messaggio fino al destinatario (ai destinatari).
- Integrità, cha garantisce che l’informazione non venga alterata e che il messaggio arrivi esattamente come è stato spedito. Tecniche combinate di cifratura e controlli algoritmici (tipo checksum, CRC, ecc) vengono usate per implementare questo servizio.
- Autenticazione, che serve a prevenire la dissimulazione degli utenti; consente al vero mittente di includere nel messaggio informazioni che lo identifichino con certezza.
Tuttavia per sistemi di tal genere non mancano i punti deboli:
- due corrispondenti devono essere in possesso della stessa chiave che deve essere consegnata telematicamente ad entrambi prima che possa iniziare una comunicazione tra i due. Inoltre al crescere degli utenti di servizio il numero di chiavi aumenta rendendo problematica la loro gestione e distribuzione.
- poiché gli utenti condividono chiavi segrete, non si può facilmente implementare l’importante servizio di Non - Disconoscimento (o Non - Ripudiazione) del messaggio (cioè nessuno dei due è in grado di provare a un terzo che un certo messaggio è stato effettivamente generato dall’altro).
Questi problemi sono risolti dalla crittografia a chiave pubblica.
Le tecniche asimmetriche utilizzano coppie di chiavi complementari invece di una sola chiave segreta.
Un singolo utente possiede una coppia univoca di chiavi complementari; di esse, una è una chiave pubblica, nel senso che può essere conosciuta da tutti, ed è usata per cifrare il messaggio, mentre l’altra è una chiave privata ed è tenuta al sicuro dal suo proprietario di modo che solo lui possa utilizzarla.
Le due chiavi sono create in maniera tale che un messaggio cifrato da una delle due può essere decifrato solo e soltanto dall’altra. In pratica se si vuole spedire un messaggio a una certa persona, si critta quel messaggio con la sua chiave pubblica, e si è sicuri che soltanto quella persona potrà decifrarla con la propria chiave privata: neanche la chiave pubblica utilizzata per cifrare riuscirà a decrittare il messaggio.
Gli algoritmi asimmetrici possono essere utilizzati anche per generare le cosiddette “firme elettroniche”. Esse sfruttano delle elaborazioni algoritmiche particolari (one-way hash function) grazie alle quali è possibile verificare l’autenticità del messaggio.
Con questa importante tecnica si assicura che il messaggio originale, la firma e la coppia di chiavi dell’utente siano strettamente legate; alla modifica di qualsiasi componente la validazione (il riconoscimento) della firma fallisce.
In fin dei conti il vantaggio principale offerto dalla crittografia asimmetrica sta nella facilità di gestione delle chiavi; non occorre infatti scambiarsi segretamente chiavi di cifratura con il rischio che esse possano essere intercettate, in quanto basta inviare ad un corrispondente la propria chiave pubblica per essere sicuri di essere gli unici a poter decifrare un eventuale messaggio cifrato con essa.
Ma non si pensi che gli algoritmi asimmetrici risolvano completamente i problemi di sicurezza.
Vi sono in realtà vari motivi che fanno propendere per un uso ibrido e combinato dei sistemi simmetrici e asimmetrici:
- nel caso in cui si debbano crittare grandi volumi di dati, la crittografia asimmetrica impiegherebbe per tale operazione un tempo di gran lunga maggiore rispetto a quello impiegato da un algoritmo simmetrico, ragion per cui la scelta dei metodi a chiave unica è quasi obbligatoria;
- se il messaggio è diretto a più destinatari, la cifratura asimmetrica va ripetuta per ogni destinatario.
Un sistema di cifratura combinato simmetrico - asimmetrico è per esempio sfruttato dalla più importante applicazione crittografica relativa allo scambio di posta elettronica: PGP.
Ricordiamo per ultimo anche l’importanza dei generatori di numeri casuali per applicazioni crittografiche.
I generatori di numeri casuali convenzionali, usati in molti linguaggi di programmazione o in altri ambienti, non sono adatti per applicazioni di crittografia in quanto la loro casualità è spesso legata alla catene di Markov che si sa essere dotate di una certa memoria, dunque non abbastanza casuali per resistere agli attacchi dei crittoanalisti.
Nel caso ottimale essi dovrebbero essere basati su delle vere sorgenti fisiche di casualità, per le quali ogni tentativo di predizione sarebbe vano. Queste sorgenti potrebbero includere, ad esempio, il rumore prodotto da un dispositivo a semiconduttore, il bit meno significativo di un segnale audio, gli intervalli tra le interruzioni di un certo dispositivo o infine i caratteri generati dal tempo che intercorre tra le battute sulla tastiera.
Perché la crittografia
Difendere la privacy individuale in un era di crescente computerizzazione sta diventando un problema cardine con il quale tutti prima o poi avremo a che fare.
In effetti oggi le nostre vite sono controllate in molti modi diversi: ogni transazione effettuata da una carta di credito rimane impressa in un database; le nostre telefonate sono registrate dalle compagnie telefoniche e usate per i loro scopi di mercato; i nostri assegni sono fotocopiati ed archiviati dalle banche.
Inoltre, con il crescere degli archivi nei quali sono immagazzinate sempre più informazioni sulla nostra vita e con l’aumentare delle transazioni effettuate elettronicamente attraverso sistemi telefonici e network informatici, aumentano di conseguenza le possibili forme di controllo.
Se non è possibile cercare una soluzione a questi problemi avvalendosi dell’intervento delle autorità governative (alle quali, si sa, queste forme di controllo non possono che far comodo), l’unica possibilità che resta per difendere il proprio diritto alla privacy è adoperare la crittografia.
La crittografia, che per molti ancora oggi costituisce (anche a causa di una diffusa disinformazione in merito) un qualcosa di esoterico e inaccessibile, è in realtà un potente strumento che può essere impiegato per la difesa della propria riservatezza.
Attualmente esistono numerose e legittime ragioni che inducono a tener nascoste determinate informazioni:
- le compagnie spesso posseggono file di dati confidenziali riguardo i propri impiegati, come ad esempio referti medici, contratti salariali, ecc.
Gli interessati si sentirebbero certamente più al sicuro se queste informazioni fossero crittate in modo tale da risultare inaccessibili a chiunque voglia ficcare il naso nei loro affari; - una persona potrebbe condividere uno spazio lavorativo con altre persone della cui onestà non è completamente sicuro. Ebbene, egli vorrà essere certo che in sua assenza nessuno possa leggere informazioni riservate a suo riguardo o possa addirittura manomettere dei dati importanti;
- una compagnia potrebbe voler trasferire informazioni importanti alle sue filiali dislocate altrove, oppure mandare informazioni confidenziali tipo posizioni di negoziazioni o dati di proprietà ad un proprio agente che si trova magari all’estero;
- ancora una compagnia potrebbe essere in possesso di informazioni che farebbero comodo a qualche rivale d’affari come ad esempio dati relativi a problemi finanziari, risultati di ricerche, informazioni che rivelano violazioni di regolamentazioni governative, formule segrete o piani per una futura espansione o per lo sviluppo di un nuovo prodotto;
- due persone qualsiasi potrebbero voler corrispondere attraverso la posta elettronica, e vorrebbero ovviamente che nessun altro al di fuori di essi venisse a conoscenza delle informazioni scambiate. Sarà questo il settore di applicazione della crittografia di cui ci occuperemo maggiormente in seguito.
Dagli esempi appena visti appare evidente che ci siano due casi generali in cui è necessario avvalersi dell’appoggio della crittografia:
- quando l’informazione, una volta crittata, deve semplicemente essere conservata sul posto e dunque “confezionata” in modo tale da renderla invulnerabile ad accessi non autorizzati;
- quando l’informazione deve essere trasmessa in qualche luogo e dunque la crittazione è necessaria perché se qualcuno la intercettasse non potrebbe capir nulla da quello che si trova tra le mani.
Riguardo il primo caso basterà dire che un crittosistema a chiave segreta (simmetrica) è quello più consono, sia perché è più veloce, sia perché non esiste alcun problema connesso con lo scambio e la validazione delle chiavi.
Il secondo caso è di gran lunga oggi quello che richiama l’attenzione della maggior parte delle compagnie produttrici di software crittografico.
In effetti l’utilizzo sempre più esteso della telematica sta introducendo nella tecnica delle comunicazioni quella che a pieno diritto può essere definita una rivoluzione. Il punto cardine di questa rivoluzione è rappresentato dall’accesso di massa alla posta elettronica, tramite la quale è consentita la libera espressione e la libera circolazione di idee su scala mondiale, rendendo inoltre possibile questa circolazione nella direzione “singolo -> moltitudine” e non solo nel verso opposto.
Se andiamo ad esaminare dal punto di vista tecnico uno dei mezzi principali attraverso cui questa libera circolazione di idee avviene, ossia Internet, appare chiaro che essa, così come si verifica per la rete telefonica (in fonia e fax, via cavo e via onde radio) e per il traffico di dati su carta, costituisce un canale di comunicazione che di per se non garantisce la segretezza dei dati che vi circolano.
Se infatti si osserva l’header di un qualunque messaggio ci si può rendere conto di come prima di arrivare a destinazione i messaggi transitino attraverso diversi nodi. Ebbene, maggiore è il numero di nodi attraverso cui il messaggio deve passare prima di giungere alla destinazione finale, maggiore è la probabilità che tale messaggio possa essere intercettato e manomesso da qualcuno.
Sia chiaro, si parla in alcuni casi di una gigantesca mole di dati da monitorare, ma la potenza dei calcolatori odierni è sufficiente per immaginare un’entità che filtri solo i dati che interessano, che sia capace di memorizzarli e di modificarli senza che nessuno tra il mittente e il destinatario si sia accorto di nulla.
Da qui l’esigenza di adoperare algoritmi, a chiave simmetrica, a chiave pubblica o una qualche combinazione delle due che siano così potenti da resistere a tutti i tipi di attacchi oggi conosciuti, che consentano insomma a tutte le masse utilizzatrici di Internet di poter dormire sonni tranquilli.
Introduzione alle funzioni ONE-WAY HASH
Una funzione one-way hash trasforma un testo normale di lunghezza arbitraria in una stringa di lunghezza relativamente limitata. Questa stringa rappresenta “un’impronta digitale” unica del messaggio e viene spesso definitovalore di hash o checksum crittografico.
Di nessun valore di hash di lunghezza finita si può avere la certezza che provenga da un singolo messaggio. Inoltre dato un valore di hash, dovrebbe essere impossibile risalire al suo testo originale (se ci si riuscisse la funzione non sarebbe più “one-way”).
Per una dimostrazione forniamo 2 valori di hash, provenienti da input molto diversi in un sistema Linux, ottenuti tramite l’algoritmo MD5 di cui parleremo tra poco, che estrae da input di qualunque dimensione valori di hash di 128 bits che possono essere rappresentati con 16 cifre esadecimali:
echo “a” - md5
valore di hash corrispondente: 60B725F10C9C85C70D97880DFE8191B3
cat congressional-minutes.txt - md5
valore di hash corrispondente: EDED6F6C520DEB812BA7154D093AD43
Le funzioni one-way hash svolgono due funzioni molto importanti nella crittografia:
- verifica dell’integrità: se il valore di hash di un certo messaggio è uguale prima e dopo la trasmissione, allora vi sono ottime possibilità che il messaggio ricevuto sia rimasto invariato.
- concisione: nei calcoli matematici risulta più facile usare un’impronta a 128 bits quanto non lo sia un testo normale.
La lunghezza dei valori di hash varia a seconda degli algoritmi. Quelli a 128 bits sono i più comuni e i preferiti, infatti maggiore è il numero dei bits e meglio è. Si pensi che una funzione hash a 4 bits non è di alcuna utilità per una verifica dell’integrità perché 1/16 dei possibili messaggi saranno mappati su uno dei 16 possibili valori di hash. Un hacker che modifica un messaggio può farlo agevolmente in modo tale da lasciare lo stesso valore di hash.
Se invece si usa un valore di hash da 160 bits, l’hacker dovrebbe modificare il messaggio in 2^159 maniere diverse per ottenere il corretto valore di hash. Non sono molti quelli che si cimenterebbero in una simile impresa.
Le funzioni di hash possono essere usate per la creazione di firme digitali. Molti crittosistemi richiedono calcoli molto lunghi e complessi per apporre la propria firma digitale su un file di grosse dimensioni mentre, grazie a queste funzioni, si può semplicemente calcolare e firmare il valore di hash del file sicuramente di dimensioni molto ridotte, risparmiando energie.
One-Way Hashing Functions (MD2, MD4, MD5, SHA, TIGER)
MD2 (Message Digest 2), inventato da Ron Rivest della RSA Data Security, è una funzione nata per essere utilizzata con la Privacy Enhaced Mail - PEM - (Posta con privacy incrementata). Produce un valore di hash di 128 bits e richiede come input multipli di 16 byte. MD2 esegue il PAD (cioè aggiunge i bit mancanti) ai messaggi d’ingresso che non hanno la lunghezza integrale.
Questo algoritmo è stato violato dalla crittoanalisi quindi ne è, ovviamente, sconsigliato l’uso.
MD4, inventato da Ron Rivest della RSA Data Security, crea anch’esso, come il precedente, valori di hash di 128 bits ma i calcoli sono ottimizzati per i registri a 32 bits come quelli che si possono trovare nella famiglia dei processori Intel 80x86. Sicuramente più veloce di MD2, MD4 richiede PAD (aggiunta di bit) a multipli di 512 bits. Inoltre il padding comprende sempre un valore di 64 bits che indica la lunghezza del messaggio che non ha subito il PAD.
In questo modo MD4 è più sicuro del suo antecedente perché se già è difficile produrre due messaggi che abbiano stesso valore di hash di 128 bits, sarà ancora più difficile fare lo stesso con due messaggi che abbiano la stessa lunghezza con modulo 264.
MD5, come i precedenti, è stato ideato da Ron Rivest. E’ nato per sostituire MD4 che sta per essere violato! Non cambia molto sulla struttura, è solo un’estensione del suddetto anche se un po’ più lento.
SHA (Secure Hash Algorithm) è un algoritmo hash prodotto dal National Istitute of Standard and Tecnology (NIST) e della National Security Agency (NSA) del governo degli Stati Uniti. Molto simile a MD4 produce valori di 160 bits a partire da stringhe di lunghezza variabile. E’ ritenuto abbastanza sicuro ed è relativamente nuovo.
Tiger è un nuovo algoritmo sviluppato da Anderson e Biham.
La crittografia simmetrica o secret-key
Con l’inevitabile ascesa della comunicazione telematica al ruolo di primario e quotidiano mezzo di comunicazione, si pongono delle esigenze fondamentali di riservatezza e sicurezza.
E’ per rispondere a tali necessità che si è sviluppata la crittografia come già spiegato in dettaglio nell’ introduzione.
Esistono due tipi di crittosistemi che si basano su key o codici fondamentalmente diversi tra loro. Vengono definiti crittosistemi a secret-key (chiave segreta) e public-key (chiave pubblica).
Nel primo sistema viene usata una sola chiave, detta appunto segreta, utilizzata come parametro di una funzione unidirezionale e invertibile permettendo così di elaborare il testo del messaggio da trasmettere rendendolo incomprensibile agli intercettatori.
Essendo la funzione invertibile, il destinatario dovrà soltanto elaborare nuovamente il crittogramma richiamando l’inversa della funzione di cifratura avente come parametro la stessa chiave utilizzata dal trasmettitore del messaggio.
Ovviamente la tecnica si basa sulla capacità del mittente e del destinatario di mantenere segreto il codice di cifratura. Tale metodo, noto da secoli, è definito crittografia simmetrica mentre la crittografia a public-key, relativamente recente in quanto risale agli anni ‘70, è nominata crittografia asimmetrica. Quest’ultima a differenza della precedente, utilizza due chiavi distinte: una per criptare il messaggio e l’altra per decriptare.
La fondamentale innovazione del crittosistema a chiave pubblica è l’impossibilità di derivare una chiave dall’altra potendo così diffondere una delle due e tenere segreta l’altra.
Sia i crittosistemi a secrety-key che quelli a public-key hanno, per motivi diversi, un problema in comune di implementazione: quello della gestione dei codici. Con il sistema a secret-key il mittente e il destinatario devono raggiungere un accordo sulla scelta della chiave.
La cosa non sarà facile se essi si trovano a migliaia di chilometri di distanza e sicuramente questo è il caso più frequente, altrimenti perché farebbero uso di comunicazione telematica? Come potranno allora scambiarsi la chiave?
Un tempo coppie di chiavi identiche erano inventate presso un mezzo centrale di generazione delle chiavi e poi trasmesse alla loro destinazione da un corriere.
Naturalmente un metodo di questo tipo si dimostrò subito inadeguato, basti pensare a tutte le migliaia di filiali sparse in tutto il mondo che una banca o organizzazione simile possono avere. Inoltre per avere maggiore sicurezza tali chiavi venivano giornalmente cambiate incrementando sempre più la distribuzione.
Nacque allora spontaneo pensare di trasmettere tali chiavi, precedentemente cifrate, sulla rete stessa. Una soluzione a tale problema, di seguito esposta, fu ideata nel 1985 sfruttando una gestione gerarchica delle chiavi.
Un’organizzazione sceglie una chiave principale e la distribuisce mediante un corriere a ciascuno dei suoi uffici, essendo questi raggruppati in regioni ogni capoufficio regionale sceglie, a sua volta, una chiave regionale. Queste vengono cifrate usando la chiave principale e distribuite su tutta la rete. Se due uffici della stessa regione vogliono comunicare, uno di essi sceglie una chiave di sessione e la invia all’altro, cifrata mediante quella regionale. Oppure potrà essere creata la chiave di sessione da un processo di gestione esterno ed inviata ad ambedue gli uffici codificata con la chiave regionale.
Si nota che è sempre necessario un corriere esterno per la diffusione della chiave principale e nel caso di dubbia sicurezza di questa, essa dovrà essere subito sostituita.
Il problema non è, come si vede, facilmente risolvibile purtroppo quello che più spesso viene fatto è utilizzare telefono, posta o e-mail ma con nessuna garanzia. Sono nati vari metodi ingegnosi tra cui quello di Merkle detto puzzle (vedere “Reti di computer” Tanenbaum cap: 8.4.3).
Codici cifrati a flusso e a blocchi
I codici cifrati simmetrici possono encriptare qualunque testo in bit, byte, una parola o gruppi di parole alla volta.
Quando un codice cifrato viene applicato ad un bit, un byte o una parola alla volta, viene detto codice cifrato a flusso. Quando viene applicato a gruppi viene detto codice cifrato a blocchi.
L’utilizzo di un codice cifrato a flussi o a blocchi dipende dalla particolare applicazione usata. In genere quello più frequentemente adoperato è il codice a blocchi ma molte applicazioni richiedono l’altro.
Vediamo quattro modelli di codice a blocchi molto comuni:
- Electronic Codebook (ECB): è il metodo più semplice ma anche meno affidabile infatti con esso ogni blocco di testo è criptato sempre con la stessa chiave in successione a rischio però di hacker che possono facilmente decifrarlo.
- Cipher Block Chaining (CBC): è un modello simile al precedente anche se in questo caso i blocchi di testo cifrato sono “incatenati” ai propri predecessori nascondendo le parti che si ripetono all’interno del testo semplice e che verrebbero altrimenti ripetute nel testo. In particolare al blocco di testo cifrato precedente viene applicata l’operazione di XOR con il blocco corrente di testo semplice prima del normale encriptamento con la chiave; il tutto viene successivamente cifrato.
- Cipher Feedback (CFB): come per il CBC i blocchi vengono “incatenati” fra loro ma questa volta dopo il normale encriptamento, quindi viene fatta la criptazione del blocco cifrato precedente e poi lo XOR con il testo chiaro,spezzettato in segmenti più piccoli. L’idea è quella di elaborare i dati non appena divengono disponibili invece di aspettare che un blocco sia del tutto completato.
- Output Feedback (OFB): affinché il procedimento sia ancora più veloce, in questo metodo la connessione (detta FEEDBACK) avviene tra l’output del passo precedente e il blocco corrente.
Il primo metodo, nonostante sia il meno sicuro, è quello più utilizzato; viene però consigliato caldamente da crittologi il secondo vista la sua semplicità, cioè il CBC. Il CFB è adatto alle applicazioni dei terminali in cui i codici individuali, introdotti dagli utenti, devono essere inviati all’host senza che rimangono in memoria. L’OFB viene spesso utilizzato nelle comunicazioni ad elevata velocità come quelle dei satelliti.
Principali meccanismi di crittografia simmetrica
DES
Com’è nato?
Il DES (Data Encrytion Standard) venne adottato dal governo degli Stati Uniti nel 1977 come standard federale. Il DES deriva dall’algoritmo Lucifer inventato dall’IBM nei primi anni ‘70. Mentre Lucifer era ancora in via di sviluppo il National Bureau of Standard (NBS), diventato poi il NIST, sollecitò l’industria americana alla creazione di un nuovo standard crittografico per la protezione di dati riservati ma non classificati come “segreti militari” o di “stato”.
L’NBS non fu accontentato molto presto forse perché il governo degli Stati Uniti non ha mai incoraggiato ricerche in questo campo, comunque nel 1974 l’IBM propose un Lucifer modificato a cui fu dato il nome di DES. Nonostante che questo software dovesse avere una validità di 5-10 anni, oggi è ancora lo standard ufficiale.
Com’è strutturato?
Il DES è un codice cifrato a blocchi che può essere usato in tutti i modelli ECB, CBC, CFB e OFB. La chiave usata per crittografare è un blocco di 64 bits suddivisa in 8 sottoblocchi di 8 bits ciascuno; l’ultimo bit di ogni sottoblocco è di controllo, di conseguenza i bit liberi sono 56.
Il testo da cifrare viene suddiviso in blocchi di 64 bits ciascuno e vengono cifrati uno dopo l’altro in successione con uguale procedimento se viene usato il modello ECB altrimenti vengono incatenati fra loro secondo i metodi CBC, CFB e OFB.
Ci sono diversi sistemi utilizzati per completare un messaggio, se esso non raggiunge la lunghezza desiderata di 64 bit (procedimento detto “pad”): un metodo aggiunge zeri fino alla lunghezza stabilita mentre un altro, se i dati sono binari, integra il blocco con bits che sono l’opposto degli ultimi bit del messaggio. Nel caso di dati ASCII si usano invece byte random (casuali) specificando nell’ultimo byte il carattere ASCII corrispondente al numero di byte aggiunti. Infine un’ultima tecnica, in parte equivalente alla precedente, usa sempre bits random ma fornisce, negli ultimi tre bits, il numero di byte non padding cioè originali. In tal caso se il blocco è già di 64 bits si dovrà aggiungere un’altra stringa di 64 bits con 61 bits random e gli ultimi 3 nulli dato che indicano il numero di byte validi.
Durante la cifratura un blocco di testo normale viene per prima cosa trasposto (o permutato), che significa che ogni bits cambia di posizione con un altro mediante un modulo di trasposizione. Poi il blocco di 64 bits viene diviso in una metà destra e una metà sinistra di 32 bits. In seguito vengono applicate 16 passate (round) tramite una funzione che opera sia trasposizioni che sostituzioni ad ogni metà mediante sottochiavi. Durante ogni round l’output della metà sinistra diventa l’input della destra e viceversa.
Dopo il completamento di tutti i round i due sottoblocchi vengono riuniti e il risultato permutato per invertire la trasposizione iniziale.
Precisamente: indichiamo con T(i) il risultato della i-esima iterazione, con S(i) il semiblocco sinistro, con D(i) il semiblocco destro e con K(i) la sottochiave. In base all’algoritmo avremo che:
|
|
Vediamo come opera la funzione “f”:
- il blocco D(i-1) viene espanso da 32 bits a 48 con un modulo di espansione E. Indichiamo il blocco espanso con E[D(i-1)];
- si calcola E[D(i-1)] XOR K(i);
- il risultato precedente viene spezzato in 8 blocchi di 6 bits ciascuno: B(1),B(2)…B(8) contenenti rispettivamente i bits da 1-6, da 7-12 ecc …
- ciascun blocchetto B viene usato come ingresso ad una funzione Z che restituisce stringhe di 4 bits indicate Z[B(i)]. La funzione Z opera in questo modo:
- preleva da ogni matrice fissata S-box i 4 bits del nuovo blocchetto S(i)=Z[B(i)] posizionati in base alle righe e colonne specificate dai 6 bits del corrispondente B(i);
- una volta concatenati gli 8 blocchetti S(1), S(2)…S(8) verranno permutati ottenendo finalmente P[S(1),..S(8)]=f [D(i-1), K(i)].
La chiave è una stringa di 64 bits con 8 bits di controllo che vengono ignorati durante la cifratura/decifratura. Essa viene spezzata in due blocchi di 28 bits, supponiamo di chiamarli L(0) e R(0), dopodiché per 16 volte i semiblocchi vengono shiftati a sinistra ottenendo L(1), R(1), L(2), R(2) … L(16),R(16).
Quindi al primo round l’algoritmo utilizzerà la sottochiave K(1)=P[L(1)R(1)] dove P al solito indica una permutazione, al secondo K(2)=P[L(2)R(2)] e al 16° round K(16)=P[L(16)L(16)] (si noti che tutte le operazioni effettuate producono sottochiavi K(i) di 48 bits).
Per la decifratura il procedimento è lo stesso salvo che al 1° passo verrà utilizzata K(16)=P[L(16)L(16)], al secondo K(15)=P[L(15)L(15)] ecc.
In termini di equazione avremo:
|
|
Quant’è sicuro DES?
Questo algoritmo che potrebbe sembrare molto cavilloso in realtà sfrutta operazioni molto semplici come trasposizione, sostituzione e XOR.
Nonostante la sua semplicità il DES con i suoi 16 round sopravvive da due decenni alla crittoanalisi. Tuttavia appartiene alla classe dei cifrari utilizzati per la crittografia commerciale cioè messaggi relativamente importanti in quanto non è invincibile anche se non ancora violato.
DES è un cifrario standard dove quello che varia è solo la chiave. Se questo da una parte porta a dei vantaggi economici e di contabilità dall’altra comporta degli ovvi svantaggi: quello più evidente è che se un domani, non troppo lontano, verrà forzato tutti coloro che ne fanno uso dovranno cambiare il cifrario con una spesa enorme.
Inoltre il difetto più importante è la sua limitata Keyspace (spazio delle chiavi) pari a 2^56 ormai non più sufficiente, infatti alla fine degli anni ‘70 è stato stimato che una macchina in grado violare una Key-des in meno di un giorno sarebbe costata 20.000.000$. In 5 anni potrebbe essere però uno strumento che anche le masse si potranno permettere.
Per far fronte a questi problemi sono nate proposte diverse tra cui l’utilizzo di chiavi più lunghe o di cifratura tripla (T-DES).
Sono nate ultimamente delle perplessità riguardo per esempio il rifiuto della IBM di rendere pubbliche le ragioni della scelta di specifiche S-box nel cifrario o anche la riduzione della chiave da 128 bits a 64 fatta dalla NSA (National Security Agency) che rendono dubbia la sicurezza di DES ma è inutile indagare dato che nel 1997 il vecchio DES è stato sostituito da un nuovo standard denominato Skipjack.
T-DES
Un evoluzione del DES può essere considerata il triplo-DES così denominato perché usa due o tre chiavi indipendenti in tre passaggi.
Ci sono molte varianti del TDES: una di queste usa due chiavi, K¹ e K², che raddoppiano l’effettiva lunghezza della chiave portandola a 112 bits, incrementando il Key-space di un fattore 2^56 e aumentando notevolmente la sua resistenza agli attacchi.
Ogni blocco di 64 bits viene prima criptato con la chiave K¹ poi decriptato con K² quindi nuovamente criptato con K¹.
Questa tecnica di cifrare-decifrare-cifrare è molto più difficile da violare rispetto al metodo classico di encriptamento singolo del DES. Inoltre se K¹=K² il TDES ha lo stesso risultato del DES così che l’implementazione dell’hardware del TDES può funzionare tranquillamente anche come DES.
Un’altra versione sfrutta 3 chiavi da 56 bits, con un effettivo Key-space di 168 bits, e prevede 3 operazioni di criptamento. Nonostante sia molto dispendioso è più sicuro rispetto a quello appena descritto o al classico DES.
IDEA
IDEA (International Data Encryption Algorithm) è nato nel 1991 sotto il nome di IPES (Improved Proposed Encryption Standard), ideato dai famosi crittologi Xuejja Lai e James L. Massey. Come il DES, anche IDEA è un codice cifrato a blocchi con blocchi di 64 bits, questa volta però la chiave è di 128 bits, che indubbiamente elimina qualsiasi possibilità di riuscita di ricerca esaustiva nello spazio della chiave.
Anche questo come il DES può essere usato nei 4 modelli possibili: ECB, CBC, CFB e OFB. A differenza del DES, che era stato progettato per implementazioni hardware, IDEA è stato creato per software.
La cifratura con IDEA comporta una divisione del blocco di 64 bit del testo normale in 4 sottoblocchi di 16 bits. Ogni sottoblocco subisce 8 round in cui sono coinvolte 52 sottochiavi diverse a 16 bits ottenute dalla chiave a 128 bits.
Le sottochiavi sono generate in questo modo:
- la chiave a 128 bits è divisa in 8 stringhe di 16 che sono le prime 8 sottochiavi;
- le cifre della chiave a 128 sono shiftate di 25 bits a sinistra in modo da generare una nuova combinazione, il cui raggruppamento ad 8 bits fornisce le prossime 8 sottochiavi;
- il secondo passo è ripetuto finché le 52 sottochiavi sono generate.
Ogni round comporta calcoli abbastanza semplici come XOR, addizioni modulari e moltiplicazioni modulari (addizione modulare significa che una somma non può superare i 16 bits quindi quelli in overflow vengono scartati; moltiplicazione modulare è in modulo (2^16).
Durante i round il secondo e il terzo blocco si scambiano di posto mentre al round finale i 4 sottoblocchi vengono concatenati per produrre un blocco di testo cifrato a 64 bits.
Il decriptamento è identico eccetto il fatto che le sottochiavi sono ottenute in maniera diversa dalla chiave principale a 128.
Non è chiaro se sia o meno migliore del TDES, ma alcuni crittologi pensano che il TDES sia più sicuro. L’uso non commerciale di IDEA è free; negli altri casi si deve contattare la Ascom.Tech.
RC2 e RC4
RC2 e RC4 sono stati inventati da Ron Rivest (come indica anche la sigla RC = Ron’s code oppure Rivest’s code) colui che ha inventato anche MD2, MD4 e MD5. Sono codici a blocco e a flusso. Ambedue utilizzano chiavi a lunghezza variabile ma, naturalmente, più sono lunghe più il testo cifrato è sicuro.
RC2, come DES si può trovare nei 4 modelli (ECB, CBC, CFB e OFB) ed opera con un triplo encriptamento nello stesso modo di TDES. Esso è nato come sostitutivo del DES e sembra che in effetti sia da 2 a 3 volte più veloce. RC4 è invece più veloce del DES di un ordine di grandezza.
Questi codici non sono conosciuti molto perché per adesso non ci sono pubblicazioni ufficiali su di loro, sembra che non abbiano subito attacchi anche se nel 1994 si diffuse la voce (successivamente confermata) che il codice sorgente di un algoritmo “equivalente” a RC4 (in linguaggio C) era stato inviato alla Usenet New e quindi brutalmente attaccato.
Skipjack
Skipjack è un crittosistema a secret-key. Anch’esso, come i precedenti, cripta blocchi di testo semplice (cifrario a blocchi).
Questo codice ha sostituito il DES e quindi il funzionamento interno è sotto la protezione del governo degli Stati Uniti che lo adotterà come standard per l’encriptamento dei dati “non classificati”. Le uniche cose che sappiamo è che i blocchi sono sempre a 64 bits ma la chiave è a 80, potrà sfruttare i soliti 4 modelli ( ECB, CBC, CFB e OFB) e durante la cifratura si ha uno slittamento di 32 posti per ogni blocco.
Sapendo che l’NSA intende utilizzare Skipjack per i propri fini, è probabilmente scontato che sia da considerare sicuro ancora a lungo.
Si nutrono anche seri dubbi sul fatto che l’intera comunità possa venire a conoscenza di Skipjack e che abbia il permesso di esaminarlo. Comunque ci si continua a domandare come mai la chiave di cifratura sia di 80 bits invece che di 128!
Blowfish
Blowfish è un cifrario a blocchi sviluppato da Bruce Schneier. Esso lavora con blocchi di 64 bits e con chiavi di lunghezza variabile (fino a 448 bits).
Viene sfruttato in molte applicazioni e non sono conosciuti attacchi contro di esso.
Safer
Safer è un algoritmo ideato da Massey. Sono disponibili 2 varianti: una con chiave di 64 bits e l’altra con 128 bits.
Enigma
Enigma era il cifrario utilizzato dai tedeschi nella seconda guerra mondiale.
E’ banalmente risolvibile con i moderni computer.
Vigenere
Vigenere è un cifrario storico menzionato in molti testi ed è facilmente risolvibile.
La crittografia asimmetrica o public-key
Come già descritto precedentemente, il problema più importante nell’implementazione della crittografia simmetrica è la scelta della chiave.
Questa difatti è l’idea base della tecnica crittografica simmetrica: mediante l’utilizzo della chiave si vuole rendere incomprensibile un’informazione a coloro che non dispongono di tale chiave.
Per cui, se Alice vuole trasmettere un messaggio codificato a Bob, ha il problema di inviare a quest’ultimo la chiave segreta, con la quale egli decodificherà il messaggio.
E’ ovvio che se un’altra persona diversa da Bob riuscisse ad intercettare la chiave potrebbe usarla, in primo luogo per decriptare i messaggi e quindi leggerli liberamente, poi anche per modificarli e di nuovo inviarli cifrati o, addirittura, autenticarli.
Grazie alla crittografia a public-key o crittografia asimmetrica i problemi di gestione della chiave sono stati risolti.
Il concetto di crittografia asimmetrica è stato introdotto, nel 1976, da Whitfield Diffie e Martin Hellman, che pensarono di sfruttare una coppia di chiavi, l’una detta appunto public-key e l’altra secret-key o privacy-key.
Il metodo si basa su due concetti fondamentali:
- un messaggio codificato con una delle 2 chiavi può essere decodificato solo con l’altra;
- non è matematicamente possibile ricavare una chiave dall’altra, infatti è stato stimato che, impiegando 1024 bits, per ricavare una chiave segreta da una pubblica sia necessaria una rete di milioni di computer e 1010 anni.
Allora ogni utente della rete diffonde la propria chiave pubblica e mantiene segreta l’altra. Quando Alice vuole trasmettere il proprio messaggio a Bob, lo cifrerà con la chiave pubblica di Bob e lo invierà ad esso. Bob, a sua volta, ricevuto il messaggio procederà alla decrittazione tramite la sua chiave segreta. Dal momento che solo Bob dispone della seconda chiave della coppia in grado di decifrare il messaggio, questo potrà tranquillamente essere trasmesso in rete in balia di tutti.
La cosa importante di cui tenere conto è che, una volta cifrato il messaggio dal mittente, nessuno, eccetto il destinatario, potrà leggerlo, nemmeno colui che lo ha scritto!
Oltre al problema della “privacy” tale metodo risolve anche quello dell’autenticazione del mittente, infatti Alice codificando il proprio messaggio con la sua chiave segreta è come se vi mettesse la sua firma elettronica.
Quando Bob utilizzerà la chiave pubblica di Alice per decifrarlo potrà essere sicuro che solo lei ha manipolato tale testo dato che è l’unica a possedere la chiave giusta.
E’ possibile autenticare oltre al mittente anche il contenuto del messaggio: Alice potrebbe effettuare un hashing del testo da inviare, cioè applicare una funzione unidirezionale che a partire da un certo messaggio fornisce un valore di hash (di lunghezza fissa), e tale che se il messaggio viene alterato questo valore cambia.
Alice, una volta aggiunto tale valore in fondo al suo messaggio, passerà alla cifratura con la sua chiave personale. Chiunque potrà decodificare con la chiave pubblica di Alice il testo inviato o solo il valore di hash per verificare che sia stata proprio lei a scriverlo, ed inoltre che il valore di hash non sia modificato ma corrisponda sempre a quel messaggio.
Purtroppo gli algoritmi a chiave pubblica sono piuttosto lenti e quindi vengono di solito usati solo per cifrare una chiave di sessione con la quale si codifica il messaggio nel modo tradizionale cioè con crittografia simmetrica.
Principali meccanismi di crittografia assimmetrica
Diffie-Hellman
Diffie-Hellman, che porta il nome dei suoi inventori, è un algoritmo a chiave pubblica comunemente usato per lo scambio delle chiavi.
E’ considerato sicuro se le chiavi sono sufficientemente lunghe e sono usati generatori di chiavi appropriati. La sicurezza di Diffie-Hellman si basa sulla difficoltà dei problemi logaritmici (che sono da considerarsi equivalenti a quelli di fattorizzazione sfruttati dal famoso RSA). Molte implementazioni sono disponibili a: http://www.cs.hut.fi/ssh/crypto/software.html#crypto++.
RSA
Come già detto, essendo un crittosistema asimmetrico, la chiave con cui viene criptato il messaggio è differente da quella con cui viene decriptato in ricezione. Allora la chiave K sarà formata da Kp, pubblica, e Ks, segreta; le due chiavi possono essere ricavate l’una dall’altra, ma il punto di forza su cui si basa RSA è che l’operazione di derivare la chiave segreta da quella pubblica è troppo complessa per venire eseguita in pratica, anche su un calcolatore molto potente.
In questo tipo di cifrari hanno grande importanza le cosiddette funzioni unidirezionali: si tratta di funzioni invertibili tali che il calcolo della funzione diretta sia facile, mentre quello della inversa sia difficile per tutti coloro che non sono in possesso della chiave corretta. Un esempio di tale funzione è il logaritmo in base B dove l’inverso è appunto l’esponenziale. Se la base B è un numero ragionevolmente piccolo, il calcolo sia della funzione diretta che della inversa non risulta particolarmente difficile; diversa sarebbe la situazione se il modulo o base fosse un numero primo enorme, poiché la complessità di calcolo sarebbe a dir poco proibitiva.
La funzione unidirezionale che sta alla base di RSA viene costruita sfruttando il fatto che è facile calcolare il prodotto di due numeri primi molto grandi, ma dato il loro prodotto, è oltremodo difficile risalire ai fattori che lo compongono.
Indichiamo i passaggi del cifrario:
- Trovare due numeri primi molto grandi P e Q tale che il prodotto o modulo è detto N=PQ;
- Scegliere E minore di N tale che sia primo con (P-1)(Q-1), il che significa non avere fattori primi in comune. E deve essere dispari. (P-1)(Q-1) non può essere primo perché è pari.
- Calcolare l’inverso di E, D, tale che DE=1 modulo (P-1)(Q-1); N.B. il modulo esegue una operazione di divisione intera tra DE e (P-1)(Q-1) con resto 1.
- Il testo cifrato si ottiene con l’operazione: C = (T^E) modulo PQ dove T è il plain-text (intero positivo), “^” indica l’esponenziale e C il cipher-text;
- Il testo decifrato, R, si ottiene così: R = (C^D) modulo PQ dove C indica sempre il cipher-text.
La chiave pubblica è composta da due parti: il modulo N ed E mentre quella privata da N e D, perciò E è definito l’esponente pubblico e D quello privato.
Si può pubblicare la chiave pubblica liberamente perché non si conoscono metodi per calcolare D, P e Q dati N=PQ ed E.
Mostriamo, di seguito, un esempio chiarificatore, assumendo dapprima dei valori piccoli: consideriamo P=5 e Q=3, perciò N=15; prendiamo E=5, ottenendo quindi D=5; il metodo non funziona perché elevando un
numero alla quinta potenza ed eseguendo modulo 15, si ottiene come risultato il numero stesso.
Per ottenere un esempio che sia interessante dobbiamo considerare moduli maggiori: scelto N=33, avremo Q=11 e P=3; prendendo E=3 otteniamo D=7 infatti: (P-1)(Q-1) = 20 perciò 1 modulo 20 = 21 = DE; eleviamo alla terza potenza i numeri da 0-8 ed eseguiamo modulo 33:
|
|
(per esempio: 4^3=64, 64 modulo 33 è uguale a 31).
Per verificare che effettivamente questo cifrario funziona decriptiamo i valori ottenuti al passo precedente: in particolare eleviamo alla settima ed eseguiamo modulo 33.
|
|
(per esempio: consideriamo 13^7=62748517, questo valore modulo 33 mi fornisce il valore 7 che volevamo. RSA può essere usato sia per autenticare (“authentication”) che per motivi di riservatezza (“privacy”).
Come scegliere la dimensione della chiave in RSA?
Ricordiamo che la chiave in RSA è costituita da un modulo e un esponente, quindi, quando parliamo di dimensione della chiave, intendiamo quella del modulo N.
La scelta della dimensione di N dipende dal bisogno di sicurezza. Più lungo è il modulo, maggiore è la sicurezza ma anche più lente sono le operazioni di cifratura.
Infatti raddoppiando la lunghezza della chiave si incrementa il numero di operazioni necessarie per la cifratura/decifratura con public-key di un fattore 4, e quelle eseguite con secret-key di un fattore 8. La ragione per cui la cifratura/decifratura con public-key richiede meno operazioni è che l’esponente pubblico E può rimanere fisso anche se aumenta il modulo. Diversamente l’esponente segreto D deve incrementarsi proporzionalmente ad N.
Si dovrà allora trovare un compromesso determinato su considerazioni riguardanti: l’importanza dei dati da proteggere, e quindi la necessità di sicurezza, ed una valutazione di quanto potrebbe essere astuto colui che volesse attaccare il cifrario (hacker).
Rivest stima che un modulo di 512 bits può essere fattorizzato con strumenti sofisticati di un valore circa di 8 milioni di dollari, meno nel futuro.
Potrebbe perciò essere consigliabile usare un modulo più lungo per es. di 768 bits o ancora maggiore (1024 bits) se i dati da trasmettere sono di estrema importanza.
Generalmente se la chiave è lunga 512 bits ogni fattore primo P e Q deve essere circa 256 bits.
Privacy
Vediamo come utilizzare questo algoritmo per la “privacy” degli utenti di una rete.
Supponiamo che Alice voglia inviare un messaggio M a Bob. Alice crea il testo cifrato C = (M^E) modulo N dove E ed N costituiscono la chiave pubblica di Bob.
Per decifrare, Bob calcola M = (C^D) modulo N con la sua chiave privata <N, D>, ottenendo così il messaggio originale.
Autenticazione
Allo scopo di autenticare un certo messaggio, che verrà trasmesso su una rete di dubbia sicurezza, si può sfruttare tale algoritmo. Mostriamo un esempio di tale applicazione. Mettiamo che Alice voglia inviare un documento firmato a Bob, M. Ella crea una firma digitale S con questa operazione: S = (M^D) modulo N dove <N, D> è la sua chiave privata. Bob riceve tale messaggio e vuole verificare se davvero è stata Alice a scriverlo: quindi calcola (S^E) modulo N (con <N, E> chiave pubblica di Alice), se il testo ottenuto è chiaro Bob potrà essere sicuro del mittente.
Ovviamente autenticazione e privacy vengono usate contemporaneamente, cioè una volta verificato che il messaggio è stato inviato da Alice, cosa che tutti potranno fare dal momento che la chiave è pubblica, solo Bob potrà leggere il documento, dato che sarà l’unico a possedere la chiave segreta con cui decifrarlo.
Perché usare RSA rispetto a DES?
RSA non è una alternativa a DES ma un supporto, infatti RSA permette due importanti funzioni a cui non provvede DES:
- lo scambio sicuro della chiave segreta;
- la firma digitale.
Nella maggior parte dei casi vengono usati ambedue questi algoritmi: prima il messaggio è criptato nel modo tradizionale, cioè con DES, tramite una chiave generata casualmente, poi la stessa chiave viene criptata con RSA.
Insieme il cipher-text ottenuto con DES unitamente alla chiave cifrata con RSA è inviato al destinatario.
In ricezione verrà prima decifrata la chiave (crittografia asimmetrica) quindi decriptato il testo con tale chiave nel modo tradizionale (crittografia simmetrica).
In taluni casi RSA non è necessario, per esempio nelle “trasmissioni multiutente”, dove le due parti possono mettersi d’accordo sulla chiave durante incontri (meeting) strettamente privati.
In casi che coinvolgono un unico utente, qualora egli volesse conservare un file personale cifrato, non è necessario uno scambio di chiavi.
E’ ovvio che se si richiede una firma digitale o una trasmissione di dati tra utenti che non si possono incontrare, sarà necessario usare RSA.
DES è molto più veloce di RSA, a livello di software possiamo dire che è circa 100 volte superiore e, come hardware, dalle 1000 alle 10.000, dipende dalle implementazioni.
Quanto è sicuro RSA?
La rottura di RSA si potrebbe verificare nel caso in cui un attacker scopra la chiave privata corrispondente a quella pubblica; questo permetterebbe agli hacker di leggere tutti i messaggi cifrati con la chiave pubblica e contraffare la firma. Ovviamente per determinare la chiave segreta D l’hacker dovrebbe fattorizzare il modulo N nei due termini P e Q e conoscere l’esponente E.
La fattorizzazione è un’operazione estremamente difficile soprattutto se i numeri coinvolti sono molto grandi.
Per valutare quanto sia laborioso trovare una soluzione a tale problema fu lanciata una sfida, nel 1977, ad un gruppo di volontari che avrebbero dovuto scomporre in fattori primi il numero conosciuto come RSA-129 (di 129 cifre). La sfida rimase priva di risposta fino al 1993 quando Graff, Athins, Leyland e Lenstra decisero di prendere la cosa sul serio.
Furono coinvolte 600 persone e 1600 computer in 25 paesi diversi, che sfruttarono l’implementazione detta “Multiple Polynomial Quadratic Sieve”. Dopo circa 8 mesi, il gruppo di volontari riuscì a portare a termine il lavoro, determinando i fattori di RSA-129 oltre 390.000 milioni di anni prima del previsto.
Questo esercizio fatto su RSA-129 dimostra che un modulo di 129 cifre può essere scomposto anche se con forze enormi, per cui data la continua crescita tecnologica dei sistemi di computer e il loro calo nel prezzo bisogna pensare ad un modulo di almeno 1024 cifre per essere sicuri di una protezione a lungo termine.
Un’altra tecnica di rottura di RSA è di determinare M direttamente dall’equazione (M^E) modulo N in modo da scoprire il messaggio criptato e contraffare la firma. Nessun attacco di questo tipo è però conosciuto.
Esistono, inoltre, altri metodi che mirano alla scoperta di un singolo messaggio per esempio un semplice messaggio tipo «Attacker at dawn» (attacco all’alba) potrebbe essere decifrato da un hacker anche senza l’aiuto della chiave segreta, oppure, uno stesso testo inviato a più persone ne favorirebbe la decodifica.
Comunque spesso questi attacchi mirano più a rendere insicuro un crittosistema che a violarlo effettivamente.
L’esportazione di RSA
RSA, pubblicato nel 1983, è custodito da PKP (Public Key Patners) e patentato fino al 2000.
In Nord America si deve fare richiesta di licenza per usare o vendere RSA, al di fuori invece non ne è concesso l’utilizzo. Ma se un venditore di software, autorizzato all’uso di crittosistemi a public-key, incorpora RSA in un prodotto commerciale, colui che compra il prodotto finito ha diritto legale di usare RSA.
Il governo degli Stati Uniti può usare questo algoritmo senza una licenza dal momento che ha partecipato alla sua creazione.
Comunque PKP permette un libero uso, “non commerciale”, di RSA con autorizzazioni scritte per ragioni personali, accademiche o intellettuali.
L’esportazione di RSA rispetta la leggi degli Stati Uniti come tutti gli altri prodotti crittografici. Esportare RSA, per scopi di autenticazione, è permesso indipendentemente dalla lunghezza della chiave benché l’esportatore debba dimostrare che il prodotto non può essere facilmente convertito ad un uso di crittazione. Nel caso che RSA venga usato per la privacy il governo USA non permette l’esportazione se la chiave eccede i 512 bits.
RSA è trovato nelle proposte di Internet come standard PEM e PKCS.
Applicazioni della crittografia
Esistono al giorno d’oggi numerosi settori nel mondo della telematica per i quali è (o sarà) necessario un adeguato utilizzo di software crittografico. Si sono visti nei capitoli precedenti diversi tipi di algoritmi di crittografia, che si basano su principi sostanzialmente diversi; è quindi opportuno riuscire a trovare per ciascuno di essi il corretto ambito di utilizzo.
Valgono comunque alcune regole generali che il crittosistema dovrebbe possedere:
- la sicurezza di un potente cifrario dovrebbe risiedere nella segretezza della chiave piuttosto che nella supposta segretezza dell’algoritmo; questo vuol dire che anche se un criptoanalista conosce completamente il metodo usato, non riuscirà comunque a rompere il cifrario;
- un forte crittosistema dovrebbe avere uno spazio delle chiavi abbastanza grande, in modo tale da rendere difficoltosa la ricerca della chiave segreta anche utilizzando calcolatori molto potenti;
- un forte crittosistema dovrà essere in grado di produrre un testo cifrato che possa apparire il più possibile “casuale” a tutti i più potenti tests statistici, in maniera tale da nascondere ricorrenze tipiche di un determinato linguaggio.
Avvalendosi di queste regole fondamentali, la crittografia è usata principalmente per:
- Autenticazione
- Il sistema di autenticazione Kerberos
- Crittazione di e-mail e news
- Crittazione dei file
- Crittazione della voce
- Moneta elettonica
- PGP
Autenticazione
Introduzione all’AUTENTICAZIONE.
L’autenticazione rappresenta una prova d’identità. Di solito questo prevede un insieme di fattori che ci caratterizzano, di cose che conosciamo e di cose che possediamo. Gli amici, i familiari e i conoscenti in genere ci identificano con qualche cosa di definito e di fisico che ci riguarda. Gli sportelli della Bancomat ci identificano come clienti validi a secondo di ciò che possediamo (la carta Bancomat) e per qualche cosa che conosciamo (il codice segreto).
Gli schemi di autenticazione di Internet comprendono qualche cosa che noi conosciamo, qualche cosa che possediamo o entrambe. Ciò che si sa potrebbe essere il nome di un account e una password; quello che si possiede un dispositivo di autenticazione dell’hardware.
Possiamo avere tre tipi di autenticazione:
- User-to-host (da utente a host). Metodi usati da host per identificare gli utenti prima di fornire loro i servizi;
- Host-to-host (da host a host). Tecniche utilizzate dagli host per convalidare l’identità di altri host, in modo da poter scoprire eventuali comunicazioni fraudolente;
- User-to-user (da utente ad utente). Metodi per essere certi che i dati elettronici originino effettivamente dal supposto utente e non da qualcuno che si spaccia per il mittente.
Come già detto, le tecniche mediante le quali è possibile identificare host o user sfruttano “quello che sei” (SYA), “quello che sai” (SYK) o “quello che possiedi” (SYH). Al giorno d’oggi le tecniche di autenticazione SYA non sono disponibili per un uso generalizzato su Internet. La forma di autenticazione più usata, in Internet, è SYK, cioè in base a quello che uno possiede, per esempio una password o il nome di un account.
La resistenza dell’autenticazione SYK dipende da quanto ciò che si sa è segreto e da quanto possa essere mantenuto tale. Dato che buona parte delle informazioni SYK possono essere osservate o scoperte di nascosto in molti modi, questo sistema non viene considerato una delle migliori e più sicure forme di autenticazione.
Proprio per come è concepito SYH è il metodo di autenticazione meno sicuro. Infatti il possesso di un oggetto che può essere preso in prestito, rubato o duplicato è chiaramente un metodo poco sicuro per identificare il proprietario. Il valore di SYH migliora moltissimo quando esso viene associato a SYK. Per esempio si pensi alla Bancomat: per fare una transizione sul proprio conto in banca bisogna avere la propria tessera e conoscere il proprio codice segreto.
Autenticazione USER-TO-HOST
La funzione di questo tipo di autenticazione è di fornire agli utenti dei servizi ai quali sono autorizzati ad accedere e di negare l’accesso a quei servizi ai quali non lo sono. Questi servizi possono comprendere sessioni interattive di login, trasferimenti della posta elettronica alla workstation dell’utente, o l’accesso tramite la rete ai file di sistema dell’host. Gli schemi di autenticazione user-to-host esistenti sono numerosi. Vediamone tre dei più utilizzati che si basano su password statiche, su password one-time e su terzi di fiducia.
Password statiche
Ovviamente lo schema di autenticazione più presente in Internet è basato sulle password statiche. Un utente sceglie, o gli viene assegnato, un nome di account e una password che rimane segreta e che solo l’utente dovrebbe conoscere. Messe insieme queste due cose convincono l’host dell’identità dell’utente. L’host ha solo il bisogno di avere il modo di confermare che la password introdotta dall’utente è corretta.
Fortunatamente l’identità degli utenti può essere confermata senza dover archiviare delle password in cleartext (non criptate) nel server. Nei sistemi UNIX, per esempio, il database delle password archivia un one-way hash di password degli utenti. Quindi, quando l’utente inserisce la sua password, durante il login, questa viene passata attraverso l’algoritmo che calcola il valore di hash ed il risultato confrontato con quello archiviato, se la password digitata è corretta il riconoscimento dell’utente da parte dell’host è concluso.
Purtroppo questo schema presenta parecchi punti deboli, uno di questi è abbastanza banale: la password può essere rivelata ad altri, intenzionalmente o per errore. Inoltre si sa che gli utenti tendono a scegliere password semplici quando ne hanno la possibilità. E’ stato osservato che il 25% delle password può essere indovinato basandosi su:
- Nome, indirizzo numero di telefono etc…del possessore della password;
- Nomi di persona, luoghi, numeri, frasi volgari, abbreviazioni etc…
- Accoppiamente di brevi parole provenienti dal database on line;
- Permutazioni di parole, tra cui sostituzioni di lettere con numeri; semplice scrittura a lettere maiuscole e plurali.
Perciò gli utenti dovrebbero essere educati ad una migliore scelta e gestione delle password, dal momento che sono loro i responsabili della propria sicurezza.
Le versioni più aggiornate di UNIX includono dei miglioramenti della sicurezza come shadow passwords e password aging. Queste sono caratteristiche molto utili, di solito implementate insieme, che forniscono delle notevoli misure di sicurezza ad un sistema.
Le shadow password sono nascoste in una “shadow” o “ombra”, una directory che può essere letta solo dal superuser.
La password aging è una funzione che spinge gli utenti a cambiare regolarmente la propria password, cosa che essi non fanno se non è strettamente necessario.
Quando il periodo di vita concesso ad una password scade l’utente la deve cambiare al successivo login oppure gli verrà negato l’accesso. Una password dovrebbe avere un tempo di vita massimo di un anno, il pericolo di compromissioni e di esposizione ad attacchi aumenta con il tempo.
Le migliori implementazioni di password aging implementano anche la password history (storia della password). Se non viene tenuta memoria delle password cambiate più di recente (registrate in forma cifrata, naturalmente), un utente sprovveduto potrebbe riutilizzarne una vecchia.
Password one-time
In qualunque meccanismo di autenticazione che si basa sulle password è importante selezionare una password che sia immune da attacchi. Se però viene immessa una password sicura in cleartext in un canale non sicuro, essa diviene automaticamente soggetta a spionaggio di rete e quindi non sicura. A differenza di altri meccanismi di autenticazione basati su password statiche, quelli basati su password one-time non sono messi in pericolo dall’immissione di password in cleartext. Vediamo due meccanismi one-time: S-Key e Smart Cards.
S-Key
L’idea che sta alla base del sistema one-time password S-Key di Bellcore, descritto nell’RFC 1760, è stata inizialmente concepita da Leslie Lamport e in seguito implementata in software sui sistemi UNIX da Phil Karn. S-Key usa una secret password (password segreta) dell’utente per produrre algoritmicamente una sequenza di password, ognuna delle quali può essere usata una sola volta. Come per le password standard di UNIX, le password one-time di S-Key non vengono registrate in cleartext sul server del sistema. Le secret passord rimangono sempre sconosciute ai loro proprietari e non vengono mai trasmesse sulla rete se non per sbaglio. L’operazione eseguita da S-Key è una funzione hash MD4 o MD5 con input la secret password ed output la password one-time. Questa funzione viene applicata più volte, per esempio supponiamo che n=3 sia il numero di volte che S-Key esegue l’hash (detta f) alla password segreta, il risultato f(f(f(s)))=f³(s) (dove s indica la secret-password) viene registrato nel database delle password. Quando l’utente si collega per la prima volta, riceve il prompt della sua prima one-time password f²(s), che viene trasmessa in cleartext. Il programma di login di S-Key la riceve e fa hash una sola volta calcolando f(f²(s))=f³(s). Se questo valore è identico a quello registrato nel database delle password, l’utente è riconosciuto. In ogni caso f²(s) sostituisce f³(s) nel database delle password. Quando l’utente si collega nuovamente verrà autenticato con f¹(s).
Smart Cards
Le Smart Cards sono dei piccoli dispositivi hardware che generano password one-time. Tali autenticatori hanno le dimensioni di una carta di credito ma contengono al loro interno una CPU, un sistema operativo in miniatura, un orologio, una RAM temporanea per i calcoli crittografici, una RAM non volatile o EEPROM (Electrically erasalble read only memory) per la registrazione della chiave.
Terze parti di fiducia
Dal momento che, quando un utente si collega ad un host, quest’ultimo deve giudicare la sua autenticità sulla base di credenziali (come una password statica o one-time) che l’utente gli fornisce, l’host deve di base avere fiducia. Inoltre vi è un’implicita fiducia da parte dell’utente. Egli infatti fornisce le proprie credenziali al prompt fidandosi del fatto che l’host sia quello che voleva e non un impostore. Questo schema di autenticazione user-to-host comunemente implementato è un modello a due parti di fiducia, nel quale ogni parte decide di fidarsi dell’altra sulla base di alcuni criteri.
Un’altra tecnica prevede una terza parte di fiducia. In questo modello l’host non deve affidarsi solamente alle credenziali fornite dall’utente o da un dispositivo in suo possesso, nello stesso modo l’utente non deve fidarsi dell’host. Entrambe le parti si appoggiano ad una terza entità detta Key Distribution Center (KDC), che controlla le rispettive identità. Solo il KDC detiene la fiducia di tutti.
Nella maggior parte dei casi un KDC non fa distinzione tra utenti e host, o meglio tra programmi server e host. Tratta tutti come principal, entità distinte che condividono un segreto (una key crittografica) con il KDC. Il KDC è in grado di verificare l’identità di un principal basandosi sulla conoscenza del suo segreto. Questa conoscenza gli permette anche di identificare un principal da un altro senza divulgare il segreto di nessuno dei due.
Per esempio, supponiamo che l’utente A voglia autenticare con l’host B. Sia A che B condividono i propri segreti con il KDC. A inizia con il contattare il KDC richiedendo l’autenticazione delle credenziali Cred(A) che intende presentare a B.
Il KDC obbliga A ad inviargli delle credenziali che convinceranno B della sua identità. Queste credenziali sono racchiuse all’interno di due “pacchetti” criptati: quello esterno cifrato per A (quindi con la chiave KeyA) e quello interno criptato per B con KeyB. Se A non riesce a decifrare il pacchetto esterno non potrà neppure estrarre quello interno che deve mandare a B.
Una volta decriptato il pacchetto esterno, A invia il pacchetto interno a B insieme ad altre informazioni. Se B riesce a decriptare il pacchetto (cosa che può fare se conosce la password) ottiene le credenziali di A che sono state preparate dal KDC. B può quindi credere tranquillamente nell’identità di A.
Questo esempio riguarda un tipo di crittografia a secret-key ma si può costruire uno schema di autenticazione con terza parte di fiducia che usi la crittografia a public-key.
Come abbiamo visto gli aspetti dell’autenticazione basata su una terza parte di fiducia si appoggiano alla presenza e alla cooperazione del KDC. Trattandosi dell’arbitro unico e centrale della fiducia, esso deve essere un sistema chiaramente visibile, affidabile e sicuro. E’ ovvio che un attentato alla sicurezza del KDC ha come risultato dei disastri.
Autenticazione HOST-TO-HOST
L’autenticazione host-to-host si occupa dell’identità dei sistemi di computer che si trovano sulla rete. L’RFC 1704 descrive diversi mezzi mediante i quali si può ottenere l’autenticazione host-to-host, vediamone alcuni:
- Nessuna autenticazione: Oggi questa è la condizione della maggior parte delle autenticazioni host-to-host in Internet. Al momento l’unica maniera universale per giudicare l’identità di un host è attraverso la sua presentazione ad un indirizzo di rete IP. La versione attuale di IPv4 non presenta alcuno schema di autenticazione, questo è infatti uno dei maggiori problemi di tale versione (vedere Articolo su IPng, paragrafo “Perché è necessario voltare pagina”).
Anche l’autenticazione che si basa sul nome degli host può essere classificato nella categoria “nessuna autenticazione”, infatti i nomi esistono principalmente per una questione di comodità per gli uomini. L’uso dell’autenticazione basata sul nome presuppone anche il DNS sia sicuro, cosa che, nell’attuale implementazione, non è. Un host viene convinto facilmente del fatto che un indirizzo usato dalla macchina di un hacker corrisponda al nome di una macchina diversa (di cui magari si fida). - Rivelazione delle password: Alcuni protocolli host-to-host rivelano le informazioni di autenticazione (password) in cleartext all’interno dei messaggi di protocollo. Questo tipo di tecnica è solo lievemente migliore della “assenza di autenticazione”, nel senso che un potenziale attacker dovrebbe quanto meno conoscere le password andando a spiare i messaggi di protocollo.
- Firme digitali e crittazione: Gli algoritmi di crittografia a secret-key o public-key visti in precedenza possono essere usati anche da host che comunicano tra loro oltre che dagli utenti. Gli host possono scambiarsi dei datagrammi di rete in maniera simile a quella usata dagli utenti per scambiarsi messaggi di e-mail. La prossima versione di IP (versione 6) conterrà delle specificazioni di sicurezza basate su questa linea.
Autenticazione USER-TO-USER
Esistono vari metodi per svolgere l’autenticazione user-to-user con i quali si dà prova dell’identità di un utente ad un altro utente. Una tecnica potrebbe essere quella di impiegare “firme digitali” tramite funzioni di hash o coinvolgere una terza parte come con il sistema Kerberos.
Il sistema di autenticazione Kerberos
Nel 1983 ha avuto inizio una collaborazione tra il Massachusetts Institute of Technology (MIT), la Digital Equipment Corporation e l’IBM. Questa collaborazione è stata definita Progetto Athena, che ha fornito vari prodotti tra cui il più importante è il sistema di autenticazione Kerberos.
Il nome Kerberos deriva dalla mitologia greca, si tratta infatti del nome del cane a tre teste che faceva la guardia all’ingresso degli inferi. Il cane a tre teste simboleggia i tre scopi originali di Kerberos: autenticazione, autorizzazione e accounting. Il primo di questi è sempre stato implementato come parte principale di Kerberos, mentre gli altri due non lo sono stati fino a quando non sono stati indirettamente adattati alla versione più recente del protocollo.
Kerberos utilizza uno schema a terza parte di fiducia. Gli utenti che vi partecipano, i client e i server (tutti definiti principal) si autenticano a vicenda mediante l’aiuto di un Key Distribution Center (KDC), nel quale è riposta tutta la fiducia. Questo schema è reso possibile dal fatto che ogni principal condivide una key (o password) crittografica con il KDC.
Alcuni dei requisiti originali della progettazione di Kerberos sono i seguenti:
- Autenticazione sia one-way che two-way (cioè reciproca). Un client si autentica presso un server, e se lo desidera, anche il server si autentica con lui.
- L’autenticazione deve essere ottenuta senza trasmettere password in cleartext sulla rete.
- Nel KDC non devono essere archiviate password in cleartext.
- Le password in cleartext inserite dagli utenti del client devono essere tenute in memoria il meno possibile e poi distrutte.
- Ogni autenticazione deve avere una sopravvivenza di un periodo definito, che duri circa quanto una sessione di login.
- L’autenticazione di rete non deve essere osservabile dagli utenti, l’unico momento in cui gli utenti devono essere consapevoli del fatto che si sta verificando un processo di autenticazione è al momento del login quando inseriscono la password.
- Le funzioni di base del KDC sono state descritte nel paragrafo Terze parti di fiducia, l’unica differenza è che le credenziali sono definite ticket.
Supponiamo che A, usando un decriptamento a secret-key, abbia richiesto ed ottenuto delle credenziali che hanno dato prova della sua identità all’host B. Se A desidera, nuovamente, essere autenticato presso un secondo server, C, manderà una nuova richiesta al KDC e riceverà un ticket specifico per C. Per decifrare tale ticket deve essere applicata la secret-key di A; questo richiede che egli reinserisca la key o che il software la mantenga in memoria. Tuttavia entrambe queste possibilità violano i requisiti di Kerberos.
Una soluzione al problema è che A faccia una autenticazione bootstrap con il KDC, ottenendo un ticket granting, detto TGT, che una volta decifrato può essere rimandato al KDC per ottenere gli altri ticket per i vari server. Allora il KDC ha due funzioni logiche: quella di Authentication server (AS) e di ticket granting server (TGS). L’AS processa l’autenticazione bootstrap (cioè riceve la richiesta di ticket TGS) mentre il TGS si occupa di fornire i ticket per i server. Anche se abbiamo diviso il KDC in due parti, l’AS e il TGS, in realtà entrambe le funzioni vengono svolte da un solo server program sul sistema KDC.
Esistono due versioni di Kerberos, la 4, nata nel 1987, e la più recente versione 5. Ovviamente la 5 risolve alcuni punti deboli e limiti della versione antecedente. Per esempio, nella v4, la key crittografica che viene condivisa tra il principal e il KDC è, dal punto di vista dell’utente una password, ma da quello del Kerberos una chiave DES da 56 bit derivata dalla password attraverso un hash. L’utilizzo del DES (in tutte le cifrature) poteva essere ragionevole dieci anni fa ma non lo è più ai nostri giorni. Inoltre viene usato il DES in modalità Plaintext Cipher Block Chaining (PCBC) che può essere soggetto ad
attacchi di modifica del messaggio.
La nuova versione, invece, consente l’uso di diversi crittosistemi. Ogni messaggio crittografato trasmesso attraverso la rete possiede un involucro ASN.1 che identifica l’algoritmo con il quale è stato cifrato, il numero di versione della chiave con la quale è stato criptato e il testo cifrato contenuto. Laddove v5 usa l’algoritmo DES, è stato modificato per usare la modalità CBC invece della difettosa PCBC.
Chiarificazioni e maggiori informazioni si possono trovare nel RFC 1510 “The Keberos Network Authentication Service”.
Ci sono, inotre, altre implementazioni derivate dal MIT vediamone alcune:
- Versione 4 riveduta, disponibile gratuitamente su richiesta con supporto commerciale fornito dalla Cignus, per informazioni contattare http://www.cygnus.com/
- Versione 4 modificata per uso internazionale fornita dalla Digital Equipment Corporation contattare: http://www.digital.com/
- Versione 5 compatibile con la precedente fornita dalla Open Vision Technologies: http://www.ov.com/
Crittazione di e-mail e news
La posta elettronica e le Usenet news sono conosciute come le due applicazioni più comuni di Internet.
I software più comunemente usati in tali applicazioni sono:
- PGP (Pretty Good Privacy);
- PEM (Privacy Enhanced Mail): PEM non è un programma per lo scambio della e-mail privata ma uno standard. In particolare PEM descrive formati e tecniche per criptare il contenuto dei messaggi e per autenticare il mittente dei messaggi. Anche se PEM è stato progettato principalmente sulla base della e-mail di Internet, un servizio che ha grande bisogno di queste opzioni, il suo uso non è ristretto alla e-mail. PEM può essere utilizzato anche con Usenet, sneakernet (scambio manuale di dischetti floppy) e tutte le altre forme di invio di messaggi elettronici.
Crittazione dei file
Per tale applicazione vengono usati:
- PGP
- DES
- Gli utenti Macintosh possono usare: Curve Encrypt.
ATBASH: è un semplice programma di crittazione per file che può essere usato anche per convertire un file, in formato binario, in un formato che può essere trasmesso come codice Morse o altri simili tecniche.
Crittazione della voce
- Speek Freely per Windows e Netfon il suo duplicato per Unix. Un programma di pubblico dominio che permette di criptare conversazioni su Internet e connessioni modem. Per più informazioni vedere: ftp://ftp.fourmilab.ch/pub/kelvin/netfone/windows/speak_freely.html.
- Nautilus. E’ un programma di crittazione della voce, la sua home page si trova a questo indirizzo: http://www.lila.com/nautilus.
- PGPFone (Pretty Good Privacy Phone): è un software che trasforma la propria “desktop” o “notebook” del computer in una telefonata sicura. Permette di fare una conversazione telefonica sicura e “real time” grazie ad una compressione e protocolli di sicurezza molto forti.
- Clipper. Non è un crittosistema ma il nome di un chip di hardware che implementa l’algoritmo Skipjack. Nasce con la funzione di criptare e decriptare le comunicazioni sulle linee digitali vocali, compresi i telefoni e i fax digitali. Per questo motivo molti altri apparecchi che comunicano in maniera digitale (come i computer) possono usare Clipper o i suoi parenti stretti. Clipper è stato dichiarato resistente alla manomissione e si dice che possa sopportare anche l’esame più sofisticato riuscendo a mantenere i propri segreti. Dato che Skipjack è un crittosistema simmetrico non ci deve sorprendere il fatto che due Clipper che comunicano tra di loro debbano usare Diffie-Hellman o un suo equivalente (vedi algoritmi a public-key) per derivare indipendentemente una secret-key. Per Clipper questa chiave è una session-key che è diversa per ogni differente connessione (telefonata o associazione analoga) tra i due chip. Ovviamente chiunque sia in possesso della session-key una volta che questa sia stata stabilita potrà decriptare il flusso di dati di una intera sessione. La session-key è il punto di aggancio del governo (NSA) infatti Clipper ha una back-door che permette ad un terzo di derivare la suddetta chiave. In particolare al momento della costruzione del chip viene programmato per avere una sola ed unica secret-key e un numero di serie che lo identifica. Per comunicare con un altro chip è necessario conoscere entrambi questi numeri perché vengono usati per creare un LEAF (law enforcement access field) che deve accoppagnare i dati cifrati. Il LEAF dice a persone autorizzate dalla legge (NIST) la key necessaria per svelare la session-key criptata che si trova anch’essa nel LEAF.
Moneta elettonica
- MagicMoney è un implementazione di denaro elettronico che usa PGP per la cifratura.
- Lucre è una libreria.
PGP
L’eccezionale sviluppo che la comunicazione telematica ha avuto in questi ultimi anni, diventando uno dei principali mezzi per il trasporto di tutti i tipi di informazioni, ha inevitabilmente fatto nascere esigenze di sicurezza, quelle stesse esigenze che sono oggi presenti sia nella posta ordinaria che nel telefono.
Comunicare via e-mail ha sì grandi vantaggi, tra i quali soprattutto il notevole risparmio di tempo, ma presenta purtroppo un basso grado di sicurezza. In effetti è semplice per una terza persona (che si trovi in qualche punto del percorso di rete che unisce due corrispondenti) leggere messaggi privati destinati altrove, oppure alterare un messaggio o ancora inviarne uno con il nome di un altro.
Si sente quindi la necessità di risolvere tre problemi:
- essere sicuri che soltanto il destinatario possa leggere il messaggio;
- permettere al destinatario di assicurarsi che il messaggio provenga dal mittente dichiarato e che non abbia subito alterazioni durante il tragitto in rete (autenticazione);
- gestire in modo semplice l’affidabilità di tutti i corrispondenti coinvolti (fiducia).
La soluzione per questi e per numerosi altri problemi è offerta dal programmaPGP (Pretty Good Privacy) ideato nel 1990 da Philip Zimmerman.
PGP non è un programma di posta elettronica ma solo un accessorio in grado di elaborare messaggi che permette di raggiungere il livello di sicurezza richiesto senza il fastidio di dover gestire le chiavi associate al software di crittografia convenzionale (simmetrica); non è richiesto cioè nessun canale sicuro per lo scambio delle chiavi fra gli utenti, per cui PGP è molto più
facile da usare.
PGP associa la comodità del sistema di crittografia a chiave pubblica RSA con la velocità della crittografia convenzionale, con l’adattamento dei messaggi per le firme digitali e con un sofisticato sistema di gestione delle chiavi.
Ma quali sono i motivi che ci spingono all’uso di PGP?
Alla base di tutto sta il diritto alla riservatezza e alla privacy che la costituzione garantisce a ciascuno di noi. Desiderare privacy non vuol dire per forza avere qualcosa da nascondere, perché se così fosse per quale motivo tutti oggi continuano ad usare la posta ordinaria inviando lettere racchiuse a volte in più di una busta?
Bisogna dunque entrare in quest’ordine di idee e capire che usare PGP equivale a mettere la propria corrispondenza elettronica in una busta praticamente inattaccabile; tutti dovrebbero usare la crittografia per la propria e-mail, innocente o meno che sia, cosicché nessuno attirerebbe sospetti se volesse difendere la propria riservatezza.
FUNZIONAMENTO
La principale caratteristica di PGP risiede nell’utilizzo combinato di un algoritmo simmetrico e di uno asimmetrico.
Abbiamo già detto precedentemente che il vantaggio della crittografia convenzionale (a chiave segreta) rispetto a quella a chiave pubblica consiste nel guadagno in termini di tempo di elaborazione, viceversa la crittografia asimmetrica è svincolata dalla necessità di avere a disposizione un canale sicuro per lo scambio della chiave (in quanto la chiave pubblica può essere distribuita in modo capillare attraverso una rete di comunicazione).
Inoltre la crittografia a chiave pubblica permette di firmare un messaggio (con un utilizzo inverso delle due chiavi) per impedire la sua falsificazione e garantire l’autenticazione del mittente.
Ecco dunque come opera PGP: la cifratura del messaggio (che può essere a volte molto lungo) è effettuata usando un metodo convenzionale e veloce di alta qualità (IDEA), con una chiave temporanea generata in maniera assolutamente casuale; la chiave pubblica (RSA) del destinatario viene usata quindi per cifrare la chiave temporanea.
Il testo cifrato e la chiave cifrata vengono successivamente inviati al destinatario, il quale usa la propria chiave segreta per recuperare la chiave temporanea e utilizza quest’ultima per decifrare il messaggio originale
sfruttando lo stesso algoritmo a chiave simmetrica adoperato dal mittente.
Le chiavi pubbliche sono conservate in certificati di chiave che comprendono l’ID del proprietario (ovvero il suo nome) , il momento (tempo) in cui la chiave è stata generata, e la chiave stessa. I certificati pubblici contengono le chiavi pubbliche, mentre i certificati segreti contengono le chiavi segrete. Ogni chiave segreta è anche cifrata con la propria frase chiave, nel caso venisse rubata.
Un file di chiavi, o “portachiavi” contiene uno o più di questi certificati: il portachiavi pubblico contiene certificati pubblici, mentre il portachiavi segreto contiene certificati segreti.
Le chiavi sono anche indicate nel loro portachiavi con il loro “id-di-chiave” che è una abbreviazione della chiave pubblica (i 64 bits meno significativi). Quando questo id-di-chiave è mostrato, per ulteriore semplicità si usano solo gli ultimi 32 bits. Mentre molte chiavi possono avere lo stesso ID (nome del proprietario), a tutti i fini pratici non ci sono due chiavi con lo stesso id-di-chiave.
PGP usa una selezione del messaggio (message digest MD5) per creare le firme. Essa è una funzione del messaggio formata da 128 bits. È qualcosa di simile ad un checksum o al codice di controllo per gli errori di CRC. In essa PGP “rappresenta il messaggio” e serve per controllare se sono avvenuti cambiamenti. A differenza del CRC, però, non è pensabile che un estraneo riesca a sostituire il messaggio con un altro che produca la stessa selezione.
La selezione del messaggio viene cifrata con la chiave segreta per formare la firma. I documenti sono firmati facendoli precedere dai certificati di firma, che contengono l’id-di-chiave della chiave usata per produrli, una selezione del messaggio firmata con la chiave segreta e il tempo in cui la firma è stata fatta. L’ id-di-chiave viene usato dal destinatario per trovare la chiave pubblica del mittente e controllare la firma; il suo software trova automaticamente la chiave pubblica e l’ id-di-chiave nel portachiavi pubblico.
I file cifrati sono preceduti dall’ id-di-chiave della chiave pubblica usata per cifrarli. Il destinatario usa questo id-di-chiave per trovare la chiave segreta richiesta per decifrare il messaggio; il suo software lo trova automaticamente nel suo portachiavi segreto.
Questi due tipi di portachiavi sono i due metodi principali di conservazione e gestione delle chiavi pubbliche e private. Invece di tenere le singole chiavi in files separati, esse sono raccolte in portachiavi per facilitarne la ricerca automatica per id-di-chiave o ID.
Ogni utilizzatore possiede la sua coppia di portachiavi. Una singola chiave pubblica è tenuta in un file separato il tempo necessario per inviarla ad un corrispondente che la aggiungerà al suo portachiavi.
Dopo la prima stesura del programma ad opera di Philip Zimmermann negli Stati Uniti, altre persone hanno lavorato sulle versioni successive per meglio adattarle a esigenze diverse.
Il programma è freeware, quindi può essere copiato e usato senza dover pagare nulla, eccetto se si vuole adoperarlo per scopi commerciali. È inoltre un programma aperto, nel senso che i sorgenti, scritti in C, sono di dominio pubblico.
Il PGP è disponibile per MS-DOS (gira anche sotto WINDOWS 3.1 e WINDOWS 95), OS/2, MAC, ATARI, AMIGA e mediante compilazione dei relativi sorgenti anche per UNIX e VMS.
Le versioni per piattaforme diverse sono tutte compatibili tra di loro: un file codificato, ad esempio, con PGP per DOS può essere decodificato con PGP per UNIX e viceversa
ALGORITMI UTILIZZATI
1. GENERATORE DI NUMERI CASUALI
PGP usa un generatore di numeri pseudocasuali crittograficamente forte per creare delle chiavi temporanee da utilizzare per la crittografia convenzionale.
PGP crea un file di “semi” nel momento in cui il programma è utilizzato per la prima volta (sfruttando numeri effettivamente casuali derivanti dal tempo che intercorre tra le battute sulla tastiera); da allora in poi, tutte le volte che PGP è usato il generatore rinnova il file mescolando ad esso nuovo materiale derivante in parte dall’ora del giorno e in parte da altre fonti effettivamente casuali.
Tale generatore utilizza l’algoritmo di crittografia convenzionale come motore per la creazione di numeri casuali: dunque PGP utilizza lo stesso algoritmo (IDEA) sia per proteggere i messaggi, sia per generare casualmente dei numeri.
Il file di semi è inoltre ripulito crittograficamente prima e dopo ogni utilizzo; in ogni caso, vista la sua importanza, sarebbe opportuno proteggere lo stesso da una eventuale apertura per ridurre ulteriormente il rischio che un potenziale intruso riesca a ricavare la futura chiave temporanea.
Si osservi inoltre che PGP usa numeri realmente casuali ricavati da sorgenti fisiche per generare la coppia di chiavi pubblica/segreta da usarsi per lungo tempo (tale creazione deve ovviamente esser fatta al primo avvio di PGP).
2. ALGORITMO SIMMETRICO IDEA
PGP fa uso dell’algoritmo a chiave segreta IDEA per cifrare il messaggio da inviare.
L’utilizzo di tale algoritmo anziché del DES è subordinato al fatto che la chiave del DES è di soli 56 bits, quindi abbastanza corta da soccombere ad un attacco condotto con la forza bruta.
Non è neanche conveniente usare il TDES (Triplo DES) il quale, nonostante usi 2 chiavi DES per cifrare 3 volte raggiungendo una lunghezza effettiva della chiave di 112 bits, è comunque 3 volte più lento del DES e quindi meno efficiente.
L’algoritmo IDEA è invece molto più veloce del DES tradizionale, ed è usato in PGP nel modo CFB a 64 bits; inoltre tutti gli attacchi condotti finora per tentare di romperlo sono risultati vani, rivelando anche una sua maggiore compattezza e resistenza rispetto al DES.
Facciamo ancora una considerazione. Si è già detto in precedenza che usare un algoritmo a chiave simmetrica per cifrare il testo anziché uno a chiave pubblica consenta un notevole risparmio in termini di tempi di elaborazione; ebbene, è stato affermato che il carico di lavoro richiesto per esaurire tutte le chiavi possibili a 128 bits nel sistema di cifratura IDEA è grosso modo uguale a quello richiesto per violare una chiave RSA a 3100 bits, ovvero abbastanza più grande della chiave a 1024 che la maggior parte delle persone utilizza per le proprie applicazioni di elevata sicurezza.
Da ciò si evince che il punto debole di PGP (se esiste) è da ricercare più in RSA che non in IDEA.
3. ALGORITMO ASIMMETRICO RSA
PGP utilizza l’algoritmo a chiave pubblica RSA per cifrare la chiave temporanea e per firmare i messaggi.
La chiave temporanea viene infatti crittata utilizzando la chiave pubblica del destinatario, il quale, dopo aver ricevuto l’intero messaggio, provvederà ad estrarla con la propria chiave segreta e ad utilizzarla per decrittare il testo.
La firma dei messaggi viene invece eseguita dal mittente utilizzando la propria chiave segreta; in ricezione, sfruttando l’id-di-chiave del relativo certificato di firma, PGP cercherà la chiave pubblica del mittente nel suo portachiavi pubblico e la utilizzerà per verificare l’autenticità del messaggio.
Si noti che tutte queste operazioni sono trasparenti all’utente che non deve fare altro che digitare il comando opportuno.
4. ALGORITMO DI COMPRESSIONE DATI “ZIP”
PGP normalmente comprime il testo chiaro prima di cifrarlo. Sarebbe troppo tardi cercare di comprimerlo dopo la cifratura in quanto il testo cifrato è incomprimibile.
La compressione dei dati fa risparmiare tempo nella trasmissione via modem (anche se del tempo aggiuntivo è comunque richiesto dall’operazione stessa di compressione) ma soprattutto aumenta la sicurezza della cifratura. Molte tecniche di crittoanalisi infatti sfruttano le ridondanze presenti nel testo in chiaro per violare il cifrario: tali ridondanze sono ridotte dalla compressione, migliorando la resistenza a questo tipo di attacchi. È possibile comprimere soltanto quei files che non risultano esser troppo corti.
PGP comprime secondo la routines freeware ZIP, che usa un algoritmo di compressione funzionalmente equivalente a quello usato da PKZIP 2.0 di PKware. Tale scelta dipende soprattutto dalla disponibilità del codice sorgente in “C” liberamente portatile, dalla velocità di esecuzione e dall’ottimo rapporto di compressione.
Se si vuole adoperare un algoritmo di compressione diverso si può usare, ad esempio, PKZIP per comprimere il testo chiaro prima di cifrarlo, avendo così la possibilità di immagazzinare più di un file nello stesso file compresso.
Quando PGP si accorgerà di avere a che fare con un file già compresso, non tenterà di ricomprimerlo; quando poi il file giungerà alla sua destinazione finale, PGP segnalerà automaticamente al destinatario che è stata effettuata una cifratura diversa da quella convenzionale e che bisognerà quindi usare il relativo programma di decompressione (PKUNZIP, nel nostro caso).
5. ALGORITMO PER LA SELEZIONE DEL MESSAGGIO MD5
Per creare la firma digitale PGP effettua la cifratura della selezione del messaggio (“Message Digest”) usando la chiave segreta. Tale selezione è un “distillato” compatto del messaggio, come se fosse una sua “impronta digitale”.
Il vantaggio di tale procedura è che si fa molto più in fretta a “firmare” una selezione che non il messaggio intero.
Il “Message Digest” è calcolato usando una funzione hash crittograficamente forte: MD5.
Tale algoritmo è di dominio pubblico e non richiede la conoscenza di nessuna chiave per essere applicato.
La forza della selezione del messaggio sta nel fatto che un potenziale falsario dovrebbe produrre un messaggio che crei la stessa selezione (e ciò non è praticabile) oppure creare una nuova firma partendo dal messaggio falso (e non è possibile senza possedere la chiave segreta del mittente).
Il Message Digest, oltre a provare la vera identità del mittente e la genuinità del messaggio, impedisce anche di ripudiare quest’ultimo perché per il mittente non è semplice rinnegare la propria firma apposta con la propria chiave segreta.
Infine, l’uso della selezione del messaggio presenta altri vantaggi:
- la firma può essere di un formato piccolo e standard, indipendentemente dal formato del messaggio;
- la firma può restare separata dal messaggio, forse addirittura in un archivio pubblico, senza rivelare informazioni importanti sul messaggio stesso perché nessuno può ricavare il contenuto del massaggio dalla sua selezione.
6. ALGORITMO PER LA CONVERSIONE IN FORMATO RADIX-64
Molti sistemi di posta elettronica riescono a gestire i messaggi soltanto se essi sono in formato ASCII, quindi non accettano i dati binari a 8 bits che costituiscono il testo cifrato.
PGP risolve il problema perché implementa il formato ASCII RADIX-64 per testi cifrati, che è simile al formato PEM (Privacy Enhanced Mail) per Internet, così come al formato Internet MIME.
Convertire i dati in questo formato vuol dire equipaggiarli con un “armatura di trasporto” che li proteggerà durante il tragitto nella rete. È prevista anche l’aggiunta di un CRC per verificare eventuali errori di trasmissione.
Il formato RADIX-64 converte il testo espandendo gruppi di 3 bytes binari in 4 caratteri ASCII stampabili, sicché il file cresce di circa il 33% (rispetto alla lunghezza originaria del messaggio). Questa espansione non è però così grave poiché il file era stato già compresso in misura maggiore prima di essere cifrato.
La maggior parte dei servizi e-mail su Internet proibisce l’invio di messaggi più lunghi di 50000 o 65000 bytes. I messaggi aventi una lunghezza maggiore devono quindi essere spezzati in blocchi più piccoli da spedire separatamente; se il testo da inviare è di quest’ultimo tipo, il formato RADIX-64 lo spezza in blocchi sufficientemente piccoli da poter essere spediti, ponendoli in files con estensione “.as1”, “.as2”, “.as3”, ecc.
Il compito di concatenare questi files nel giusto ordine in un file più grande è affidato al software del destinatario; PGP ignorerà tutto il testo estraneo non compreso nei blocchi di messaggio RADIX-64.
Esiste, infine, anche la possibilità di non comprimere il messaggio e applicare l’armatura ASCII soltanto alla firma.
7. COME OPERA PGP: ESEMPIO DI APPLICAZIONE DEGLI ALGORITMI
Supponiamo di voler firmare e cifrare un messaggio. La sequenza delle operazioni svolte da PGP è la seguente:
- PGP applica l’algoritmo di hashing MD5 per generare l’hash del messaggio avente lunghezza fissa pari a 128 bits.
- L’hash viene firmato con la chiave segreta del mittente e il certificato di firma corrispondente è attaccato al messaggio.
- PGP applica l’algoritmo di compressione dati ZIP per comprimere l’insieme messaggio più certificato di firma ottenuto al punto 1.
- PGP applica un algoritmo di generazione di numeri casuali per formare una sequenza di 128 bits casuali.
- PGP applica l’algoritmo di crittografia convenzionale IDEA per codificare il messaggio compresso ottenuto al punto 2), usando come chiave (“session key”) il numero casuale generato al punto 3).
- PGP applica l’algoritmo di crittografia a chiave pubblica RSA per codificare la “session key”, attaccando il risultato al messaggio cifrato ottenuto al punto 4).
- PGP applica l’algoritmo di conversione in formato RADIX-64 per trasformare il messaggio ottenuto al punto 5) in modo che esso contenga solo caratteri ASCII bassi.
Il messaggio ottenuto nell’ultimo punto è quello finale, pronto per essere inviato alla destinazione voluta. Successivamente il destinatario (o meglio, il suo software), dopo aver ricevuto il messaggio, eseguirà la sequenza inversa delle operazioni per riottenere il testo chiaro.
CONSIDERAZIONI FINALI
Dopo questa ampia descrizione di PGP è bene soffermarsi su alcune importanti considerazioni.
Se la posta elettronica è ancora oggi sconosciuta a molte persone in futuro è previsto un suo utilizzo da parte di quasi tutta la popolazione mondiale, grazie anche alle infrastrutture in fibra ottica che i governi e i vari gestori delle telecomunicazioni continuano ad impiantare nei territori nazionali.
Di fronte alla crescita di questo potente mezzo di comunicazione, e di fronte allo sviluppo di applicativi che garantiscono la sua efficienza in termini di riservatezza e sicurezza, le autorità governative dei vari paesi non possono certamente stare a guardare e lasciare che la e-mail diventi anche un pericoloso strumento nelle mani delle varie organizzazioni clandestine e criminali.
Proprio per questo motivo la diffusione di PGP è stata fortemente ostacolata dal governo degli Stati Uniti, il quale è riuscito tra l’altro anche a trovare quei cavilli burocratici sufficienti per perseguire penalmente l’autore di PGP, Philip Zimmermann.
L’accusa più grave ai suoi danni è quella di traffico d’armi (Ebbene sì!!! In USA la pubblicazione elettronica di software crittografico non autorizzato è sufficiente per essere incriminato di esportazione illegale di ordigni bellici); le regolamentazioni statunitensi sono molto ferree, dunque bisognerà stare molto attenti a dove si reperisce il proprio software di crittografia se non si vuole incorrere negli stessi problemi di Philip Zimmermann.
Per cercare di controllare la situazione, il governo USA ha dato vita ad un nuovo dispositivo di crittografia, il CLIPPER, contenente un algoritmo segreto sviluppato dalla NSA.
Gli Stati Uniti stanno cercando di imporre l’utilizzo di CLIPPER a tutte le industrie privata affinché tale dispositivo venga adoperato in tutti i loro prodotti commerciali.
Non sorprende, quindi, il fatto che, essendo il CLIPPER programmato al momento della sua produzione con una chiave unica, il governo si impossessi di una copia di tale chiave.
Non si vuole qui discutere della dubbia moralità dell’approccio statunitense, basti dire che se la pubblicazione di PGP ha suscitato una così grande mobilitazione da parte del governo degli Stati Uniti, la forza del programma di crittografia inventato da Philip Zimmerman non è in discussione. In effetti sono impiegati i migliori algoritmi a chiave pubblica e privata in circolazione, ed è difficile pensare ad una sua rottura in un immediato futuro.
Semmai l’unica debolezza che riteniamo PGP possa avere è legata al suo approccio fin troppo decentralizzato e popolare, che impone grande attenzione e cautela ai suoi utilizzatori; bisogna allora annoverare tra i potenziali pericoli non solo quelli rappresentati dalle “talpe” che mirano di proposito a rompere la ragnatela di fiducia, ma anche quelli derivanti dalla naturale inconsapevolezza e distrazione degli utenti (si sa, errare è umano!).
PGP è disponibile in versione freeware (anche se le versioni sono diverse a seconda se si ci trovi negli Stati Uniti e Canada o al di fuori di essi), e in versione commerciale, quest’ultima previa rilascio di licenza da parte di Viacrypt.
Ricordiamo che sarebbe opportuno, prima di utilizzare PGP, leggere la sezione relativa agli aspetti legali contenuta nel manuale d’uso.
Segnaliamo infine che esiste un numero sempre crescente di software legati a PGP, disponibili per Windows, DOS, MAC, e altre piattaforme. Esistono poi anche dei servizi on-line che utilizzano PGP per la sicurezza e l’autenticazione.