Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
s. Leonesi, C. Toffalori
Numeri e Crittografia
~ Springer
S. LEONESI
Dipartimento di Matematica e Informatica
Facoltà di Scienze e Tecnologie
Università di Camerino, Camerino
C. TOFFALORI
Dipartimento di Matematica e Informatica
Facoltà di Scienze e Tecnologie
Università di Camerino, Camerino
springer.it
ISBN lO 88-470-0331-8
ISBN 13 978-88-470-0331-6
Quest'opera è protetta dalla legge sul diritto d'autore. Tutti i diritti, in particolare quelli relativi alla tradu-
zione, alla ristampa, all'uso di figure e tabelle, alla citazione orale, alla trasmissione radiofonica o televisiva,
alla riproduzione su microfIlm o in database, alla diversa riproduzione in qualsiasi altra forma (stampa o
elettronica) rimangono riservati anche nel caso di utilizzo parziale. Una riproduzione di quest'opera, oppu-
re di parte di questa, è anche nel caso specifico solo ammessa nei limiti stabiliti dalla legge sul diritto d'au-
tore, ed è soggetta all'autorizzazione dell'Editore. La violazione delle norme comporta sanzioni previste dalla
legge.
I:utilizzo di denominazioni generiche, nomi commerciali, marchi registrati, ecc., in quest'opera, anche in
assenza di particolare indicazione, non consente di considerare tali denominazioni o marchi liberamente
utilizzabili da chiunque ai sensi della legge sul marchio.
2 Primi e Composti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 27
2.1 Divisori, resti e quozienti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 27
2.2 Una parentesi computazionale. . . . . . . . . . . . . . . . . . . . . . . . . . . .. 31
2.3 Il Teorema Fondamentale dell'Aritmetica ................... 33
2.4 Il Teorema dei Numeri Primi .............................. 37
2.5 Riconoscere i Primi? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 41
2.6 Generare i Primi ........................................ 42
2.7 Numeri e Misteri ........................................ 47
L'Aritmetica, o Teoria dei Numeri, è una delle discipline più antiche della
Matematica. I numeri che tratta sono quelli che si chiamano naturali 0, 1, 2,
... e che adoperiamo sin da bambini per contare. Apparentemente semplici
e innocui, nascondono tuttavia alcuni dei misteri più difficili e appassionanti
dell'intera Matematica.
La Crittografia si interessa invece di nascondere a occhi indiscreti il contenu-
to di comunicazioni riservate. Corrisponde a esigenze largamente diffuse nella
nostra società; infatti la possibilità di usare strumenti telematici per acqui-
sti, o per transazioni di denaro, o addirittura per esprimere il voto elettorale,
richiede protocolli capaci di garantire la segretezza dei dati trasmessi e la pri-
vacy personale.
La Teoria dei Numeri può soccorrere la Crittografia in queste sue esigenze;
proprio grazie ai misteri che ancora la avvolgono, riesce a fornire idee e stra-
tegie per la architettura di protocolli di sicurezza.
Il libro che presentiamo dà resoconto di questo collegamento. Introduce dap-
prima la Crittografia moderna, i suoi obiettivi, le sue priorità, le sue necessità.
Passa poi a esporre argomenti di Teoria dei Numeri, con particolare riferimen-
to ai due problemi di riconoscere i numeri primi, e di decomporre un naturale
nei suoi fattori primi; per ognuna delle due questioni fornisce un vasto pa-
norama degli algoritmi che la trattano e cercano di risolverla nel modo più
efficiente possibile. In particolare presenta la recentissima procedura AK S per
riconoscere i numeri primi.
Il libro torna poi alla Crittografia e mostra come idee e metodi di Teoria dei
Numeri si applichino alla costruzione di procedure affidabili per la trasmissio-
ne sicura delle informazioni riservate.
Gli argomenti trattati corrispondono dunque in modo naturale a un corso
del terzo anno di una Laurea Triennale in Matematica, o del successivo bien-
nio della Laurea Specialistica. Può interessare e coinvolgere anche studenti di
Informatica. Del resto, il libro deriva direttamente da esperienze didattiche
svolte per vari anni nell'Università di Camerino. Alcuni colleghi di altre sedi
VIII Introduzione
que di fronte alla difficoltà non solo di ricavame la chiave (in effetti, tecniche
raffinate di analisi di frequenza già permettevano questo obiettivo prima della
guerra), ma anche e soprattutto di farlo in tempi rapidi, prima che la chiave
stessa perdesse la sua validità e comunque in tempo per salvare il convoglio in
navigazione. I loro sforzi, coordinati da un grande matematico del Novecento,
Alan Thring, riuscirono alla fine nell'impresa, ed il loro successo contribuì al-
l'esito del conflitto, almeno alla battaglia navale nell' Atlantico. Recenti libri e
pellicole cinematografiche descrivono in modo romanzato questi accadimenti.
Ma al di là del contributo di Turing e del suo impegno in tempi di guerra, ci
si potrebbe ragionevolmente chiedere a questo punto: che cosa c'entra la Ma-
tematica in tutto questo? Quale legame può mai stringerla alla Crittografia?
Una prima superficiale relazione si può avvertire nel modo stesso di scrivere i
messaggi. In effetti, se le lettere di un alfabeto possono essere cifrate con sim-
boli arbitrari, ed anche con pupazzi (del resto, gli stessi geroglifici sono simboli
di alfabeto), perché non rappresentarle addirittura come numeri naturali? A
diventerebbe 0, B diventerebbe 1, e così via, fino a Z che, se accettiamo l'alfa-
beto della lingua scientifica oggi imperante, e cioè l'inglese, corrisponderebbe
a 25; se poi vogliamo qualche ulteriore numero per cifrare i simboli di pun-
teggiatura (punti, virgole, pause, etc.) possiamo accomodarci, ed usare tutti
i numeri che vogliamo, tanto il serbatoio dei numeri naturali è infinito: così
uno spazio vuoto può avere codifica 26, una virgola 27, e via dicendo. Se però
ci limitiamo alle 26 lettere abbiamo il seguente vocabolario di traduzione:
00 01 02 03 04 05 06 07 08 09 lO 11 12
A B C D E F G H I J K L M
13 14 15 16 17 18 19 20 21 22 23 24 25
NOPQRSTUVWXYZ
Come già detto nel precedente paragrafo, possiamo convenire che tutti i mes-
saggi, tanto quelli originali quanto quelli cifrati, siano scritti con un alfabeto
composto dai numeri O, 1, 2, ... , 24, 25 (ed eventualmente 26, 27, 28, 29, ...
se vogliamo anche utilizzare simboli di punteggiatura come lo spazio vuoto,
la virgola, il punto, il punto interrogativo e così via). Se ci limitiamo a 26
simboli, allora ognuna delle 26! permutazioni su questi 26 oggetti diviene la
base di un possibile criptosistema. Ad esempio, nel caso di Cesare descritto
nello scorso paragrafo, la codifica è data dalla funzione i che ad ogni numero
x tra O e 25 associa l'intero
Così la chiave del sistema è data, per quanto riguarda la codifica, dalla coppia
(a, b), e per la decodifica da (a', b'). Si noti però che è rapido computare una
della due coppie sapendo l'altra perché è facile ottenere
6 1 Dalla Crittografia ai Numeri
Esempi 1.2.2
1. Supponiamo N = 26. Immaginiamo che un pirata intercetti un messaggio
cifrato (in inglese) abbastanza lungo ed osservi che i simboli che vi com-
paiono più frequentemente siano, nell'ordine, 9 (cioè J) e 3 (dunque D). Il
pirata può avventurarsi a congetturare che il criptosistema utilizzato sia
uno di quelli appena descritti, per opportuni (e sconosciuti) a e b; sapen-
do che le lettere più comuni della lingua inglese sono, nell'ordine, E (di
etichetta 4) e T (di etichetta 19), può dedurne che J cifra E e D cifra T,
e dunque, in conclusione, affrontare le due equazioni
15a == -6 == 20(mod26).
Così gli basta osservare che 15 è primo con 26 e calcolare, ancora con un po'
di confidenza con la teoria elementare dei numeri, l'inverso di 15 modulo
26, cioè 7 (infatti 15·7 = 105 == 1 (mod26)) per concludere anzitutto che
15a == -6 == 21(mod27).
Il problema è che 15 non è primo con 27, perché il loro massimo comune
divisore è 3. Per fortuna anche il termine noto -6 è multiplo di 3; del
resto, se non lo fosse, l'equazione sarebbe impossibile ed il pirata dovrebbe
rivedere tutte le sue congetture. Dividendo per 3 otteniamo allora
5a == -2 (mod9)
da cui, sapendo che l'inverso di 5 modulo 9 è 2 (infatti 5 . 2 = 10 ==
1 (mod9)), si deduce a == -4 == 5 (mod9). Ritornando alla base 27 si
ricavano tre possibili valori per a
a == 5, 14,23 (mod27)
e conseguentemente per b. A questo punto la Matematica termina il suo
ruolo, ma il pirata può provare a decifrare le tre possibili corrisponden-
ti versioni del messaggio e vedere quale delle tre ha senso compiuto (o
maggior senso compiuto, in confronto ad altre possibili informazioni).
Discutiamo adesso alcune possibili variazioni sul precedente tema. Anzitutto,
non c'è nessun obbligo di cifrare il messaggio originale simbolo per simbolo.
Possiamo quindi adottare unità di messaggio composte da più simboli, ad
esempio digrafi, e cioè parole composte da due lettere: infatti, se per caso il
messaggio ha un testo di lunghezza dispari incompatibile con questa opzione,
basta accrescerlo di un simbolo muto prefissato per adattarlo. Quindi ogni
unità di messaggio è una coppia ordinata (x, y) di naturali, sempre da inten-
dersi modulo la cardinalità N dell'alfabeto. La coppia può essere comunque
codificata come
p == N . x + y (mod N 2 ),
infatti N . x + Y è un intero compreso tra O e N 2 - 1 e permette il recupero
degli originari x e y rispettivamente come quoziente e resto della sua divisione
per N. Così facendo, le strategie già descritte per cifrare e decifrare si possono
nuovamente applicare, con l'unica accortezza di lavorare modulo N 2 •
Esempio 1.2.3 Supponiamo N = 26 e dunque N 2 = 676. Cifriamo assumen-
do a = 15, che è primo con 676, e b = 48, dunque ponendo, per ogni naturale
p compreso tra 1 e 676,
8 1 Dalla Crittografia ai Numeri
26· 0+20,
ne segue che, in conclusione, il digrafo che cripta (13, 14) è (O, 20).
Va comunque rilevato che, anche nel caso dei digrafi o di unità di messaggio
ancora più lunghe, la analisi di frequenza costituisce tecnica vincente per
infrangere questi criptosistemi. Anzi, può essere utile notare che, nel caso dei
digrafi, la seconda componente della coppia cifrata dipende solo dalla seconda
componente della coppia originale e non, come ci si aspetterebbe, dall'intero
digrafo originale. Infatti, se p etichetta il digrafo di partenza, si ha
y' == ay + b (modN)
che sottolinea, appunto, la dipendenza di y' solo da y.
Un'altra strategia matematica per rappresentare e criptare digrafi (o anche
unità di messaggio di lunghezza 2: 2) fa ricorso alle matrici. Consideriamo
infatti un generico digrafo e la corrispondente coppia (x, y) di interi tra
1 e N. Possiamo intendere quest'ultima come un vettore colonna (~) e
conseguentemente organizzare il seguente cripto sistema.
A= (~ ~)
inverti bile modulo N, e poi sommando per un dato vettore colonna E =
(; ); la codifica avviene dunque tramite la funzione f tale che, per ogni
( sd
-se
-Sb)
sa
O ~ x, y <N
a'
dove A' = ( c' d' · ·Inversa d· (ac db) e
bI) e,, appunt o, la matnce l
I
E =
( e )
l'
'
= -
( a'c' bI)
d'
(e)
f·
La matrice A' = (
a' bI) e il vettore colonna E' = (;:) costituiscono
c' d'
la chiave di decodifica.
lO 1 Dalla Crittografia ai Numeri
Esempio 1.2.4 Sia N = 26, dunque N non è primo e l'anello delle classi di
resti modulo N, Z/NZ, non è un campo. Comunque la matrice
bi) ,
di EI = (el'/).
Si noti che, anche in questo caso, il calcolo di A' A E' A E
da e di da ed
- o viceversa - è computazionalmente rapido, ed è dunque indifferente per il
pirata, in linea di principio, ottenere la chiave di codifica o quella di decodifica.
Ebbene, opportuni adattamenti dei procedimenti di crittoanalisi già descritti
nel caso di unità di messaggio composte da un unico simbolo permettono, in
presenza di opportune informazioni, il recupero delle due chiavi.
I cripto sistemi sin qui considerati si basano su una permutazione rigida dei
simboli dell'alfabeto, o comunque delle unità di messaggio; ad esempio, nel
caso di Giulio Cesare, il numero che rappresenta una data lettera
• è cifrato addizionandogli 3,
• è decifrato sottraendogli 3.
metà del cinquecento e cui già si è accennato nel paragrafo 1, cerca di ovviare
a questi difetti e raffina e complica conseguentemente il procedimento di co-
difica e decodifica, garantendogli maggiore impermeabilità ai tentativi di C.
Propone infatti di cifrare mediante una permutazione delle lettere che non è
più costante ma varia in relazione alla loro posizione nel messaggio. In altre
parole, A e B concordano preventivamente una parola, ovvero una stringa di
numeri naturali minori della cardinalità N dell'alfabeto (ad esempio 14, 7, 8)
e la fissano come chiave, dopo di che
o 1 2 3 4 5 6
O O 1 2 3 4 5 6
1 1 2 3 4 5 6 O
2 2 3 4 5 6 O 1
3 3 4 5 6 O 1 2
4 4 5 6 O 1 2 3
5 5 6 O 1 2 3 4
6 6 O 1 2 3 4 5
Esempi 1.3.1
1. Supponiamo che, per N = 7, quindi in riferimento alla precedente tavola
additiva, A e B concordino preventivamente la stringa chiave 2, 1, 6, 4
e che A voglia trasmettere a B il messaggio 3, 2, 4, 5, 0, 1. Adoperando
12 1 Dalla Crittografia ai Numeri
2 + 1 = 3, 4 + 6 = 3, 5 + 4 = 2, 0+2 = 2, 1 + 1 = 2,
Si noti che il ricorso alla tabella additiva modulo N prescinde dalla scelta della
stringa chiave, che può essere anzi cambiata caso per caso. Anzi, si possono im-
maginare criptosistemi in cui le permutazioni adoperate per cifrare e associate
ai simboli della stringa chiave non corrispondano necessariamente a semplici
traslazioni (cioè addizioni). Basterà infatti preparare ancora anticipatamente
una tabella N x N in cui
• le righe corrispondano ai simboli da cifrare,
• le colonne corrispondano ai simboli della stringa chiave e riportino, riga
per riga, come permutare il simbolo relativo.
In questo ambito esteso le operazioni di codifica e decodifica non si svolgono
più tramite addizioni o sottrazioni, ma giocando ancora con gli incroci di righe
e colonne alla maniera sopra illustrata.
Ad esempio, per N = 7 consideriamo la tabella seguente.
1.3 Esistono Criptosistemi Perfetti? 13
O 1 2 3 4 5 6
O 1 O 2 4 5 O 6
1 2 4 6 O 1 2 5
2 3 1 3 6 3 4 O
3 6 2 1 2 O 6 4
4 4 5 4 3 2 1 3
5 5 3 O 5 6 3 2
6 O 6 5 1 4 5 1
Gli incroci tra righe e colonne non corrispondono più ad addizioni, ma ogni
colonna ci dice ancora come permutare i simboli di una riga. Così, se A deve
ancora trasmettere a B il messaggio 3, 2, 4, 5, O, 1 con la chiave 2, 1, 6, 4,
stavolta lo codifica come 1, 1, 3, 6, 2, 4.
Ritorniamo comunque al caso delle addizioni e sottrazioni e delle corrispon-
denti tabelle additive modulo N. Il lettore avrà osservato come, in questo
ambito, decodificare (cioè sottrarre) risulti lievemente più laborioso che codi-
ficare (ovvero sommare). Ma N = 2 permette qualche semplificazione a que-
sto proposito. Il motivo è che, quando si opera modulo 2, sottrarre equivale a
sommare, infatti
O + O = O, 1 + 1 = O
e quindi ogni naturale y soddisfa y + y == O(mod2). Di conseguenza, se un
simbolo x E {O, l} viene cifrato tramite y e quindi diviene x' = x + y modulo
2, allora la decodifica da x' a x avviene ancora sommando per y, poiché
x' + y = (x + y) + y = x + (y + y) = x + 0= x.
Va poi rilevato che la scelta N = 2 non è poi così parziale e ristretta. Infatti
qualunque naturale si può scrivere nella sua rappresentazione binaria, cioè
rispetto alla base 2, come stringa di O e 1: allora
O, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...
diventano
O, 1, lO, 11, 100, 101, 110, 111, 1000, 1001, ...
Ritorniamo comunque a commentare in generale il sistema di Vigenère. Anche
se più raffinato rispetto a quelli di Cesare e Holmes, ha tuttavia i suoi punti
deboli. Infatti la ripetitività della parola chiave può consentire a C, nel caso di
messaggi molto lunghi, un qualche spiraglio per la crittoanalisi di frequenza.
Come precauzione, si può operare un ricambio frequente della parola chiave,
tanto più che, fissato N, la stessa tabella additiva continua a sovrintendere
ogni nuova sequenza concordata. Ma già sappiamo che la crittoanalisi può ag-
girare questa misura di prudenza, come la storia di Enigma e Turing riferita
nel primo paragrafo ci dimostra.
Maggiore sicurezza e conseguente resistenza ai tentativi di violazione si può
14 1 Dalla Crittografia ai Numeri
x= 1001010110101
y = 0010101101011,
x' = 1011111011110.
Possiamo adesso definire che cosa si intende per criptosistema perfetto (cioè
sicuro da tentativi di violazione).
16 1 Dalla Crittografia ai Numeri
Negli anni più recenti, l'avvento dei moderni calcolatori e le crescenti capacità
computazionali che ne derivano hanno aperto anche alla Crittografia nuove
prospettive e nuovi campi di interesse. Ricordiamo infatti due ovvie caratteri-
stiche della Crittografia Classica (quella di Giulio Cesare, Vigenère e Vernam,
per intenderci):
1. c'è una chiave di cifratura, che i corrispondenti devono preventivamente
scambiarsi (come il numero 3 nell'esempio di Cesare);
2. sapere come si cifra (traslando di 3 lettere, nell'esempio) equivale a sapere
come si decifra (traslando di 3 lettere nel senso opposto).
Ma queste proprietà si rivelano altrettanto ostacoli e difetti rispetto alle nuo-
ve esigenze della Crittografia Moderna. Quali sono infatti i nuovi obiettivi
cui la nuova Crittografia deve far fronte? Vediamo un esempio. Tra le nuove
possibilità che Internet consente, c'è quella di operare acquisti direttamente
in rete, pagando con la semplice trasmissione delle coordinate della propria
carta di credito. Naturalmente questo genere di transazioni richiede una ovvia
riservatezza, che nasconda il numero della carta ad occhi indiscreti. Come si
possono cifrare queste informazioni? Certamente non con i codici classici.
1. Utilizzare una sola chiave, e comunque trasmetterla ai tanti utenti inte-
ressati, sarebbe enormemente pericoloso: un pirata capace di intercettare
i messaggi potrebbe anche anticipatamente riuscire a carpire la chiave,
e a quel punto non dovrebbe far più nessuno sforzo di crittoanalisi per
infrangere le informazioni riservate.
Una maniera per ovviare a questa difficoltà è quella di escogitare sistemi crit-
tografici che escludano qualunque trasmissione di chiave. Ogni utente A sceglie
una coppia di chiavi: una pubblica, che ogni interlocutore può ed anzi deve
sapere per cifrare la propria corrispondenza verso A; una privata, che soltan-
to A deve conoscere (e gelosamente custodire) e che gli serve per decifrare i
messaggi che gli arrivano. Ma la chiave pubblica per cifrare i messaggi ad A
diventerebbe in questo modo nota anche a persone indiscrete e a pirati. Dun-
que un tale sistema dovrebbe avere la seguente proprietà, del tutto opposta a
quanto avviene nella crittografia classica.
2. Decifrare deve essere enormemente più difficile di cifrare, almeno per
chi non conosce la chiave privata di A: le due operazioni di criptare e
decriptare non devono essere computazionalmente equivalenti.
È ragionevole aspettarsi di costruire sistemi crittografici con queste caratteri-
stiche? Il seguente esempio suggerisce di sì.
C'è una famosa questione di Informatica Teorica, che viene in genere chiamata
p = N P, e che sostanzialmente chiede quanto segue.
Anche uno studente di Matematica alle prime armi, impegnato a risolvere
un problema di aritmetica oppure un'equazione, constata che verificare la
soluzione, una volta che è stata trovata, può essere noioso, ma certamente è
rapido e sicuro, mentre cercare la soluzione è talora stimolante, ma spesso
lento ed incerto. P = N P domanda, più generalmente, se tutti i problemi che
ammettono un procedimento rapido di verifica delle soluzioni hanno anche un
algoritmo veloce di soluzione: parliamo qui di problemi non solo matematici,
ma anche eventualmente di Chimica, Biologia, e così via, purché riconducibili
ad un modello matematico.
Ovviamente una piena comprensione della questione richiede che si chiarisca
preliminarmente che cosa è un "problema" e che successivamente si definisca
con precisione
1) quali problemi hanno un algoritmo di soluzione, e quali no,
2) in quali casi l'algoritmo si può ritenere rapido, e in quali no.
Rispondiamo qui in modo non rigoroso, rimandando ai testi specifici di Teoria
della Computabilità e della Complessità citati a fine capitolo per una tratta-
zione più dettagliata.
Anzitutto osserviamo che un problema matematico, o comunque riconducibile
a un modello matematico, si deve esprimere nel linguaggio matematico, che
si compone di simboli specifici come le cifre decimali 0, 1, 2, ... , 8, 9 oppu-
re le lettere x, y, z, ... ; con esse si possono costruire numeri, o polinomi, o
altri oggetti ancora. Diciamo allora che quei simboli matematici necessari a
esprimere il contesto di un particolare problema formano l'alfabeto di quel
problema. Possiamo facilmente convenire di trattare soltanto alfabeti finiti.
Adesso notiamo che un "problema" consiste spesso nel riconoscere, tra tutte
le sequenze finite di simboli (o parole) del suo alfabeto, quelle che soddisfano
una prefissata condizione. Ad esempio, c'è un famoso problema di aritmetica
che chiede di stabilire se un dato numero naturale N 2: 2 è primo; il problema
domanda quindi di identificare tra tutti i numeri naturali N 2: 2 - espressi
come sequenze di cifre 0, 1, 2, ... , 9 - quelli che sono primi, e attende la
risposta sì se N è primo, no altrimenti: accetta conseguentemente 2, 3, 5, 7,
11, ... , perché primi, esclude al contrario 4, 6 e così via. Quindi in questo
caso, e in molti altri, è dato un input formato da una parola dell'alfabeto e ci
20 1 Dalla Crittografia ai Numeri
a) Ad esempio, non si conoscono ancora esempi di problemi che hanno una lo-
ro specifica procedura di soluzione e che non si possono gestire con nessuna
1.5 Problemi del millennio 21
macchina di Thring.
b) Di più, nell'epoca di Thring e negli anni successivi ci sono state svariate
altre proposte su come definire in generale sia il concetto di algoritmo
che la classe dei problemi che hanno algoritmo di soluzione. Ma questi
approcci, talora assai distanti per spirito e ispirazione da quello di Turing,
si sono poi dimostrati ad esso equivalenti. Questa coincidenza concentrica
di idee originariamente così distanti può essere intesa come loro comune
sostegno.
Per dirla in termini più precisi, si comincia col considerare, per ogni algorit-
mo, la funzione f che ad ogni intero positivo l associa la massima durata delle
computazioni dell'algoritmo che partono da input composti da :::; l simboli
e giungono all'output in un numero finito di passi. Si noti che le parole di
lunghezza:::; l sono soltanto una quantità finita perché l'alfabeto che le ge-
nera contiene solo un numero finito di simboli. Conseguentemente, anche le
computazioni dell'algoritmo che le riguardano sono solo una collezione finita,
ed ha senso cercarne la massima durata. Si vede allora facilmente che si può
assumere che la funzione f di cui sopra sia definita, se non proprio su ogni
l, almeno per l abbastanza grande, e che sia inoltre crescente e non limita-
ta (a sottolineare che input più lunghi richiedono computazioni sempre più
complicate). Si dà poi della funzione f una stima asintotica, che non si faccia
condizionare dai suoi valori parziali ma ne studi il comportamento quando l
tende a +00. È utile in questo ambito la relazione O definita nel modo che
segue: per f e 9 funzioni come sopra, si pone
f = O(g)
dove ll-t 21 è la funzione esponenziale (in base 2), ma viceversa non vale
Ammettiamo per semplicità che il nostro problema preveda una risposta del
tipo sì o no, come nel caso dei numeri primi. Allora diciamo che il problema
sta in N P esattamente quando, per ogni input w, w ha risposta sì se e solo
se si può trovare una qualche testimonianza y che sa confermarlo in tempi
rapidi ed è breve da scriversi.
Ad esempio, il problema di riconoscere i numeri composti (attenzione: i com-
posti, non i primi) si dimostra appartenere a N P osservando quanto segue.
Anzitutto si ricorda che un naturale N 2: 2 è composto se e solo se ammette
un divisore d diverso da 1 e da N; a questo punto si coinvolge d come testi-
mone, notando che d è breve da scriversi, perché non più lungo di N, ed è
capace di ribadire rapidamente che N è composto: basta dividere N per d e
vedere che il resto è O. Si noti però che il procedimento appena descritto non
serve a riconoscere altrettanto rapidamente anche i primi; infatti, per N pri-
mo, nessun d -::f- 1, N divide N e c'è bisogno di sperimentare questo fallimento
per ogni possibile testimone d prima di concludere che N è, appunto, primo.
In effetti, per un problema in N P, gli input w a esito negativo no si ricono-
scono solo dopo che tutti i testimoni y intervengono a loro sfavore. Dunque
non basta un'unica opportuna certificazione per dirimere il problema, occor-
re invece la consultazione sistematica di ogni testimone possibile, il che può
allungare enormemente i tempi di lavoro.
Il confronto tra le due classi P e N P è dunque, come già detto, una compa-
razione tra i tempi di dimostrazione e di verifica della soluzione dei problemi
matematici o riconducibili a modelli matematici. Chiaramente
PCNP
in questo ambito. Infatti RSA si basa sostanzialmente sulla differenza che at-
tualmente si rileva tra i tempi di soluzione di due famosi problemi sui naturali,
già ricordati nel precedente paragrafo:
a) riconoscere i numeri primi,
b) decomporre un numero composto nei suoi fattori primi.
Infatti di a) si sa che appartiene a P ed invece di b) si congettura che sia N P-
intermedio: comunque sta in N P e non è nota alcuna procedura classica che lo
sappia risolvere in tempo rapido. Comunque, prima di introdurre RSA ed altri
analoghi protocolli crittografici, varrà la pena di prendere maggiore confidenza
con primi e composti. Questo sarà l'argomento del prossimo capitolo.
Esercizi 1.6.1
1. Si faccia riferimento all'alfabeto inglese e alla tabella 1.1 di traduzione
di lettere in numeri interi, e si assuma che lo spazio vuoto corrisponda
al 27. Si cifri il messaggio "appuntamento alle otto" tramite la funzione
f che ad ogni numero intero x (quindi ad ogni lettera) associa l'intero
4x + 3 (mod27).
2. Si decifri il messaggio "7 2 18 31 9" sapendo che è stato criptato,
numero per numero, usando la funzione f(x) = lOx + 5 (mod33).
3. Si cifri il messaggio composto dai quattro digrafi
f (x)
y
= ( 6x+ 4y + 1 ) (mod31).
-x + 5y +-2
Si trovi poi la funzione di decodifica l' di f. La si applichi al messaggio
cifrato e si verifichi che tramite essa si riottengono i digrafi originali.
4. Blaise de Vigenère scrive alla sua amica inglese per darle appuntamento
"Ci vediamo a mezzanotte al castello". Per non insospettire il marito
dell'amica, Vigenère cripta il messaggio col suo cifrario, usando la parola
chiave Blaise: quale è il messaggio cifrato? (Ammettiamo che Vigenère
adoperi l'alfabeto della lingua inglese, con un ulteriore simbolo per lo
spazio vuoto).
5. James Bond ha scoperto che il segreto di Goldfinger è 1001101010111, e
vuole informare Londra. Per sicurezza, usa il cifrario di Vernam. ma Gol-
dfinger intercetta il messaggio cifrato, e legge 0101010110110: che parola
chiave ha usato 007?
26 1 Dalla Crittografia ai Numeri
Riferimenti bibliografici
In tutti gli altri casi, dunque anche per a, b f::- 0, la seguente osservazione può
risultare utile.
a = b . qo + ro, ro < b.
Allora (a, b) = (b, ro).
Infatti i divisori comuni di a e b dividono anche ro = a - bqo e, viceversa, i
divisori comuni di b e ro dividono anche a = bqo + ro. Così il massimo tra i
primi coincide con il massimo tra i secondi.
L'utilità della precedente osservazione nella ricerca del massimo comune di-
visore tra a e b è facilmente comprensibile: siccome ro < b :S a, dovrebbe
risultare più semplice, almeno in linea di principio, computare (b, ro) invece
che (a, b).
In effetti un algoritmo rapido di calcolo del massimo comune divisore può
essere organizzato su questo fondamento, nel modo che segue.
Algoritmo euclideo delle divisioni successive. Supponiamo che a e b
siano, come detto, due naturali non nulli e che a 2: b. Dividiamo a per b
ottenendo
a = bqo + ro, ro < b.
2.1 Divisori, resti e quozienti 29
e, conseguentemente,
Il metodo appena descritto si chiama algoritmo euclideo perché era già noto
agli antichi Greci e, in particolare, ad Euclide. A dispetto della sua età, è usato
ancor oggi per la sua semplicità e per la sua ragionevole rapidità (secondo i
criteri della tesi di Edmonds-Cook-Karp riferita nel primo capitolo). Natural-
mente, per apprezzare pienamente questo suo ultimo merito, dobbiamo prima
chiarire in che forma intendiamo scrivere i numeri naturali e conseguentemen-
te valutare la loro lunghezza come possibili input; dobbiamo poi precisare in
che modo conveniamo di misurare i tempi delle computazioni che li riguar-
dano. Di tutto questo parleremo brevemente nel prossimo paragrafo. Per il
momento ci limitiamo a dire che l'algoritmo delle divisioni successive lavora
in un tempo al più quadratico (e cioè limitato da un polinomio di grado 2)
rispetto alla lunghezza degli input e quindi è ragionevolmente rapido rispetto
ai moderni parametri di efficienza.
È da notare che uno tra x e y può anche essere negativo. Va poi sottolineato
che valori opportuni di x e y si possono trovare esplicitamente e velocemente
usando ancora l'algoritmo delle divisioni successive, ed anzi impiegando tempo
al più quadratico rispetto alla lunghezza di a e b. Infatti, se a = O, allora
(a, b) = b = a . O + b . 1, cioè possiamo scegliere x = O e y = 1. Il caso b = O
si tratta in ruolo analogo. Se poi a, b # O, allora possiamo fare riferimento,
appunto, all'algoritmo euclideo e al numero s dei suoi passi. Lavoriamo infatti
per induzione su s.
Se s = O, si ha di nuovo (a, b) = b = a· O + b· 1.
Sia allora s > o. Per induzione, esistono due interi Xl e yl tali che il massimo
comune divisore (b, ro) (che richiede all'algoritmo euclideo s - 1 passi) si
esprime come b· Xl + ro . yl; inoltre Xl e yl possono essere trovati esplicitamente.
Ma sappiamo che (b, ro) coincide proprio con (a, b); sfruttando allora ro =
a - bqo, si deduce
Corollario 2.1.7 Siano a, b, c naturali non nulli tali che a I bc. Se (a, b) = 1,
allora a I c.
Invece non è vero in generale che, se a I bc, allora a I b oppure a I c. Ad
esempio, 4 I 2 . 6 = 12, ma 4 non divide né 2 né 6.
Dimostrazione. Sia q un naturale tale che aq = bc. Ricordiamo 1 = (a, b) =
ax + by per opportuni interi x e y. Così
lloglONJ +1
(dove l ...J denota la parte intera).
Naturalmente, il riferimento alla base lO nOn è l'unico possibile, ed è ammesso
ricorrere ad altre basi, per esempio 2, e rappresentare così i naturali solo COn
le cifre O e 1, di modo che
0,1,2,3,4,5,6,7,8,9,10,11,12, ...
32 2 Primi e Composti
diventano rispettivamente
0,1,10,11,100,101,110,111,1000,1001,1010,1011,1100, ...
llog2 N J + 1
Quindi anche le lunghezze pur diverse di N nelle basi 10, 2 crescono "quasi
proporzionalmente" mediante la costante loglO 2.
Analoghe considerazioni si possono ripetere a proposito di altre basi 3, 4, 5, e
cosi via.
Notiamo anche che N = 1Olo91QN = 2lo92N è esponenziale rispetto alla sua lun-
ghezza. Di conseguenza un algoritmo che richiede costo N (o approssimabile
a N) su N è da ritenersi poco efficiente: constatazione che sarà bene ricordare
in futuro.
In genere, la base cui si fa più facilmente riferimento è 2. Le cifre O, 1 che
vi ricorrono si chiamano bit. Ad esempio 1001 (cioè il numero in base 2 che
corrisponde a 9 in base 10) si compone di 4 bit.
Abbiamo così trattato il tema della lunghezza degli input. Adesso dobbiamo
considerare il tempo di lavoro di una computazione sui naturali. Possiamo
facilmente convenire di identificarlo col numero complessivo di passi da essa
svolto prima di concludersi. Ma dobbiamo anche chiarire che cosa intendiamo
per passo di computazione nel nostro ambito, quando si trattano naturali N
in notazione binaria e si svolgono le varie operazioni di somma, prodotto e
cosi via. In genere si conviene che ogni singola operazione sui bit degli input
N coinvolti corrisponde ad un passo di computazione. Per esempio si assume
che l'addizione
1001 +
11110 =
100111
(ovvero 9+30=39 in base 10) richiede 5 passi per svolgere i calcoli sulle varie
colonne. In questa ottica, si può notare che sommare due numeri di k bits
richiede al più k passi, ed è dunque al più lineare nella lunghezza k, mentre la
moltiplicazione degli stessi numeri si può svolgere in k 2 passi e quindi richiede
2.3 Il Teorema Fondamentale dell'Aritmetica 33
tempo al più quadratico in k. Lo stesso vale per il calcolo del quoziente e del
resto, e cioè per la divisione.
Illustriamo allora la situazione riferendo ci come esempio al calcolo del mas-
simo comun divisore tramite l'algoritmo di Euclide delle divisioni successive.
Vogliamo mostrare che secondo i parametri appena introdotti, questo pro-
cedimento richiede tempo al più polinomiale (anzi quadratico) rispetto alla
lunghezza dell'input, come già anticipato nel paragrafo precedente.
Esempio 2.2.1 Consideriamo dunque due naturali a, b. Possiamo suppor-
re a > b > O per semplicità. I due primi passi dell'algoritmo di Euclide
corrispondono alle divisioni
a = b . qo + ro con ro < b, qo ~ 1,
Ne deduciamo
a> 2t . r2t-l
a> 2T r2T-l.
Può essere utile notare che 2 è l'unico primo pari, anche se l'osservazione non
è sorprendente, visto che "pari" significa "divisibile per 2" ed è ovvio che qua-
lunque multiplo di 2 maggiore di 2 ammette un divisore diverso da 1 e da se
stesso (2, appunto) e quindi non può essere primo; allo stesso modo si potreb-
be sottolineare che 3 è l'unico primo multiplo di 3, 5 l'unico primo multiplo
di 5, e così via. Comunque sarà bene ricordare che tutti i primi, eccettuato
2, sono dispari e dunque, in certo qual modo, 2 ha una sua specificità tra i
primi: per citare un gioco di parole di Zassenhaus, "2 is the oddest prime", e
cioè "2 è il più dispari dei primi" (anche se riesce difficile cogliere in italiano
la sfumatura che si ha in inglese nell'aggettivo odd, che può significare tanto
dispari quanto eccentrico, bizzarro).
Chiamiamo poi un naturale N 2 2 composto quando N non è primo, e cioè
quando esistono due naturali a e b minori di N (e quindi maggiori di 1) tali
che N = a· b.
Il motivo dell'aggettivo composto è ovvio: del resto qualunque numero natu-
rale > 1 (anche non primo) si decompone in modo sostanzialmente unico nel
prodotto di fattori primi. Il risultato è tanto importante quanto famoso, e ha
un nome altisonante:
Esempi 2.3.3
1. (Hilbert) Consideriamo l'insieme 4N + 1 dei naturali della forma 4n +1
con n E N
1, 5, 9, 13, 17, 21, 25, 29, 33, ...
Esso è chiuso rispetto alla moltiplicazione: per n e m naturali,
con Po < ... < Pn primi e k o , ... , k n interi positivi. Notiamo che, per d
divisore di N,
• d = 1 oppure d ha fattori primi tra Po, ... , Pn con esponente :S k o , ... , k n
e, per m multiplo di N,
• m = O oppure m ha tra i suoi fattori primi Po, ... , Pn con esponente
~ k o, ... , k n ·
Siano ora a e b due naturali non nulli; scriviamo
_ ko k
a - Po ..... Pnn , b = p~o ..... p~n
con Po < ... < Pn primi e k o , ... , k n , ho, ... , h n naturali (eventualmente
nulli, per consentire una notazione uniforme nella rappresentazione di a e b
ed includere anche i casi a = 1 oppure b = 1). Dalle precedenti osservazioni
segue che, per d divisore comune di a o b,
• d = 1 oppure d ha fattori primi tra Po, ... , Pn con esponente rispettiva-
mente :S k o , ho, ... , :S k n , h n
e, per m multiplo comune di a e b,
• m = O oppure m ha tra i suoi fattori primi Po, ... , Pn con esponenti
rispettivamente ~ k o , ho, ... , ~ k n , h n .
Se ne deduce facilmente la seguente serie di conseguenze.
=pmin{ko,ho}.
(a 'b)o 'pmin{kn,hn}
... n ,
[a 'blo
= pmax{ko, ho} .
...
. pmax{kn, hn}
n .
La cosa era già nota agli antichi Greci e in particolare a Euclide, che ne dava
la seguente dimostrazione.
Dimostrazione di Euclide. Siano 2 = Po < Pl < ... < Pr numeri primi
distinti. Mostriamo come costruire un nuovo primo p, diverso da Po, ... , Pro
A questo proposito, consideriamo
N =Po· .... Pr + 1;
1 1
L
00
qh = 1- l·
h=O q
Notiamo che le due serie appena considerate sono a termini positivi, dunque
il loro prodotto secondo Cauchy è definito ed ha somma
1 1
IILIi=II
00
1_ l
PJ
j"5.r k=O j"5.r P;
10.000.019, 10.000.079.
Quindi possono esistere nella successione dei primi due elementi consecutivi
a distanza arbitrariamente grande. Viceversa si noti che la minima differenza
di due primi consecutivi e dispari è 2: due primi con questa proprietà, dunque
della forma P e P + 2 rispettivamente, si dicono gemelli. Esempi di coppie di
primi gemelli sono
• 3,5,
2.4 Il Teorema dei Numeri Primi 39
• 5,7,
• 11, 13.
Non è noto quante siano le possibili coppie di primi gemelli. Per quanto oggi
se ne sa, potrebbero anche essere infinite; in tal caso, nella successione dei
primi, alle lacune arbitrariamente grandi assicurate dal teorema precedente si
potrebbero alternare coppie di primi gemelli e dunque vicini il più possibile.
A questo proposito si può anche segnalare un teorema di Chebyshev del 1850
che risolse una congettura avanzata cinque anni prima da Bertrand provando:
Teorema 2.4.3 Per ogni intero x > 1, c'è sempre almeno un primo p tra x
e 2x.
((8) = II 1 _1 l
P pS
al variare di p tra i primi, il che ricorda la prova di Eulero della infinità dei
primi. In effetti, l'idea di Riemann era che informazioni sui primi potessero
40 2 Primi e Composti
1f(X) = i2
x dt
-l-
ogt
+ o (y'Xlog x).
Comunque, nel 1896, Hadamard e, indipendentemente, De La Vallée-Poussin
provarono la congettura di Gauss (più di un secolo dopo che Gauss l'aveva
proposta). Il loro risultato è comunemente conosciuto con il nome di Teorema
dei Numeri Primi.
Teorema 2.4.4 (Teorema dei Numeri Primi) Si ha
lim 1f(x) = 1.
X--++OO -xz
og x
Il recente libro L'enigma dei numeri primi (The music of the primes nel titolo
originale inglese), scritto da M. Du Sautoy, dà un quadro ampio ed accessibile
di queste problematiche, ed in particolare dell'Ipotesi di Riemann.
• N - 2 divisioni
Notiamo che
3 = 21 + 1, 5 = 22 + 1, 17 = 24 +1
sono primi, ed i corrispondenti esponenti 1, 2, 4 sono ancora potenze di 2.
Invece
Notiamo che
3 = 22 - 1, 7 = 23 - 1
sono primi, così come i corrispondenti esponenti 2, 3, mentre
15 = 24 - 1
con q > 1.
Ci si potrebbe chiedere se, viceversa, m primo implica M(m) primo. Ma, a
dispetto degli esempi precedenti, la risposta è negativa (e la cosa era già nota
ai tempi di Mersenne): possiamo citare il caso del primo m = 11 per il quale
2,3,5,11, ...
sono primi di Germain (perché 5, 7, 11,23, ... sono ancora primi), 7 non è primo
di Germain perché 2·7+1 = 15 è composto. L'importanza dei primi di Germain
è legata all'Ultimo Teorema di Fermat (al quale accenneremo brevemente nel
prossimo paragrafo). Infatti Sophie Germain provò che l'equazione di Fermat
4 = 2 + 2, 6 = 3 + 3, 8 = 5 + 3, lO = 7 + 3 = 5 + 5, 12 = 7 + 5, ... .
Ma una tale abbondanza di esempi positivi non basta a dare una dimostrazio-
ne, visto che i numeri pari (e quelli primi) sono infiniti. In effetti, il problema
è oggi, dopo quasi 3 secoli dalla sua formulazione, ancora aperto; anzi, ha
addirittura ispirato recentemente una avvincente storia di mistero e pazzia: il
romanzo di Apostolos Doxiadis Zio Petros e la Congettura di Goldbach.
Ultimo Teorema di Fermat. Nel 1637 Pierre de Fermat, leggendo un
libro di aritmetica scritto dal matematico alessandrino Diofanto, scrisse sul
suo margine di aver trovato una dimostrazione "meravigliosa" della seguente
proposizione:
(come la nascita della Teoria Algebrica dei Numeri e certi progressi nell'Al-
gebra astratta). Finalmente nel 1994 (quasi 4 secoli dopo Fermat) Andrew
Wiles ne diede una dimostrazione, certamente diversa da quella che Fermat
aveva nella sua mente, perché strettamente collegata ad argomenti profondi e
moderni di Geometria Algebrica (come le curve ellittiche e le forme modulari).
Resta comunque la curiosità circa la possibilità di una dimostrazione quale
Fermat poteva averla ideata: "meravigliosa", profonda, eppure elementare ed
accessibile, svolta solo con gli strumenti matematici (relativamente semplici)
di cui Fermat disponeva.
A proposito dell'Ultimo Teorema di Fermat va aggiunto che Sophie Germain
ne ottenne una prova parziale nel caso in cui l'esponente n è, appunto, un
primo di Germain (tale, cioè, che 2n + 1 è ancora primo).
Il libro di S. Singh L'Ultimo Teorema di Fermat espone in tono divulgati-
vo e godibile la storia di questo mistero, dalla sua nascita nel 1637 alla sua
soluzione del 1994.
Esercizi 2.7.1
Riferimenti bibliografici
3.1 Introduzione
Nel Capitolo 1 abbiamo visto come l'uso dei numeri naturali per codificare
le lettere di un alfabeto A faciliti l'applicazione degli strumenti crittografici.
Ricordiamo infatti che, se N è la cardinalità di A, i vari simboli di A si posso-
no indicare con i naturali da O a N-L D'altra parte l'aritmetica che questi
numeri di codice soddisfano non è quella abituale di N, ma piuttosto la sua
versione modulo N; così, se il simbolo N -1 è cifrato aggiungendogli 3, allora
l'elemento che lo cripta è 2, cioè (N - 1) + 3 modulo N.
Si ha quindi una situazione analoga a quella dell'aritmetica dell'orologio, che
sovrintende lo scorrere delle ore del giorno. In quel caso si ha N = 24 e si la-
vora, appunto, modulo 24; di conseguenza un appuntamento fissato alle 22 di
una sera per 4 ore dopo si intende concordato per le 2 del mattino successivo,
perché 22 + 4 coincide con 2 modulo 24.
In tutti questi casi, dunque, l'operazione di addizione e, se vogliamo, anche
quella di moltiplicazione si svolgono come per gli interi ma devono tenere con-
to del fatto che N eguaglia O. L'aritmetica che se ne ricava, pur derivando da
quella degli interi, ha sua specifiche peculiarità e talora differenze sostanzia-
li. Ricapitoliamone gli aspetti fondamentali. Una trattazione più dettagliata
potrà essere trovata nei testi citati in bibliografia.
a + b == al + bI (modN), a· b == al . bI (modN),
come è facile verificare applicando le proprietà della divisibilità. Di conse-
guenza, possiamo definire anche in ZN due operazioni di somma e prodotto,
ponendo, per a, b interi,
ax+Ny
Esercizi 3.2.4
1. Siano N, N'interi positivi, a, b interi. Si provi che a, b sono congrui modulo
N e modulo N' se e solo se lo sono modulo il minimo comune multiplo
[N,N'] di N,N'.
2. 9 21 è invertibile in Z21? E 9 22 è invertibile in Z22?
3. Z315 è un campo? E Z233?
Osservazioni 3.3.1
54 3 Potenze, Radici e Logaritmi
1. Ovviamente O, 1,4, 9, ... restano quadrati anche modulo N. Talora però fi-
niscono per coincidere tra loro (come 4 e 9 modulo 5), talora altri si aggiun-
gono a loro (almeno apparentemente), secondo il valore di N. Ad esempio,
lO == 25 == 52 (mod 15) è un quadrato modulo N = 15. D'altra parte, non
tutti gli interi sono quadrati modulo N. Ad esempio 2 == -1 (mod 3) non lo
è modulo 3 perché i quadrati modulo 3 sono O = 02 e 1 = 12 == 22 (mod3).
2. Se a è un quadrato modulo N, allora a può talora ammettere più di 2
radici quadrate modulo N. Ad esempio 1 ha 4 diverse radici quadrate ±1,
±3 (cioè 1, 3, 5, 7) modulo 8. Infatti, un facile controllo mostra
e conseguentemente
cioè 72 == 52 == 1 (mod8).
Teorema 3.3.5 Siano No, ... , Nn interi> 1 a due a due primi tra loro.
Allora, per ogni scelta di interi bo, ... , bn , esiste un intero x tale che
e conseguentemente
bj = qjsjbj + Njtjbj .
Quindi qjsjbj == bj (mod N j ) per ogni j :::; n. Sia ora x = L:i<n qisibi. Notiamo
che, fissato j :::; n, N j divide ogni qi per i -::f. j. Così -
Proposizione 3.3.6 Siano No, ... , Nn interi dispari> 1 a due a due primi
tra loro; sia poi N = ITj<n N j il loro prodotto (dispari!), e sia a un intero
primo con N. Allora a è un quadrato modulo N se e solo se a è un quadrato
modulo N j per ogni j :::; n. In tal caso a ha almeno 2nH radici quadrate
modulo N. Se poi No, ... , Nn sono tutti primi, a ha esattamente 2n+l radici
quadrate modulo N.
56 3 Potenze, Radici e Logaritmi
a == b;,i(j) == b2 (modNj ).
In conclusione, a == b2 (modN). Così a è un quadrato modulo N, e anzi ha
almeno 2nH radici quadrate distinte, corrispondenti alle possibili sequenze
con i(O),i(l), ... ,i(n) E {O,l} e agli interi b conseguentemente costruiti nel
modo appena descritto: si verifica infatti facilmente che sequenze distinte de-
terminano valori distinti di b (esercizio: perché?). Il lettore provi a discutere,
sempre per esercizio, il caso in cui No, ... ,Nm sono primi e a dimostrare in
questo modo la tesi finale della Proposizione. D
Esempio 3.3.7 Sia N = 15 = 3 . 5. Allora a = 1 ammette
• 2 radici quadrate ±l (cioè 1 e 2) modulo 3,
• 2 radici quadrate ±l (cioè 1 e 4) modulo 5.
Consideriamo uno qualunque dei 4 casi che si vengono così a incontrare, ad
esempio
x == 2 (mod3), x == 1 (mod5).
Col Teorema del Resto Cinese troviamo un'unica soluzione modulo 15
x == 11 == -4 (mod15)
e dunque una radice quadrata -4 di 1 modulo 15. Infatti (-4)2 = 16 ==
1 (mod 15). Si determinano poi per questa via tutte le radici quadrate di 1
modulo 15 (esse vengono a coincidere con ±l, ±4 modulo 15).
Abbiamo così contato il numero delle radici quadrate modulo N anche per
certi valori di N composto. Ovviamente, sia nel caso in cui N è primo che per
N composto, restano da discutere i seguenti problemi:
• quali interi a sono quadrati modulo N,
• come determinare le loro radici quadrate modulo N.
Ne parleremo nel seguito del capitolo.
3.4 Potenze 57
3.4 Potenze
Se le radici modulo N presentano molti misteri, non altrettanto può dirsi delle
potenze. Esistono infatti algoritmi rapidi per il calcolo delle potenze a n per
a e n interi positivi, e questi procedimenti si applicano con successo anche
maggiore quando la computazione avviene modulo N: già Legendre li usava
nel 1785. Questo paragrafo è dedicato a descriverli.
Il metodo più elementare per calcolare a n (eventualmente modulo N) è quello
di moltiplicare a per se stesso n volte; la procedura richiede però n-I mol-
tiplicazioni, e dunque non è ragionevolmente veloce rispetto alla lunghezza
di n. D'altra parte, possiamo seguire una via alternativa. Infatti dividiamo
l'esponente n per 2 e osserviamo che:
• se n = 2n1 è pari, allora a n = (a nI )2 si ottiene quadrando anI (e
computando anI preventivamente),
• se invece n = 2n1 + 1 è dispari, allora a n = (a nI )2 . a si ottiene quadran-
do anI e moltiplicando questo quadrato per a (sempre computando anI
preventi vamente ) .
D'altra parte, anche il calcolo preliminare di anI si può fare allo stesso modo.
Illustriamo il procedimento con un esempio.
Esempio 3.4.1 3100 è, come ben noto, il prodotto di 100 fattori, tutti uguali
a 3. Ma, come detto, non c'è bisogno di operare 99 successive moltiplicazioni
per ottenere questo risultato. Infatti, siccome 100 = 2 . 50, si ha che 3100 =
(3 50 )2 si ricava come il quadrato di 350 . L'osservazione si può ripetere: siccome
50 = 2·25, si ha 350 = (3 25 )2, quindi 3100 = ((3 25 )2)2. Di nuovo 25 = 2 ·12+ 1,
così 325 = (3 12 )2 . 3, da cui 3100 = (((3 12 )2 . 3)2)2. Dalle successive divisioni
per 2
• 12 = 2·6,
• 6 = 2·3,
• 3 = 2·1 + 1,
• 1 = 2· O + 1,
si ottiene finalmente l'espressione
• O a quadrare,
• 1 a quadrare e a moltiplicare per 3.
Così se abbreviamo con
• Q l'istruzione "quadrare",
• X l'istruzione "moltiplicare (in questo caso per 3)",
il numero 1100100 determina la sequenza di istruzioni QXQXQQQXQQ da
applicare a 1 per ottenere 3100 . Naturalmente, quando si lavora modulo N,
tutte queste istruzioni si svolgono modulo N, e i risultati possono essere so-
stituiti dai loro resti per N, e quindi ristretti tra 0,1, ... ,N - 1, al prezzo
massimo di una divisione per ogni passaggio.
Esempio 3.4.2 Poniamo N = 101, e dunque calcoliamo 3 100 modulo 101.
Applicando le precedenti istruzioni QXQXQQQXQQ a 1, otteniamo
1 ---+Q 1 ---+ x 3 ---+Q 9 ---+ x 27 ---+Q 729 == 22 ---+Q 484 == 80
---+Q 6400 == 37 ---+x 111 == 10 ---+Q 100 == -1 ---+Q 1 (mod101).
Esercizi 3.4.4
1. Si provi che 2560 == 1 (mod 561).
2. Si determini 1717 modulo 17 (attenzione!).
3. Si determini 3340 modulo 341.
Teorema 3.5.1 (Fermat) Sia p un numero primo. Allora, per ogni intero
a, vale aP == a (modp). Se poi a e p sono primi tra loro (cioè p non divide a),
allora aP - 1 == 1 (modp).
= p' (p - 1) ..... (p - k + 1)
( p) = p!
k k!(p-k)! k·(k-l)· ... · l ·
Quando O < k < p, i numeri da 1 a k non possono dividere p perché p è primo;
segue p I (~). Così
(a + l)P == t
k=O
(~) a k == aP + 1 == a + 1 (modp)
p sono esattamente quelli primi con p. Ad essi si applica la seconda tesi del
Piccolo Teorema di Fermat, che afferma tra le classi di congruenza modulo p
l'uguaglianza a~-l = lp e permette quindi di dedurre
ap- l _
- app-2 _
-
(
ap-2) p.
Esercizio 3.6.1 Si mostri che cjJ(N) è il numero delle classi di resti modulo
N invertibili in '/l,N.
3.6 La funzione cjJ e il Teorema di Eulero 61
Osservazioni 3.6.2
1. cp(l) = 1.
2. Se N è primo, allora cp(N) = N-L Infatti ogni intero compreso tra 1 e
N-I è primo con N. Quindi cp(2) = 1, cp(3) = 2 e così via. Viceversa,
se cp(N) = N-I, N deve essere primo. Infatti, se N è composto, deve
esistere qualche divisore d di N compreso tra 2 e N-I; d non può essere
primo con N, dunque cp(N) < N-L
3. Se N è una potenza pk di un primo p, allora cp( N) = pk-1 . (p - 1). Infatti,
siccome p è primo, i numeri (tra 1 e N = pk) che non sono primi con p
sono i multipli di p
p, 2p, 3p, ... , p2 = P . p, ... , pk = P . pk-1
e dunque sono pk-1. Gli altri (quelli primi con p) sono allora pk _ pk-1 =
pk-1 . (p _ 1), il che chiude la nostra dimostrazione. Ad esempio, cp(4) =
cp(2 2 ) = 21 . 1 = 2.
Per il calcolo complessivo di cp per ogni intero positivo N, ci basta allora
osservare l'ulteriore proprietà:
Teorema 3.6.3 Siano m e n due interi positivi primi tra loro. Allora
N -
- I I Piki -- Poko ..... Ptk, .,
i<;.t
<jJ(N) = II <jJ(p~i)
i<;.t
Esercizio 3.6.4 Per quali valori di N <jJ(N) è pari? Divisibile per 3? Divisibile
per un assegnato primo p?
altre parole, c'è una classe di equivalenza in '" per ogni divisore d di N, e
tale classe è composta da tutti gli elementi a compresi tra 1 e N che hanno
massimo comune divisore d con N. Ci chiediamo quanti sono questi elementi
a (per ogni dato d). Osserviamo allora che, per 1 ~ a ~ N, (a, N) = d se e
solo se d divide a e (~, lf) = 1. Ma quest'ultima condizione determina com-
plessivamente 4>( lf) valori distinti per ~ e quindi per a. Ne segue che gli N
elementi tra 1 e N sono suddivisi in classi di equivalenza, una per ogni divisore
d di N, e che ogni classe contiene 4>( lf) elementi. Dunque N = L:dlN 4>( lf)·
D
Ricordando che i bi sono primi con N, si moltiplica per il prodotto dei loro
inversi modulo N e si ottiene, come richiesto,
a</>(N) == 1 (modN).
D
Si noti che, come già il Piccolo Teorema di Fermat nel caso di N primo,
così anche il teorema di Eulero permette il calcolo dell'inverso modulo un N
arbitrario di interi a primi con N e dunque invertibili modulo N. Tale inverso
eguaglia infatti la classe modulo N di a</>(N)-l. Ma il suo calcolo per questa via
è consigliabile solo se disponiamo di procedimenti che computino velocemente
la 4>, oltre alle potenze e alle divisioni, ed è da rilevare che non conosciamo
ancora algoritmi rapidi per la 4>. Dunque il riferimento alla procedura basata
sull'algoritmo euclideo della divisioni successive rimane preferibile.
64 3 Potenze, Radici e Logaritmi
Teorema 3.7.1 Per q intero positivo, c'è un campo finito F con q elementi
se e solo se q è la potenza di un primo. Inoltre due campi finiti con lo stesso
numero di elementi sono tra loro isomorfi.
da cui si deduce
xq - x = II (x - a);
aEF
F = {a E K : aq = a}.
Esempi 3.7.2
1. Per q = p primo, già sappiamo dal Piccolo Teorema di Fermat che tutti
gli elementi di Zp soddisfano il polinomio x P - x in Zp.
2. Il campo F9 con 9 = 32 elementi estende Z3 con tutte e sole le radici
di x 9 - x. D'altra parte F9 si può ottenere ampliando direttamente Z3
con una radice v del polinomio irriducibile X2 - x-l E Z3[X]. Infatti
l'ampliamento Z3(V) include tutti e soli gli elementi della forma ao + alv
66 3 Potenze, Radici e Logaritmi
v4 = (v + 1)2 = v 2 + 2v + 1 = 3v + 2 = 2, v8 = 22 = 1, v9 = v,
e così via. Si conferma poi che ogni elemento di Z3(V) annulla il polinomio
x 9 - x. Infatti, per ogni scelta di ao, al in Z3, ricordando che stiamo
lavorando modulo 3 e che per il Piccolo Teorema di Fermat = ai per ar
i = 0, 1, si controlla facilmente
( ao + al v ) 9 = ao + al v = ao
9 9 9
+ al v.
Vogliamo adesso mettere in evidenza una proprietà del gruppo moltiplicativo
F* di un campo finito F che ci sarà spesso utile nel seguito: il fatto che tutti
i suoi elementi si possano ottenere come potenze di unO opportuno di loro.
Verifichiamolo anzitutto COn qualche esempio particolare.
Esempi 3.7.3
1. Consideriamo F 19 = Z19. I diciotto elementi nOn nulli di F 19 coincido-
nO COn le potenze di 2. Infatti 2 è primo COn 19 e dal Piccolo Teore-
ma di Fermat segue anzitutto 218 == 1 (mod 19) e dunque che il periodo
moltiplicativo di 2 modulo 19 divide 18. D'altra parte
L'lj;(d) = N,
dlN
eguaglianza che richiama la proprietà della cjJ di Eulero affermata dal Teorema
3.6.5, e cioè
LcjJ(d) = N.
dlN
Confrontiamo allora 'lj;(d) e cjJ(d) per ogni d. Sia 'lj;(d) > O e sia 9 un elemento
di G di periodo d. Consideriamo le potenze distinte 1 = gO, g, ... , gd-l di
g: tutte soddisfano in F il polinomio x d - 1. D'altra parte nel campo F un
polinomio di grado d, come x d - 1, non può avere più di d radici. Quindi le
d potenze distinte di 9 esauriscono tutte le possibili radici in F di x d - 1,
cioè tutti gli elementi di F che hanno periodo divisibile per d. In particolare,
gli elementi di F* di periodo d sono tra queste potenze, e per la precisione
vanno a coincidere con quelle della forma gk per (k, d) = 1 (come il lettore
può controllare per esercizio). In conclusione gli elementi di periodo d in F*
sono tanti quanti i numeri compresi tra 1 e d e primi con d, cioè cjJ(d). Tutti
questi elementi, in quanto potenze di g, sono in G e quindi esauriscono gli
elementi di periodo d di G: ne segue
'lj;(d) = cjJ(d).
Ricapitolando si ha
L'lj;(d) = N = L cjJ(d) ,
dlN dlN
'lj;(d) = cjJ(d), per ogni d I N con 'lj;(d) -I- O;
ma questo chiaramente implica
2. Per p> 2, si consideri un intero 9 che genera 1',,; modulo p; si controlli che
9 oppure (p + 1) . 9 genera modulo p2 il gruppo moltiplicativo degli elementi
invertibili di Z p 2).
Sia F un campo finito (di cardinalità q). Si è detto che, per un'opportuna
scelta di 9 E F*, gli elementi di F* vanno a coincidere con le potenze di g:
per ogni a E F*, esiste x E 1'" tale che a = gX;
e si può anzi assumere O :S x < q -1, x è infatti definito a meno di congruenze
modulo il periodo di g, e cioè modulo la cardinalità di F*.
Si dice in questo caso che x è il logaritmo discreto di a in base g. Infatti
la situazione richiama quella degli usuali logaritmi dei numeri reali positivi
(rispetto a qualche base reale positiva 9 :I 1): anche nel nostro ambito x
è l'esponente da assegnare a 9 per ottenere a. L'aggettivo "discreto" sta a
sottolineare solo il contesto diverso in cui stiamo adesso lavorando, quello
degli interi o comunque dei campi finiti.
Esempi 3.8.1
1. Sia F = Z19. Sappiamo già dall'Esempio 1 in 3.7.3 che 9 = 2 genera F*.
Sia poi a = 7. Allora il logaritmo discreto di a = 7 in base 2 è 6, infatti
2 6 == 7(modI9).
2. Sia ora F = F g il campo introdotto nell'Esempio 2 di 3.7.2 come amplia-
mento di 1',,3 tramite una radice v del polinomio irriducibile X2 - x - I E
Z3[X]. Sappiamo già che v genera F*. Inoltre il logaritmo discreto di -1
in base v è 4, infatti v 4 = 2 = -1 in F.
Esempi 3.9.2
l. Sia p = 3. Si nota 12 == 1 (mod3), 22 == 1 (mod3). Segue che 1 è residuo
quadratico modulo 3, e 2 non lo è. Quindi i 2 elementi non nulli di 1. 3 si
suddividono a metà: uno ha radice quadrata, uno no.
2. Consideriamo adesso p = 5. Si verifica 12 == 42 == 1 (mod 5) e 22 == 32 ==
4 (mod5). Così 1 e 4 sono residui quadratici modulo 5, 2 e 3 no. Nuova-
mente, i 4 elementi non nulli di 1. 5 si dividono a metà: due ammettono
una radice quadrata, due no.
3. Sia p = 11. Si verifica nuovamente che, tra le dieci classi di resti modulo
11 diverse da O, ce ne sono 5 che corrispondono a residui quadratici (per
la precisione 1, 4, 9,16 == 5 (modll) e 25 == 3(modll)) e 5 che non
corrispondono a residui quadratici (2, 6, 7, 8, lO).
C'è un argomento generale che conferma quanto suggerito dai tre esempi pre-
cedenti. Consideriamo infatti il campo F = Zp con p primo. Ricordiamo che il
gruppo moltiplicativo F* è ciclico, e scegliamo un intero positivo g tale che la
classe gp genera F* modulo p: così g ha periodo moltiplicativo p-l modulo p
e gli interi 1, g, ... , gP-2 determinano tutte le classi non nulle di resti modulo
p. Notiamo allora che, per ogni j < p-l,
gj è residuo quadratico modulo p se e solo se j è pari.
70 3 Potenze, Radici e Logaritmi
Teorema 3.9.5 (Eulero) Sia p un primo dispari. Allora, per ogni intero a,
(Pa) == a-p-l
2- (modp).
3.9 I simboli di Legendre e di Jacobi 71
(~)
p-l
Fissiamo un intero g che genera Z; modulo p. Sia j < p-l tale che a
gj (modp). Allora si ha che (~) = 1 se e solo se j è pari, condizione che
equivale a dire che p-l divide j . P;l, o anche gj.P;-1 == 1 (modp), cioè
aP;-1 == 1 (modp) , come richiesto. D
Il teorema di Eulero stabilisce quindi una proprietà dei numeri primi che ci
sarà utile ricordare. Ma quel che più ci preme sottolineare adesso sono le sue
conseguenze per il calcolo del simbolo di Legendre.
(N) _ II ( qj ) t. 3.
P - '<t p ,
J_
Osservazioni 3.9.7
1. O) = 1 perché 1 = 12 •
2. (~l) = (-1) P;l; infatti per il teorema di Eulero
Si osservi che, per p primo dispari, p-I e p + 1 sono entrambi pari ed esat-
tamente uno dei due è anche divisibile per 4. Così p2 - 1 = (p - 1)(P + 1) è
multiplo di 8. Il teorema ci dice allora che (~) = 1 se e solo se p2~1 è pari, e
cioè 16 divide p2 - 1 = (p - 1) . (p + 1), e dunque se e solo se 8 divide p-I
oppure p + 1 (non può succedere infatti che 4 divida tanto p + 1 che p-I,
altrimenti 4 divide anche la loro differenza, che è 2), cioè p == ±1 (mod8).
Ripetiamo:
( ~ ) = 1 se e solo se p == ± 1 (mod 8)
e di conseguenza
(~ ) = -1 se e solo se p == ±3 (mod 8).
3.9 I simboli di Legendre e di Jacobi 73
Ad esempio
(~) = l
visto che 7 == -1 (mod8): del resto, è facile confermare con semplici verifiche
dirette che 2 non è un quadrato né modulo 3 né modulo 5, mentre lo è modulo
7 perché 2 == 9 == 3 2 (mod7).
La dimostrazione del Teorema 3.9.8 è impegnativa e sarà fornita in dettaglio
ai lettori interessati nel prossimo paragrafo.
Invece passiamo qui a considerare il calcolo di ( !f)
quando N è primo dispari.
A questo caso è legato un risultato fondamentale, in genere chiamato Legge
di Reciprocità Quadratica. Questa proprietà, enunciata da Eulero nel 1783 e
provata in modo incompleto da Legendre nel 1785, fu finalmente dimostrata
da Gauss a 19 anni nel 1796. Anzi, Gauss ne diede nel corso della sua vita 8
dimostrazioni distinte. Essa afferma:
Infatti per p -::f- q primi dispari, ha senso considerare tanto (~) quanto ( ~ ) ,
e si ha ovviamente ( ~ ) = ± ( ~ ). La Legge di Reciprocità Quadratica ci dice
quando vale =. Per la precisione si ha
( ~ ) = ( ~) se e solo se p oppure q è congruo a l modulo 4,
mentre
( ~ ) = - ( ~) se e solo se sia p che q sono congrui a 3 modulo 4.
Infatti ( ~ ) = ( ~) se e solo se l'esponente P;l . q;l è pari e dunque se e solo
se almeno uno dei due fattori P;l o q;l è pari, cioè appunto se e solo se p - l
oppure q - l è divisibile per 4. Ad esempio
(~) = - (~)
74 3 Potenze, Radici e Logaritmi
( ~)
151
= (151)
33
perché 33 == 1 (mod 4). Passando ai resti delle opportune di visioni si ottiene
prima (~~), che eguaglia (i~) sempre perché 33 == 1 (mod4), e successivamen-
te (~~) = Ug) . Ug)· Ma C2g) = -1 perché 19 'l'- ±1 (mod8), e quindi ci si
riporta a
- (179) = C:)
perché né 7 né 19 sono == 1 (mod4). Di nuovo passando al resto nella divisione
per 7 e procedendo poi come sopra, si conclude
se e solo se
3.10 La Legge di Reciprocità Quadratica di Gauss 77
Esempi 3.10.3
1. Per r = 2, ritroviamo la conferma che un campo che non estende Z2, e
quindi ha un numero dispari di elementi, contiene esattamente 2 radici
quadrate dell'unità.
2. Sia Wl = pr-l con r primo e (p, r) = 1. Dal Piccolo Teorema di Fermat
Wl == 1 (modr). Dal precedente corollario, F ha r radici r-me dell'unità.
Supponiamo adesso che F abbia esattamente r radici r-me dell'unità. Chia-
meremo in questo caso radice primitiva r-ma dell'unità in F un generatore
del loro gruppo, cioè una radice r-ma dell'unità che ha periodo proprio r, cioè
ancora un elemento 'fJ E F tale che le radici r-me di 1F in F sono esattamente
1 =I 'fJ =I 'fJ2 =I ... =I 'fJr-l.
Passiamo finalmente alla prova di a) e b).
Dimostrazione di a). Siccome p2 == 1 (mod8), segue dal Corollario 3.10.2
che che il campo F = F p2 contiene esattamente 8 radici ottave dell'unità.
Fissiamo allora una radice primitiva ottava 'fJ dell'unità in F: dunque 'fJ4 è una
radice quadrata dell'unità ed è diversa da 1 (confondiamo qui per semplicità
di notazione gli interi e le loro classi di resti modulo p, che sono elementi di
F). Ne segue 'fJ4 = -1 (da cui 'fJ5 = -'fJ, 'fJ6 = _'fJ2, 'fJ7 = _'fJ3). Poniamo
n 2 _1
ora, per ogni naturale n, f(n) = O se n è pari, f(n) = (-1)-8- altrimenti
(notiamo che nel secondo caso, quando n è dispari, n 2 - 1 = (n - 1) . (n + 1)
è certamente divisibile per 8, come già abbiamo avuto modo di osservare a
proposito di p nello scorso paragrafo, appena dopo l'enunciato del Teorema
3.9.8). È facile vedere che, ad esempio f(l) = f(7) = 1, f(3) = f(5) = -1.
Osserviamo poi che, per ogni intero j,
che coincide con (-1 f ~ cioè con f (j) perché p è dispari e (-1)P =-1.
·2 1 2
'Y = L f(j)TJj
05,j<8
'Y P = b 2) p-l
-2 • 'Y = 8p-l
2- 'Y =
(8)P (2)P
'Y = 3
'Y = (2)P 'Y
'Y P = L f(j)PTJjp·
05,j<8
Osserviamo che f(j)P = f(j) per ogni j. Applicando la (3.1) otteniamo allora
Confrontando le due espressioni ricavate per 'Y P otteniamo f(ph = (~) 'Y;
siccome'Y -:j:. O, si ha dunque f(p) = (~) in F (cioè modulo p). Ma p> 2 e
tanto f(p) quanto (~) valgono O o ±1 in Z. Perciò f(p) = (~) anche in Z.
D
3.10 La Legge di Reciprocità Quadratica di Gauss 79
q-l
(-1)-2 ·-2
p-l (q)P 'Y.
(q)P 'Y.
Dunque
'Y P = (-1)-2-·-2-
q-l p-l
D'altra parte
=
- '"
~O::;j<p
( :Lqo) f~)2 .'jpo -
E 'I1JP - '"
UO::;j<p
(oJP ) (E)
q
o
'I1JP-
q.'-
- C) 2:O::;j<p q) 7]
(il lettore può controllare i dettagli per esercizio). Ora, per O :S j < q, anche
jp descrive tutte le possibili classi di resti modulo q perché p è diverso da q
e quindi è primo con q. Inoltre, se jp coincide con j' < q modulo q, allora
( t; ) f)
= ( e 7]jp = 7]1'. Quindi 2: o ::;j<p ( t; )
7]jp coincide con 'Y e
da cui, dividendo per l' (che è diverso da O perché 1'2 = ±q e q è primo con
p), si ricava in F
(~) = (_l)q;l.P;l (~) .
Siccome gli elementi coinvolti valgono ±1 in Z, procedendo come alla fine del
teorema precedente possiamo dedurne
A tal fine, cominciamo con l'osservare che l' = LO<j<p ( ~ ) 17j si può anche
scrivere LO<j<p ( f)
17j perché ( ~ ) = O. Anzi, vist; che al variare di j da 1
a p-l anche - j descrive tutte le classi non nulle di resti modulo p, possiamo
esprimere l' anche nella forma l' = LO<k<p ( ~k ) 17-k e dunque scrivere
2
'Y = (-1)-2
q-l (1)q q= (-1)-2
q-l
q
· .
D lmostrazlone. a-
p+l
4- e ( -a ) -p+l
4-
h anno lo stesso qua d rato. D
Esempi 3.11.3
1. Sia p = 3, allora 1 è residuo quadratico modulo 3, -1 no.
2. Sia p = 7 == 3 (mod4). I residui quadratici modulo 7 sono 1, 2, 4, i non
residui 6, 5, e 3, cioè -1, -2, -4.
82 3 Potenze, Radici e Logaritmi
Ci si può allora domandare quanti siano i primi p == 3 (mod 4), quelli a cui i
precedenti risultati si applicano. Un teorema di Dirichlet assicura che ci sono
infiniti primi == a (mod b) purché a e b siano primi tra loro, dunque anche
quando a = 3 e b = 4. Una dimostrazione diretta di questo risultato nel caso
particolare che ci interessa si può ottenere nel modo sotto suggerito.
Come vedremo nel capitolo finale del libro, i gruppi ciclici moltiplicativi dei
campi finiti sono spesso utili nelle applicazioni crittografiche. Ma ci sono altri
gruppi commutativi finiti che giocano ruolo analogo, talora anche più signifi-
cativo: sono quelli che derivano dalle curve ellittiche sui campi finiti. Questo
paragrafo è dedicato a darne breve introduzione.
Cominciamo col richiamare che cosa si intende per curva ellittica su un
campo F (qui F è un campo arbitrario, anche se, come già annunciato, ci
interesseremo nel seguito essenzialmente al caso in cui F è finito).
Definizione 3.12.1 Una curva ellittica su F è una curva cubica non singo-
lare in due variabili su F.
(3.3)
(3.4)
che rispetto alla (3.3) non riesce più a eliminare il termine in x2; quando poi
la caratteristica è 2, e quindi in particolare per campi che hanno per ordine
una potenza di 2, si ha una formula ancor più complicata
(3.5)
-1
-1
-1
Osservazioni 3.12.3
1. Siano P I == (Xl, yd, P2 == (X2, Y2) due punti distinti (e diversi da O) sulla
curva ellittica. Assumiamo in particolare Xl -::f- X2. Allora la retta che li
congiunge interseca la curva ellittica in un terzo punto. Infatti la retta ha
equazione y = 112.::::.J1.l. • (x - Xl) + YI e, sostituendo questa espressione di Y
X2- X l
nell' equazione y2 = x + ax + (3 della curva si ottiene un polinomio di terzo
3
grado in X che ha due radici Xl -::f- X2, e dunque deve ammettere una terza
soluzione, che corrisponde ad una terza intersezione tra retta e curva. Al
limite questa terza intersezione può coincidere ancora con (Xl, yd - o con
3.12 Curve Ellittiche, per finire 85
(X2, Y2) - nel qual caso la retta è la tangente alla curva in (Xl, Yd - o in
(X2, Y2) - e ha intersezione doppia con la curva in quel punto.
Si noti poi che, per Xl = X2, i due punti P l , P2 finiscono con l'avere
ordinate opposte Yl = -Y2 e la retta che li congiunge è parallela all'asse
Y e non può avere più di due intersezioni con la curva ellittica.
2. Ammettiamo adesso Pl , P2 coincidenti, cioè (Xl, Yd = (X2, Y2), ma Yl f::- O.
Di nuovo, la retta tangente alla curva ellittica in (Xl, Yd ha un'ulteriore
intersezione con la curva. Infatti la retta ha ancora equazione della forma
Y = mx + q per m e q opportuni ed è possibile procedere come sopra per
individuare la terza intersezione. Invece, per (xl,Yd = (X2,Y2) e Yl = O,
la tangente è parallela all'asse Y e non interseca ulteriormente la curva
ellittica.
e
86 3 Potenze, Radici e Logaritmi
Una paziente verifica dimostra allora che la curva ellittica assume una struttu-
ra di gruppo commutativo rispetto a +; ad esempio, O risulta essere l'elemento
neutro, e l'opposto di un punto P =I- O è il suo simmetrico rispetto all'asse
x. Si noti poi che la proprietà commutativa Pl + P2 = P2 + P l è ovviamente
verificata.
Concentriamoci adesso sul caso in cui F è un campo finito, F = F q dove q è la
potenza di qualche primo. Assumiamo per semplicità che F abbia caratteri-
stica =I- 2,3, cioè che q non sia potenza né di 2 né di 3. Così possiamo lavorare
con curve ellittiche di equazione
A questi punti dobbiamo poi aggiungere quello all'infinito, per cui si conclude
O se z = O,
X(z) = { 1 se z -::f- O e z è un quadrato in F,
-1 se z -::f- O ma z non è un quadrato in F.
zEF q zEF q
q + 1 - 2yq ~ I E I~ q + 1 + 2yq.
Per una dimostrazione, si vedano i testi sulle curve ellittiche citati nei
riferimenti bibliografici a fine capitolo.
Adesso vogliamo approfondire la struttura di E come gruppo abeliano finito.
Ricordiamo che E è gruppo additivo. In particolare, per P punto di E e m
intero positivo, si considera, invece della potenza, il multiplo m-mo di P,
introdotto nel modo consueto:
dove l, h sono interi positivi, con operazione binaria definita nel modo ovvio,
componente per componente,
Esercizi 3.12.7
1. Si indichi quali delle seguenti congruenze sono vere e quali no:
• 34109 == 34 (mod109);
• 2600 == 1 (mod601).
Inoltre si determini (se esiste) l'inverso di 2 modulo 601.
2. Si calcolino 4>(167), 4>(1331), 4>(4116).
3. Sia N un intero positivo tale che cp(N)2 = cp(N 2). Che cosa si può dire di
N?
4. Si elenchino i residui quadratici modulo 7 e quelli modulo 13.
5. Il simbolo di Legendre ( 7~0 ) vale 1 o -l?
6. Siano m un primo dispari, p un fattore primo dell'm-mo numero di
Mersenne M (m) = 2m - 1. Si provi che
p == 1 (modm) e p == ±1 (mod8).
Riferimenti bibliografici
di E. Borel, "un evento la cui probabilità è :::; 10-50 non accadrà mai, e co-
munque non sarà mai osservato". Dunque, se la risposta alla nostra domanda
è precisa a meno di 10-50 ed arriva in tempi rapidi, allora possiamo accettar-
la, se non proprio con certezza assoluta, almeno "al di là di ogni ragionevole
dubbio".
In linea teorica, ci sono due tipi di algoritmi probabilistici. I primi si chiamano
di tipo Montecarlo ed hanno la seguente caratteristica: su ogni input N danno
la loro risposta, magari scorretta, fornendo comunque la probabilità di errore.
È il modello che abbiamo appena descritto: se svolto rapidamente, garantisce
risposte probabilmente vere in tempi certamente rapidi.
Un altro tipo di algoritmo probabilistico, concorrenziale al precedente, è quello
chiamato Las Vegas: in esso la risposta a un dato input N, quando arriva, è
sempre corretta, ma è ammessa la facoltà di tacere, tergiversare e in definitiva
di non rispondere. Dunque uno svolgimento rapido nei casi positivi garantisce
stavolta
risposte certamente vere in tempi probabilmente rapidi.
Nel caso della primalità, l'algoritmo probabilistico più famoso (ed adoperato)
è quello di Miller e Rabin. Si basa (anche se in modo non direttissimo) sul
Piccolo Teorema di Fermat. In effetti nel 1976 Miller si riferì al Teorema di
Fermat per ottenere un algoritmo deterministico di primalità e ne provò l'ef-
ficienza polinomiale purché si assumesse come vera l'Ipotesi di Riemann (più
precisamente, una sua versione generalizzata). Successivamente Rabin adattò
l'idea per ottenere un algoritmo probabilistico di tipo Montecarlo, che risolve
il problema di primalità in tempo polinomiale e con una possibilità di errore
relativamente trascurabile. L'algoritmo di Miller e Rabin sarà il tema del pa-
ragrafo 6. Un altro famoso procedimento Montecarlo di primalità è quello di
Solovay-Strassen, basato sulla teoria dei residui quadratici ed in particolare su
quel Teorema di Eulero che riguarda il simbolo di Legendre: ne riferiremo nel
paragrafo 5. Tanto la procedura di Solovay-Strassen quanto quella di Miller-
Rabin si dimostrano pienamente affidabili quando dichiarano un numero N
COMPOSTO, fallibili altrimenti. Ci sono algoritmi probabilistici che, vice-
versa, hanno certezza assoluta quando dicono N PRIMO, ma non altrimenti.
Uno tra i più famosi pare quello formulato da Adleman e Huang nel 1992,
basato sulla teoria delle curve ellittiche e iperellittiche, tanto bello in teoria
quanto macchinoso e complicato nella pratica (uno assai più efficiente è stato
architettato recentemente da Bernstein e Berrizbeitia sulla base di AK S).
Nel 1983 Adleman, Pomerance, Rumely (e Cohen, Lenstra) ottennero un nuo-
vo sostanziale progresso per il problema di primalità, scoprendo un algoritmo
deterministico che lavora in (log N)O(log log log N) passi: un tempo non ancora
polinomiale, comunque meno che esponenziale, certamente preferibile a quello
di tutti i precedenti procedimenti deterministici conosciuti, e quasi accettabile
secondo i moderni parametri di efficienza. L'algoritmo di Adleman, Pomeran-
ce e Rumely adopera una generalizzazione del Piccolo Teorema di Fermat al
94 4 Il Problema della Primalità
caso in cui gli interi sono allargati con radici primitive complesse dell'unità.
Miglioramenti non sostanziali furono proposti negli anni successivi da Gold-
wasser e Kilian (1986) e altri. La teoria delle curve ellittiche è spesso utilizzata
in questi tentativi. Ad esempio, l'algoritmo di Goldwasser-Kilian fa esplicito
uso delle curve ellittiche.
Un discorso particolare merita il tema degli algoritmi quantistici. Essi si ba-
sano su progressi in quella parte della Fisica che si chiama Meccanica Quanti-
stica e possono essere sostanzialmente più rapidi degli usuali procedimenti di
calcolo. Da un punto di vista teorico, un fenomeno denominato parallelismo
quantistico dà infatti la chiave per svolgere in parallelo un numero esponenzia-
le di computazioni. Un altro fenomeno, la interferenza quantistica, permette,
sempre in linea teorica, di identificare con opportune procedure, tra le varie
computazioni parallele, quella corretta. Per questa via si è giunti a proporre in
teoria un modello di calcolatore quantistico che ancora corrisponde alla Tesi di
Turing e dunque non modifica la relativa proposta di definizione del concetto
di algoritmo, ma sembra accelerare (in linea teorica) l'efficienza delle compu-
tazioni. Ma (c'è sempre un ma), dal punto di vista pratico, un soddisfacente
sviluppo dei calcolatori quantistici sembra lontano, a causa di un fenomeno
chiamato decoerenza quantistica e causato dall'influsso dell'ambiente esterno
sul computer. C'è chi esprime pessimismo sul superamento di questo ostacolo
e quindi sull'uso pratico del modello computazionale quantistico. A proposito
dei numeri primi c'è comunque da dire che nel 1994 Peter Shor ha proposto un
algoritmo quantistico polinomiale per la decomposizione in fattori primi dei
naturali 2: 2, e dunque tanto per la fattorizzazione che per la primalità. Ma
la sua attuazione pratica richiede, ovviamente, il superamento degli ostacoli
sopra citati a proposito della costruzione effettiva di macchine quantistiche.
Ritornando al contesto deterministico, si è finalmente giunti nel 2002 alla ela-
borazione di un algoritmo polinomiale (dunque efficiente) di primalità: quello
proposto da Agrawal, Kayal e Saxena di cui abbiamo già parlato all'inizio di
questo paragrafo e riferiremo in maggior dettaglio nel successivo paragrafo 7.
Il paragrafo finale 8 sarà ancora dedicato ad AK S, per la precisione ad una
panoramica dei suoi perfezionamenti più recenti.
e quindi
(N - I)! == 1 . (N - 1) == -1 (mod N).
D
primalità di 341, 3 (che pure è primo con 341) si comporta onestamente, per-
ché 3340 ::j. 1 (mod341) (si veda ancora il paragrafo 3.4). Potremmo allora
correggere l'impostazione della domanda precedente e rafforzarne le ipotesi:
• supponiamo che, per ogni intero a primo con N, 1 < a < N, si abbia
a N - 1 == 1 (modN); possiamo dedurne che N è primo?
Si noti che il controllo della congruenza a N - 1 == 1 (modN) per tutti gli a
primi con N allunga i tempi oltre i limiti richiesti di rapidità: infatti gli interi
a da controllare sono, per N primo, in numero di N-L Ma, al di là della
dilatazione dei costi di lavoro, dobbiamo prendere atto che la risposta alla
seconda domanda è comunque nuovamente negativa: ad esempio, si verifica
che N = 561 = 3 . 11 . 17 non è primo, eppure ogni intero a primo con 561
soddisfa a560 == 1 (mod561). Carmichael osservò questo esempio nel 1910.
Dunque il Piccolo Teorema di Fermat non è in nessun caso criterio sufficiente
per la primalità. A questo proposito proponiamo la seguente
Definizione 4.2.2 Siano N un numero intero composto dispari> 2, a un
intero. Se vale a N - 1 == 1 (modN), N si dice uno pseudoprimo in base a.
In altre parole, uno pseudoprimo in base a è un numero composto N che
pretende di essere primo perché trova il testimone a disposto ad affermare, in
omaggio al Piccolo Teorema di Fermat, a N - 1 == 1 (modN).
Già abbiamo avuto modo di incontrare numeri pseudoprimi in qualche base
assegnata: 341 lo è in base 2. Un altro esempio è costituito da 91, che è
pseudoprimo in base 3 ma non in base 2. Infatti 91 = 7 . 13 è composto
(dispari) ed è primo sia con 3 che con 2, ed inoltre
Esempi 4.2.5
1. Come già detto, 561 è pseudoprimo di Carmichael. Infatti 561 = 3 ·11·17
e 560 è divisibile per lO e 16, dunque anche per 2. In realtà 561 è il più
piccolo esempio di pseudoprimo di Carmichael.
2. Anche 1105, 1729 sono pseudoprimi di Carmichael. Infatti 1105 si decom-
pone in fattori primi come 5 . 13 . 17 e 1104 è multiplo di 12 e di 16,
dunque anche di 4; allo stesso modo 1729 = 7· 13· 19 e 1728 è multiplo di
12 e 18, quindi anche di 6. 561, 1105 e 1729 sono gli unici pseudoprimi di
Carmichael minori di 2000.
3. D'altra parte Alford, Granville e Pomerance hanno provato nel 1994 che
esistono infiniti pseudoprimi di Carmichael: anzi, al variare di x tra gli
interi, il numero degli pseudoprimi di Carmichael ~ x è asintoticamente
O(x!).
N
a == 1 (mod k ).
p
Allora a e N sono primi tra loro perché p non divide a e (a, ;,) = 1. Inoltre
anche a ha periodo </J(p2) = p' (p - 1) modulo p2 perché a == g (mod p 2).
Vogliamo provare che N non è pseudoprimo rispetto alla base a (e dunque
non è pseudoprimo di Carmichael). Infatti, se a N - 1 == 1 (modN), allora deve
essere a N - 1 == 1 (mod p 2) e quindi </J(p2) divide N -1, in particolare p I N-L
Ma p divide anche N, e dunque ne deduciamo p Il (una contraddizione).
2. Sia dapprima p-l I N - l per ogni divisore primo p di N. Prendiamo un
intero a primo con N. Allora, per ogni divisore primo p di N, a è primo con
p e quindi soddisfa a P - 1 == 1 (modp) ed anzi, visto che p - l divide N-l,
a N - 1 == 1 (modp). Adesso ricordiamoci che N è il prodotto dei suoi fattori
primi distinti p, e deduciamone a N - 1 == 1 (modN). Siccome questo vale per
ogni a, abbiamo provato che N è uno pseudoprimo di Carmichael.
Viceversa, supponiamo che ci sia qualche divisore primo p di N per cui p-l
non divide N-l e mostriamo che N non è uno pseudoprimo di Carmichael, e
cioè che, per qualche intero a primo con N, a N - 1 =t= 1 (modN). Consideriamo
infatti un intero g primo con p che genera il gruppo moltiplicativo di Zp
98 4 Il Problema della Primalità
= (modp), a = (mod-).
a 9 1
N
p
Anche stavolta, però, emerge un difetto che pregiudica l'attuazione pratica del
criterio. Infatti il controllo di (ii)' richiede preliminarmente la decomposizione
in fattori primi di N -1, che non è obiettivo più agevole della primalità di N.
Si noti comunque che (ii)' può essere ulteriormente riformulato in modo solo
apparentemente più debole. Ci basta infatti garantire a m =t 1 (mod N) per
tutti i divisori m -I- N -1 di N -1 massimali rispetto alla divisibilità. Infatti, se
a m =t 1 (modN) per un tale m, vale ad =t 1 (modN) per ogni divisore d di m;
quindi, se a m =t 1 (mod N) per ogni divisore massimale m, vale ad =t 1 (mod N)
per ogni divisore d -I- N -1 di N -1. D'altra parte i divisori m così individuati
sono tutti e soli quelli della forma N;;l per q fattore primo di N-L Se ne
ricava il seguente risultato di Lehmer.
100 4 Il Problema della Primalità
Ma anche stavolta emerge un difetto, che è poi lo stesso di (ii)'; infatti (ii)"
richiede di individuare preliminarmente i primi q e dunque nuovamente di de-
comporre N-l nei suoi fattori primi.
Un'altra, elegante caratterizzazione della primalità, ancora basata sul Piccolo
Teorema di Fermat, è la seguente. Non basta di per sé a garantire una proce-
dura rapida di decisione per i numeri primi, ma la troveremo utile fondamento
proprio dell'algoritmo AK S.
(x + a)N, xN +a
sono identicamente uguali modulo N (nel senso che i loro coefficienti di ugual
grado sono a due a due congrui modulo N).
N) = N· (N -1)· .... (N - q + 1)
(
q q·(q-1)· ... ·1
4.4 Primi e N P
I risultati dello scorso paragrafo bastano a garantire che la questione della pri-
malità sta, se non proprio nella classe P dei problemi che hanno procedimenti
rapidi di soluzione, almeno nella classe N P dei problemi che hanno almeno un
algoritmo rapido di verifica delle soluzioni. Ricordiamo infatti la definizione
informale di N P nel caso di insiemi S di naturali: si conviene che S è in N P se
e solo se c'è una procedura effettiva che, per ogni N in S, conferma in tempo
rapido che N sta, appunto, in S, ricorrendo semmai a qualche testimone t che
abbia lunghezza polinomialmente limitata da quella di N.
Esempio 4.4.1 L'insieme dei numeri composti è in NP. Infatti sia N com-
posto. Per verificarlo ci basta citare un testimone t f::- 1, N che divida N;
infatti un tale t ha lunghezza ovviamente minore o uguale a quella di N; si
deve poi controllare che t divida N, cioè che la divisione di N per t dia resto
O; ma tutto questo si può fare in tempo rapido, come richiesto.
Certamente Cole dovette lavorare molto per raggiungere questo risultato, tan-
to più che, ai suoi tempi, il potente software G I M P S non era certamente
disponibile. Pur tuttavia, la relativa verifica si restringe ad un unico rigo, e si
svolge comunque in tempi rapidi: infatti, se si conoscono i fattori t di M(67)
sopra citati, o anche uno solo dei due, si fa presto a controllarla.
È da sottolineare che le considerazioni dell'esempio 4.4.1 valgono solo per l'in-
sieme dei composti e non si applicano invece a quello dei primi, non servono
cioè a provare che anche quest'ultimo è in NP. Infatti, se N è primo e se ne
cerca la conferma, non ci basta osservare che un qualche t < N, t f::- 1, N, non
divide N, dobbiamo invece estendere la verifica a ogni possibile t, con ovvia
dilatazione dei tempi di lavoro.
102 4 Il Problema della Primalità
Comunque, anche l'insieme dei primi sta in NP, come si può mostrare ri-
correndo ad altri argomenti, ed in particolare ai risultati di Lucas e Lehmer
menzionati poco fa.
Teorema 4.5.3 Sia N un intero positivo composto dispari. Allora per almeno
metà di cjJ(N) interi a primi con N, ed a due a due incongrui modulo N, non
vale la congruenza
Consideriamo allora il prodotto ab, che rimane primo con Ne torna a rifiutare
(*)
(ab)-2-
N-l
t (ab)
N (modN),
altrimenti
a-
N-l
2- =- (
Na ) (modN),
il che è assurdo.
In questo modo, se bI, ... , bs sono s interi primi con N, a 2 a 2 incongrui
modulo N, tutti capaci di soddisfare (*), possiamo ottenere altrettanti interi
ab l , ... , ab s ancora primi con N ed incongrui modulo N per i quali però (*)
non vale più. In conclusione, su cjJ(N) interi primi con N ed a 2 a 2 incongrui
modulo N, almeno la metà non soddisfa (*).
Possiamo allora concentrarci a trovare un intero a primo con N per cui (*)
non vale. Ricordiamo che N è composto dispari > 2 e dunque è il prodotto
di almeno due primi (non necessariamente distinti). Distinguiamo allora due
casi nella nostra ricerca.
1. N non è libero da quadrati, e cioè esiste un primo p tale che p2 I N.
2. N è libero da quadrati, e cioè è il prodotto di primi distinti.
Discutiamo anzitutto il Caso 1. Sia pk la massima potenza di p che divide
N: dunque k ~ 2. Siccome (N) = ±1, ci basta trovare un qualche intero
a primo con N per cui a N; l t
± 1 (mod N). Se un tale a non esiste, ogni
intero a primo con N soddisfa aN;1 =-
±1 (modN) e dunque, quadrando,
aN - I =-
1 (modN), in altre parole tutti gli elementi invertibili di ZN hanno
4.5 L'Algoritmo di Solovay-Strassen 105
N
(~) = -1, a == 1 (mod-).
P
Esempi 4.5.4
1. Il numero N = 29 è primo e, in effetti, l'algoritmo di Solovay-Strassen lo
dichiara PROBABILMENTE PRIMO quando ricorre al testimone a = 2.
Infatti 2 è primo con 29 e, inoltre, ( 229 ) = -1 (perché 29 t'- ±1 (mod8))
14
e 2-2- = 2 == -1 (mod29).
29-1
aT == (a")
N-l
~ (modN), 1 :S j :S k,
D'altra parte, per un singolo a, i tempi di calcolo di (a, N), a N:;l e ( N) richie-
dono, allo stato attuale delle conoscenze, O(log~ N) passi; dunque l'incertezza
della risposta nella procedura probabilistica è compensata dalla rapidità della
computazione. Né i 200 controlli utili per ridurre il margine di errore a meno
di 10-50 alterano questa stima dei tempi di lavoro; infatti, secondo i dettami
dell'Informatica Teorica, 200 log~ N è ancora O(log~ N).
Invece abbiamo già osservato che l'adattamento deterministico dell'algoritmo,
volto a ottenere risposte assolutamente sicure, richiede, almeno per N primo,
<!>C;rl = N : / controlli, dunque un tempo esponenziale rispetto alla lunghezza
dell'input N, ed in conclusione non è efficiente.
L'algoritmo di Solovay-Strassen è, in definitiva, un ottimo esempio di algo-
ritmo probabilistico di primalità di tipo Montecarlo: per ogni input N, dà
la risposta, magari non corretta, ma la probabilità di errore si abbassa ra-
pidamente a limiti quasi impercettibili. Anzi una delle due possibili risposte
(quella che dichiara N COMPOSTO) è assolutamente esatta.
aN - 1 == 1 (modN).
Ma N-l è pari, quindi possiamo scrivere
quindi
N-l
a-4- == ±1 (modN),
e via dicendo. Per maggior precisione scriviamo N-l = 28 • t con s, t naturali
opportuni, s positivo e t dispari. Allora abbiamo in partenza
108 4 Il Problema della Primalità
da cui deduciamo a 2s - 1
• t == ±1 (modN). Se poi a 2s - 1 •t == 1 (modN) es 2: 2,
allora si ha
Esempi 4.6.1
1. Il numero N = 29 è primo e, in effetti, l'algoritmo di Miller-Rabin lo
dichiara PROBABILMENTE PRIMO quando ricorre al testimone a = 2.
Infatti si nota anzitutto che 29 - 1 = 28 = 2 2 . 7 e poi, in riferimento alla
base 2, che
222 . 7 == 1 (mod29), 22 . 7 == -1 (mod29).
2. N = 341 è invece composto, e l'algoritmo di Miller-Rabin lo riconosce
come tale se ricorre ad a = 2. Infatti si nota preliminarmente che 340 =
22 ·85 e poi, appunto in riferimento a 2, che
ma
285 =t ±1 (mod341).
Notiamo che, come nel caso del test di , quando l'algoritmo dichiara N COM-
POSTO, allora N è certamente composto. Ma non possiamo escludere a priori
che l'algoritmo (per una particolare scelta di a) dichiari PROBABILMENTE
PRIMO un numero N che invece è composto. Diciamo allora che N è uno
pseudoprimo forte in base a. Dunque si pone:
4.6 L'Algoritmo di Miller-Rabin 109
(ii) per ogni N composto, esiste un intero positivo a < B(N) primo con N
tale che N non è pseudoprimo forte in base a.
Sotto queste condizioni, per controllare in modo deterministico e rapido la
primalità di un input arbitrario N, ci basta applicare la procedura di Miller-
Rabin a B(N) basi distinte a prime con N e < N: se il test dichiara N
COMPOSTO almeno una volta, allora N è composto, mentre se il test di-
chiara ogni volta N PROBABILMENTE PRIMO possiamo concludere con
sicurezza che N è primo; inoltre il numero dei passi richiesti da queste verifi-
che è polinomialmente limitato rispetto alla lunghezza di N. In effetti, quanto
Miller dimostrò nel 1976 è il risultato che segue.
Teorema 4.6.3 (Miller) Se vale l'Ipotesi di Riemann (in una forma estesa),
allora si può determinare una funzione B come sopra (più precisamente, si
ha B(N) :::; 210g 2 N + 1 per ogni N).
Questi due risultati sono dovuti a Rabin, che osservò come l'idea iniziale
di Miller (sviluppatasi nel Teorema 4.6.3) poteva adattarsi ad un algoritmo
probabilistico di primalità. Ecco alcuni cenni sulle relative prove. Il lettore non
interessato ai loro dettagli può procedere direttamente al paragrafo successivo.
Dimostrazione di 4.6.4. Poniamo ancora N-I = 28 • t con t e s naturali,
s positivo e t dispari. Sia poi a primo con N tale che a t == 1 (mod N) oppure
a 2r .t == -1 (modN) per qualche r < S; dunque N è pseudoprimo forte in base
a. Dobbiamo provare che a N 2 1 == ( N) (modN). Il caso in cui at == 1 (modN)
è facile da trattare. Infatti l'assunzione implica a N 2 1 == 1 (mod N), e dobbiamo
quindi controllare ( N) = 1. Ma nuovamente da a t == 1 (mod N) deduciamo
( -a)t =
_ ( P-l)t _ ( 28'-1.t')t _ (( 28-l.t')t)28'-8 _ (
a 2 = a = a = -1
)28'-8 _ ( )
= 1 mod p ,
p
con s', s", t' e t" naturali, s' e s" positivi, t' e t" dispari. Possiamo anche
supporre senza perdita di generalità s' ~ s". Dobbiamo stimare il numero
degli interi a primi con N e compresi tra 1 e N per cui N è pseudoprimo forte
in base a e dunque soddisfa
i) at == 1 (modN) (che è come dire at == 1 (modp') e a t == 1 (modp"))
oppure
ii) per qualche naturale r < s, a 2r .t == -1 (modN) (equivalentemente, a 2r .t è
congruo a -1 sia modulo p' che modulo p").
4.6 L'Algoritmo di Miller-Rabin 113
a 2r .t == -1 (modp') , a 2r .t == -1 (modp")
è, rispettivamente,
2r . (t, t'), 2r . (t, t");
come prima, si deduce che ci sono al massimo 4 r t't" modi di trovare un a che
soddisfi ii).
Riassumendo, il numero totale delle possibili classi modulo N di interi a primi
con N capaci di soddisfare i) o ii) per qualche r < s' è al più
t't" + L 4 r t't"
O::;r<8'
(il primo addendo si riferisce ai), il secondo a ii) al variare di r). Invece il
numero complessivo delle classi modulo N di interi primi con N è esattamente
1 + LO<r<8' 4 r
28 ' +8" t't" 28 '+8"
= 2- 8 , ,,(1 + 4-=--1
-8 •
4 1) 8
' -
= T ,,, (23" + 34
8 -8 •
8
')
.
Per s" > s', questa probabilità risulta
< 2- 28 '-1. ( -2 + -4 2 1 1
- 3 3
8
') <2
-
-3
.-+-=-
3 6 4'
come desiderato.
Il caso s" = s' richiede qualche maggiore discussione. Anzitutto notiamo che
t' e t" non possono dividere contemporaneamente t. Supponiamo infatti il
contrario, e dunque che t sia multiplo tanto di t' quanto di t". In particolare
t' divide anche N-L Siccome
(x + a)N == x N + a (mod N, x T - 1)
ancora equivale alla primalità di N. Ora, non v'è alcun dubbio che, se N
è primo, allora (x + a)N - (x N + a) si può scrivere nella forma desiderata
N . g(x) + (x T - 1) . h(x) per ogni scelta di r, visto che si ha addirittura
(x + a)N - (x N + a) = N· g(x)
per qualche g(x). Ma il problema è se, viceversa, la validità della condizione
può anzitutto supporre h :S log2 N (visto che M 2: 2). Dunque il numero dei
possibili valori dell'esponente h è limitato polinomialmente dalla lunghezza di
N. In questo ambito dobbiamo individuare h in modo tale che N = l N* J.
Ma nulla ci garantisce a priori che, per un dato h, il calcolo di N* e la verifica
della sua eventuale interezza si possano svolgere in modo rapido (e questo è
in effetti il nocciolo della questione). Esistono comunque strategie vincenti a
questo proposito. In particolare, c'è una procedura di Bernstein che lavora in
tempi O(log~ N) (ed anche inferiori nelle sue implementazioni più efficaci): l'i-
dea è quella di lavorare tramite approssimazioni che accelerino i calcoli senza
pregiudicare la correttezza dei risultati. L'algoritmo lavora infatti in partenza
su ogni candidato h COn una precisione di 3+ l(~) bits (come è ragionevole, vi-
sto che ciò che stiamo cercando è N* = 2109~ N ); h viene scartato se il risultato
approssimato non è abbastanza vicino ad un intero; altrimenti si raddoppia
la precisione e si controlla nuovamente. In conclusione, la complessità totale
di 1) si può ridurre a O(log~ N).
e degli elementi g(v) = ITa:<;l(v + a)ka che essi definiscono in F (nel seguito
indichiamo con Z l'insieme di questi polinomi). È da notare che tutti questi
elementi sono diversi da O in F. Infatti, siccome F è un campo e dunque non
ha divisori dello zero, ci basta osservare
v + a :I O per ogni a :S l.
Vediamo perché.
Lemma 4.7.4 Siano k,k' naturali tra loro congrui modulo Nm-l. Se k E S,
anche k' E S.
Xk (modp, x T -1) ricaviamo g(x k') == g(xk) (modp, x T -1), e dunque g(x k') ==
g(x)k (modp, x T - 1). Resta da mostrare g(x)k == g(x)k' (modp, x T - 1). Ma
questo si ottiene osservando che N m E S (come potenza di N E S) e quindi,
per (c), g(X)N m == g(XN m) == g(x) (modp,x T -1): a questo punto, applicando
la congruenza polinomiale sopra provata per xk == x k' (mod p, x T - 1) quan-
do x è sostituito da g(x), si conclude g(x)k == g(x)k' (modp,x T - 1), come
desiderato. D
dunque
g(Xk) - g'(xk) == g(x)k - g'(x)k (modp,x T -1),
quindi anche modulo p, h(x). D'altra parte g(x)k - g'(x)k è divisibile per
g(x) - g'(x) già in Z[x], pertanto g(x)k == g'(x)k (modp, h(x)), da cui segue
g(xk) == g'(xk) (modp, h(x)), cioè g(v k ) - g'(v k ) = 0, come annunciato.
122 4 Il Problema della Primalità
Inoltre
l = lv'rlog2NJ > l-/Slog2NJ.
Per ogni sottoinsieme non vuoto T di {O, 1, ... , l -/s log2 NJ}, costruiamo il
polinomio
gT(X) = II (x + a),
aET
come previsto.
Questo chiude la dimostrazione. D
4.8 Variazioni su AK S
La prima versione dell'algoritmo AKS fu divulgata, come già riferito, nel-
l'estate 2002, e suscitò subito interesse, reazioni, commenti, suggerimenti su
possibili miglioramenti e implementazioni. Gli stessi Agrawal, Kayal, e Saxena
hanno quindi provveduto negli anni successivi a perfezionare l'idea originaria
e a darne nuove formulazioni. Accenniamo in questo paragrafo a due recen-
ti e notevoli sviluppi, che migliorano ulteriormente AK S dal punto di vista
pratico, abbassandone i tempi di lavoro.
Il primo è dovuto essenzialmente a Bernstein e Berrizbeitia (con contributi di
Cheng) e si basa sulle seguenti considerazioni.
4.8 Variazioni su AK S 123
È chiaro che (1) e (2) sono soddisfatte quando N è primo. (2) segue in par-
ticolare ancora dal teorema 4.3.4, che è già alla base di AK S. Così il punto
cruciale della dimostrazione è escludere (1) e (2) quando N è composto.
Si ottiene comunque una nuova elegante caratterizzazione della primalità, che
modifica e perfeziona AK S ed ha anche il pregio di originare un algoritmo
probabilistico di primalità di tipo Montecarlo che, ricorrendo ai testimoni
g(x), d' per f(x) opportuno
• lavora in tempo approssimativamente O(logi N),
• è pienamente affidabile quando risponde N PRIMO, mentre ha probabilità
di errore :S ~ quando azzarda N COMPOSTO.
Dunque 200 successive iter azioni con la comune conclusione N COMPOSTO
abbassano il margine di imprecisione ben sotto al fatidico livello di 10-50. Si
noti la simmetria con i procedimenti di Solovay-Strassen e di Miller-Rabin,
che garantiscono sicurezza assoluta quando rispondono N COMPOSTO, e
altrimenti probabilità :S ~, t rispettivamente che la risposta N PRIMO sia
corretta.
124 4 Il Problema della Primalità
Combinando l'uno o l'altro di tali algoritmi con questa nuova procedura ba-
sata sul teorema di Bernstein-Berrizbeitia, si ha certezza quasi definitiva di
riconoscere se un dato N è primo o composto in tempo complessivamente
rapido, approssimativamente O(logi N). Basta svolgere le due procedure in
parallelo: una risposta N COMPOSTO dall'algoritmo di Solovay-Strassen o
da quello di Miller-Rabin assicura che N è davvero composto, e una risposta
N PRIMO da parte del nuovo algoritmo garantisce che N è davvero primo,
I casi eccezionali corrispondono alla situazione particolarmente sfortunata in
cui la prima procedura dichiara N PRIMO e la seconda N COMPOSTO.
Di recente è stato provato, comunque, anche un procedimento deterministico
di probabilità che si ispira ad AK S ma ne abbassa i tempi di lavoro alla soglia
di 6(log~ N) (la migliore possibile per AKS, come già osservato). L'algoritmo
è dovuto a Lenstra e Pomerance e opera sulla base della seguente osservazione
sui primi.
Esercizio 4.8.3 Sia N > 2 un primo. Si ricordi che ZN è un campo e si
consideri, come prima, un polinomio monico f(x) E Z[x] di grado d irriducibile
modulo N. Si dimostri:
(a) f(x N ) == O (modN, f(x)),
(b) x Nd == x (modN, f(x)),
(c) per ogni fattore primo q di d, x Nd / q - x è invertibile modulo N, f(x).
(Suggerimento. Come nell'esercizio precedente, si formi l'ampliamento sem-
plice F = ZN(V) di ZN con una radice v di f(x) modulo N. Si noti Wl = N d .
Siccome ogni intero a soddisfa a N == a (modN), si ha f(v N ) = (J(v))N=O-
da cui si ottiene (a) -. Si ricordi poi che V Nd = v, e si deduca (b). Quanto a
(c), si osservi che, per q divisore primo di d, non può essere v Nd / q = v, altri-
menti v sta in un campo con Nd/q elementi, mentre sappiamo che la minima
estensione di ZN con v è F e ha ordine Nd).
Lenstra e Pomerance provano allora:
Teorema 4.8.4 (Lenstra-Pomerance) Siano N un intero dispari> 2, d
un intero tale che log~ N < d < N, f(x) un polinomio monico a coefficienti
interi di grado d per cui valgono (a), (b) e (c). Allora N è primo se e solo se
(1) N non è potenza perfetta,
(2) N non ha fattori primi ~ d,
(3) (x + a)N = x N + a (modN, f(x)) per ogni intero positivo a < Vdlog2 N.
Ovviamente (1), (2), (3) valgono se N è primo, in particolare (3) richiama
ancora l'idea base di AKS. Così il punto chiave della dimostrazione è provare
che un numero composto N viola una delle tre condizioni.
Si noti poi che (1), (2), (3) sono rapide da verificare conoscendo f(x) e d.
Quindi per ottenere complessivamente una procedura veloce basta costruire in
tempi brevi un opportuno polinomio f(x). Le tecniche usate a questo proposito
4.8 Variazioni su AK S 125
Esercizi 4.8.5
l. Si indichi quali tra i seguenti numeri composti sono pseudoprimi di
Carmichael e quali no:
• 2167;
• 2465;
• 2821;
• 3025;
• 6601;
• 8911.
(Suggerimento: si sfruttino i teoremi 4.2.4 e 4.2.6).
2. Si provi che ogni numero di Fermat F(m) = 22 '" + 1 che non è primo è co-
munque pseudoprimo in base 2. (Suggerimento: è chiaro che 2 è primo con
ogni numero di Fermat F(m), è da provare che 2F (m)-1 == 1 (modF(m)),
cioè che F(m) divide 22 '" -1, per ogni m. Si osservi che 22 '" -1 = F(2 m )-2
e si ricordi che F(2 m ) - 2 eguaglia il prodotto degli F(i) per i < 2m . Si
noti che m < 2m per ogni m).
3. Si mostri in quali casi N è pseudoprimo di Eulero in base a:
• N = 3, a = 25;
• N = 7, a = 25;
• N = 11, a = 8;
• N=17,a=9;
• N = 19, a = 9.
4. Controllare attraverso i test di Solovay-Strassen e di Miller-Rabin la pri-
malità di 107, 139, 1807, 4693, 5879. Si richiede una probabilità massima
di errore dello 0,5%. Si confrontino poi le velocità tra i due metodi (per ri-
spettare la causalità della scelta dell'input a si utilizzi la funzione Random
presente in qualunque calcolatrice scientifica).
5. Si mostri che l'algoritmo di Miller-Rabin riconosce N = 13 e N = 561
come primi quando consulta a = 2. E l'algoritmo di Solovay-Strassen?
6. Si ricordi che 561 è composto. Si mostri che l'algoritmo di Miller-Rabin
lo dichiara probabilmente primo quando si affida al testimone a = 101.
Invece lo stesso algoritmo certifica che 561 è composto se interpella a = 2.
Riferimenti bibliografici
Una avvincente introduzione ai numeri primi è in [57]. [19] è un altro ottimo
riferimento, ancor più approfondito e dettagliato. Da citare è anche [38]. Il
126 4 Il Problema della Primalità
5.1 Introduzione
5.2 Il Metodo p - l
aS ! == 1 (modp),
in altre parole che p divide asl_l. Così p divide anche (as!-l, N), e (as!-l, N)
diventa un ragionevole candidato come divisore -::f- 1, N di N.
In conclusione il procedimento funziona come segue.
Metodo p-l (Pollard) Sia N composto dispari> 2. Si fissano
• un intero positivo s,
• un intero a tra 1 e N-l (ad esempio a = 2).
Si calcola anzitutto (a, N). Se (a, N) -::f- 1, allora (a, N) rivela un divisore
proprio di N. Altrimenti a e N sono primi tra loro e si calcolano
• - 1 modulo N,
aS !
• d = (a s ! - 1, N),
confidando che d costituisca il divisore proprio di N che stiamo cercando.
Si noti che s è indipendente da N e dalla sua lunghezza; così almeno in teoria
il calcolo di s! non incide sui tempi di lavoro dell'algoritmo; ovviamente, per
s piccolo, la computazione non attarda il procedimento neppure nella pratica.
Altrettanto può dirsi degli altri calcoli (di a s ! -1 modulo N, o dei due massimi
comuni divisori richiesti). Dunque il procedimento si svolge in tempi rapidi.
D'altra parte l'algoritmo non fornisce alcuna garanzia di successo, visto che si
5.3 Il Metodo p 129
basa sulla speranza di qualche premessa fortunata a proposito dei fattori primi
p di N. In questo senso il metodo p-l può fallire (per una scelta disgraziata
di s, o per particolari valori di N).
5.3 Il Metodo p
(j E N).
L'idea è quella di calcolare il massimo comune divisore (Xj - Xk, N) per ogni
scelta di j < k in N sperando di ricavarne un valore f::- 1, N. In tal caso,
(Xj - Xk, N) è il divisore proprio d di N che stiamo cercando. Il fondamento
del discorso è il seguente: sappiamo che c'è un divisore d f::- 1, N di N, anche
se non conosciamo d, e anzi cerchiamo di individuarlo; sappiamo anche che
gli elementi Xo, Xl, X2, ... , X j, X j+ 1, . .. (j E N) prima o poi contengono una
ripetizione modulo d perché Zd è finito: ci sono stime ragionevoli che fissano
questa ripetizione entro O( VN) passi, e anche prima. Si ha allora, per j < k,
Xj == Xk (modd), e quindi d divide non solo N, ma anche Xj - Xk. È da
prevedere che (Xj - Xk, N) possa allora rivelare proprio d, o comunque un
divisore proprio di N. Tra l'altro, si può ricordare che la ricerca di un singolo
massimo comune divisore si fa in tempi rapidi rispetto alla lunghezza di N.
Si noti poi che, se j < k sono gli indici che determinano la prima ripetizione
Xj == Xk (modd), allora si ha Xj+1 = f(xj) == f(Xk) = Xk+1 (modd) e via
dicendo, dunque la sequenza Xo, Xl, X2, ... , X j, ... , Xk, ... consiste di
• un ciclo Xj,"" Xk-1 che si ripete modulo d (nel senso che Xj == Xk (modd),
Xj+1 == Xk+1 (modd) e così via)
preceduto da
• una "coda" XO,X1,oo.,Xj-1'
130 5 Il Problema della Fattorizzazione
La figura che ne deriva (un ciclo più una coda) richiama la lettera greca rho
p; da qui nasce il nome del metodo.
Xo = 1, f(x) = x 2 + 1 \::Ix E Z.
Allora
Xl = 2, X2 = 5, X3 = 26, ... ;
si verifica (X3 - X2, N) = (26 - 5, 91) = (21,91) =
7. Deduciamo che 7 è
divisore di 91; è facile ricavare che 91 = 7· 13 è la decomposizione di 91 in
fattori primi.
Osservazioni 5.3.2
1. Si noti anzitutto che lavoriamo modulo N, possiamo conseguentemente
sostituire ciascun Xj con il suo resto nella divisione per N e supporlo tra
0,1, ... , N-L
2. A questo proposito, è essenziale che la funzione f si preservi per con-
gruenze modulo N, cioè che si abbia f(x) == f(x' ) (modN) ogni volta che
x == x' (mod N). È per questo che si sceglie f tra le funzioni polinomiali.
3. Bisogna comunque valutare con attenzione se la strategia appena esposta
ha speranza di rapido successo. In effetti dobbiamo prendere atto che,
fissato un naturale k e il corrispondente Xk, il procedimento prevede di
calcolare (Xj -Xk, N) per ogni naturale j < k; possiamo dunque aspettar-
ci tempi lunghi di computazione (sempre ammesso che si incontri davvero
prima o poi una coppia fortunata j < k).
4. Thttavia possiamo osservare che, se jo < ko permettono di determinare
un massimo comune divisore d = (Xjo - Xko' N) # 1, N, allora, per ogni
scelta di due naturali j e k tali che k - j = ko - jo (cioè k - ko = j - jo),
si ha d I (Xj - Xk, N). Infatti, per m = k - ko = j - jo, Xj == fm(xjo) ==
fm(Xko) == Xk (modd). Naturalmente può capitare che (Xj - Xk, N) > d;
ma si verifica che la probabilità di questo rischio è assai limitata, almeno
quando N è grande o, meglio, quando è prodotto di primi molto grandi (i
casi che maggiormente ci possono interessare nella pratica).
j = 2h+1 - 1, k= j + (k o - jo).
Allora
2h+ 1 :S k < 2h+ 2
e j corrisponde a k nel Metodo p. Dunque la coppia (i, k) è presa in conside-
razione dal procedimento di Pollard e, per la Osservazione 4 in 5.3.2, d divide
anche (Xj - Xk, N) e c'è forte probabilità che (Xj - Xk, N) :I N. Inoltre
Xo = 1, Xl = 2, X2 = 5, X3 = 26, X4 == 40 (mod91),
Procedendo col metodo p si ha
N=a·b
dove a+b
2
> a-b
2
e a+b _ a-b
2 2
= b> 1
. D
a = t + s, b = t - s,
a+b a-b
t = -2-' s = -2-
rispettivamente. Sulla base di questa osservazione possiamo cambiare l'impo-
stazione del nostro problema nel senso che segue.
• È dato un composto dispari N.
• Cerchiamo due interi positivi t, s tali che N = t 2 - s2 et- s > 1.
5.4 Fattorizzazione alla Fermat 133
• 25 2 - 609 = 16 = 42 ,
dunque
3·203 = 25 2 - 4 2 = (25 - 4) . (25 + 4) = 21 ·29
che rivela, appunto, che 29 divide 203.
La procedura che questi esempi lasciano intravedere sembra comunque abba-
stanza casuale ed estemporanea, troppo legata al buon esito dei tentativi e
all'umore di chi li compie. Cerchiamo allora di delinearla in modo più preciso.
Ribadiamo allora che
• è dato un numero composto dispari N
e che cerchiamo due interi positivi t e s tali che
• t 2 == S2 (mod N) (cioè t 2 - S2 = kN per qualche naturale k),
• t =t ±s (modN) (cioè N non divide né t - s né t + s).
In questo caso a = (t + s, N) è verosimilmente un divisore non banale di N,
mentre b = ~ divide molto probabilmente t-s. Dobbiamo però cercare un
qualche algoritmo che ci permetta di ottenere esplicitamente (e, se possibile,
rapidamente) t e s
• con lo stesso quadrato modulo N,
• ma né uguali né opposti modulo N.
A questo proposito converrà osservare che, come conseguenza del Teorema
del Resto Cinese, quando N ha almeno due fattori primi distinti, allora ogni
quadrato modulo N ha almeno 4 = 22 radici quadrate distinte modulo N (si
ricordi la proposizione 3.3.6). Ecco allora una procedura che cerca di produrre
t e s come richiesti. Per apprezzarla, ci serve introdurre preliminarmente la
seguente definizione.
Definizione 5.4.3 Chiamiamo minimo resto assoluto di un intero a rispetto
ad N l'intero r tale che
N N
r == a (modN), - - < r <-.
2 2
Esempio 5.4.4 Modulo 15 a = 39 ha resto 9, ma minimo resto assoluto
-6. Invece il resto e il minimo resto assoluto di a = 37 (sempre modulo 15)
coincidono (con 7).
fattori (primi o -1) da un opportuno insieme B = {Po, ... ,Ph}. Così, per
ogni i :::; k, si ha
b(i)2 == II
p;i,; (modN)
j5,.h
sia un numero pari e dunque si scriva come 2f3j per qualche intero f3j. In
tal caso, infatti,
3. Si ha allora
i5,.k j5,.h
Abbiamo già accennato al possibile impiego delle curve ellittiche nel problema
della primalità, ad esempio nell'algoritmo di Goldwasser-Kilian. D'altra parte,
almeno in quel contesto, i progressi determinati dal ricorso alle curve ellittiche
sono superati da AKS. Ma le curve ellittiche sono utili anche nel problema
della fattorizzazione, e anzi vi svolgono ruolo cruciale allo stato attuale delle
conoscenze. Vediamo perché. Il contesto è quello consueto: è dato un composto
dispari N > 2 e cerchiamo un divisore d -::f- 1, N di N. Già sappiamo che ci
sono procedimenti di fattorizzazione che si riferiscono a campi finiti, come Zp
per p primo, e ai relativi gruppi moltiplicativi, come Z;.Ad esempio il metodo
p-I di Pollard fa esplicito riferimento, fin dal nome, a p-I, cioè al numero
degli elementi del gruppo Z; per p fattore primo di N, e confida in certe sue
auspicabili proprietà, che favoriscano l'identificazione di d: nella fattispecie,
che i fattori primi di p-I siano "piccoli".
Chi ama le sottigliezze teoriche avrà piacere di osservare che in un gruppo
ciclico come Z; il numero degli elementi (p - 1 nel caso specifico) è l'infor-
mazione chiave per svelare l'intera struttura del gruppo, che si compone delle
p-I potenze distinte di uno opportuno dei suoi elementi.
D'altra parte, come già detto, il metodo p-I si basa sulla speranza che, per
qualche primo p divisore di N, p-I, ovvero l'ordine di Z;,
non abbia fattori
primi troppo "grandi"; se questo non si verifica per nessun p, l'algoritmo non
ha capacità di successo.
Nasce allora l'idea di sviluppare analoghi procedimenti in un contesto più
ampio, in riferimento a un più largo spettro di gruppi finiti collegati ai vari
p, in particolare alle curve ellittiche E sugli Zp. Una più vasta possibilità di
valori per lEI dovrebbe, in linea di principio, favorire per ogni p l'incontro di
gruppi su Zp di ordine non divisibile per nessun primo "grande".
H. W. Lenstra Jr. inaugurò allora l'uso delle curve ellittiche in fattorizzazione
proprio sulla base di queste considerazioni. Prima di introdurre l'algoritmo
di Lenstra, conviene però che premettiamo alcune osservazioni su una curva
ellittica E
per una costante "piccola" c. Questo valore, pur ancora esponenziale nella
lunghezza di N, è (più o meno) quanto di meglio si conosce attualmente per
il problema della fattorizzazione.
per un'opportuna costante c (come abbiamo visto nel caso delle curve ellittiche
e dell'algoritmo di Lenstra). Questa limitazione può essere abbassata nei casi
migliori a
1 2
é(log N) "3 (Iog log N) "3
,
che però è pur sempre funzione esponenziale della lunghezza dell'input N. In
altre parole, non si conoscono algoritmi efficienti di fattorizzazione, e il tempo
di risposta dei procedimenti conosciuti si rivela sensibilmente più alto di quelli
dei migliori algoritmi di primalità. Su questo dislivello si basa l'affidabilità di
alcuni dei moderni sistemi crittografici, come vedremo nel prossimo capitolo.
Esercizi 5.6.1
1. Si fattorizzino i numeri 2639 e 2821 utilizzando il metodo p-L
5.6 Riflessioni finali 141
Riferimenti bibliografici
Ancora Crittografia
della Informatica Teorica, l'altro della Matematica, che possono fornire im-
portanti spunti di ispirazione per la costruzione di funzioni a senso unico e,
conseguentemente, di cripto sistemi a chiave pubblica. Essi sono:
• la questione P = N P dell'Informatica Teorica, e la conseguente esistenza
di problemi N P-completi: privi, allo stato attuale delle conoscenze, di
algoritmi rapidi di soluzione, eppure dotati di algoritmi rapidi di verifica
delle soluzioni;
• i vari problemi aperti che la Teoria Elementare dei Numeri presenta; in
particolare, la mancanza, allo stato attuale delle conoscenze, di algoritmi
rapidi di fattorizzazione.
Il presente capitolo è dedicato a presentare alcuni dei principali cripto sistemi
che si basano su queste situazioni, a discutere la loro attuazione nella pratica
e certi aspetti informatici e legislativi che accompagnano il loro uso nella vita
comune. La situazione a cui facciamo riferimento è la consueta: abbiamo due
interlocutori A e B che si scambiano i messaggi in forma criptata e un pirata
C che cerca di violare questa corrispondenza. Chiameremo criptosistema la
procedura di codifica e decodifica che A e B e gli altri utenti adottano per
scambiarsi i messaggi. In particolare conveniamo sin d'ora che, per ogni utente
A,
• EA indichi la procedura che codifica i messaggi per A,
• D A rappresenti invece la relativa funzione di decodifica.
Le lettere E e D derivano qui dai verbi inglesi to en crypt, to decrypt (in
italiano cifrare, decifrare, appunto). Dunque EA e D A sono funzioni, l'una
inversa dell'altra, che operano sui messaggi, rispettivamente per codificarli e
decodificarli.
M = aN 10 + bN 8 + cN 6 + dN 4 + eN 2 + i,
deve valere poi (ad - be, N) = 1. N 12 difficilmente è potenza di primo (e
sicuramente nOn è primo), possiamo comunque fissare una potenza q = pS
di un qualche primo p tale che pS 2: N 12 , e pensare M come un elemento
dell'anello 7l q • In altre parole a, b, c, d, e, i risultano univocamente determinati
da un opportuno elemento M E 7l q • Notiamo che 7l q non è un campo (a
menO che q = p e s = 1), in particolare nOn coincide COn F q (escluso il caso
6.3 Doppi Lucchetti 147
e altrettanto vale per ogni coppia di esponenti tra nA, ni, na, nEl. C'è quindi
una commutatività tra le quattro operazioni di codifica e decodifica di A e H.
La sicurezza del procedimento rispetto ai tentativi del pirata C si fonda nuo-
vamente sulla difficoltà di calcolare i logaritmi discreti. Infatti C, quand'anche
riesca ad intercettare uno dei vari messaggi, ad esempio a ns , per recuperare
il testo originario a ha bisogno di conoscere l'esponente na (per poi ricavarne
l'inverso modulo q-I), deve dunque risolvere un problema di logaritmo di-
screto.
Va semmai rilevato che C, ottenuto in qualche modo a ns , può tentare di
spacciarsi per A agli occhi di H, rispondergli cioè al posto di A cifrando ulte-
riormente con la sua chiave privata ne e proseguendo la corrispondenza con
H fino a ricavare a. Si pone così in questo caso un problema comune a molti
criptosistemi: quello di procedure di firma e autenticazione dei messaggi, che
assicurino l'identità del mittente e del destinatario. Avremo modo di parlarne
più in là nel corso del capitolo.
Trattiamo invece adesso un altro semplice metodo crittografico, ancora basato
sui logaritmi discreti. Si tratta del Criptosistema di ElGamal del 1985. Esso
opera come segue.
Criptosistema di EIGamal
1. Si fissano anzitutto una potenza q di un numero primo e un generatore g
del gruppo moltiplicativo del campo F q.
2. L'utente A sceglie poi come sua chiave privata un intero positivo nA <
q-I e divulga come sua chiave pubblica gnA. H procede allo stesso modo.
3. Supponiamo che H intenda spedire ad A il messaggio a. H prende un
naturale k e invia ad A la coppia (gk, a . gkn A ). In particolare H riesce a
calcolare la coppia gkn A come (gnA)k usando la chiave pubblica gn A di A.
4. A decifra come segue: eleva la prima componente gk della coppia che
ha ricevuto alla propria chiave privata nA e ottiene gknA; divide poi la
seconda componente a . gkn A per questo valore e ricava finalmente a.
Si noti che la scelta di k non ha ruolo decisivo nel procedimento, anzi A non
ha alcun bisogno di conoscere k per svolgere i suoi calcoli.
La sicurezza del criptosistema si fonda nuovamente sul logaritmo discreto.
Infatti un pirata C che pure intercetti gk e conosca gn A deve comunque ri-
solvere problemi di logaritmo discreto per trovare gli esponenti k e nA. Per
l'esattezza, C deve recuperare gk nA da gk e gnA. Ma per l'Ipotesi di Diffie-
Hellman la relativa computazione è tanto complicata quanto, appunto, quella
dei logaritmi discreti.
e, finalmente,
m = LVj +Zk·
j<k
Chiaramente (va, ... , vk-d è supercrescente ed inoltre si ham > Ei<k Vi,
proprio come richiesto; a si ottiene poi facilmente conoscendo m.
2. A maschera poi (va, ... , vk-d mediante una nuova sequenza (wa, ... ,
Wk-l) non più supercrescente. Nei dettagli A calcola:
• l'inverso b di a modulo m,
6.5 Il Criptosistema RSA 151
• la sequenza (wo, ... , wk-d che si ottiene da (vo, ... , Vk-l) ponen-
do, per ogni i < k, O < Wi < m e Wi == aVi (modm) (cioè bWi ==
Vi (modm)).
Ovviamente la nuova sequenza (wo, ... , wk-d può non essere supercre-
scente, ed A avrà comunque cura che non lo sia.
3. A questo punto A divulga come propria chiave pubblica di codifica la
sequenza (wo, ... , wk-d, mantiene invece segreti m, b (dunque a) e
(vo, ... , vk-d: essi costituiscono la sua chiave privata di decodifica.
4. L'interlocutore B che vuole trasmettere ad A (ao, ... ,ak-d (e cioè il
numero naturale rappresentato nella forma sopra concordata) computa
W = Li<k aiWi e lo invia ad A. Così avviene la codifica EA. A recupera
(ao, ... , ak-d calcolando prima bW, poi il resto V di bW nella divisione
per m
Siccome Li<k aiVi :::; Li<k Vi < m, A deduce che V è proprio uguale
a Li<k aivi· A questo punto A decodifica la sequenza (ao, ... , ak-d
applicando a V l'algoritmo del Problema Supercrescente dello Zaino.
Invece un pirata C che intercetta (ao, ... , ak-d e conosce soltanto la sequen-
za (non supercrescente) (wo, ... , wk-d si trova di fronte ad una istanza del
Problema generale dello Zaino, con tutte le difficoltà che ne derivano.
In realtà il cripto sistema di Merkle ed Hellman non fu una proposta fortunata:
già nel 1982, pochi anni dopo la sua divulgazione, Shamir osservò che le se-
quenze pubbliche (wo, ... , Wk-l), pur non essendo supercrescenti come quelle
private, ammettono comunque un loro specifico algoritmo rapido di soluzione
che, senza avere la pretesa di soddisfare il Problema generale dello Zaino, rie-
sce comunque ad infrangere con successo il caso particolare di (wo, ... , wk-d.
Dopo questa osservazione di Shamir, perfezionamenti del cripto sistema di
Merkle ed Hellman capaci di restaurarne l'affidabilità furono messi a punto,
ad esempio da Chor e Rivest nel 1988. Ma si tratta di varianti molto sofisticate
e bisognose di profonde basi teoriche, non così immediate ed elementari come
alcuni cripto sistemi che vedremo tra poco.
r
ma cjJ(N) è primo anche con al per ogni intero positivo t, vale dunque
r. =
moltiplicando gli ultimi due membri di questa congruenza per a otteniamo
(a</J(N) a a (modN),
Vista l'importanza del cripto sistema RSA, dedichiamo questo ulteriore pa-
ragrafo ad approfondirne altri aspetti, in particolare a descrivere alcuni dei
possibili attacchi che possono essergli condotti e le cautele da osservare per
evitarli e preservarne la sicurezza. In particolare mostriamo come tecniche di
Teoria dei Numeri possano aiutare e sostenere l'uno o l'altro di questi scopi.
Va premesso che gli attacchi di cui parleremo non fanno diretto riferimento
al cripto sistema stesso, ma si basano piuttosto su sue cattive applicazioni e
implementazioni, oppure su errori o imprudenze da parte dei suoi utenti.
1. Un unico N? Si può pensare che un unico modulo N, comune a tutti gli
utenti, scelto e garantito da un qualche Ente Certificatore sopra le parti, possa
facilitare l'impiego del sistema. Ma l'idea è pericolosa. Mostriamo infatti come
un pirata C può approfittarne e, usando le proprie chiavi pubblica e privata
ee e dc, cercare di ottenere la chiave privata dA di un qualunque altro utente
A.
Il fatto si è che, per un unico N, le due chiavi ee e dc di C possono rivelare
in tempo rapido la fattorizzazione N = p . q di N e dunque, in definitiva, la
chiave privata di A (in quanto inversa modulo cj>(N) = (p - 1) . (q - 1) della
chiave pubblica di A).
Infatti C ovviamente conosce ee . dc - 1 = ke e sa che è multiplo di cj>(N) ,
dunque è pari perché anche cj>(N) è pari. Anzi C può facilmente decomporre
ke = 2SC • te con se > O e te dispari. A questo punto C può scegliere a caso
un intero a con 1 < a < N.
• Se (a, N) f::- 1, allora C ha la fortuna di trovare immediatamente un divisore
proprio di N, quindi p o q.
• Altrimenti, se (a, N) = 1, C sa dal Teorema di Eulero sulla cj> che a kc ==
1 (modN): infatti cj>(N) divide ke e arjJ(N) == 1 (modN). Dunque a 2sC ·tc ==
1 (modN). C osserva allora che a2sc-l.tc è radice quadrata di 1 modulo
N; C ricorda poi che ci sono 4 radici distinte di 1 modulo N perché N
è il prodotto di due primi differenti tra loro; queste radici sono ±1, ±b
dove b == 1 (modp) e b == -1 (modq). C ha probabilità 2: ~ di determinare
b esplorando modulo N a 2SC - 1 ·tc; se poi a2sc-l.tc == 1 (modN), C può
eventualmente ricorrere ad a2SC-2.tc, e così via. D'altra parte, con i metodi
di fattorizzazione alla Fermat, dalla conoscenza di un tale b si può ricavare
la decomposizione in fattori primi di N, e quindi p e q.
Passiamo adesso a considerare attacchi più sofisticati. Ricordiamo che i mo-
duli N attualmente utilizzati per RSA prevedono oltre 1000 cifre in base 2. Le
156 6 Ancora Crittografia
relative operazioni di codifica e decodifica previste dal cripto sistema (in parti-
colare, gli elevamenti alle potenze eA e dA) ne risultano ovviamente rallentate,
anche se non in modo decisivo. Per accelerarle, si potrebbe essere tentati di
scegliere un esponente pubblico piccolo eA (per codificare velocemente) op-
pure un esponente privato piccolo dA (per decodificare velocemente). Questi
espedienti sono però assai rischiosi, e possono causare, appunto,
2. attacchi basati su una chiave privata piccola,
3. attacchi basati su una chiave pubblica piccola.
Per quanto riguarda 2, c'è un argomento di Wiener, che usa strumenti di
matematica assai sofisticati e mette in evidenza quanto sia pericoloso usare
dA ~ N%; Boneh e Durfree hanno ideato possibili attacchi anche nell'ipotesi
più generale dA ~ NO,292 .... Una possibile strategia per mantenere i vantaggi
di un esponente privato piccolo evitando i rischi ora accennati potrebbe basarsi
sul seguente uso del Teorema del Resto Cinese.
A accetta una chiave privata dA grande ma fissa due naturali dp , d q tali che
ed inoltre dp e d q sono "piccoli" (ad esempio, non eccedono 128 cifre in base
2): ricordiamo che p - 1 = cj>(p) e q - 1 = cj>(q). A questo punto ammettiamo
che A riceva un messaggio cifrato come c == a eA (modN). Allora A osserva
che
a == C dA == cdp (modp)
a == CdA == c dq (modq).
A calcola rapidamente
e poi ottiene a col Teorema del Resto Cinese, come unica soluzione modulo
N = pq del sistema
a I-t a eA (modN)
e finalmente
dA' (eA' Pa) = (dA' eA) . Pa = Pa·
La commutatività delle procedure eseguite da A e E (moltiplicazione
per eA, dA, ea, da) è garantita e permette lo svolgimento corretto del
meccanismo.
cere: così, nel caso appena descritto, si fornisce la garanzia che il logaritmo
discreto è conosciuto, ma non si rivela il suo valore. Situazioni del genere si
incontrano spesso nella pratica. Si pensi ad esempio all'eventualità di un voto
telematico e alle procedure necessarie per garantire che ogni elettore eserciti il
diritto di voto senza svelare come. I prossimi paragrafi trattano due problemi
analoghi, anche se più banali, e illustrano i metodi di Teoria dei Numeri che
ne assicurano lo svolgimento.
(~ ) = (~) . (~) .
Inoltre sappiamo che
(~) = 1
se e solo se
• a è residuo quadratico tanto modulo p quanto modulo q
oppure
• a non è residuo quadratico né modulo p né modulo q
e le due risposte alternative hanno la stessa identica probabilità.
Ciò premesso, passiamo al nostro secondo modello di lancio di moneta
telefonico.
e che altrettanto valga per ogni scelta di due funzioni tra EA, DA, EB, DB.
Si ricordi che la condizione di commutatività delle chiavi è la base dei mec-
canismi del tipo del doppio lucchetto, e che comunque molte delle procedure
di codifica e decodifica che conosciamo la rispettano: ad esempio, essa è cer-
tamente soddisfatta quando le funzioni di codifica e decodifica consistono in
elevamento a potenze.
Supponiamo finalmente che A e B abbiamo già concordato, magari con una
tecnica di testa e croce a distanza, che sia A a distribuire le carte. A que-
sto punto A e B procedono come segue con un metodo del tipo del doppio
lucchetto.
• B opera una permutazione casuale a sulle carte (ne "mescola il mazzo") e
cifra ogni carta con EB, poi le passa ad A come
Esercizi 6.11.3 (Si fa riferimento alla tabella di conversione 1.1 del paragrafo
1.1 ed eventualmente suddiviso in blocchi).
007 e la giovane e graziosa spia sovietica XlI stanno seguendo insieme a Cam-
bridge un corso di aggiornamento in crittografia e si ritrovano un pomeriggio
per fare gli esercizi insieme.
6.11 Poker al telefono 169
Riferimenti bibliografici
1. Agrawal M., Kayal N., Saxena N., PRIMES is in P, Ann. Math. 160 (2004),
781-793.
2. AdIeman L. M., Huang M. D., Primality testing and two dimensionaI Abelian
varieties over finite fieIds, Lecture Notes in Mathematics 1512, Springer (1992).
3. AdIeman L. M., Pomerance C., RumeIy R. S., On Distinguishing Prime Numbers
from Composite Number, Ann. Math. 117 (1983),173-206.
4. Alford W. R., Granville A., Pomerance C., There are InfiniteIy Many Carmichael
Numbers, Ann. Math. 139 (1994), 703-722.
5. Apostol T., Introduction to Analytic Number Theory, Springer (1986).
6. Bauer F. L., Decrypted Secrets: Methods and Maxims of Cryptology, Springer
(2000).
7. Berstein D., Detecting Perfect Powers in Essentially Linear Time, Math. Comp.
67 (1998), 1253-1283.
8. Bernstein D., Proving PrimaIity after Agrawal-Kayal-Saxena, preprint
http://cr.yp.to/papers.html.
9. Bernstein D., Proving Primality in Essentially Quartic Random Time, preprint
http://cr.yp.to/papers.html.
lO. Berrizbeitia P., Sharpening "Primes Is in P" for a Large Family of Numbers,
preprint http://arxiv.orgjabsjmath.NTj0211334.
11. Boneh D., Twenty Years of Attacks on the RSA Cryptosystem, Notices Amer.
Mat. Soc. 46 (1999), 203-213.
12. Boneh D., Venkatesan R., Breaking RSA may not be Equivalent to Factoring,
Proc. Eurocrypt 1998, Lecture Notes in Comp. Sci. 1233, Springer (1998), 59-71.
13. Bovet D. P., Crescenzi P., Teoria della Complessità Computazionale, Franco
Angeli (1991).
14. Carmichael R. D., Note on a Number Theory Function, Bull. Amer. Math. Soc.
16 (1910), 232-238.
15. Cassels J. W. S., Lectures on Elliptic Curves, Cambridge University Press
(1997).
16. Childs L., Algebra, un'Introduzione Concreta, ETS (1989).
17. Chor B., Rivest R. L., A Knapsack Type Cryptosystem Based on Arithmetic in
Finite FieIds, IEEE Trans. Inform. Theory 34 (1988), 901-909.
18. Cohen H., Lenstra A. K., Primality Testing and Jacobi Sums, Math. Computo
42 (1984), 297-330.
172 Riferimenti bibliografici
49. Miller G., Riemann's Hypothesis and Tests for Primality, J. Comp. System Sci.
13 (1976), 300-317.
50. Montgomery P., Silverman R., An FFT extension to the p - l factoring
algorithm, Math. Comp. 54 (1990), 839-854.
51. Papadimitriou C. H., Computational Complexity, Addison-Wesley (1994).
52. Pollard J. M., Theorems of Factorization and Primality Testing, Proc.
Cambridge Philosophical Soc. 76 (1974), 521-528.
53. Pollard J. M., Monte Carlo Method for Factorization, BIT 15 (1975), 331-334.
54. Pratt V., Every Prime has a Succinct Certificate, SIAM J. Computo 4 (1975),
214-220.
55. Rabin M. O., Probabilistic Algorithm for Testing Primality, J. Number Theory
12 (1980), 128-138.
56. Riesel H., Prime Numbers and Computer Methods for Factorization, Birkhauser
(1994).
57. Ribenboim P., The New Book of Prime Number Records, Springer (1996).
58. Ribenboim P., 13 Lectures on Fermat's Last theorem, Springer (1979).
59. Ribenboim P., Fermat's Last theorem for Amateurs, Springer (1999).
60. Rivest R., Cryptography, 719-755 in [72].
61. Rose H., A Course in Number Theory, Clarendon Press (1988).
62. Rivest R. L., Shamir A., Adleman L. M., A Method for Obtaining Digitai
Signatures and Public-Key Cryptosystems, Comm. ACM 21 (1978), 120-126.
63. Salomaa A., Public-Key Cryptography, Springer (1996).
64. Shamir A., A Polynomial-time Algorithm for Breaking the basic Merkle-Hellman
Cryptosystem, IEEE 'IÌ'ans. Inform. Theory 30 (1984), 699-704.
65. Shor P., Algorithms for Quantum Computation: Discrete Logarithms and
Factoring, Proc. 35th Annual Symp. Found. Comp. Sci. (1994), 124-134.
66. Shor P., Polynomial-time Algorithms for Prime Factorization and Discrete
Logarithms on a Quantum Computer, SIAM Rewiew 41 (1999), 303-332.
67. Silverman J. H., The Arithmetic of Elliptic Curves I, II, Springer (1986), (1994).
68. Singh S., Codici e Segreti, Rizzoli (1999).
69. Sipser M., Introduction to the Theory of Computation, Thomson Course
Technology (2005).
70. Solovay R., Strassen V., A Fast Monte-Carlo Test for Primality, SIAM J.
Computo 6 (1977), 84-85.
71. Toffalori C., Corradini F., Leonesi S., Mancini S., Teoria della Computabilità e
della Complessità, McGraw-Hill (2005).
72. Van Leeuwen J., Handbook of Theoretical Computer Science, voI A: Algorithms
and Complexity, Eisevier (1990).
Indice analitico
a cura di
Franco Brezzi
Ciro Ciliberto
Bruno Codenotti
Mario Pulvirenti
Alfio Quarteroni
Volumi pubblicati
A. Bernasconi, B. Codenotti
Introduzione alla complessità computazionale
1998, X+260 pp. ISBN 88-470-0020-3
E. Salinelli, F. Tomarelli
Modelli dinamici discreti
2002, XII+354 pp, ISBN 88-470-0187-0
A. Quarteroni
Modellistica numerica per problemi differenziali (2a Ed.)
2003, XII + 334 pp, ISBN 88-470-0203-6
(la edizione 2000, ISBN 88-470-0108-0)
S. Bosch
Algebra
2003, VIII+380 pp, ISBN 88-470-0221-4
S. Margarita, E. Salinelli
MultiMath - Matematica Multimediale per l'Università
2004, XX+270 pp, ISBN 88-470-0228-1
A. Quarteroni, R. Sacco, F. Saleri
Matematica numerica (2a Ed.)
2000, XIV +448 pp, ISBN 88-470-0077-7
2002,2004 ristampa riveduta e corretta
(la edizione 1998, ISBN 88-470-0010-6)
14. S. Salsa
Equazioni a derivate parziali - Metodi, modelli e applicazioni
2004, XII +426 pp, ISBN 88-470-0259-1
15. G. Riccardi
Calcolo differenziale ed integrale
2004, XII + 314 pp, ISBN 88-470-0285-0
16. M.lmpedovo
Matematica generale con il calcolatore
2005, X+526 pp, ISBN 88-470-0258-3