Crittografia
Per crittografia si intende quella tecnica che permette di “cifrare” un messaggio rendendolo incomprensibile a tutti fuorchè al suo destinatario. In generale i due processi principali che vengono applicati in crittografia si dividono in “cifratura” e “codifica”. La cifratura lavora sulle lettere “individuali” di un alfabeto, mentre una codifica lavora ad un livello semantico più elevato, come può essere una parola o una frase. I sistemi di cifratura possono lavorare per trasposizione (mescolando i caratteri di un messaggio in un nuovo ordine), o per sostituzione (scambiando un carattere con un altro carattere in accordo con una regola specifica), o una combinazione di entrambi. Nel linguaggio corrente la trasposizione è anche chiamata permutazione. Una cifratura che implementa entrambe le tecniche (trasposizione e sostituzione) è chiamata “cifratura composta”. In linea di massima una cifratura composta è più sicura di una cifratura basata solo su sostituzione o su trasposizione. Shannon (l’inventore della teoria dell’informazione, N.d.R.) paragona la sostituzione alla “confusione”, perchè l’output è una funzione non lineare dell’input. Egli inoltre ha paragonato la trasposizione alla “diffusione” perchè estende la dipendenza dell’output da un piccolo numero di posizioni dell’input a un grande numero.
Ogni sistema di crittografia ha due parti essenziali: un algoritmo (per codificare e decodificare) e una “chiave”, la quale consiste di informazioni che, combinate con il testo “in chiaro” passato attraverso l’algoritmo, vi darà poi il testo codificato. In ogni moderno sistema di crittografia si assume che l’algoritmo sia conosciuto dai potenziali “nemici”, quindi la sicurezza di un sistema risiede solo ed esclusivamente nella segretezza della chiave.
Il nostro obiettivo è quello di tradurre il linguaggio del testo in chiaro in un nuovo “linguaggio” che non può essere compreso e/o tradotto senza le informazioni supplementari fornite dalla chiave. A chi è familiare il concetto di entropia in fisica potrà essere sorpreso di scoprire che questo concetto è utile anche in crittografia. L’entropia è la misura della quantità di disordine in un sistema fisico, o della relativa assenza di informazione in un sistema di comunicazione. In un linguaggio naturale, come potrebbe essere l’italiano, l’entropia è bassa, in quanto vi è ridondanza e una certa regolarità statistica nei termini e nei caratteri. Se alcuni dei caratteri di una frase sono persi o incomprensibili noi di solito riusciamo a ricostruire la frase, con una buona approssimazione, nella grande maggioranza dei casi. Inversamente, noi vogliamo che il nostro testo criptato abbia la più alta entropia possibile, al fine di renderne il più difficile possibile la decodifica. Idealmente il nostro testo dovrebbe apparire come una serie di lettere o simboli casuali … (random). Il nostro principio guida sarà quello di aumentare l’incertezza del criptoanalista il più possibile.
La prima considerazione nella sicurezza di un sistema di crittografia riguarda la lunghezza della chiave. Se noi usiamo una chiave troppo corta (se comparata alla lunghezza del testo in chiaro) molto probabilmente l’algoritmo da noi usato, arrivato ad un certo punto della codifica, dovrà ripetere dei caratteri, o delle sequenze di caratteri, fornendo così uno schema che il criptoananlista potrebbe sfruttare per compiere il suo lavoro. Se la cosa dovesse ripetersi molte volte il criptoananalista potrebbe avere abbastanza materiale in mano per poter ottenere la nostra chiave. Un altro fattore importante da tenere in considerazione è il numero di chiavi che il mio algoritmo ammette. Se il mio algoritmo ammettesse, ad esempio, 10000 chiavi, io posso stare certo che un “nemico” dotato di mezzi di calcolo anche modesti potrebbe provarle tutte in un lasso di tempo accettabile, vanificando quindi il mio sistema di crittografia. Questo approccio (ricerca esaustiva su tutte le chiavi possibili) viene chiamato approccio di “forza bruta”. Questo introduce il concetto del “fattore lavoro”, necessario per rompere un sistema di crittografia. In linea di principio un sistema sicuro in assoluto NON esiste. Ma se noi possiamo fare in modo che il fattore lavoro necessario per romperlo sia il più alto possibile molto probabilmente ci saremo messi al riparo dalla grande maggioranza degli attacchi. Anche perchè il nostro avversario prima di lanciarsi nel tentativo di decodifica di un sistema complesso molto probabilmente eseguirà un bilancio costi-benefici. Se il beneficio che esso potrà avere dalla decodifica del nostro messaggio è inferiore allo sforzo (anche economico) che deve sostenere per decodificarlo (o per tentare di farlo) molto probabilmente lascerà perdere.