Con l'avvento di internet moltissime delle nostre comunicazioni si sono spostate online. Poiché internet come mezzo di comunicazione presuppone milioni di computer che gestiscono il trasferimento dei bit di informazione che ci scambiamo, lungo la via lasciamo una traccia della comunicazione e di noi stessi.
L'informazione relativa ad un singolo scambio non fornisce troppi dettagli ad un estraneo, ma visto che utilizziamo internet così tanto, l'enorme quantità di informazioni di cui lasciamo traccia, per quanto frammentata, può essere combinata per identificarci ed è inevitabile che lo sia. L'esposizione dei nostri dati può anche portare al trapelare delle nostre informazioni personali in rete.
Mantenere le nostre comunicazioni private è fondamentale per limitare il numero di informazioni di cui si lascia traccia. Rendere sicure le nostre comunicazioni significa fondamentalmente nascondere l'informazione dalle fonti accessibili pubblicamente. La maggior parte dei metodi che permettono di tenere private le comunicazioni fa affidamento sulla criptazione. La criptazione fondamentalmente nasconde le nostre comunicazioni da tutti gli altri computer su cui l'informazione viaggia. L'algoritmo di criptazione è ciò che determina il livello di sicurezza della criptazione, tuttavia visto che i dati vengono gestiti anche attraverso computer non di fiducia (ci si ricordi che chiunque può creare un nodo su internet) anche il modo in cui le chiavi di criptazione vengono scambiate può rappresentare un anello debole.
Breve introduzione alla cryptography o criptografia
Non è necessario capire tutti i dettagli della criptazione, ma qui di seguito si fornirà un corso introduttivo in formato ridotto su semplici metodi di criptazione, contenente informazioni che le persone trovano spesso interessanti. Del resto alcune forme di criptazione sono state utilizzate per migliaia di anni. I primi ad utilizzare la criptazione potrebbero essere stati gli egiziani, per quanto sostituzioni semplici nei contenuti di un messaggio per nascondere il messaggio originale potrebbero essere state in uso anche prima.
Si pensi di nuovo al primo capitolo dove si è appreso cos'è la triade CIA o CID. La criptografia è un metodo comune per garantire la corretta gestione della componente di Confidenzialità della triade.
Il cifrario di Cesare
I Romani facevano piuttosto spesso uso della criptografia. Giulio Cesare era noto per aver utilizzato una forma di cifrario di sostituzione oggi noto come cifrario di Cesare. Per cifrario si intende un algoritmo impiegato per criptare e decriptare dei dati. Un cifrario di sostituzione è un cifrario dove un carattere viene sostituito da un altro secondo quanto prescritto da un certo metodo. Per esempio Cesare utilizzava un cifrario in cui ogni lettera veniva scritta secondo un metodo che sostituiva ogni carattere con il terzo carattere successivo nell'alfabeto, per cui una A diventava una D e una B diventava una E e così via.
Come si può vedere dalla foto, la chiave per questo “messaggio criptato” è “spostarsi di tre posizioni nell'alfabeto”. Questo tipo di cifrari possono venir dedotti a seconda di quanto il sistema piuttosto che la chiave riesca a rimanere segreto. Nell'esempio del cifrario di Cesare la chiave potrebbe essere qualsiasi cosa e si potrebbe indovinarla in modo piuttosto semplice provando tutte le combinazioni (forza bruta) o sulla base della frequenza di alcune lettere in una certa lingua. Per esempio se la lettera P è la lettera più frequente nel messaggio in codice e si sa che la lingua è l'inglese, allora si può presumere che P nel messaggio segreto corrisponda a E nel testo del messaggio, perché E è la lettera più comune in inglese. Diverse varianti di cifrari di sostituzione sono stati in uso per almeno mille anni fino a che la matematica non ha messo a disposizione metodi di criptazione migliori.
Un altro crifrario famoso e spesso citato è il cosiddetto “cifrario del Kamasutra”. Il cifrario viene menzionato per la prima volta nel Kamasutra come l'arte di nascondere i messaggi, praticata sopratutto dalle donne. Il cifrario del Kamasutra suggeriva di dividere in due l'alfabeto e di formare delle coppie. La coppia di lettere forniva il criterio di sostituzione nel cifrario, che non prevedeva dunque il semplice scorrimento di un certo numero di posizioni.
Detto per inciso, la criptazione non deve essere prefetta. Nel contesto di conflitti come le guerre, anche solo fare in modo che un messaggio non venga letto nel giro di pochi minuti o di poche ore può risultare fondamentale. Tuttavia nei casi in cui i dati criptati sono di natura confidenziale e possono creare danni anche in seguito, bisogna assicurarsi che il metodo utilizzato non possa venir compromesso troppo facilmente.
Cifrario Vigenère
Nel corso del sedicesimo secolo si è sviluppato un nuovo e miglior metodo di criptazione che garantiva protezione contro gli attacchi basati sulla frequenza. Il cifrario Vigenère impiegava una chiave ripetuta, che vanificava l'analisi semplice della frequenza di una lettera, poiché la lettera P non corrispondeva più con la lettera E nella maggior parte dei testi criptati.
Il cifrario Vigenère utilizza una chiave variabile che rende più robusto un tipo di cifrario a sostituzione semplice. La chiave viene ripetuta in tutta la lunghezza del messaggio. La lunghezza della chiave è il fattore più importante nel cifrario Vigenère, poiché con una chiave di lunghezza 1 il cifrario corrisponde di base al cifrario di Cesare. Prendiamo in considerazione un esempio.
Esempio di quadrato di Vigenère. Come si può constatare questa versione del cifrario di Vigenère corrisponde a un cifrario di Cesare spostato ciclicamente.
Come si può vedere dalla tabella riportata sopra, se si usa una chiave solo con il carattere “D” il cifrario risulta identico al cifrario che usava Cesare. Nella tabella alla linea D e a partire dalla colonna A si troverà la lettera A criptata nella forma della lettera D, come nel cifrario di Cesare.
Per comprendere il senso del cifrario di Vigenère prendiamo in considerazione un esempio più completo con una chiave più lunga. Impiegando il quadrato di Vigenère riportato sopra (anche detto tabella di Vigenère). Possiamo criptare il messaggio “CYBERSECURITY” con la chiave “SECRET” nel seguente modo.
Messaggio: CYBERSECURITY
Chiave: SECRETSECRETS
Messaggio criptato:
Per prima cosa bisogna trovare la colonna corrispondente alla C nella linea S della tabella. Utilizzando la tabella si ottiene come risultato la lettera U. La si inserisca come prima lettera del testo criptato.
Messaggio: CYBERSECURITY
Chiave: SECRETSECRETS
Messaggio criptato: U
La lettera successiva nel messaggio è la Y sulla linea E (la seconda lettera della chiave di criptazione). Il risultato è la lettera C. Se la si aggiunge alla criptazione si otterrà che le prime due lettere del messaggio criptato (testo cifrato) sono UC
Messaggio: CYBERSECURITY
Chiave: SECRETSECRETS
Messaggio criptato: UC
Sulla base dello stesso metodo si ottiene il testo cifrato finale:
Messaggio: CYBERSECURITY
Chiave: SECRETSECRETS
Messaggio criptato: UCDVVLWGWIMMQ
Congratulazioni! siete appena riusciti a criptare il vostro primo messaggio con il cifrario Vigenère! Questo cifrario venne utilizzato con successo per circa tre secoli fino a che non venne scoperto un metodo generale di decriptazione. Come si può intuire, alcuni messaggi venivano decriptati più velocemente di altri dal momento che la segretezza del messaggio dipende dalla segretezza e dalla qualità della chiave.
Sign up to solve exercises
Il cifrario di Vigenère rimase sicuro per un lungo periodo, tuttavia nel diciannovesimo secolo di scoprirono delle debolezze e vennero rese pubbliche. Grazie a questi metodi si poteva risolvere il codice anche senza conoscere la chiave. La modalità d'attacco sfrutta le debolezze e la ripetizione della chiave nell'algoritmo per scoprire la lunghezza della chiave (o le possibili lunghezze della chiave) e sulla base di quest'informazione si può elaborare una forma di attacco ad eliminazione della chiave per scoprire qual'è la chiave. Molteplici metodi possono venir impiegati per indovinare la lunghezza della chiave con una buona percentuale di certezza.
Una forma di cifrario di Vigenère venne utilizzato anche dalle forze confederate nella Guerra Civile americana. A quell'epoca le forze dell'Unione erano in grado di decriptare i loro messaggi perché nel cifrario erano state individuate diverse debolezze.
Un cifrario di Vigenère che usa una chiave veramente random dove la lunghezza della chiave è la stessa del testo in chiaro viene generalmente considerato non risolvibile e viene detto one-time pad, letteralmente "taccuino monouso". Un one-time pad non ha le debolezze associate ad una chiave che si ripete. Poiché gli attacchi dizionario non si applicano a chiavi davvero random, la segretezza del messaggio fa affidamento sulla chiave e non sul cifrario. Tuttavia utilizzare un one-time pad è difficile perché la debolezza risiederà nel modo in cui la chiave viene scambiata tra le parti.
Un sito divertente ed interattivo con un sacco di esempi di diverse funzioni criptografiche della storia è quello di Simon Singh The Black Chamber.
Con lo sviluppo dell'ingegneria meccanica vennero inventati nuovi metodi nel campo della criptazione. Vennero create delle macchine nelle quali premendo un tasto si illuminava la lettera criptata. Queste prime macchine di criptazione meccanica avevano anche un'ampiezza di vocabolario maggiore grazie all'aggiunta di dischi cifranti o rotori a cascata. Quando un rotore a 26 caratteri girava dalla A alla Z, un altro si muoveva di una posizione oscurando così il pattern della chiave. Un singolo rotore permetteva dunque una chiave di 26 caratteri di lunghezza. L'aggiunta di un altro rotore mobile espandeva il numero di posizioni disponibili fino a 26 x 26 = 676. Per stabilire una chiave condivisa era sufficiente comunicare la posizione iniziale di entrambi i rotori.
Immaginando di avere tre rotori e che la posizione iniziale di tutti fosse A, si avrebbero le seguenti posizioni per ogni volta che si preme un tasto.
A A A
B A A
C A A
D A A
…
Z A A
A B A
B B A
…
Y Z Z
Z Z Z
A A A
L'effettivo setup, il cablaggio interno ed il funzionamento delle macchine è più impegnativo di quanto espresso dall'esempio, ma quest'ultimo mostra la potenza dell'automazione nella generazione dell'effettiva chiave di criptazione a partire dal setup iniziale delle macchine meccaniche.
La più nota di queste macchine a dischi cifranti fu Enigma, la quale venne ampiamente utilizzata dai tedeschi nella Seconda Guerra Mondiale. Le macchine Enigma usavano durante la guerra dai tre agli otto dischi cifranti. Tuttavia il modo in cui i tedeschi utilizzavano queste macchine permise ai criptologi polacchi e britannici di sfruttare queste debolezze per decriptare i messaggi dei tedeschi.
Ulteriori informazioni sulla più famosa macchina di criptazione mai esistita sono disponibili su Wikipedia.
I cifrari che abbiamo preso in considerazione sono cifrari simmetrici, il che significa che la stessa chiave che viene utilizzata per la criptazione può essere usata per la decriptazione. Nel corso del tempo sono stati sviluppati metodi che non richiedono la trasmissione della chiave al destinatario del messaggio; questi vengono chiamati metodi di criptazione asimmetrica. Nella criptazione asimmetrica il messaggio viene criptato con una chiave pubblica derivante dalla chiave segreta del destinario del messaggio. Per esempio se si vuole che i propri colleghi criptino dei messaggi rivolti a noi, gli si può mandare la propria chiave pubblica che possono utilizzare per criptare i loro messaggi rivolti a noi. Dopo che un messaggio è stato criptato, solo chi (si spera solo noi stessi) ha la nostra chiave segreta può decriptare il messaggio. Ciò viene detto criptografia a chiave pubblica poiché impiega chiavi pubbliche per la criptazione.
Lo hashing come prova d'integrità
Le funzioni di hash vengono ampiamente utilizzate per verificare l'integrità di un messaggio. Come già sappiamo, l'integrità è uno degli aspetti della triade CIA (Confidentiality, Integrity and Availability) o CID. Una funzione di hash può venir impiegata per verificare l'integrità nello stesso modo in cui una password viene protetta. Una funzione di hash può essere impiegata per calcolare il valore dell'intero contenuto di un messaggio ed esso può essere inviato insieme al messaggio originale. Il destinatario della password elaborata con una funzione di hash può quindi verificare che il valore di hash (il così detto “message digest”) corrisponda al valore calcolato all'arrivo. Alcune funzioni criptografiche di hash includono l'identità all'interno della funzione, la quale può essere verificata dal destinatario. Queste funzioni creano il così detto Message Authentication Code (MAC).
La criptografia moderna
La criptografia moderna fa affidamento sulla segretezza della chiave e sfrutta cifrari che hanno nomi noti e vengono ampiamente studiati. Non è un problema che i cifrari siano noti poiché la segretezza dipende dalla chiave e non da come viene usata. Per esempio quando si visita la propria banca online, il proprio browser e il server web della banca si scambiano in modo sicuro delle chiavi simmetriche, sicure ed usate una volta sola (e lunghe) per criptare il traffico tra il browser e il server della banca. Inoltre la crittografia a chiave pubblica viene spesso impiegata per verificare l'identità dell'altra parte coinvolta. Ogni messaggio risulta verificabile per mezzo di un message authentication code (MAC). Questo processo di un browser e di un server che si scambiano chiavi, verifiche e autenticazioni si chiama TLS o transport layer security, il quale verrà approfondito nel prossimo capitolo. Le versioni precendenti utilizzavano l'ormai superato metodo chiamato SSL, secure socket layer.
Le nozioni fondamentali della criptografia
La segretezza di un messaggio dovrebbe sempre dipendere dalla segretezza della chiave e non dalla segretezza del sistema di criptazione (noto anche come principio di Kerckhoffs).
Sempre usare cifrari che sono stati recensiti pubblicamente e che si sono affermati come standard. Usare "sistemi segreti di criptazione" o inventarne uno proprio è una pessima idea, perché proprio come il cifrario di Cesare una volta che il sistema è noto ed interamente compreso se ne possono decriptare tutti i messaggi.