La cryptografia assicura la segretezza dei messaggi, ma è efficace anche per autenticare le parti in comunicazione e per garantire l'integrità dei dati. La criptografia, quindi, è una componente fondamentale nella sicurezza delle reti.
Per avere una chiara comprensione dei requisiti della riservatezza delle informazioni, bisogna conoscere approfonditamente le tecniche utilizzate per decifrare messaggi in codice. La criptologia si può scomporre in criptografia e criptoanalisi. La criptografia si occupa dello sviluppo di codici per trasformare un alfabeto di simboli in un altro. La criptoanalisi riguarda i metodi per risalire all'alfabeto originario.
Dopo aver creato una codifica, ci si chiede se questa è realmente inviolabile. In crittografia è impossibile provare che un algoritmo di cifratura è "sicuro". Al massimo si può mostrare che l'algoritmo non è vulnerabile ad eventuali attacchi di crittoanalisi conosciuti. Ma questa certezza non garantisce che verranno sviluppati nuovi metodi che potrebbero invertire l'algoritmo. Il solo attacco che si può subire, in ogni caso, è quello di forza bruta.
Tutti gli algoritmi sono vulnerabili all'attacco di forza bruta. Il metodo usato da questo attacco è molto semplice: vengono provate tutte le possibili chiavi, una di queste sicuramente è valida. Il solo problema di questo metodo è il tempo richiesto per completare la generazione di tutte le possibili chiavi.
Un semplice esempio di criptografia è il cifrario a sostituzione di Cesare, che serviva per comunicare messaggi ai centurioni delle legioni romane, considerando che esisteva il rischio che questi messaggi potessero essere intercettati dai nemici.
Nel 1918 Arthur Scherbius inventò una macchina che rappresentava il modello di un sistema per lo scambio di comunicazioni riservate. Scherbius dette il nome Enigma alla sua macchina e la vendette alla Germania. Per descrivere il grado di sicurezza della sua macchina, stimò che se 1000 criptoanalisti provavano 4 chiavi al minuto, per 24 ore, ininterrottamente, ci sarebbero voluti 1.8 miliardi di anni per esaurire tutte le combinazioni. Durante la seconda guerra mondiale, gli inglesi si impegnarono a decifrare i messaggi criptati che intercettavano dalle comunicazioni tra i comandi tedeschi. Alan Turing costruì, a questo scopo, quello che viene considerato il primo calcolatore.
Prima di entrare negli aspetti tecnici della sicurezza di rete si consideri la rete Internet.
Un intruso può veramente ascoltare e registrare i messaggi? È facile farlo? Un intruso può rimuovere o aggiungere messaggi? La risposta č "Sė". Un packet sniffer è un programma in esecuzione su una macchina della rete che riceve passivamente tutti i frame di livello 2 che passano sull'interfaccia di rete del dispositivo. Su una rete locale Ethernet la trasmissione è di tipo broadcast, di conseguenza, il packet sniffer riceve tutti i frame che vengono trasmessi dai dispositivi della rete locale. Ogni host con una scheda Ethernet può essere sfruttato da un packet sniffer, è sufficiente che l'interfaccia di rete sia impostata per funzionare in modalità "promiscua" affinchè riceva tutti i frame in transito. I frame possono poi essere consegnati ad un programma applicativo per estrarre i dati del livello Applicazione.
Ogni dispositivo connesso a Internet invia datagrammi IP sulla rete. I datagrammi portano, oltre ai dati, l'indirizzo IP del mittente. Un utente che ha il controllo completo della macchina può facilmente modificare il campo indirizzo sorgente IP contenuto nel datagramma. Questa tecnica è detta IP spoofing. Un utente può quindi costruire pacchetti contenenti dati falsi e farli apparire come se avessero una provenienza diversa.
Un cifrario è un algoritmo per criptare e decriptare, consiste, quindi, di una serie ben definita di passi da compiere. Un cifrario a sostituzione cripta un messaggio scambiando una lettera con un'altra. Questi cifrari possono consistere in operazioni piuttosto complesse, ma la frequenza delle lettere del messaggio originale viene conservata anche dopo la sostituzione. Il cifrario di Giulio Cesare usava una chiave diversa ogni giorno, allo scopo di aumentare il grado di riservatezza del codice. Ad esempio, se si decide che la chiave odierna è 10, tutte le lettere dell'alfabeto vengono sostituite con la lettera che si trova 10 posizioni più avanti. Quindi la lettera A viene sostituita con la lettera K, la lettera B con la lettera L, la lettera C con la lettera M, e così via.
La vulnerabilità di questo cifrario è l'analisi della frequenza di ripetizione delle lettere. Ad esempio, se nel messaggio la lettera B è presente 15 volte, anche il carattere con cui viene sostituita compare 15 volte. Se il messaggio è molto lungo, la distribuzione della frequenza delle lettere nel messaggio tende a raggiungere la distribuzione di probabilità delle lettere nella lingua in cui è scritto il messaggio. Ad esempio se si sa che la lettera s appare nel 20% delle parole italiane, e, in un messaggio criptato la lettera x compare con frequenza 20%, si potrebbe intuire che, in questo cifrario, la lettera x ha sostituito la lettera s.
Per scoprire la chiave, un attaccante deve compiere solo 25 tentativi.
Un miglioramento al cifrario di Cesare si può ottenere sostituendo una lettera con un'altra senza ricorrere ad una chiave, ma usando una tabella di corrispondenza, simile al gioco "aneddoto cifrato" pubblicato sulle riviste di enigmistica. La tabella seguente mostra una possibile regola di codifica.
Lettera in chiaro: | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
Lettera cifrata | m | n | b | v | c | x | z | a | s | d | f | g | h | j | k | l | p | o | i | u | y | t | r | e | w | q |
Cifrario per sostituzione
Il messaggio in chiaro "bob, ti amo. alice." diventa "nkn, us ahk. Mgsbc". Anche questo sembra un testo incomprensibile, ma adesso ci sono 26! possibili accoppiamenti rispetto ai 25. La decodifica del messaggio tentando tutte le possibili 26! combinazioni, richiede molto tempo. Ma anche in questo caso se si considera la frequenza delle lettere usate, o la frequenza di parole con poche lettere (gli articoli, le preposizioni, ecc) si riesce a decodificare il messaggio. Se poi l'intruso ha un'informazione sul possibile contenuto del messaggio, è ancora più agevolato a risalire al messaggio in chiaro. Ad esempio se Trudy, la moglie di Bob, pensa che Bob ha una relazione con Alice, allora nel messaggio precedente avrebbe trovato due parole di tre e cinque lettere che rappresentano la codifica di "Bob" e di "Alice", scoprendo cosė 7 delle 26 coppie di lettere. In tal modo restano meno tentativi per scoprire l'intero cifrario.
Da questo esempio si possono trovare le seguenti vulnerabilità:
Attacco al testo cifrato. L'intruso intercetta il testo cifrato e impiegando un'analisi statistica risale allo schema di codifica.
Attacco conoscendo parole del testo in chiaro. L'intruso è agevolato se conosce alcune parole presenti nel testo cifrato perchè può determinare una parte della tabella di codifica.
Attacco scegliendo il testo in chiaro. Se l'intruso è in grado di scegliere il messaggio in chiaro e ottenere quindi il corrispondente messaggio criptato riesce a ricostruire l'intero schema di codifica.
Un'altro algoritmo di codifica, denominato polialfabetico, consiste nell'uso di molti cifrari, dove ogni cifrario codifica una lettera in una specifica posizione del messaggio in chiaro. In questo modo la stessa lettera appare con codifica diversa nello stesso messaggio. Nella tabella che segue, il cifrario polialfabetico ha due diversi cifrari di Cesare (con k=6 e k=20), mostrati sulle righe della tabella. Si potrebbe decidere di usare questi due cifrari di Cesare, C1 e C2, secondo la ripetizione C1, C2, C2, C1, C2. Cioè, la prima lettera del testo in chiaro viene codificata con il cifrario C1, la seconda e la terza con il cifrario C2, la quarta con C1, e la quinta con C2. La codifica, dalla sesta lettera in poi, usa ciclicamente la stessa successione di cifrari. Il messaggio in chiaro "bob, ti amo. alice" viene cosė criptato: "ghu, mb ffh. tenvj". Notare che la prima lettera "b" nel testo in chiaro è criptata con la corrispondenza C1, mentre la seconda "b" č criptata usando C2. In questo esempio la chiave di codifica e di decodifica è rappresentata dalla conoscenza delle chiavi (k=4, k=20) dei due cifrari e dalla successione C1, C2, C1, C2, C2.
Lettera in chiaro | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
C1 (k=6) | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | a | b | c | d | e |
C2 (k=20) | t | u | v | w | x | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s |
Per contrastare la vulnerabilità del cifrario a sostituzione fu inventato un cifrario a sostituzioni multiple. Il cifrario di Vigenère, ad esempio, cripta un testo usando una serie di differenti cifrari di Cesare, non consentendo più di riconoscere una regolarità nella distribuzione di frequenza tra le lettere originali e quelle sostituite.
L'idea di questo cifrario è attribuita ad un certo Vigenère. Il metodo richiede che i due interlocutori condividano una chiave comune. Per illustrare il metodo viene proposto un esempio, in cui la chiave segreta è la parola "SEGRETO". Il messaggio da criptare sia: "CI VEDIAMO STASERA A CASA MIA". per criptare il testo si affiancano le lettere della parola segreta alle lettere del messaggio:
CI VEDIAMO STASERA A CASA MIA SE GRETOSE GRETOSE G RETO SEG
Il cifrario usato è il seguente:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z B C D E F G H I J K L M N O P Q R S T U V W X Y Z A C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R S T U V W X Y Z A B C D E F G H I J K L M N O P S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
Per codificare la prima lettera del messaggio, la lettera C, si accede alla riga C del cifrario e alla colonna S, trovando all'intersezione, la lettera U. Per codificare la seconda lettera del messaggio si accede alla riga I, colonna E, trovando all'intersezione la lettera M. Il cifrario può essere esteso, introducendo i numeri e i caratteri di punteggiatura, e trattando i codici ASCII dei simboli.
La criptografia trasforma un messaggio in chiaro in un messaggio cifrato. Il messaggio cifrato è incomprensibile, ma può essere riportato nella sua forma originale attraverso la decriptografia. La criptografia garantisce la segretezza del messaggio, e solo chi è autorizzato può risalire al messaggio originale.
Messaggio in chiaro | Messaggio in chiaro | Dal lato del trasmettitore, l'algoritmo di criptografia riceve, come dati di input, il messaggio in chiaro e la chiave; produce in output il messaggio cifrato. Dal lato del ricevitore, l'algoritmo di decriptografia riceve, come input, il messaggio cifrato uscente dal canale e la chiave; produce il testo in chiaro. | |||
⇓ | ⇑ | ||||
Algoritmo di criptografia | ⇒ | Messaggio cifrato | ⇒ | Algoritmo di decriptografia | |
⇑ | Canale non sicuro | ⇑ | |||
Chiave | Chiave |
Nel passato era richiesto che fosse mantenuto segreto l'algoritmo di criptografia. Nella criptografia moderna, in particolare quella usata in Internet, si deve mantenere segreta la chiave, mentre l'algoritmo è noto a tutti: è pubblico e standardizzato.
Nei sistemi di criptografia a chiave simmetrica, Alice e Bob usano la stessa chiave segreta per criptare e per decriptare. Nei sistemi di criptografia a chiave pubblica vengono usate due chiavi: una è pubblica, quindi tutti possono conoscerla, l'altra è privata ed è nota solo a chi la possiede.