La crittografia è la tecnica che consente di rendere visibili le informazioni soltanto alle persone a cui sono destinate. Per esempio, in una comunicazione, i messaggi trasmessi tra gli interlocutori vengono crittografati per renderli illeggibili tranne che agli interlocutori stessi. La crittografia è nota fin dall’antichità e si è sviluppata, nel corso del tempo, soprattutto in campo militare, basandosi generalmente su algoritmi matematici.
Il messaggio che può essere letto da tutti si chiama testo in chiaro. Tramite i metodi di cifratura (codifica) si trasforma in testo cifrato in cui l’informazione viene codificata e resa illeggibile. L’operazione inversa, chiamata decifrazione (decodifica), serve per ricostruire il testo in chiaro a partire dal testo cifrato.
La codifica e la decodifica sono eseguite da uno o più algoritmi crittografici. Questi algoritmi implementano le funzioni matematiche e vengono utilizzati insieme ad una chiave, solitamente in numero molto grande. Un sistema di crittografia usa gli algoritmi crittografici e la chiave per codificare e decodificare i testi in chiaro.
Testo in chiaro –> Cifratura (algoritmo + chiave) –> testo cifrato –> Decifrazione (algoritmo + chiave) –> Testo in chiaro
La paternità dell’invenzione della crittografia è attribuita a Giulio Cesare che, durante le battaglie, spediva dispacci usando simboli alfabetici che differivano di una costante nota (chiave) dall’alfabeto naturale. Se per esempio la chiave è 3, l’algoritmo crittografico di Giulio Cesare prende tutte le occorrenze della lettera A (posizione 1 dell’alfabeto) e le sostituisce con la lettera D (posizione 4 nell’alfabeto), la B con la E, la C con la F e così via fino alla Z con la C.
ABCDEFGHILMNOPQRSTUVZ diventa:
DEFGHILMNOPQRSTUVZABC
Supponendo di avere come testo in chiaro le parole “GIULIO CESARE” la codifica con chiave 3 genera il seguente testo cifrato: “LNAOR FHVDUH”.
Chi riceve il messaggio cifrato, per poter risalire al messaggio originale, deve conoscere la chiave usata. A questo punto applica l’opportuno algoritmo di decodifica e sostituisce le lettere usando il valore della chiave segreta. Questo sistema di crittografia è noto con il nome di cifrario a sostituzione.
Un altro sistema di crittografia e il cifrario a trasposizione, in cui la chiave (una parola) serve per spezzare il messaggio su più righe e successivamente per ordinare le colonne risultanti ottenendo il testo cifrato. Con questa tecnica, non si sostituiscono le lettere del messaggio originale, ma si scambiano in modo opportuno per rendere illeggibile il messaggio.
Ovviamente l’algoritmo di Giulio Cesare non è un buon algoritmo per garantire la sicurezza dei messaggi, perché può essere violato molto facilmente anche non conoscendo la chiave. Se il crittoanalista conosce il testo cifrato e sa che l’algoritmo utilizzato è quello di Giulio Cesare, può provare in modo esaustivo tutte le chiavi finché non ottiene il testo in chiaro. La ricerca esaustiva può essere eseguita perché il numero di chiavi da provare è piccolo, infatti con l’alfabeto italiano ci sono 21 possibili chiavi.
Le tecniche crittografiche possono essere classificate in due principali sistemi: a chiave simmetrica e a chiave asimmetrica.
La crittografia a chiave simmetrica è un sistema di codifica convenzionale nel quale viene utilizzata una sola chiave per cifrare e decifrare i messaggi. Il mittente e il destinatario devono conoscere la stessa chiave per potersi scambiare i messaggi in modo sicuro. Il cifrario a sostituzione, usato da Giulio Cesare, è un esempio di crittografia a chiave simmetrica. La chiave utilizzata può essere interpretata come un numero molto grande e la sua dimensione viene misurata in numero di bit: più grande è la chiave è più difficile sarà il compito di chi vuole infrangere i messaggi cifrati. Per esempio se la chiave e lunga 10 bit esistono 210 (1024) differenti chiavi, se la chiave è 20 bit esistono 220 (1048576) differenti chiavi e così via. Una chiave a 40 bit è ritenuta abbastanza sicura, perché chi volesse decifrare i messaggi dovrebbe cercare tra 240 possibili chiavi, cioè tra 1099511627776 possibili chiavi. Supponendo di provare una chiave ogni millisecondo, servirebbero circa 109 secondi, cioè poco meno di 32 anni!
La crittografia a chiave asimmetrica, chiamata anche crittografia a chiave pubblica, è stata introdotta nel 1975 con l’obiettivo di risolvere il problema della distribuzione sicura delle chiavi.
Il termine asimmetrica si riferisce al fatto che il sistema utilizza una coppia di chiavi.
- una chiave pubblica, per l’operazione di cifratura;
- una chiave privata, per l’operazione di decifrazione.
Le due chiavi sono correlate matematicamente, per cui i messaggi codificati con la chiave pubblica possono essere codificati soltanto che chi possiede la chiave privata. La particolarità e la forza di questo sistema crittografico è che, anche conoscendo la chiave pubblica, non è possibile risalire alla corrispondente chiave privata. La coppia di chiavi viene generata da un software opportuno. Ogni persona che vuole ricevere i messaggi cifrati deve fornirsi di una coppia di chiavi: la chiave privata viene tenuta segreta, mentre la chiave pubblica viene distribuita liberamente a tutte le persone con cui si vuole comunicare.
Il mittente di un messaggio deve conoscere la chiave pubblica del destinatario e successivamente può codificare il messaggio usando questa chiave. Il testo cifrato può essere codificato soltanto da chi possiede la chiave privata correlata con la chiave pubblica con cui è stato cifrato il messaggio. Il destinatario, essendo in possesso di questa chiave privata e segreta può leggere il messaggio dopo averlo decifrato.
Il vantaggio del sistema crittografico a chiave asimmetrica è che il mittente e il destinatario non devono condividere una chiave segreta. I mittenti dei messaggi devono solo conoscere la chiave pubblica del destinatario mentre la chiave privata deve essere conservata in modo segreto dal destinatario.
Un algoritmo crittografico a chiave simmetrica è RSA (iniziali dei creatori: Rivest, Shamir, Adleman). Questo algoritmo si basa sulla difficoltà di fattorizzare numero molto grandi, anche di trecento cifre (10300).