CRYPTOGRAPHIC ENGINEERING
Anno accademico 2020/2021 - 2° anno - Curriculum Sistemi di Rete e SicurezzaCrediti: 6
Organizzazione didattica: 150 ore d'impegno totale, 102 di studio individuale, 24 di lezione frontale, 24 di esercitazione
Semestre: 1°
Obiettivi formativi
- Conoscenza e capacità di comprensione (knowledge and understanding): lo studente acquisirà un background tecnico sugli strumenti informatici utili all'impiego di Crittografia Moderna nel proprio software; tali strumenti spazieranno da soluzioni ad alto livello, con soluzioni crittografiche standard pronte all'uso, a quelle a più basso livello con cui sarà possibile implementare qualunque schema crittografico pensabile.
- Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): attraverso l'approfondimento di varie soluzioni crittografiche applicate e lo studio di attacchi crittografici notevoli, lo studente svilupperà le capacità di comprendere il livello di sicurezza offerto da una soluzione appena implementata e ad evitare approcci non sicuri nella loro implementazione.
- Autonomia di giudizio (making judgements): attraverso la comprensione delle definizioni di sicurezza standard, lo studente potrà valutare la bontà di uno schema crittografico e valutarne la pertinenza tecnica in uno soluzione software che lo includa.
- Abilità comunicative (communication skills): lo studente consoliderà le capacità di esprimersi con terminologie e nozioni proprie della Crittografia Moderna; ciò gli permetterà di interfacciarsi correttamente sia con materiale tecnico del settore che di collaborare proficuamente con esperti del settore.
- Capacità di apprendimento (learning skills): il background sviluppato nel corso propedeutico di Crittografia, corredato con le conoscenze tecnico-pratiche di questo, permetterà allo studente di approcciare l'adozione/adattamento/sviluppo di uno schema crittografico nell'ambito di un progetto software più complesso; il tutto mantenendo un certo grado di confidenza nel livello di sicurezza generale così ottenuto.
Modalità di svolgimento dell'insegnamento
Lezioni frontali in aula su argomenti teorici e sullo sviluppo di codice.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.
Prerequisiti richiesti
requisiti: conoscenza della teoria alla base della Crittografia Moderna, buone capacità di programmazione
propedeuticità: Crittografia
Frequenza lezioni
La frequenza a lezione è fortemente consigliata.
Contenuti del corso
Il corso è una prosecuzione del percorso teorico iniziato con l'insegnamento "Crittografia" e rappresenta un ponte verso il mondo pratico. Gli argomenti trattati ricadono nella cosiddetta "Cryptographic Engineering": fusione di conoscenze teorico-pratiche che permettono di implementare schemi crittografici in modo corretto, sicuro ed efficiente. Una parte del corso è dedicata al richiamo dei concetti e definizioni principali dal corso di teoria e alla presentazione degli algoritmi efficienti che stanno alla base di qualunque implementazione di numeri a multi-precisione (MPI). Tali conoscenze saranno indispensabili per ottimizzare le prestazioni delle proprie implementazioni e per meglio comprendere alcuni attacchi crittografici avanzati visti durante il corso. Una parte del corso sarà dedicata allo studio di standard reali (SSL/TLS, SSH) e alla presentazione di attacchi crittografici notevoli ai loro danni: tale studio permetterà di meglio comprere alcuni dei principi generali alla base di qualunque implementazione corretta e sicura. Tra gli attacchi presentati ci saranno anche i cosiddetti "Side-Channel Attack": con particolare focus su quelli basati sul timing delle primitive crittografiche attaccate. L'ultima parte del corso sarà dedicata ai dettagli tecnici sugli strumenti e le tecniche per le implementazioni crittografiche.
Testi di riferimento
- [AvOV] Alfred Menezes, Paul van Oorschot, Scott Vanstone: Handbook of Applied Cryptography
- [PP] Christof Paar, Jan Pelzl: Understanding Cryptography: A Textbook for Students and Practitioners
- [S] N.P. Smart: Cryptography Made Simple
A lezione si farà inoltre riferimento a svariati articoli scientifici di volta in volta segnalati.
Programmazione del corso
Argomenti | Riferimenti testi | |
---|---|---|
1 | richiami: definizioni, nozioni di sicurezza, principali primitive | corso Crittografia, cap.11 di [S] |
2 | richiami: gruppi, campi, gruppi ciclici, sottogruppi, generatori, teorema cinese del resto | corso Crittografia, cap.8 di [PP], cap.1-2 di [S] |
3 | richiami: problemi difficili, logaritmo discreto, fattorizzazione, algoritmi di risoluzione | corso Crittografia, cap.8 di [PP], cap.2-3 di [S] |
4 | introduzione alle curve ellittiche | cap.9 di [PP], cap.4 di [S] |
5 | algoritmi per l'esponenziazione nei gruppi ciclici: square-and-multiply, a rango k, sliding window | cap.6 di [S], cap.14.6 di [AvOV] |
6 | algoritmi per l'esponenziazione in casi particolari: moduli compositi, a esponente fisso, a base fissa, esponenziazioni multiple | cap.7 di [PP], cap.6 di [S], cap.14.6 di [AvOV] |
7 | algoritmi per l'aritmetica a multi-precisione: addizione, moltiplicazione elementare, quadrato, Karatsuba, Toom-k (accenno), riduzioni e moltiplicazioni di Montgomery | cap.6 di [S], cap.14.6 di [AvOV] |
8 | campionamento del tempo ad alta precisione: tempo di cpu, tempo effettivo, fonti di clock, contatore dei cicli della cpu, chiamate di sistema multi-piattaforma, utilizzo di assembly per l'accesso al registro tsc (accenno) | slide, articoli |
9 | libreria GMP: caratteristiche, numeri supportati, operazioni di base, input-output, operazioni modulari, ottimizzazioni, studio delle prestazioni, generatori di numeri pseudo-casuali, accesso ai pool di entropia multi-piattaforma | cap.6 di [S], doc. GMP |
10 | implementazione della cifratura RSA: schema di base, sicurezza, ottimizzazioni, attacchi elementari, attacco basato sul parity oracle, padding PKCS#1 v1.5, attacco basato sul padding oracle (SSL), accenno ad attacco ROBOT, padding EME-OAEP, sicurezza di RSA-OAEP | cap.7 di [PP], cap.15-16 di [S], articoli |
11 | implementazione dello scambio di chiavi DH: schema di base, sicurezza, ottimizzazioni, lavorare su un sottogruppo, studio delle prestazioni | cap.8 di [PP], cap.18 di [S], doc. Nettle, articoli |
12 | implementazione della cifratura Elgamal: schema di base, sicurezza, ottimizzazioni, attacco nel caso in cui si lavori in un sottogruppo, studio delle prestazioni | cap.8 di [PP], cap.16 di [S], articoli |
13 | funzioni hash e funzioni derivate: costruzioni MAC da hash, PBKDF2, derivare sotto-chiavi, supporto nella libreria Nettle, studio delle prestazioni | cap.11-12 di [PP], cap.14 di [S], doc.Nettle, articoli |
14 | implementazione della firma RSA: schema di base, sicurezza, ottimizzazioni, padding (PKCS#1 v1.5, EMSA-PSS) | cap.10 di [PP], cap.16 di [S], articoli |
15 | implementazione della firma Elgamal e di quella DSA: schemi di base, sicurezza, ottimizzazioni, attacchi notevoli | cap.10 di [PP], cap.16 di [S], articoli |
16 | modalità di cifratura a blocchi: ECB, CBC, CTR, padding PKCS#7, attacchi elementari, supporto nella libreria Nettle, studio delle prestazioni | cap.5 di [PP], cap.13 di [S], doc. Nettle |
17 | costruzioni per combinare autenticazione e cifratura: mac-and-encrypt, mac-then-encrypt, encrypt-them-mac, attacco a mac-then-encrypt di Vaudenay basato su oracolo di padding CBC (TLS), attacco a mac-and-encrypt al protocollo SSH | cap.13 di [S], articoli |
18 | modalità di cifratura autenticate: CCM, EAX, GCM, supporto nella libreria Nettle, studio delle prestazioni | doc. Nettle |
19 | implementazione di schemi su curve ellittiche con pairing: modello, sicurezza, libreria PBC, ottimizzazioni, scelta curve/pairing, implementazione delle firme digitali BLS, studio delle prestazioni | doc. PBC, articoli |
20 | implementazione di schemi su curve ellittiche senza pairing: caratteristiche, curve del NIST, curva 25519, supporto nelle librarie PBC e Nettle, implementazione dello scambio di chiavi DH su curve ellittiche, studio delle prestazioni | cap.8 di [PP], doc. PBC, articoli |
21 | attacchi basati sui side-channel: scenario generale, attacco basato su timing di RSA/DH/DSA di Kocher, attacco su timing di RSA di Schindler, attacco su timing remoto a RSA (OpenSSL) di Brumley-Boneh, attacchi basati sulla compressione dei dati cifrati, attacchi a SSL/TLS CRIME, TIME e BREACH | articoli |
22 | altri attacchi a SSL/TLS: attacco su IV predicibile in CBC-AES, attacco BEAST | articoli |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L'esame prevede l'assegnazione di un articolo scientifico in lingua originale allo studente: tale articolo conterrà tipicamente la proposta di uno o più schemi crittografici o attachi notevoli a schemi noti.
Lo studente, previo approfondimento dell'articolo limitatamente alle parti concordate (no dimostrazioni), dovrà:
- realizzare un progetto implementativo (usando gli strumenti e le tecniche viste a lezione) di alcuni schemi crittografici (o attacchi) contenuti nell'articolo stesso;
- sostenere un colloquio orale sui contenuti teorici visti a lezione.
La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.
Esempi di domande e/o esercizi frequenti
Esempi di assegnamenti per progetti passati sono disponibili su richiesta al docente.