Elementi di crittografia: La crittografia simmetrica

Nel precedente articolo abbiamo visto un caso particolare dell’applicazione della crittografia, ovvero l’hashing. Abbiamo visto quanto sia utile per la codifica di password o per assicurarci della validità di un file scaricato. Ma questa tecnica non è applicabile qualora fosse necessario codificare un messaggio che poi qualcuno dovrà leggere in quanto l’hashing non è reversibile.
Dovremo quindi affidarci alla crittografia simmetrica che, come la crittografia asimmetrica (la vedremo nel prossimo articolo), dovrà essere in grado di garantirci pricipalmente tre cose:
- La confidenzialità: solo il destinatario deve essere in grado di leggere il messaggio.
- L’autenticità: il destinatario deve essere certo che il mittente del messaggio sia veramente chi dice di essere.
- L’integrità: il messaggio, anche se impossibile da leggere, non deve poter essere modificato/corrotto da estranei senza che la cosa risulti immediatamente chiara.
Vediamo per iniziare alcuni esempi storici.
La crittografia simmetrica: una lunga storia
La necessità di rendere confidenziale un messaggio risale a migliaia di anni prima dell’invenzione dell’informatica. Le prime tecniche di crittografia delle quali si ha notizia, risalgono addirittura al nono secolo a.C. con il sistema della scitala lacedemonica. Consisteva nell’avvolgere ad elica un nastro di cuoio su di un cilindro . Quindi il messaggio veniva scritto in verticale. Una volta tolto il nastro dal cilindro era “impossibile” leggere il messaggio se non avvolgendolo su di un cilindro dello stesso diametro.

Nel corso della storia troviamo poi molti esempi, alcuni dei quali veramente sbalorditivi, come enigma, la codificatrice meccanica a rotori inventata ed utilizzata dai nazisti nella seconda guerra mondiale per crittografare i messaggi destinati ai sommergibili.

Le migliori menti dell’epoca furono radunate a Bletchley Park in Inghilterra per crecare di decifrare i messaggi scritti con questa macchina, ma ebbero dei successi solo parziali e non riuscirono comunque a svelare fino in fondo il meccanismo di codifica.
Troviamo anche esempi piuttosto banali, come il cifrario di Cesare che consiste semplicemente in un numero, che rappresenta lo scostamento delle lettere (il cifrario originale prevedeva uno scostamento di 3).
NBVSLALP
Non é altro che MAURIZIO sostituendo ogni lettera con quella successiva (la chiave di codifica é quindi 1).
Curiosità: il primo caso di pubblicità occulta lo troviamo nel film 2001 odissea nello spazio di Kubrick dove il nome del super-computer HAL 9000 diventa in realtà IBM applicando il cifrario di Cesare con chiave -1.
Come puoi vedere, il principio della crittografia simmetrica consiste nel disporre di un’unica chiave con la quale si codifica e si decodifica il messaggio (il diametro del cilindro, il posizionamento dei rotori di enigma, il numero di scostamento delle lettere nel cifrario di Cesare).
E’ come se immaginassimo di mettere il nostro messaggio in un baule che dispone di una serratura; io ho una chiave ed il ricevente ha la stessa chiave. Quando avrà tra le mani il baule, il ricevente potrà aprirlo con la sua chiave (uguale alla mia, per questo si chiama crittografia simmetrica). In questo modo viene garantita l’autenticità (se il baule era chiuso, posso averlo chiuso solo io) e la confidenzialità (nessun altro oltre me ed il ricevente dispone delle chiavi).
Rimane il problema dell’integrità.
Se il mio baule contenesse una videocassetta e fosse accidentalmente o intenzionalmente fatto passare attraverso un forte campo magnetico?
Il problema dell’integrità ha molto a che vedere con gli algoritmi di hashing che abbiamo trattato nel precedente articolo e vedremo in seguito come.
Chiaramente, nella realtà, dovremo codificare delle stringhe, e lo faremo attraverso delle funzioni che generalmente passano almeno tre parametri
- La stringa da codificare.
- La chiave di codifica.
- La modalità (codifica o decodifica).
Queste funzioni fanno capo a degli algoritmi molto complessi dei quali non ci occuperemo. Vediamo invece un esempio di codifica simmetrica di un messaggio.
PHP mette a disposizione diverse funzioni appartenenti alle librerie mcrypt.
Vediamo dunque un esempio di codifica attraverso PHP.
Utilizzeremo la funzione mcrypt_cfb() che come puoi vedere passa quattro parametri.
- L’agoritmo di cifratura. Ecco la lista degli algoritmi supportati.
- La chiave di cifratura.
- La stringa da cifrare.
- La modalità (MCRYPT_ENCRYPT o MCRYPT_DECRYPT).
Quindi potremmo agire in questo modo
echo mcrypt_cfb(MCRYPT_DES, "chiave", "Frase da cifrare", MCRYPT_ENCRYPT);
Per ottenere questo:
ãñòÏ#ðzz|qòÓ¦|
In realtà otterremo anche un errore di livello Warnig in quanto il quinto parametro, dato per opzionale, è fortemente raccomandato ed è il vettore di inizializzazione dell’algoritmo, sul quale non intendo soffermarmi, quello che mi interessa ora è il principio.
Ricevendo questo messaggio e conoscendo la chiave (e l’algoritmo), non dovrò fare altro che agire in questo modo
echo mcrypt_cfb(MCRYPT_DES, "chiave", "ãñòÏ#ðzz|qòÓ¦|", MCRYPT_DECRYPT);
per ottenere come risultato:
Frase da cifrare
Conclusione
Il limite evidente della crittografia simmetrica é la necessità di disporre di una chiave concordata tra le due persone che si scambiano il messaggio. E’ ovvio che questa tecnica, nell’era dell’informatica moderna, non é sufficiente.
Immagina se per codificare i dati della tua carta di credito, quando li trasmetti per eseguire un acquisto online, dovessi utilizzare la crittografia simmetrica. Si dovrebbe richiedere una chiave al gestore della transazione per poter codificare i dati, ma come verrebbe codificato il messaggio contenete la chiave? Dovrebbe esserti inviato per posta?
Sarebbe veramente troppo complicato, mentre l’acquisto online deve essere semplice, veloce.
Nel prossimo articolo vedremo come questo limite venga superato dalla crittogafia asimmetrica grazie alla quale non abbiamo nessuna necessità di concordare le chiavi di cifratura. Ma vedremo anche perché, nonostante questo, la crittografia simmetrica non sia per nulla superata.
Hai mai utilizzato degli algoritmi simmetrici? A quale scopo?
8 commenti
Trackback e pingback
-
Tweets that mention Elementi di crittografia: La crittografia simmetrica | Your Inspiration Web -- Topsy.com
[...] This post was mentioned on Twitter by Antonino Scarfì, Your Inspiration Web. Your Inspiration Web said: RT @YIW Elementi ...





