Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoLeonora Masini Modificato 9 anni fa
1
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 19 e 20 Crittografia I A) Tabella dei bigrammi B) Riconoscimento automatico della lingua C) Rottura dei codici Fabio Scotti Laboratorio di programmazione per la sicurezza
2
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 2 Lezione 19 e 20 Fabio Scotti Laboratorio di programmazione per la sicurezza Tabella dei bigrammi Obiettivi : Comprendere come la tabella dei bigrammi sia composta e come possa essere usata per il riconoscimento automatico di una lingua sia uno strumento utile e per la rottura dei codici crittografici
3
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 3 Tabella dei bigrammi La frequenza delle lettere in una lingua è una peculiarità che, se misurata da un programma, aiuta a riconoscere la lingua e a rompere il codice di Cesare. La tabella dei bigrammi è la frequenza con la quale compaiono COPPIE di lettere in una lingua. La tabella dei bigrammi è uno strumento che discrimina ancora meglio una lingua e può essere utile nella rottura di altri codici crittografici.
4
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 4 Esempio Frequenza lettere:... n=65, A, freq= 0.103848 n=66, B, freq= 0.013314 n=67, C, freq= 0.103848 n=68, D, freq= 0.063906 n=69, E, freq= 0.071895 n=70, F, freq= 0.026628 n=71, G, freq= 0.037279 n=72, H, freq= 0.005326 Tabella bigrammi: SpazioABCD... Spazio1 473 90 596 640... A 824 0 55 88 63.. B 0 32 64 0 0. C 0 136 0 125 0. D 22 139 0 0 6.....
5
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 5 Lettura della tabella Tabella bigrammi: SpazioABCD... Spazio1 473 90 596 640... A 824 0 55 88 63.. B 0 32 64 0 0. C 0 136 0 125 0. D 22 139 0 0 6..... Come iniziano le parole in questa lingua Come finiscono le parole in questa lingua
6
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 6 Creazione della tabella (1) E’ una tabella che deve contenere percentuali (rapporto fra interi, quindi numeri razionali). La rappresentiamo in memoria come una matrice di float: float bigrammi [256][256]; // ascii float bigrammi [512][512]; // ascii estesa
7
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 7 Creazione della tabella (2) char c1, c2 ; float bigrammi[256][256]; int numero_Bigram, temp1, temp2, i1, i2; … // apro in lettura il file e memorizzo il puntatore in Fp … // inizializzo la matrice bigrammi a zero while ( fscanf(Fp, "%c", &c1) == 1 ) { while ( fscanf(Fp, "%c", &c2) == 1 ) { if (( c1 256 )) || (( c1 256 )) { // sono nella tabella ASCII ? … // inserire codice } temp1 = (int) c1; // cast raccomandabile temp2 = (int) c2; // cast raccomandabile bigrammi[temp1][temp2] = bigrammi[temp1][temp2] + 1; numero_Bigram = numero_Bigram + 1 ; }
8
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 8 Creazione della tabella (3) // normalizazzione della matrice for (i=0; i1<256; i1++) // normalizzazione dei conteggi { for (i=0; i2<256; i2++) // normalizzazione dei conteggi { bigrammi[i1][i2] = bigrammi [i1][i2] / numero_Bigram * 100 ; }
9
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 9 Utile funzione UscitaIngressi Aaà Bb Cc Dd Eeèé Ff Gg Hh Iiì Jj Kk Ll Mm Nn Ooò Pp Qq Rr Ss Tt Uuù Vv Ww Xx Yy Zz char converti(char); Con questa funzione, si converte, carattere per carattere, un testo in una sequenza di caratteri maiuscoli prima di calcolare la frequenza delle lettere.
10
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 10 Lezione 19 e 20 Fabio Scotti Laboratorio di programmazione per la sicurezza Riconoscimento della lingua automatco Obiettivi : Essere in grado di scrivere programmi per l'identificazione automatica della lingua di un testo
11
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 11 Riconoscimento automatico Il riconoscimento automatico della lingua è utile in molte applicazioni quali: –gli editor di testo (l’impiego dei dizionari dei sinonimi, la correzione automatica, ecc..); –in campo crittografico (rottura codici crittografici semplici). In particolare ci focalizziamo sul riconoscimento automatico della lingua in base alla distribuzione delle lettere. Vengono esaminati i testi non crittati.
12
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 12 Tabella delle frequenze Frequenza lettere: Lingua a b Francese 26 20 Inglese 26 21,2 Italiano 26 20,5 Russo 31 26,5 Spagnolo 26 21 Tedesco 26 21,2
13
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 13 Metodo di riconoscimento (1) Frequenza lettere: Lingua a b Francese 26 20 Inglese 26 21,2 Italiano 26 20,5 Russo 31 26,5 Spagnolo 26 21 Tedesco 26 21,2 Esamino il file Calcolo la frequenza delle lettere Confronto le frequenze con quelle note Determino la lingua
14
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 14 Metodo di riconoscimento (2) Frequenza lettere: Lingua a b Francese 26 20 Inglese 26 21,2 Italiano 26 20,5 Russo 31 26,5 Spagnolo 26 21 Tedesco 26 21,2 Esamino il file Calcolo la frequenza delle lettere Confronto le frequenze con quelle note Determino la lingua Nel mezzo del cammin di nostra vita … A = 25,6% B = 19,8% La lingua più vicina è l’italiano
15
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 15 Usando tutte le frequenze A A B B C C D D E E … PERCENTUALE DI OCCORRENZA (frequenza lettera) 10% 5% A B C D E … Scarto percentuale 10% 5% Lettere LINGUA INCOGNITA ITALIANO La somma totale degli scarti è la distanza fra la lingua incognita e l’italiano
16
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 16 Progettazione del programma (1) Cosa serve: una funzione produci_frequenza() che dato un file ritorna il vettore delle frequenze delle lettere; una funzione calcola_Distanza() che dati due vettori di frequenze ritorna una distanza fra le due lingue.
17
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 17 Progettazione del programma (2) Come funzionerà il programma: usando produci_frequenza(): – dati dei file di testo in italiano, inglese, francese, ecc..., si calcolano le loro frequenze; – si calcola la frequenza delle lettere del file di lingua incognita; usando calcola_Distanza() si confrontano le frequenze del file di lingua incognita con quelle dei file di lingua nota; Possiamo affermare che il file di lingua incognita è scritto nella lingua che ha minore scarto totale.
18
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 18 Programma riconoscimento (2) // qui carichiamo le frequenze di riferimento produci_frequenza( "promessiSposi.txt“, frequenze_ITA, LUN_ALFABETO ); produci_frequenza( "othello.txt", frequenze_ENG, LUN_ALFABETO ); produci_frequenza( "marsigliese.txt", frequenze_FRA, LUN_ALFABETO ); produci_frequenza( "sconosciuta.txt", frequenze_incognita, LUN_ALFABETO ); // confrontiamo le frequenze // (aggiungere il codice che controlla il massimo) distanza = calcola_Distanza(frequenze_incognita, frequenze_ITA, LUN_ALFABETO ); printf("la lingua incongnita dista %f dall'ITALIANO \n", distanza ) ; distanza = calcola_Distanza(frequenze_incognita, frequenze_FRA, LUN_ALFABETO ); printf("la lingua incongnita dista %f dal FRANCESE \n", distanza ) ; distanza = calcola_Distanza(frequenze_incognita, frequenze_ENG, LUN_ALFABETO ); printf("la lingua incongnita dista %f dall'INGLESE \n", distanza ) ; getchar(); exit(0); } // main
19
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 19 Programma riconoscimento (3) float calcola_Distanza(float frequenze_1[], float frequenze_2[], int lunghezza_alfabeto ) { float distanza; distanza = 0 ; // distanza euclidea (applico Pitagora in N dimensioni con N= lunghezza_alfabeto) for( i = 0; i < lunghezza_alfabeto ; i = i+1 ) { distanza = distanza + (frequenze_1[i]- frequenze_2[i])*(frequenze_1[i]- frequenze_2[i]); } distanza = sqrtf( distanza ); // sqrtf radice quadrata per float return distanza; }
20
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 20 Lezione 19 e 20 Fabio Scotti Laboratorio di programmazione per la sicurezza Rottura dei codici Obiettivi : Comprendere come il riconoscimento automatico di una lingua sia uno strumento utile per la rottura dei codici crittografici Essere in grado di scrivere programmi per l'identificazione automatica della lingua di un testo e la rottura dei codici
21
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 21 Esempi di rottura di codice Iniziamo ad esplorare le tecniche per rompere i codici crittografici più semplici: il codice di Cesare e i codici a sostituzione. In questa lezione descriviamo i procedimenti e vediamo alcuni programmi ausiliari utili. Nelle prossime lezioni scriveremo programmi che automaticamente romperanno il codice. Lavoriamo nell’ipotesi di conoscere la lingua nel quale è stato scritto il messaggio crittato (ipotesi successivamente rimuovibile).
22
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 22 Rottura del codice di Cesare 1.Calcolare le frequenze delle lettere nella lingua in cui si immagina sia scritto il messaggio crittato. 2.Calcoliare le frequenze delle lettere nel messaggio crittato. 3.Sovrapporre le distribuzioni: una delle due viene fatta traslare fino a quando si ottiene la migliore sovrapposizione. 4.La quantità di lettere di cui si è dovuto traslare l'alfabeto della distribuzione costituisce la chiave del cifrario. 3.
23
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 23 Esempio A A B B C C D D E E … PERCENTUALE DI OCCORRENZA (frequenza lettera) 10% 5% Lettere MESSAGGIO CRITTATO Chiave = 0 Z Z A B C D F E … 10% 5% Z P A Q B R C S D T E … 10% 5% Lettere O Z Chiave = 1 A B C D E Chiave = 15 ITALIANO
24
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 24 Rottura del codice con sostituzione (1) Nel caso del codice di Cesare basta trovare UNA chiave per decrittare tutto il codice. Nei codici con sostituzione occorre trovare la chiave con la quale è stata crittata ogni lettera. AcB&…AcB&…
25
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 25 Rottura del codice con sostituzione (2) Si utilizza l’approccio con le frequenze di lettera oppure con i bigrammi. Perché la statistica possa essere di supporto, occorre che il testo cifrato sia abbastanza lungo. E’ anche possibile unire molteplici testi crittati, ma occorre essere certi che siano stati crittati con lo stesso metodo e con la stessa chiave.
26
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 26 Rottura del codice con sostituzione (3) In primis si cerca di associare le vocali (frequenza maggiore) guardando le frequenze di lettera, poi le consonanti. Crittato LinguaDecrittazione ‘k’: 25,8%‘a’:26%‘k’ ’a’ ‘b’:20% ‘c’: 7% … ‘s’: 20,1%‘b’:20%‘s’ ’b’ …
27
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 27 Rottura del codice con sostituzione (4) In secundis si risolvono eventuali dubbi confrontando la tabella dei bigrammi ottenuta dal codice crittato e quella della lingua. Crittato LinguaDecrittazione “df”: 0,25%“ab”:0,26%‘d’ ’a’ e ‘f’ ’b’ … Questo approccio permette dei controlli incrociati. Ad esempio si controlla se tutti i bigrammi mostrano ‘d’ ’a’ ecc.. (si usa la conversione maggiormente presente).
28
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 28 Controllo del successo Per automatizzare il tutto, occorre un criterio per stabilire automaticamente se la rottura del codice ha avuto successo. Quando i programmi di decrittazione propongono una soluzione, è possibile verificare che le parole presenti nella soluzione appartengano a dei dizionari. Ad esempio se nessuna parola decrittata appartiene ad un dizionario, allora la chiave è sbagliata e occorre provare a decrittare con altre chiavi.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.