Questa è la pagina archiviata del corso di Cryptographic Engineering per Informatica (magistrale) per l’a.a. 2019-2020. La pagina non è più aggiornata.
Indice
Informazioni generali
CFU: 6
ore: 48
anno: 2°
semestre: 1°
aula:
orario:
giorni:
inizio lezioni:
requisiti: conoscenza della teoria alla base della Crittografia Moderna, buone capacità di programmazione, conoscenza di base delle architetture delle moderne reti di calcolatori
propedeuticità: Crittografia
docente: Prof. Mario Di Raimondo
frequenza: fortemente consigliata
Obiettivi
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. 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.
Obiettivi formativi
Programma
- richiami: definizioni, nozioni di sicurezza, principali primitive
- richiami: gruppi, campi, gruppi ciclici, sottogruppi, generatori, teorema cinese del resto
- richiami: problemi difficili, logaritmo discreto, fattorizzazione, algoritmi di risoluzione
- introduzione alle curve ellittiche
- algoritmi per l’esponenziazione nei gruppi ciclici: square-and-multiply, a rango k, sliding window
- algoritmi per l’esponenziazione in casi particolari: moduli compositi, a esponente fisso, a base fissa, esponenziazioni multiple
- algoritmi per l’aritmetica a multi-precisione: addizione, moltiplicazione elementare, quadrato, Karatsuba, Toom-k (accenno), riduzioni e moltiplicazioni di Montgomery
- 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)
- 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
- 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
- implementazione dello scambio di chiavi DH: schema di base, sicurezza, ottimizzazioni, lavorare su un sottogruppo, studio delle prestazioni
- implementazione della cifratura Elgamal: schema di base, sicurezza, ottimizzazioni, attacco nel caso in cui si lavori in un sottogruppo, studio delle prestazioni
- funzioni hash e funzioni derivate: costruzioni MAC da hash, PBKDF2, derivare sotto-chiavi, supporto nella libreria Nettle, studio delle prestazioni
- implementazione della firma RSA: schema di base, sicurezza, ottimizzazioni, padding (PKCS#1 v1.5, EMSA-PSS)
- implementazione della firma Elgamal e di quella DSA: schemi di base, sicurezza, ottimizzazioni, attacchi notevoli
- modalità di cifratura a blocchi: ECB, CBC, CTR, padding PKCS#7, attacchi elementari, supporto nella libreria Nettle, studio delle prestazioni
- 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
- modalità di cifratura autenticate: CCM, EAX, GCM, supporto nella libreria Nettle, studio delle prestazioni
- implementazione di schemi su curve ellittiche con pairing: modello, sicurezza, libreria PBC, ottimizzazioni, scelta curve/pairing, implementazione delle firme digitali BLS, studio delle prestazioni
- 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
- 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
- altri attacchi a SSL/TLS: attacco su IV predicibile in CBC-AES, attacco BEAST
Il programma delinea in modo generico i contenuti trattati durante il corso: per ulteriori dettagli è consigliabile consultare le diapositive usate durante le lezioni.
Tutti i contenuti NON sottolineati sono da intendersi come facenti parte delle conoscenze minime richieste per il superamento dell’esame.
Risorse
Il materiale didattico utilizzato nell’a.a. passato è riconoscibile dal link barrato: durante l’anno questo potrebbe subire modifiche e aggiornamenti. Il materiale aggiornato che verrà man mano pubblicato sarà riconoscibile dal link non barrato.
- A.J. Menezes, P.C. van Oorschot, S.A. Vanstone
Handbook of Applied Cryptography
ISBN 978-0-8493-8523-0 - C. Paar, J. Pelzl
Understanding cryptography: a textbook for students and practitioners
ISBN 978-3-642-04101-3 - N.P. Smart
Cryptography Made Simple
ISBN 978-3-319-21935-6
Progetti
L’elenco degli articoli scientifici che possono essere oggetto del progetto degli studenti è fornito direttamente dal docente.Prove in Itinere passate
Gli studenti possono accedere al testo delle passate prove in itinere.Esame
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.
Lo studente sceglierà l’articolo scientifico a partire da una rosa di articoli segnalati dal docente; esiste anche la possibilità che lo studente proponga un tema pertinente. Le parti dell’articolo da includere nello studio e quali schemi implementare saranno concordati con il docente. Il progetto dovrà essere sviluppato e man mano caricato su un account git privato (preferibilmente Bitbucket): sul repository dovranno essere caricati tutti i sorgenti del progetto (no file compilati). I colloqui orali si potranno svolgere nelle date d’appello o in altre date da concordare con il docente.
Sono previste due prove in itinere sugli argomenti teorici trattati durante il corso: il loro superamento (anche parziale) garantisce l’esonero sugli argomenti associati durante il colloquio orale. Nel caso di superamento di entrambe le prove in itinere, non sarà necessario sostenere il colloquio orale e i voti ricevuti nelle prove andranno a fare media con la valutazione del progetto secondo la regola “progetto 60{96b1e551c0eb6b8642c23002f9641c21addce7adddff4232ab77094dde67ad16} + prima prova 20{96b1e551c0eb6b8642c23002f9641c21addce7adddff4232ab77094dde67ad16} + seconda prova 20{96b1e551c0eb6b8642c23002f9641c21addce7adddff4232ab77094dde67ad16}”.