L’obbiettivo del corso è quello di presentare alcuni fondamentali protocolli crittografici sia simmetrici che asimmetrici, con particolare enfasi agli aspetti algebrici degli stessi. Al termine del corso lo studente conoscerà ed implementerà alcuni protocolli oggi utilizzati. Inoltre, sarà in grado di avvicinarsi a nuovi protocolli in modo critico. Infine, sarà in grado di conoscere pecularietà tecniche di linguaggi basso livello, come C, rispetto ad altri di alto livello come Python rispetto a sistemi crittografici.
Prerequisiti
Nozioni basilari di aritmetica modulare e campi finiti. Buona conoscenza di un linguaggio di programmazione.
Metodi didattici
Lezioni frontali e laboratoriali. Utilizzo di un linguaggio di programmazione per limplementazione degli algoritmi descritti.
Verifica Apprendimento
L’esame consiste di uno dei due metodi alternativi: 1) Esame orale; 2) Valutazioni in itinere più progetto. 1) Esame orale. L’esame orale prevede esercizi e domande teoriche su argomenti presentati durante il corso. La prova orale si intende superata se si raggiungono almeno 18/30. 2) Valutazioni in itinere più progetto finale. Le valutazioni in itinere settimanali (una per settimana e di circa 45 minuti) prevedono esercizi ed implementazioni relative agli argomenti trattati. Per la risoluzione si possono consultare gli appunti delle lezioni. Grazie alle valutazioni in itinere si potranno ottenere al massimo 27/30. Tale punteggio si otterrà dalla somma delle singole valutazioni in itinere. A tale punteggio si aggiunge quello del progetto finale che verrà valutato al massimo 3/30. Il progetto finale è scelto dallo studente in accordo col docente su tematiche trattate durante il corso. L’esame si intende superato se lo studente consegue tra prove in itinere e seminario un voto di almeno 18/30.
Testi
J. Hoffstein, J. Pipher, J. H. Silverman, An Introduction to Mathematical Cryptography, Springer. Lindsay N. Childs, A Concrete Introduction to Higher Algebra, Springer. R.Lidl, H. Niederreiter, Finite Fields, Cambridge University Press, 2009. M. Ceria, G. Rinaldo, M. Sala, Bits, Bytes and Friends, Aracne.
Contenuti
Introduzione alla Crittografia. Tipi di attacchi. Permutazioni. Teorema di Shannon. One time pad.
Crittografia a chiave privata. Una introduzione agli "stream ciphers" e "block ciphers". L'algebra utilizzata nella crittografia a chiave privata. Campi finiti, polinomi primitivi, e LFSR. Funzioni booleane e la forma algebrica normale. Algebra lineare e matrici circolanti.
Crittografia a chiave pubblica. Come scambiare la chiave di sessione. Elementi primitivi e il problema del logaritmo discreto (DLP). Scambio di chiavi Diffie-Helmann. L'algoritmo RSA. Implementazione. Attacchi noti. Curve ellittiche.
Gli stream cipher. Stream cipher standard usati nelle nostre comunicazioni. Implementazione. Attacchi noti.
I block cipher. La struttura generale. Lo standard "Advanced Encryption Standard" (AES). Il "key schedule". Cifratura passo dopo passo tramite SBox, ShiftRows e MixColumns.I modi ECB mode e CBC in AES. Lo "square attack".
Una introduzione alle funzioni "hash". La funzione hash e l'HMAC: La manomissione del messaggio. Esempi. La firma digitale.