Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 19 e 20 Crittografia I A) Tabella dei bigrammi B) Riconoscimento.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Corso di Fondamenti di Programmazione canale E-O
INFORMATICA Altre Istruzioni di I/O
Equazioni di primo grado
Selezione - approfondimento
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
MultiSet, Liste Ordinate
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Programmazione Procedurale in Linguaggio C++
CRITTOGRAFIA La crittografia, ovvero la scienza dei messaggi segreti sicuri, nasce come raccolta di tecniche e sistemi per nascondere messaggi tra regnanti,
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Algoritmi Politecnico di Milano
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 4: 18 Aprile 2013 Gianluca Durelli – Marco D. Santambrogio –
Testo consigliato Crittografia, P. Ferragina e F. Luccio, Ed. Bollati Boringhieri, € 16.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Introduzione agli stream e alle classi
Corso di Informatica per Giurisprudenza
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Strutture di controllo nel C
Politecnico di Milano Esercizi Stringhe Ricerca binaria.
File di testo, file binari
Dichiarazioni e tipi predefiniti nel linguaggio C
Fondamenti di Informatica A - Massimo Bertozzi TIPI DI DATO IN C++ What's in a name? That which we call a rose By any other name would smell as sweet.
I File.
Scritture Segrete Lezione n. 2
Equazione di secondo grado.
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Gestione dei file di testo, matrici e struct
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
GLI ARRAY MONODIMENSIONALI. Utilizzando le nostre attuali conoscenze, proviamo a risolvere il seguente problema: Calcolare la media dei voti conseguiti.
s STRINGHE DI CARATTERI a p e \0
Lezione 3 Struttura lessicale del linguaggio
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
Vettori (a una dimensione)
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 13 e 14 -
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
Hashing. 2 argomenti Hashing Tabelle hash Funzioni hash e metodi per generarle Inserimento e risoluzione delle collisioni Eliminazione Funzioni hash per.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
DALLA CRITTOGRAFIA CLASSICA ALLA CRITTOGRAFIA MODERNA
Esercizi.
Laboratorio di Linguaggi... altre D O M A N D E ! Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 15 e 16 Programmazione strutturata A) progettazione del.
Crittografia/ Steganografia
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
LA FONETICA.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
Lezione 9 e 10 - Segmenti di memoria e puntatori - Aritmetica dei puntatori - Formattazione dei dati - Significato ed impiego del cast - Tipi di dato strutturato.
Algoritmi e Strutture Dati Luciano Gualà
© 2015 Giorgio Porcu - Aggiornamennto 01/12/2015 I STITUTO T ECNICO SECONDO BIENNIO T ECNOLOGIE E P ROGETTAZIONE Rappresentazione dell’ Informazione Informazione.
La funzione CASUALE. Gli istogrammi.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi su stringhe e file 15 Stringhe e file.
Transcript della presentazione:

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

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

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.

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 4 Esempio Frequenza lettere:... n=65, A, freq= n=66, B, freq= n=67, C, freq= n=68, D, freq= n=69, E, freq= n=70, F, freq= n=71, G, freq= n=72, H, freq= Tabella bigrammi: SpazioABCD... Spazio A B C D

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 5 Lettura della tabella Tabella bigrammi: SpazioABCD... Spazio A B C D Come iniziano le parole in questa lingua Come finiscono le parole in questa lingua

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

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 ; }

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 ; }

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.

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

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.

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 12 Tabella delle frequenze Frequenza lettere: Lingua a b Francese Inglese 26 21,2 Italiano 26 20,5 Russo 31 26,5 Spagnolo Tedesco 26 21,2

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 13 Metodo di riconoscimento (1) Frequenza lettere: Lingua a b Francese Inglese 26 21,2 Italiano 26 20,5 Russo 31 26,5 Spagnolo Tedesco 26 21,2 Esamino il file Calcolo la frequenza delle lettere Confronto le frequenze con quelle note Determino la lingua

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 14 Metodo di riconoscimento (2) Frequenza lettere: Lingua a b Francese Inglese 26 21,2 Italiano 26 20,5 Russo 31 26,5 Spagnolo 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

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

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.

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.

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

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; }

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

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).

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.

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

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. AcB&…AcB&…

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.

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’ …

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).

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.