Per crittografia si intende l’insieme delle tecniche finalizzate a codificare in maniera indecifrabile messaggi con la possibilità di riportarli “in chiaro”. Esiste da millenni ed è sempre stata utilizzata per lo più da militari, spie e diplomatici. Negli ultimi decenni, è entrata nelle nostre vite proteggendo connessioni Internet in https, home banking, e-commerce, app mobile e altro ancora.
Incontriamo e incontreremo spesso nei nostri articoli la crittografia pertanto vogliamo esporne in questo post alcuni concetti fondamentali di utilità generale ed infine proporre un piccolo esperimento da riga di comando.
La crittografia può essere per lo più di due tipi:
- simmetrica, dove con una stessa password si può cifrare e decifrare un messaggio. Il suo utilizzo è molto pratico in locale ma si scontra con grandi difficoltà nell’utilizzo in remoto: quando si deve inviare un messaggio cifrato attraverso la rete è piuttosto complesso condividere in maniera sicura la password che metterebbe il destinatario in condizione di leggerne il contenuto;
- asimmetrica o a chiave pubblica, si basa sull’uso di due chiavi: una pubblica per cifrare ed una privata per decifrare. Chi invia il messaggio cifra i dati con la chiave pubblica del destinatario il quale li potrà decifrare con quella privata. Su questo tipo di crittografia si basano certificati digitali e protocolli di rete “sicurizzati”.
In base al tipo di crittografia che si vuole utilizzare si potrà scegliere l’algoritmo che si preferisce specificando nella maggior parte dei casi il numero di bit che comporranno la chiave di cifratura. Nel caso di crittografia simmetrica, uno degli algoritmi più utilizzati attualmente è AES, possibilmente fissando la chiave ad una lunghezza di 256 bit.
Possiamo sperimentare un pò di crittografia utilizzando vari software. Qui prenderemo in considerazione openssl, solitamente disponibile nelle installazioni Linux.
Scriviamo un file di testo in cui mettiamo alcune frasi di esempio. Il nostro conterrà:
Frasi di esempio. Questo testo sarà cifrato
Decidiamo di nominarlo in.txt, il seguente comando ne produrrà una versione cifrata:
> openssl enc -aes-256-cbc -salt -in in.txt -out in.txt.enc
La password per la cifratura simmetrica sarà scelta al momento: openssl ci chiederà di fornirla e di confermarla. Vedremo così apparire nella cartella di lavoro il file in.txt.enc il cui contenuto non sarà più leggibile.
E’ stato utilizzato AES con chiave a 256 bit con CBC (modalità per cui si evita che blocchi uguali in chiaro vengano cifrati alla stessa maniera). L’opzione -salt richiede che venga applicato il meccanismo del Salt che impone di aggiungere dei caratteri casuali alla password prima della cifratura al fine di rendere più difficile attacchi alla sicurezza del testo cifrato. Per decifrare il contenuto del file in.txt.enc, potremo utilizzare la seguente invocazione di openssl:
> openssl enc -aes-256-cbc -salt -d -in in.txt.enc
Ci verrà chiesta la password che abbiamo usato per la cifratura e vedremo in output il contenuto iniziale del file. Notare che il comando utilizzato è sempre enc ma è l’opzione -d che ordina di riportare in chiaro il messaggio.
La crittografia è una tematica vastissima e spesso complessa, una scienza al confine tra informatica e matematica, ma conoscerne le basi è molto utile sia per utilizzarla come protezione di dati sensibili utili al nostro lavoro sia per padroneggiare meglio argomenti come certificati digitali, https e sistemi di protezione vari.
Alla prossima!
No Responses to “Crittografia: concetti di base per ogni uso”