Scheda del corso
Computer Algebra
Anno accademico: 2015/2016
Docente: Fabio Stumbo ([email protected])
Orario: Lunedì, ore 14-16, aula 3, Dipartimento di Matematica
Mercoledì, ore 16-18, aula 3, Dipartimento di Matematica
Inizio: Lunedì 28 settembre 2015
Termine: Mercoledì 16 dicembre 2015 (salvo eventuali recuperi)
Ricevimento studenti: tutti i giorni su appuntamento
Durata del corso: 48 ore di lezione frontale
Numero di crediti: 6
Modalità esame: Scritto (con orale opzionale)
Prerequisiti: Corso di algebra del primo anno
Obiettivo del corso: approfondire alcuni argomenti di algebra del corso del primo anno e
fornire esempi signicativi ed importanti di applicazioni (crittograa, teoria dei codici)
Testi di riferimento:
•
Prima e seconda parte: F. Stumbo, Computer Algebra, Ed. Aracne
•
Terza parte: F. Stumbo, Teoria dei Codici
Altri testi di riferimento:
•
J. von zur Gathen, J. Gerhard, Modern, Computer Algebra, Cambridge University
Press
•
L. N. Childs, A concrete introduction to higher algebra, UTM Springer
•
D. R. Stinson, Criptography, Theory and Practice, Chapman & Hall
•
N. K. Koblits, Algebraic Aspects of Criptography, ACM Springer
•
R. E. Blahut, Algebraic codes for data transmission, Cambridge
•
W. C. Human, V. Pless, Fundamentals of error-correcting codes, Cambridge
•
F. J. MacWilliams, N. J. A. Sloane, The theory of error-correcting codes, NorthHolland
Programma:
•
Prima Parte
◦
Preliminari algebrici:
·
·
·
·
·
·
·
·
•
Teorema di Eulero-Fermat.
Sistemi di congruenze.
Elementi primitivi.
Campi niti.
Radici dell'unità e classi ciclotomiche nei campi niti.
Complessità computazionale.
Notazione posizionale
Seconda parte
◦
Criptograa:
·
·
·
·
·
·
·
·
◦
◦
Successioni di Lehmer (numeri pseudocasuali).
Permutazioni e sostituzioni.
Codici di cifratura a sostituzione (mono- e polialfabetica) e a trasposizione.
Codice di Hill.
Codici a chiave privata: DES e AES.
Codici a chiave pubblica: RSA e ElGamal.
Funzioni di hash: SHA-1.
Firma digitale: DSA.
Fattorizzazione dei numeri interi:
·
·
·
Il crivello di Eratostene.
Algoritmi
(p − 1)
e
ρ
di Pollard per la fattorizzazione dei numeri interi.
Test di primalità: algoritmi di Miller-Rabin e AKS.
Fattorizzazione di polinomi:
·
·
·
•
Algoritmo euclideo (sui numeri interi e sui polinomi).
Algoritmo di Berlekamp per la fattorizzazione in
Zp [x].
Lemma di Hensel.
Fattorizzazione in
Q [x].
Terza Parte
◦
Teoria dei codici:
·
·
·
·
·
·
·
·
Distanza di Hamming.
Disuguaglianze di Hamming, Singleton e Gilbert-Varshamov.
Codici lineari, codici di Hamming.
Codici ciclici, codici BCH e codici di Reed-Solomon.
Codica e decodica.
Decodica a sindromi, decodica di Slepian.
Decodica di Meggitt nei codici ciclici.
Decodica nei codici BCH: algoritmi PGZ, Forney, Sugyiama e BerlekampMassey.
Descrizione dettagliata del corso
La computer algebra (algebra computazionale in italiano) è la disciplina che studia problemi matematici risolubili per via algoritmica, con particolare riguardo all'ecienza degli algoritmi
stessi e alla loro implementazione software.
Tale disciplina si è sviluppata con la comparsa delle macchine calcolatrici elettroniche: in
particolare, tali algoritmi vengono utilizzati per la costruzione di programmi di calcolo simbolico
(CAS, acronimo di Computer Algebra System ), nello sviluppo di software per la sicurezza
(crittograa), di software per le comunicazioni e la trasmissione di dati (codici autocorrettivi) e
in svariati altri ambiti.
Nel corso vediamo alcuni di questi algoritmi e alcune delle applicazioni pratiche, approfondendo gli argomenti algebrici necessari al loro sviluppo.
Descriviamo ora in modo più dettagliato gli argomenti che arontati, con collegamenti ad
alcune risorse in rete per poterli approfondire.
Nella prima parte del corso richiamiamo, approfondendoli, alcuni preliminari necessari che
riguardano le varie proprietà degli interi e dei polinomi: si tratta soprattutto di proprietà che
derivano dal fatto che tanto l'anello degli interi quanto l'anello dei polinomi sono due casi di
anello euclideo.
In particolare, siamo interessati alla divisione euclidea sia nei numeri che nei polinomi: grazie
al fatto che è possibile eettuare tale divisione, si può eettuare l'algoritmo euclideo per il calcolo
del massimo comun divisore.
Di solito si usa la versione estesa di tale algoritmo, dato che permette di calcolare anche
l'identità di Bézout, di fondamentale importanza nelle applicazioni: per esempio, nell'aritmetica
modulare permette di dimostrare e trovare la soluzione del Teorema cinese del resto.
Anche lo studio del gruppo moltiplicativo degli interi modulo
n e dei suoi principali risultati,
come il piccolo Teorema di Fermat ed il Teorema di Eulero si rivelano fondamentali per molte
applicazioni.
Un altro utile algoritmo è l'algoritmo square and multiply, che permette di calcolare velocemente le potenze grandi di un numero modulo un altro.
Altre proprietà dei numeri che richiamiamo sono quelle relative alla notazione posizionale.
Inne, un altro ingrediente fondamentale nella computer algebra è dato dai campi niti.
Una prima applicazione la possiamo vedere nella generazione di numeri pseudocasuali, dove,
tra gli altri, vediamo due algoritmi: uno è il generatore di Lehmer, molto veloce ed usato in
programmi generici, un altro è il generatore Blum Blum Shub, più lento del precedente ma
adatto all'utilizzo anche da parte dei programmi di crittograa.
L'ecienza degli algoritmi è studiata nella vasta area della complessità computazionale: ci
limitiamo ad arontare le prime nozioni sul tempo di esecuzione di un algoritmo. Per ciò torna
utile la notazione O-grande, che permette una prima classicazione del tempo di esecuzione di
un algoritmo in tempo polinomiale e tempo esponenziale.
Nella seconda parte del corso parliamo di crittograa e delle problematiche che questa disciplina solleva in ambito matematico.
Una breve introduzione storica ci permette di denire cosa è un cifrario classsico ed operare
una prima suddivisione in cifrari a sostituzione, cifrari a sostituzione polialfabetica, e cifrari a
trasposizione, che costituiscono le componenti essenziali di qualsiasi cifrario.
I primi esempi si hanno con il cifrario di Cesare (a sostituzione monoalfabetica, per di più
senza chiave) ed il cifrario di Vigenère (a sostituzione polialfabetica); anche il famigerato Enigma
usato dai tedeschi durante la seconda guerra mondiale rientra nella classe dei cifrari a sostituzione
polialfabetica, così come il cifrario perfetto (one-time pad).
Con il cifrario di cifrario di Hill per la prima volta viene usata una funzione matematica per
generare la sostituzione delle lettere.
I moderni cifrari, oltre ad usare chi più chi meno la matematica per generare le sostituzioni,
spesso sono basati su uno schema di Feistel o su uno schema simile a questo. Un esempio è il DES,
largamente usato no agli inizi del XXI secolo, che però ha lasciato il posto al suo successore,
l'AES, che usa le operazioni nel campo nito con 256 elementi per generare le sostituzioni e le
trasposizioni necessarie.
Questi sono tutti esempi di cifrari simmetrici; con l'avvento delle comunicazioni elettroniche
sono nate nuove esigenze e problematiche che hanno portato allo sviluppo di nuovi tipi di cifrari,
come i cifrari asimmetrici. L'esempio forse più famoso di cifrario asimmetrico è il cifrario RSA;
un altro esempio importante è il cifrario ElGamal:
utilizzando questo e le funzioni hash (in
paricolare una delle funzioni della famiglia SHA), si può scrivere un protocollo di rma digitale
come il DSA.
Negli algoritmi di crittograa, in particolare in quella a chiave pubblica, intervengono in modo
massiccio numeri primi e le varie proprietà fattorizzazione dei numeri interi; tra i vari problemi
che è necessario arontare, ne consideriamo due: stabilire se un numero è primo e fattorizzare un
numero. Chiaramente una soluzione al problema della fattorizzazione permette anche di sapere
se un numero è primo o no ma il viceversa, in generale, non è vero.
Per il primo problema, la soluzione va ricercata in un test di primalità: si va dall'antico, ed
ineciente, crivello di Eratostene no ai più moderni test di Miller-Rabin e test AKS. Di questi
due il primo è più veloce ma è probabilistico mentre il secondo è deterministico però è un po'
più lento, anche se il tempo resta comunque polinomiale.
Per quel che riguarda la fattorizzazione, due algoritmi interessanti sono l'algoritmo
Pollard e l'algoritmo
p−1
ρ
di
di Pollard.
Un altro argomento centrale nella computer algebra è quello della fattorizzazione di polinomi
in una o più variabili.
Noi arontiamo solo il problema in una variabile: il problema in più
variabili è molto vasto ed è l'oggetto di studio delle basi di Groebner.
Nel caso dei polinomi in una variabile arontiamo prima i polinomi a coecienti in un campo
nito
Fp ,
dove esistono vari algoritmi di fattorizzazione: tra tali algoritmi studiamo in dettaglio
l'algoritmo di Berlekamp; dopo aver dimostrato il lemma di Hensel vediamo come ottenere,
tramite questi due risultati, la fattorizzazione di un polinomio di
Q [x].
Nella terza parte del corso, studiamo la teoria dei codici ed i codici autocorrettivi.
Iniziamo introducendo il concetto di distanza di Hamming e peso di Hamming e determinando
alcune importanti disuguaglianze, come per esempio la disuguaglianza di Singleton, quella di
Hamming e quella di Gilbert-Varshamov.
Introduciamo anche il concetto di enumeratore di
peso, con le relative identità di MacWilliams.
Partendo dall'esempio di particolare importanza sia storica che teorica dato dal codice di
Hamming, ci concentriamo sullo studio dei codici lineari e sulla loro decodica: in particolare,
la decodica a sindrome.
Aumentando la struttura algebrica soggiacente un codice siamo condotti ai codici ciclici. All'interno di questa famiglia vi sono sottofamiglie (codici BCH, codici Reed-Solomon) di particolare
importanza nelle applicazioni. Per la famiglia di codici BCH, analizziamo alcuni importanti algoritmi di decodica: l'algoritmo PGZ, l'algoritmo di Forney, l'algoritmo di Sugyiama ed inne
l'algoritmo di Berlekamp-Massey.