Cambiare alfabeto potrebbe fare apparire il testo piu’ esoterico ma non ci salva da analisi di frequenza. Qui praticamente parla di permutazioni possibili all’interno di cifrari mono alfabetici.

Oggi si parla di analisi di frequenza su testi. Questa e’ efficace su testi lunghi e se so a priori anche il linguaggio del testo cifrato. Un altro elemento discriminante e’ la tipologia di testo perche’ ho frequenze diverse in base alla composizione. Fa anche uno script per andare ad analizzare le frequenze del testo cifrate e fare una sostituzione vedendo la frequenza delle lettere dell’alfabeto italiano (in generale) → voglio vedere funziona davvero. Ottengo un risultato che inizia ad avere senso, poi pero’ devo fare un pochino di tweaking e invertire le lettere che funzionano meglio etc. …

Cifrario di Vigenere

Usa una chiave che e’ una stringa di caratteri sullo stesso alfabeto del testo. Ad ogni carattere della chiave corrisponde un numero che viene interpretato come nel cifrario di cesare. Se il carattere della chiave e’ una lettera con un determinata numero, vuol dire che la lettera del testo deve essere shiftata di quella quantita’:

Untitled

Idealmente la chiave dovrebbe essere random per motivi di sicurezza. Se la chiave e’ sufficientemente lunga e casuale ho veramente troppe chiavi per andare a sfruttare l’analisi di frequenza, ho praticamente 26^6 chiavi possibili! Il numero di possibili chiavi diventa veramente elevato.

Ci salva se la chiave e’ piu’ corta del testo e che la stessa lettera della key cadi sulle stesse lettere del plaintext. Potrei anche avere delle ripetizioni tranquillamente, sia come parole, che come gruppi di lettere. Se queste lettere vengono fuori se sono uguali nel testo allora questo e’ cosi’ perche’ sono uguali anche nella chiave!

L’attacco puo’ avere successo se nel cipher ho una uguaglianza come frequenza nel plain. Cosa posso poi dire rispetto alla chiave a questo punto?

Nell’esempio che fa il prof e’ interessante qualora la chiave sia effettivamente un divisore di 14:

Untitled

Possiamo a questo punto andare a fare delle inferenze rispetto alla chiave che sia lunga due, perche’ con 26*26 posso provare a fare tranquillamente l’analisi di frequenza senza troppo problemi. Con 14 diventa davvero lungo da fare un attacco a forza bruta, pero’ potremmo fare un attacco a dizionario! Magari la chiave e’ qualcosa di piu’ semplice rispetto a qualcosa di veramente random. Ci sono dei pacchetti Debian che sono praticamente dei dizionari che funzionano in tal senso per aiutarti.

Racconti della storia della crittografia durante la seconda guerra mondiale. Comunicazioni tra americani che usavano gli indiani d’America

Fa vedere anche che libraria usare per fare lang detection, questo ci puo’ aiutare per la nostra analisi di frequenza.

L’idea di avere chiavi random abbastanza lunghe ci porta ad una unica soluzione

One Time Pad

Il testo vediamolo come una sequezna di bit e vediamo la chiave come una sequenza di bit altrettanto lunga. Alla fine Vigenere e’ come se fosse un OTP ma mono alfabetico!

Usiamo come operazioni tra chiave e plaintext lo XOR, per fare la decodifica facciamo la stessa cosa. L’utilizzo dello XOR e’ noto (vedi appunti di critto appli/sec).

La cosa interessante e’ che se la chiave e’ scelta veramente in maniera random, quindi con prob 50% di avere 0 o 1 con scelta bernulliamo, si dimostra che il testo cifrato ha le stesse probabilita’ anche se il testo in cahiro e’ deterministico.

Untitled

OTP rilascia la minima informazioni possibile ed e’ l’unico cifrario veramente e dimostrabilmente sicuro in questo senso. Non pratico, perche’ devo avere una chiave lunga quanto il testo e devo avere tutti bit casuali e non e’ facile ne’ scontato disporne.