Sicurezza dell'Informazione M
Couple-Time Pad
Esercizio di crittanalisi su cifrari simmetrici
Questo problema è stato proposto da Ron Rivest ai suoi studenti durante il corso di "Computer and Network Security": qui il testo originale (esercizio 1-2).
Il file "cryptograms.zip" contiene 20 messaggi cifrati. Tali messaggi sono stati generati a partire da 20 testi in chiaro e da 10 "one-time pads", ovvero 10 stringhe di byte random utilizzate come chiavi. Il cifrario scelto si basa su un funzionamento molto simile a quello di one-time pad: ogni testo cifrato è stato prodotto tramite un'operazione di EX-OR tra il corrispondente testo in chiaro ed una chiave scelta a caso tra quelle disponibili. Ogni chiave è stata quindi utilizzata in media 2 volte, per cifrare 2 diversi messaggi. Oops :-)
Il vostro obiettivo è quello di individuare i crittogrammi che sono stati cifrati con la stessa chiave.
Per risolvere questo problema potete, a scelta:
- creare un progetto Java che analizzi i 20 crittogrammi e restituisca in uscita un report che vi permetta di individuare i crittogrammi che sono stati cifrati con la stessa chiave. E' possibile utilizzare questo progetto Eclipse come punto di partenza (il progetto contiene un file con qualche funzione elementare, ad esempio per leggere i file contenenti i crittogrammi, che potrebbe velocizzare il lavoro);
- oppure creare un progetto in S-vLab ed eseguire la simulazione che vi permetta di individuare i crittogrammi che sono stati cifrati con la stessa chiave (in questo caso, sta a voi prendere nota durante la simulazione di quali sono i crittogrammi cifrati con la stessa chiave).
Non è necessario decifrare i crittogrammi.
Di seguito sono riportate alcune informazioni utili per lo svolgimento dell'esercizio:
- i testi in chiaro sono stati estratti da diverse pagine di Wikipedia (in lingua inglese) dedicate alla crittografia. Ciascun testo in chiaro è lungo circa 1000 byte;
- i messaggi includono soltanto caratteri ASCII in lower case (lettere minuscole, punteggiatura di base, nessun carattere accentato);
- i "pad" utilizzati come chiavi sono costituiti da: caratteri ASCII maiuscoli e minuscoli, cifre, i due simboli "+" e "/": tali "pad", infatti, sono stati generati codificando in base64 delle stringhe di byte casuali;
- i crittogrammi sono stati generati effettuando una operazione di EX-OR tra i testi in chiaro e le chiavi. Ogni crittogramma è lungo quanto il corrispondete testo in chiaro, anche se il "pad" utilizzato durante la cifratura ha una lunghezza maggiore. Sul sito del corso tenuto da Ron Rivest è disponibile, per chi fosse interessato, il listato Python utilizzato per generare i crittogrammi.
Suggerimento aggiuntivo: l'esercizio n.3.1 proposto qui è di grande aiuto nell'individuare una possibile soluzione.