Crittanalisi
Crittanalisi del Vigenère con il test chi quadrato
Il metodo Kasiski - Applicazione in PhP

Un metodo di cifratura come il cifrario di Vigenère, per secoli considerato sicuro e inattaccabile, può oggi essere forzato in una frazione di secondo con l'aiuto del computer!

In questo sito presento un esempio realizzato da chi scrive, scritto in linguaggio PhP con le frequenze statistiche memorizzate su data-base MySQL e basato sul metodo del χ2; la prima versione era basata sul classico metodo dei minimi quadrati di Gauss; l'idea di fondo è simile ma con il χ2 il metodo sembra funzionare meglio.

Il primo passo è quello di determinare la lunghezza del verme n; si provano diverse ipotesi per n da 1 a un massimo prestabilito dall'utente, per ogni valore il testo viene distribuito su n colonne che sono possibili testi cifrati con Cesare, si calcola lo scarto tra il numero di presenze osservato e quello atteso per la data lingua e si sceglie come lunghezza del verme il valore che ha dato il χ2 minore.

Una volta individuato il valore di n il messaggio cifrato risulta spezzato su n testi cifrati con Cesare, dunque ci sono solo 26 ipotesi possibili; (p.es. spostamento di 3 A->D, B->E ...; spostamento di 6 A->G, B->H ...); queste 26 ipotesi vengono analizzate una per una e anche qui per ognuna viene calcolato il χ2; alla fine si individua l'ipotesi per la quale il χ2 è minimo, e quindi la lettera del verme.

Questo lavoro viene ripetuto per ogni colonna e alla fine si ottiene una ipotesi completa per il verme; se il verme è una parola o frase riconoscibile della lingua si è pressochè certi di aver forzato il messaggio; dopodiché si prova comunque a decifrare il messaggio.

Se il messaggio ha senso compiuto il gioco è fatto; se no si prova con un altro valore di n.

Da prove fatte il metodo è pressoché infallibile se la lunghezza del testo è almeno venti volte quella del verme (o chiave). Per rapporti tra dieci e venti alcune lettere della chiave possono essere sbagliate, ma se si tratta di una parola di senso compiuto non ci vuole molto a completarla; persino per valori inferiori a 10 il metodo riesce ancora ad azzeccare alcune lettere della chiave e il crittanalista può ancora arrivare manualmente alla soluzione.

Il passo più delicato della procedura è il primo, la stima della lunghezza della chiave; in qualche occasione il programma dà una lunghezza che è un multiplo della lunghezza vera; non è un vero e proprio errore, se la chiave era "SECRET" (lunghezza 6), anche "SECRETSECRET" (lunghezza 12) è chiave valida e la decrittazione funziona ugualmente; però una chiave di 12 caratteri è un po' più difficile da ricavare di una di 6 prché i singoli crittogrammi di Cesare sono più brevi, e, se il messaggio è corto, potrebbe risultare errata mentre una chiave di 6 verrebbe ancora identificata. In questo caso occorre un intervento umano per correggere 12 in 6 e quindi viene meno la completa automazione della procedura.

Un fatto curioso è che spesso questo metodo fornisce la chiave corretta o in buona parte corretta anche usando la tabella delle frequenze di una lingua sbagliata; in effetti le lingue europee hanno distribuzioni di frequenza non molto dissimili.

Come è facilmente comprensibile, se il verme ha lunghezza paragonabile al testo e le n colonne contengono solo 2 o 3 o 4 o 5 caratteri non è più possibile fare confronti significativi con le tabelle di frequenza e il metodo cade.

Se poi il verme è lungo come il testo, si tratta in pratica di un Vernam, che è il cifrario sicuro e inattaccabile per eccellenza. E anche questo metodo non può che fallire in questo caso.