CRYPTOGRAPHIC ENGINEERING

Anno accademico 2021/2022 - 2° anno - Curriculum Sistemi di Rete e Sicurezza
Docente: Mario DI RAIMONDO
Crediti: 6
SSD: INF/01 - Informatica
Organizzazione didattica: 150 ore d'impegno totale, 102 di studio individuale, 24 di lezione frontale, 24 di esercitazione
Semestre:

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

 ArgomentiRiferimenti testi
1richiami: definizioni, nozioni di sicurezza, principali primitivecorso Crittografia, cap.11 di [S] 
2richiami: gruppi, campi, gruppi ciclici, sottogruppi, generatori, teorema cinese del restocorso Crittografia, cap.8 di [PP], cap.1-2 di [S] 
3richiami: problemi difficili, logaritmo discreto, fattorizzazione, algoritmi di risoluzione corso Crittografia, cap.8 di [PP], cap.2-3 di [S] 
4introduzione alle curve ellittichecap.9 di [PP], cap.4 di [S] 
5algoritmi per l'esponenziazione nei gruppi ciclici: square-and-multiply, a rango k, sliding windowcap.6 di [S], cap.14.6 di [AvOV] 
6algoritmi per l'esponenziazione in casi particolari: moduli compositi, a esponente fisso, a base fissa, esponenziazioni multiplecap.7 di [PP], cap.6 di [S], cap.14.6 di [AvOV] 
7algoritmi per l'aritmetica a multi-precisione: addizione, moltiplicazione elementare, quadrato, Karatsuba, Toom-k (accenno), riduzioni e moltiplicazioni di Montgomerycap.6 di [S], cap.14.6 di [AvOV] 
8campionamento 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 
9libreria 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-piattaformacap.6 di [S], doc. GMP 
10implementazione 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-OAEPcap.7 di [PP], cap.15-16 di [S], articoli 
11implementazione dello scambio di chiavi DH: schema di base, sicurezza, ottimizzazioni, lavorare su un sottogruppo, studio delle prestazionicap.8 di [PP], cap.18 di [S], doc. Nettle, articoli 
12implementazione della cifratura Elgamal: schema di base, sicurezza, ottimizzazioni, attacco nel caso in cui si lavori in un sottogruppo, studio delle prestazionicap.8 di [PP], cap.16 di [S], articoli 
13funzioni hash e funzioni derivate: costruzioni MAC da hash, PBKDF2, derivare sotto-chiavi, supporto nella libreria Nettle, studio delle prestazionicap.11-12 di [PP], cap.14 di [S], doc.Nettle, articoli 
14implementazione della firma RSA: schema di base, sicurezza, ottimizzazioni, padding (PKCS#1 v1.5, EMSA-PSS)cap.10 di [PP], cap.16 di [S], articoli 
15implementazione della firma Elgamal e di quella DSA: schemi di base, sicurezza, ottimizzazioni, attacchi notevolicap.10 di [PP], cap.16 di [S], articoli 
16modalità di cifratura a blocchi: ECB, CBC, CTR, padding PKCS#7, attacchi elementari, supporto nella libreria Nettle, studio delle prestazionicap.5 di [PP], cap.13 di [S], doc. Nettle 
17costruzioni 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 SSHcap.13 di [S], articoli 
18modalità di cifratura autenticate: CCM, EAX, GCM, supporto nella libreria Nettle, studio delle prestazionidoc. Nettle 
19implementazione di schemi su curve ellittiche con pairing: modello, sicurezza, libreria PBC, ottimizzazioni, scelta curve/pairing, implementazione delle firme digitali BLS, studio delle prestazionidoc. PBC, articoli 
20implementazione 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 prestazionicap.8 di [PP], doc. PBC, articoli 
21attacchi 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 BREACHarticoli 

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; lo studente che superasse con sufficienza le due prove (scritte) in itinere sarà dispensato da tale colloquio.

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.