LABORATORIO DI CRITTOGRAFIA

Anno accademico 2016/2017 - 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, 48 di lezione frontale
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.

Prerequisiti richiesti

requisiti: conoscenza della teoria alla base della Crittografia Moderna, buone capacità di programmazione, conoscenza di base dell'architettura delle reti di calcolatori

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 la pratica. Dopo aver introdotto gli strumenti implementativi, il corso propone uno studio dei principi di corretta realizzazione attraverso l'analisi di alcuni protocolli reali (standard contemporanei) e di attacchi crittografici effettivi.

Il corso prevede anche una parte teorica integrativa e di approfondimento su alcuni argomenti avanzati di Crittografia.


Testi di riferimento

(elenco provvisorio e non definitivo)

  • Alfred Menezes, Paul van Oorschot, Scott Vanstone: Handbook of Applied Cryptography
  • Jan Pelzl, Christof Paar: Understanding Cryptography: A Textbook for Students and Practitioners
  • Niels Ferguson, Bruce Schneier, Tadayoshi Kohno: Cryptographic Engineering

A lezione si farà inoltre riferimento a svariati articoli scientifici di volta in volta segnalati.



Programmazione del corso

 *ArgomentiRiferimenti testi
1*richiami: definizioni, nozioni di sicurezza, principali primitive 
2*richiami: gruppi, campi, gruppi ciclici, sottogruppi, generatori, teorema cinese del resto 
3*richiami: problemi difficili, logaritmo discreto, fattorizzazione, algoritmi di risoluzione  
4*introduzione alle curve ellittiche 
5*algoritmi per l'esponenziazione nei gruppi ciclici: square-and-multiply, a rango k, sliding window 
6*algoritmi per l'esponenziazione in casi particolari: moduli compositi, a esponente fisso, a base fissa, esponenziazioni multiple 
7*algoritmi per l'aritmetica a multi-precisione: addizione, moltiplicazione elementare, quadrato, Karatsuba, Toom-k (accenno), riduzioni e moltiplicazioni di Montgomery 
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) 
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 
10*implementazione della cifratura RSA: schema di base, sicurezza, ottimizzazioni, attacchi elementari, attacco basato sul parity oracle, attacco basato sul padding oracle (SSL), padding PKCS#1 v1.5, padding EME-OAEP, attacco a RSA-OAEP 
11*implementazione dello scambio di chiavi DH: schema di base, sicurezza, ottimizzazioni, lavorare su un sottogruppo, studio delle prestazioni 
12*implementazione della cifratura Elgamal: schema di base, sicurezza, ottimizzazioni, attacco nel caso in cui si lavori in un sottogruppo, studio delle prestazioni 
13*funzioni hash e funzioni derivate: costruzioni MAC da hash, PBKDF2, derivare sotto-chiavi, supporto nella libreria Nettle, studio delle prestazioni 
14*implementazione della firma RSA: schema di base, sicurezza, ottimizzazioni, padding (PKCS#1 v1.5, EMSA-PSS) 
15*implementazione della firma Elgamal e di quella DSA: schemi di base, sicurezza, ottimizzazioni, attacchi notevoli 
16*modalità di cifratura a blocchi: ECB, CBC, CTR, padding PKCS#7, attacchi elementari, supporto nella libreria Nettle, studio delle prestazioni 
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 
18*modalità di cifratura autenticate: CCM, EAX, GCM, supporto nella libreria Nettle, studio delle prestazioni 
19*implementazione di schemi su curve ellittiche con pairing: modello, sicurezza, libreria PBC, ottimizzazioni, scelta curve/pairing, studio delle prestazioni 
20*implementazione di schemi su curve ellittiche senza pairing: caratteristiche, curve del NIST, curva 25519, supporto nelle librarie PBC e Nettle, studio delle prestazioni 
21*attacchi basati su side-channel: scenario generale, attacco basato su timing di RSA/DH/DSA di Kochen, attacco su timing di RSA di Schindler, attacco su timing remoto a RSA (OpenSSL) di Brumley-Boneh 
* Conoscenze minime irrinunciabili per il superamento dell'esame.

N.B. La conoscenza degli argomenti contrassegnati con l'asterisco è condizione necessaria ma non sufficiente per il superamento dell'esame. Rispondere in maniera sufficiente o anche più che sufficiente alle domande su tali argomenti non assicura, pertanto, il superamento dell'esame.

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à:

  • tenere un piccolo seminario di 20-30 minuti in cui presenterà i contenuti dell'articolo assegnato;
  • 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 sulla propria presentazione, sul proprio progetto e sui contenuti visti a lezione.