IBM o semplicemente Hardware Abstraction Layer? :)
E’ un mistero :-)
Grazie per questi articoli. Sono veramente interessanti!
Grazie Gianluca
Piccola correzione storica. :)
Enigma fu decifrato dagli inglesi, anche grazie a Turing (il Turing famoso per l’omonima macchina). Infatti in una delle decifrazioni fu intercettato un piano di assalto da parte dei nazisti ad una nave di crociera (non ricordo se inglese o americana). Per non uscire allo scoperto e far sapere al mondo intero dell’avvenuta decifrazione, la nave fu lasciata al suo triste destino pur di mantere il segreto. Non so quanto sia stata giusta la scelta umanamente ma purtroppo non spetta a noi decidere. :)
Un’altra tecnica molto famosa nella storia usata da Cesare era il quadrato magico. Aveva una paura incredibile che qualcuno scoprisse i suoi piani e poi la persona che l’ha tradito è quella da cui meno se lo sarebbe aspettato. Mi immagino Cesare ai giorni nostri con tutte queste intercettazioni. :)
Complimenti per la serie di articoli comunque. Questa materia ha un fascino incredibile per me. Non so se ti sei mai addentrato nella storia della crittografia ma è qualcosa di fantastico. :)
Ciao Simone.
Ma, correggimi se sbaglio, mi pare di ricordare che alla fine lo hanno decifrato un po’ a martellate ma non hanno capito esattamente come funzionasse.
Più che della storia, che reputo comunque affascinante, sono appassionato di quelle cose che mi sono ben guardato dallo scrivere in questi articoli ovvero forume, equazioni, curve ellittiche, …
No no riuscirono completamente a decifrarlo anche grazie alla macchina di Alan Turing. Tale successo non gli portò fortuna perchè di lì a qualche anno si suicidò dopo aver ricevuto la castrazione per la sua omosessualità. In ogni caso fu la sua macchina che accellerò il processo di decodifica restituendo il testo in chiaro che a quei tempo chiamavano Ultra. :)