Crypto Engineering


Questa รจ la pagina del corso di Crypto Engineering (ex Laboratorio di Crittografia) per Informatica (magistrale) per l’a.a. 2018-2019. I contenuti sono sincronizzati con quelli riportati sulla piattaforma d’Ateneo Studium. Sono ancora disponibili le pagine dei corsi tenuti negli a.a. passati.


CFU: 6   ore: 48
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
anno:
semestre: 1°
docente: Prof. Mario Di Raimondo
frequenza: fortemente consigliata

aula: 23
orario: 11 - 13
giorni: lunedì - giovedì
inizio lezioni: lunedì 1 Ottobre 2018


Comunicazioni

Tutti gli avvisi relativi al corso saranno sempre pubblicati sulla piattaforma Studium e, per comodità, replicati automaticamente all'interno della pagina del corso sul sito del docente. E' possibile utilizzare le applicazioni Android/iOS/WP di Studium per ricevere tempestivamente le relative notifiche. Per qualunque altra questione (non coperta già dalle FAQ) è possibile contattare il docente per email.

Avvisi

Calendario e ricevimento

Nel calendario ufficiale del corso sono indicate le date delle lezioni, gli incontri per il ricevimento degli studenti e gli appelli d'esame.

L'eventuale spostamento di una lezione sarà sempre segnalato attraverso un apposito avviso. Ciò vale anche per il posticipo di una data d'appello: in questi casi sul portale CEA, a causa di limiti imposti dalla piattaforma, non sarà possibile aggiornare la data  e, pertanto, il dato a cui fare fede sarà sempre quello che compare nel calendario ufficiale del corso su questa pagina. Per quanto riguarda il ricevimento, questo potrebbe subire cambiamenti senza espliciti avvisi: gli studenti interessati sono pertanto invitati a controllare il calendario sistematicamente.


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

  • 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 preso dalla letteratura scientifica. 
  • 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 scientifico pertinente 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.

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


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 sul proprio progetto e sui contenuti 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 (esempio: 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, il colloquio orale verterà solo sulla parte progettuale e i voti ricevuti nelle prove andranno a fare media con la valutazione del progetto secondo la regola "progetto 60% + prima prova 20% + seconda prova 20%".

Domande frequenti (FAQ – Frequently Asked Questions)

(nessuna)