Crittografia 2021/2022

Tutti gli studenti sono pregati di registrarsi sul canale Teams del corso


Ricevimento Studenti: Mercoledì 14-16 o per appuntamento.

Gli studenti che intendono venire in presenza al ricevimento sono pregati di avvisarmi entro due giorni prima.


Orario Lezioni: Martedì 16-18 (Aula 11), Mercoledì 17-19 (Aula 11)


Programma di massima: Definizione di crittosistema e primi esempi (cifrari additivi, a sostituzione, a trasposizione), cenni di crittoanalisi, cenni di complessità computazionale (algoritmi polinomiali ed esponenziali, complessità delle operazioni elementari e dell'algoritmo di Euclide); crittosistema RSA, test di primalità; elementi di teoria dei numeri ( Numeri di Carmichael, residui quadratici, legge di reciprocità quadratica, pseudoprimi di Eulero, pseudoprimi forti); test di Solovay-Strassen, test di Miller-Rabin; fattorizzazione, algoritmo p-1 di Pollard, algoritmo rho di Pollard; campi finiti e il logaritmo discreto; scambio della chiave di Diffie-Hellman; crittosistema di ElGamal; schemi di firma; curve ellittiche e applicazioni in crittografia (Diffie-Hellman-Merkle, Massey-Omura, ElGamal, Lenstra) .


Esercizi a casa:

Anche quest'anno il corso sarà arricchito da qualche esercizio ed esempio di codici in Python.

Vi saranno 6 fogli di esercizi facoltativi (alcuni dei quali richiedono l'uso di un computer) che potranno farvi totalizzare fino a 3 punti (da sommare al voto finale dell'esame, se sufficiente).


Testi di riferimento:

Baldoni, Ciliberto,Piacentini Cattaneo, "Aritmetica, Crittografia e Codici"

Fumagalli, Note del Corso di Crittografia, disponibili qui

Koblitz, "A course in number theory and cryptography"

Languasco, Zaccagnini, "Manuale di Crittografia"

Milne, "Elliptic Curves"

Silverman, Tate, "Rational Points on Elliptic Curves"

Ulteriore materiale:

Siete caldamente incoraggiati a implementare qualche programma in Python, un linguaggio open source (dunque completamente gratuito). Potete scaricare il programma da https://www.python.org/.

Potete trovare online vari editor per Python. Quello che uso io è la versione gratuita ("Community") di PyCharm. Potete scaricarlo da https://www.jetbrains.com/pycharm/download/#section=windows.

Pagina web del corso di "Cryptography and Code Theory! tenuto da Katherine E. Stange: http://crypto.katestange.net/

(approccio al materiale tramite utilizzo di Sage. Provate a risolvere le varie "Missions"!)

Qui troverete delle note scritte da me per il corso dello scorso anno. Tenete conto che sono informali e molto probabilmente contengono refusi.

Diario del corso:

  • 5 ottobre: Definizione di crittosistema e crittosistemi classici (di Cesare, additivo, a sostituzione, a blocchi affini lineari);

  • 6 ottobre: Elementi di teoria della complessità: lunghezza binaria, operazioni bit, costo computazionale del calcolo della somma/ differenza/ moltiplicazione/divisione con resto di due interi, costo computazionale dell'algoritmo di Euclide.

  • 12 ottobre: Crivello di Eratostene, Formula di Mertens (solo enunciato), costo del Crivello; Trial division algorithm, Teorema dei numeri primi (solo enunciato), costo del Trial division algorithm; Teorema di Wilson; richiamo degli enunciati del Teorema di Eulero e Piccolo Teorema di Fermat; pseudoprimi di Fermat (definizione, dimostrazione dell'esistenza di infiniti pseudoprimi di Fermat rispetto ad una qualunque base);

  • 13 ottobre: definizione di pseudoprimi di Carmichael; il gruppo moltiplicativo del gruppo ciclico di cardinalità una potenza di un primo dispari è ciclico.