kasiski

11
L.Barbini,E.Benetti

Transcript of kasiski

Page 1: kasiski

L.Barbini,E.Benetti

Page 2: kasiski

Per prima cosa viene effettuata una ‘pulizia del testo’ con cui vengono tolti spazi, punteggiatura, e le lettere maiuscole sono portate in minuscolo.

Questo perché lasciare la punteggiatura sarebbe un aiuto ulteriore nell’attacco, potendo infatti riconoscere la lunghezza delle parole.

Page 3: kasiski

La cifratura avviene semplicemente sommando i codici Unicode lettera per lettera della frase in chiaro e quella corrispondente della chiave.

Il risultato viene calcolato poi in modulo (UnicZ-UnicA) in modo che il risultato sia ancora un codice Unicode compreso tra 97 (UnicA) e 122 (UnicZ), ovvero le lettere minuscole.

Analogamente per decifrare il testo così ottenuto, viene fatta la differenza modulo (UnicZ-Unic0) dei codici Unicode

Page 4: kasiski

Viene inizializzata una variabile di lunghezza del pattern a 3 e si lavora sulla stringa contenente tutto il testo cifrato nel seguente modo: si prendono le lettere in posizione 0,1 e 2 e si scrivono nella prima posizione di un vettore di stringhe, poi le lettere in posizione 1,2,3 nel secondo posto del vettore e così via.

Scandito tutto il file si cercano le stringhe di 3 lettere ripetute: quando si trovano viene aggiunta in un’altra matrice una riga in cui avremo il pattern ripetuto e le distanze fra le varie ripetizioni di esso.

Tra tutte le distanze trovate si calcola il Gcd

Page 5: kasiski

Se il Gcd risulta essere 1, probabilmente il pattern è troppo corto e si sono riscontrate delle ripetizioni casuali.

La variabile indicante la lunghezza del pattern viene incrementata e si ripete il procedimento con pattern di 4.

Così via fino a trovare un Gcd != 1, che sarà la lunghezza della chiave usata.

Page 6: kasiski

Punto Critico: La maggior parte del tempo di esecuzione del programma era data dall’ inserimento dinamico nel vettore di tutti i pattern trovati nel testo.

Per ottimizzare l’algoritmo abbiamo calcolato Gcd parziali senza attendere la ricerca di tutti i pattern, così facendo non appena questo risulta = 1 si esce dal ciclo incrementando la lunghezza del pattern

Page 7: kasiski

Adesso che siamo a conoscenza della lunghezza della chiave, dividiamo il testo in un numero di parti uguale al numero delle lettere della chiave, mettendo in ogni gruppo le lettere del testo che sono state cifrate con la stessa lettera della chiave. Si può così effettuare l’analisi della frequenza delle lettere dell’alfabeto su ogni gruppo, che risulta ora cifrato in modo monoalfabetico.

Le lettere di ogni gruppo vengono conteggiate ed ordinate in senso decrescente in un vettore.

A ogni lettera del gruppo viene sostituita quella dell’alfabeto che si trova nella stessa posizione di frequenza nell’alfabeto di riferimento (nel nostro caso Italiano o Inglese) anch’esso ordinato in senso decrescente.

Page 8: kasiski

Frequenza delle lettere utilizzata per un testo in lingua italiana

Frequenza delle lettere utilizzata per un testo in lingua inglese

Page 9: kasiski

Ci troviamo cosi una struttura di tipo matriciale in cui ogni colonna contiene le lettere di uno dei gruppi.

Una volta trasformate le lettere, si legge la matrice per righe, riottenendo il testo decifrato secondo questo attacco, e mostrando la percentuale delle lettere recuperate.

Page 10: kasiski
Page 11: kasiski

Lettere recuperate (%)

Num. di lettere del testo usato

Percentuale delle lettere recuperate in modo esatto dal testo originale, al variare della dimensione del testo cifrato su cui viene effettuato l’attacco.

Si nota inoltre come, all’aumentare della lunghezza della chiave, l’attacco risulti meno efficiente