CRYPTOGRAPHIC ENGINEERING

Anno accademico 2019/2020 - 2° anno - Curriculum Sistemi di Rete e Sicurezza
Docente: Mario DI RAIMONDO
Crediti: 6
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.


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

  • Alfred Menezes, Paul van Oorschot, Scott Vanstone: Handbook of Applied Cryptography
  • Christof Paar, Jan Pelzl: Understanding Cryptography: A Textbook for Students and Practitioners
  • 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 primitive 
2richiami: gruppi, campi, gruppi ciclici, sottogruppi, generatori, teorema cinese del resto 
3richiami: problemi difficili, logaritmo discreto, fattorizzazione, algoritmi di risoluzione  
4introduzione alle curve ellittiche 
5algoritmi per l'esponenziazione nei gruppi ciclici: square-and-multiply, a rango k, sliding window 
6algoritmi per l'esponenziazione in casi particolari: moduli compositi, a esponente fisso, a base fissa, esponenziazioni multiple 
7algoritmi per l'aritmetica a multi-precisione: addizione, moltiplicazione elementare, quadrato, Karatsuba, Toom-k (accenno), riduzioni e moltiplicazioni di Montgomery 
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) 
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-piattaforma 
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-OAEP 
11implementazione dello scambio di chiavi DH: schema di base, sicurezza, ottimizzazioni, lavorare su un sottogruppo, studio delle prestazioni 
12implementazione della cifratura Elgamal: schema di base, sicurezza, ottimizzazioni, attacco nel caso in cui si lavori in un sottogruppo, studio delle prestazioni 
13funzioni hash e funzioni derivate: costruzioni MAC da hash, PBKDF2, derivare sotto-chiavi, supporto nella libreria Nettle, studio delle prestazioni 
14implementazione della firma RSA: schema di base, sicurezza, ottimizzazioni, padding (PKCS#1 v1.5, EMSA-PSS) 
15implementazione della firma Elgamal e di quella DSA: schemi di base, sicurezza, ottimizzazioni, attacchi notevoli 
16modalità di cifratura a blocchi: ECB, CBC, CTR, padding PKCS#7, attacchi elementari, supporto nella libreria Nettle, studio delle prestazioni 
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 SSH 
18modalità di cifratura autenticate: CCM, EAX, GCM, supporto nella libreria Nettle, studio delle prestazioni 
19implementazione di schemi su curve ellittiche con pairing: modello, sicurezza, libreria PBC, ottimizzazioni, scelta curve/pairing, implementazione delle firme digitali BLS, studio delle prestazioni 
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 prestazioni 
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 BREACH 
22altri attacchi a SSL/TLS: attacco su IV predicibile in CBC-AES, attacco BEAST 

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 sul proprio progetto e sui contenuti visti a lezione.

Esempi di domande e/o esercizi frequenti

Esempi di assegnamenti per progetti passati sono disponibili su richiesta al docente.