Sei sulla pagina 1di 183

Numeri e Crittografia

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-Verlag fa parte di Springer Science+ Business Media

springer.it

© Springer-Verlag Italia, Milano 2006

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.

Riprodotto da copia camera-ready fornita dagli Autori


Progetto grafico della copertina: Simona Colombo, Milano
Stampato in Italia: Signum, Bollate (Mi)
Indice

Introduzione ................................................... VII

1 Dalla Crittografia ai Numeri.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1


1.1 Giulio Cesare e Sherlock Holmes. . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 L'ABC della Crittografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 4
1.3 Esistono Criptosistemi Perfetti? . . . . . . . . . . . . . . . . . . . . . . . . . .. 10
1.4 Crittografia a Chiave Pubblica. . . . . . . . . . . . . . . . . . . . . . . . . . .. 17
1.5 Problemi del millennio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 19
1.6 Teoria dei Numeri e Crittografia. . . . . . . . . . . . . . . . . . . . . . . . . .. 24

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

3 Potenze, Radici e Logaritmi ............................... 51


3.1 Introduzione............................................ 51
3.2 L'Aritmetica dell'Orologio ................................ 51
3.3 Radici Quadrate e Resti Cinesi. . . . . . . . . . . . . . . . . . . . . . . . . . .. 53
3.4 Potenze................................................ 57
3.5 Il Piccolo Teorema di Fermat ............................. 59
3.6 La funzione cjJ e il Teorema di Eulero. . . . . . . . . . . . . . . . . . . . . .. 60
3.7 Campi finiti ............................................ 64
3.8 Logaritmi discreti ....................................... 68
3.9 I simboli di Legendre e di Jacobi .......................... 68
3.10 La Legge di Reciprocità Quadratica di Gauss ............... 76
3.11 Ancora Radici Quadrate .................................. 81
VI Indice

3.12 Curve Ellittiche, per finire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 82

4 Il Problema della Primalità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 91


4.1 Dagli antichi Greci ad AKS .............................. 91
4.2 Gli Pseudoprimi di Carmichael . . . . . . . . . . . . . . . . . . . . . . . . . . .. 94
4.3 Variazioni sul Piccolo Teorema di Fermat. . . . . . . . . . . . . . . . . .. 98
4.4 Primi e N P ............................................ 101
4.5 L'Algoritmo di Solovay-Strassen ........................... 102
4.6 L'Algoritmo di Miller-Rabin .............................. 107
4.7 AKS: l'Algoritmo di Agrawal-Kayal-Saxena ................ 114
4.8 Variazioni su AKS ...................................... 122

5 Il Problema della Fattorizzazione .......................... 127


5.1 Introduzione ............................................ 127
5.2 Il Metodo p-l ......................................... 128
5.3 Il Metodo p ............................................. 129
5.4 Fattorizzazione alla Fermat ............................... 132
5.5 Fattorizzazione e Curve Ellittiche .......................... 137
5.6 Riflessioni finali ......................................... 140

6 Ancora Crittografia ........................................ 143


6.1 Crittografia a Chiave Pubblica ............................ 143
6.2 Il Logaritmo Discreto e il Criptosistema di Diffie-Hellman .... 144
6.3 Doppi Lucchetti ......................................... 147
6.4 Il Problema dello Zaino .................................. 148
6.5 Il Criptosistema RSA .................................... 151
6.6 Attacchi aRSA . ........................................ 155
6.7 Crittografia e Curve Ellittiche ............................. 157
6.8 Firme digitali ........................................... 159
6.9 Protocolli a Conoscenza Zero ............................. 161
6.10 Testa o Croce telefonico .................................. 162
6.11 Poker al telefono ........................................ 165

Riferimenti bibliografici ........................................ 171

Indice analitico ................................................ 175


Introd uzione

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

hanno avuto la bontà di apprezzare le note che da queste esperienze furono


tratte qualche tempo fa e che forniscono la base del libro stesso. Speriamo che
anche i nostri lettori possano gradire allo stesso modo questo nostro lavoro.
1

Dalla Crittografia ai Numeri

1.1 Giulio Cesare e Sherlock Holmes


Tra i casi che il dottor Watson riferisce nella serie di racconti The Return oE
Sherlock Holmes, c'è quello intitolato The Adventure oE the Dancing Men. In
esso Sherlock Holmes viene in possesso di un foglio di carta riempito da strani
geroglifici rappresentanti figurine di pupazzi variamente orientate (i ballerini
del titolo) e deve capirne il significato. Non gli è difficile immaginare che i
disegni nascondano un messaggio cifrato; ma questa congettura non lo av-
vicina molto alla soluzione, perché il vero problema è comprendere quale è
il testo criptato e dunque, preliminarmente, in quale modo è stato criptato.
Comunque Sherlock Holmes ragiona così: c'è un pupazzo che compare più
frequentemente sul foglio; se assumiamo che il testo nasconda un messaggio
in lingua inglese, si può azzardare l'ipotesi che questo pupazzo rappresenti
la lettera più comune in inglese, cioè la E. Procedendo su questa strada, si
può associare alle figurine del disegno, ordinate secondo la loro frequenza, la
successione delle lettere dell'alfabeto inglese, ordinate secondo il loro uso nel-
la lingua comune, dunque, dopo la E, la T, la A, la 0, e così via. Holmes
ammette che questa corrispondenza non può essere così sicura e ben fonda-
ta da escludere errori, ma affidandosi al suo intuito e all'intelligenza guidata
dall'esperienza, riesce finalmente a svelare il messaggio nascosto. Chi è ap-
passionato di gialli e misteri e, incuriosito da questo intreccio, è interessato a
conoscerne tutto lo sviluppo può leggere questa avventura e gli altri godibili
casi del nostro eroe nella raccolta citata. A noi il resoconto del dottor Watson
interessa perché introduce bene i due argomenti che vogliamo trattare: l'arte
di cifrare i messaggi - la crittografia -, e quella di svelare i messaggi nascosti
- la crittoanalisi -.
In realtà il racconto di Sherlock Holmes non ha molto di originale. In effetti
l'esigenza di nascondere ad occhi indiscreti per motivi di guerra, o di spionag-
gio, o di amore messaggi dal contenuto delicato si può ritenere vecchia come
il mondo; e tra i trucchi più semplici di cifratura (e decifratura) c'e quello
di tradurre le lettere dell'alfabeto in uso con altri simboli (come i pupazzi
2 1 Dalla Crittografia ai Numeri

ballerini di Sherlock Holmes), oppure di permutarle tra di loro secondo una


chiave prestabilita. Questi procedimenti erano ben noti sin dall'antichità: li
utilizzava anche Giulio Cesare, che, nel corso delle sue numerose campagne di
guerra, dovendo corrispondere con i suoi luogotenenti e volendo evitare che i
suoi ordini venissero intercettati e soprattutto capiti dai suoi nemici, talora li
criptava traducendoli semplicemente in greco, talora provvedeva a permutarne
le lettere secondo uno schema fisso prestabilito. Ad esempio, il testo poteva
essere cifrato spostando ogni lettera dell'alfabeto dei Romani di 3 passi in
avanti (A in D, B in E, ... ) e le ultime tre nelle prime tre, in ordine (X in
A, T in B, Z in C): così il saluto AVE diventava, tra le 24 lettere dell'alfabe-
to della lingua latina, DZH (ricordiamo infatti che le lettere usate dai latini
erano A, B, C, D, E, F, G, H, I, K, L, M, N,O, P, Q, R, S, T, U, V, X, Y,
Z); il testo originale veniva poi decifrato col semplice procedimento inverso di
tornare indietro di 3 lettere; ovviamente la chiave 3 doveva essere concordata
in anticipo e resa nota sia a chi cifrava che a chi decifrava. In realtà Cesare e
i suoi luogotenenti, che non conoscevano le cifre 1, 2, 3, ... , usavano al loro
posto una sorta di anello con 2 circonferenze concentriche, che elencava nella
fascia esterna tutte le lettere dell'alfabeto e le accompagnava internamente
con le loro sostituzioni.
Anche la strategia usata da Holmes per recuperare il messaggio nascosto dai
suoi pupazzi non era affatto originale. Ad esempio, era conosciuta e usata da-
gli Arabi, ed in particolare da Ishaq-al-Kindi, sin dal nono secolo dopo Cristo;
grazie alla tecnica prima descritta nel caso di Holmes, permetteva in gene-
re una decifrazione relativamente facile dei messaggi criptati attraverso una
permutazione delle lettere; veniva (e viene) chiamata analisi di frequenza: un
nome che ben ne sintetizza l'idea di base, secondo cui i simboli più frequenti
nel messaggio corrispondono alle lettere più comuni nella lingua usata.
Del resto, già assai prima di Holmes, la crittografia e, conseguentemente, la
crittoanalisi avevano ottenuto rilevanti progressi e raffinamenti. Ad esempio,
nel Rinascimento Leon Battista Alberti e, poco dopo, il francese Vigenère
avevano proposto l'idea di cifrare le lettere di un dato messaggio non più con
l'uso costante di un'unica permutazione, ma piuttosto utilizzando permutazio-
ni diverse, dipendenti dal posto della lettera da cifrare. Ad esempio si poteva
concordare di traslare la prima lettera di 3 posti, la seconda di 2, la terza di 4,
secondo uno schema prestabilito e noto a mittente e destinatario, e dunque ci-
frare l"'AVE" di Cesare nell'alfabeto latino come DYI. Con gli anni, però, più
sofisticate tecniche di analisi di frequenza permisero di infrangere anche questi
sistemi crittografici. Ma ancora nella seconda guerra mondiale, l'esercito te-
desco adoperava una macchina Enigma che, per dirla in termini molto banali,
cifrava le informazioni segrete secondo un ripetuto uso dell'idea di Alberti e
Vigenère, rinnovandone frequentissimamente la chiave. Questo sistema veni-
va usato, ad esempio, per trasmettere ai sottomarini tedeschi dell'Atlantico le
coordinate dei convogli nemici in navigazione e gli ordini di combattimento, ad
esempio il comando di affondarne uno. I crittoanalisti inglesi che cercavano di
violare questo codice e di carpire il significato dei messaggi si trovavano dun-
1.1 Giulio Cesare e Sherlock Holmes 3

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

Tabella 1.1. Vocabolario di traduzione

In particolare l' AV E di Cesare è rappresentato rispetto all'alfabeto inglese


dalla tema 0, 21, 4 e la cifratura che se ne ottiene aggiungendo 3 ad ogni
lettera produce 3,24,7, cioè DYH (non più DZH come nell'alfabeto latino
perché adesso dopo V dobbiamo considerare anche W). Inoltre questa addi-
zione per 3 è da intendersi modulo 26; infatti le ultime tre lettere dell'alfabeto
inglese X, Y, Z sono codificate rispettivamente da A, B, C, e quindi i numeri
corrispondenti 23,24,25 diventano 0, 1, 2, che coincidono con le somme 23+3,
24 + 3, 25 + 3 proprio modulo 26. Così la Matematica può risultare utile non
solo per rappresentare i caratteri di scrittura, ma anche per snellire e sveltire
le operazioni di cifratura e decifratura, che, almeno nel caso di Cesare, corri-
spondono alle operazioni di addizione e sottrazione modulo 26, o comunque
4 1 Dalla Crittografia ai Numeri

modulo il numero di lettere dell'alfabeto.


Se poi conveniamo che criptare un messaggio significa permutarne le lettere,
allora la Matematica può fornirci ulteriore soccorso, visto che le permutazioni
sono un suo tipico argomento, spesso indigesto ai non esperti che vi si acco-
stano per studiarlo. Ad esempio, la Matematica ci dice subito quante sono
le possibili maniere di permutare (e dunque quanti sono i possibili modi di
criptare) le 26 lettere dell'alfabeto (se vogliamo limitarci a 26 simboli e dimen-
ticare la punteggiatura): sono 26!, e cioè il prodotto di tutti i numeri naturali
da 1 fino a 26.
Tuttavia queste relazioni tra Crittografia e Matematica sembrano più super-
ficiali che sostanziali. Ma, in realtà, si può instaurare un rapporto più serio.
Nei prossimi paragrafi cerchiamo di spiegare perché.
Esercizi 1.1.1 Negli esercizi che seguono si faccia riferimento all'alfabeto
inglese e alla tabella 1.1 di conversione delle sue lettere in numeri interi. Si
assuma anche che lo spazio vuoto corrisponda al numero 27 (cioè venga dopo
la lettera Z).
1. Si codifichi il messaggio "siamo a corto di viveri" spostando indietro di 7
passi ciascuna lettera.
2. Si decodifichi il messaggio "ZMZEDPEDQEXIQEXMGE" sapendo che è
stato ottenuto traslando di 4 lettere in avanti il messaggio originale.

1.2 L'ABC della Crittografia


Per apprezzare meglio i contributi della Matematica alla Crittografia, conviene
che fissiamo anticipatamente il nostro contesto, prescindendo dai casi partico-
lari di Cesare e Holmes. Assumiamo allora un modello in cui il personaggio A
(Alice) cerca di scrivere al personaggio B (Bernardo) un messaggio riservato
e teme che C (il "cattivo") possa intercettarlo e leggerlo. A si preoccuperà
allora di
CIFRARE o CRIPTARE
il messaggio in qualche maniera, secondo un'opportuna chiave di codifica, e
di far conoscere in anticipo a B come
DECIFRARE o DECRIPTARE
il messaggio criptato trasmettendogli l'opportuna chiave di decodifica. A que-
sto punto a C non basterà più intercettare il messaggio di A; dovrà anche
sforzarsi di capire come
VIOLARE
il sistema di cifratura ideato da A. Quel che deriva da questa situazione è una
coppia di problemi opposti:
• quello della CRITTOGRAFIA, che si preoccupa con A e con B di escogi-
tare sistemi per cifrare e decifrare messaggi riservati (chiamati di conse-
guenza criptosistemi);
1.2 L'ABC della Crittografia 5

• quello della CRITTOANALISI, che cerca, insieme a C, di infrangere questi


criptosistemi.

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

i(x) == x + 3 (mod26), O:S i(x) < 26


e dunque ha chiave 3, mentre la decodifica si ottiene tramite la funzione
"inversa" l' che ad ogni x associa

i' (x) == X - 3 (mod26), O:S i'(X) < 26


con chiave -3. Il sistema si infrange se riusciamo a conoscere la chiave di
codifica 3 o equivalentemente quella di decodifica -3: è facile infatti ricavare
l'una delle due chiavi dall'altra.
Procedendo in modo più generale ed astratto, supponiamo che N sia il numero
dei simboli del nostro alfabeto (con N = 26, 27, ... ), così che le permutazioni
possibili sono N!. Ci muoviamo poi nel contesto delle classi di resti modulo
N, cioè quello dell' "aritmetica dell'orologio" di Gauss, riferita ovviamente
all'intero N. Fissiamo due naturali a e b minori di N, e supponiamo poi che a
e N siano primi tra loro e dunque che a sia invertibile modulo N (assumiamo
qui un minimo di dimestichezza con i punti essenziali della Teoria elementare
dei Numeri, che comunque saranno ricordati in maggior dettaglio nei capitoli
2 e 3). A questo punto
1. cifriamo ogni simbolo x tramite la funzione i che gli associa l'intero

i(x) == ax + b (modN), O:S i(x) < N;


si noti che, siccome a è inverti bile modulo N, i si può invertire;
2. decifriamo proprio tramite la funzione "inversa" l' di i, quella che ad
ogni simbolo x associa l'intero 1'(x) tale che

f'(x) == a'x + b' (modN), O:S i(x) <N


dove a' è, appunto, l'inverso di a modulo N e b' è -a'b sempre modulo N.

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

• a' da a, e poi b' da a e b


e, viceversa, recuperare
• a da a', e poi b da a' e b'.
I criptosistemi che si ottengono in questo modo al variare di a e b corrispon-
dono a quelle funzioni lineari a coefficienti interi che sono inverti bili modulo
N; tra di essi si trova il metodo di Giulio Cesare (quando a = 1 e b = 3) e
tutte le possibili traslazioni dei simboli dell'alfabeto (quando a = 1 e b varia).
La Matematica ci aiuta però ad escogitare nuovi sistemi, differenti dalle tra-
slazioni, grazie alla moltiplicazione per a. Esistono poi ulteriori cripto sistemi
basati su permutazioni che non corrispondono a nessuna funzione lineare.

Esercizio 1.2.1 Sia fissato un intero positivo N. Quanti sono i cripstosistemi


che si possono formare su un alfabeto di N simboli mediante funzioni lineari
x r-+ ax + b modulo N, con a, b naturali minori di N e a primo con N?

Thttavia i criptosistemi basati su semplici permutazioni delle lettere si possono


facilmente infrangere con la tecnica dell' analisi di frequenza. I seguenti esempi
illustrano come.

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

4a + b == 9 (mod26), 19a + b == 3 (mod26).

Un minimo di dimestichezza con questi sistemi gli rivela, sottraendo la


prima equazione dalla seconda,

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

a == -6·7 == -42 == 10 (mod26)


e finalmente che

b == 9 - 4·10 == -31 == 21 (mod26).


1.2 L'ABC della Crittografia 7

2. Non sempre le cose scorrono così lisce, ma l'analisi di frequenza, semmai


unita ad un minimo di fortuna e di intelligenza, riesce comunque ad in-
frangere tutte queste situazioni. Ammettiamo infatti per un attimo che
l'alfabeto del messaggio utilizzi 27 simboli (in inglese), quindi un minimo
di punteggiatura. Nelle stesse condizioni di sopra, il sistema da affrontare
diviene
4a + b == 9 (mod27), 19a + b == 3 (mod27)
da cui, sottraendo membro a membro, si ricava stavolta

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

f(p) == 15p + 48 (mod676), O:::; f(P) < 676.


In particolare, il digrafo (13, 14) viene codificato tramite

26·13 + 14 == 352 (mod676)

e quindi trasformato tramite f in


15·352 + 48 == 5328 == 20 (mod676).
Siccome 20 si decompone nella divisione per 26 come

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

f(p) == a· p + b, O:::; f(P) < N 2 •


Supponiamo che
p = N .x + y, f(P) = N . x' + y'
siano le decomposizioni di p e f(p) rispetto alla divisione per N. Ricaviamo

N· x' + y' == f(p) == a· (N· x + y) + b == Nax + ay + b (modN 2 ),

quindi N . x' + y' e N ax + ay + b sono congrui moduli N 2 e di conseguenza


anche modulo N. Ma allora 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.

• Cifriamo moltiplicando a sinistra il vettore colonna ( Xy) per una prefis-


sata matrice 2 x 2 a coefficienti interi
1.2 L'ABC della Crittografia 9

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

scelta di x e y come sopra, f (~) = (~:) dove

o ~ x', y' < N.

Quindi la chiave di codifica è data dalla matrice inverti bile A = ( ac db)


e dal vettore colonna E = (;). A proposito della matrice A sarà forse
opportuno ricordare che stiamo lavorando sull'anello degli interi Z, ed anzi
sul suo anello quoziente Z/NZ che, per i valori di N sopra ricordati (26, 27,
28, ... ), non è in genere un campo. Conseguentemente, perché la matrice
A sia inverti bile non basta che il suo determinante ad - be sia diverso da
O modulo N, ma occorre che il determinante stesso sia invertibile modulo
N, e dunque che ad - be sia primo con N. In tal caso la matrice inversa si
calcola con le usuali regole, dunque tramite la formula

( sd
-se
-Sb)
sa

dove s è un intero inverso di ad - be modulo N.


• Di conseguenza decifriamo ponendo per ogni scelta di x e y interi

l' (~) == (~: ~) (~) + (;:) (mod N),

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)

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

ha determinante 2·8 - 3 ·7= -5 == 21 (mod26) primo con 26 ed è dunque


invertibile modulo 26. Anzi si può controllare che l'inverso di 21 modulo 26 è
5 (del resto -5·5 == -25 == 1 (mod26)), e quindi l'inversa A' di A modulo 26
è
(
5·8 -5.3)=(40 -15) = (14
-5·7 5·2 -35 lO -
11)
17 lO (mod26).

Di nuovo, l'approccio matematico ci ha permesso un'ulteriore generalizzazione


dell'idea di partenza, quella di Cesare, e la costruzione dei nostri criptosistemi.
Thttavia l'analisi di frequenza si rivela ancora una strategia vincente per in-
frangere questi perfezionamenti. Quel che anche stavolta il pirata deve cercare
di recuperare è la chiave di codifica

A=(~ ~), E=(;)


oppure la chiave di decodifica

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.

1.3 Esistono Criptosistemi Perfetti?

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.

Questa rigidità è un ovvio punto di debolezza del sistema, e un involontario


aiuto alla crittoanalisi del pirata C.
Il Cifrario di Vigenère, che fu ideato da Blaise de Vigenère nella seconda
1.3 Esistono Criptosistemi Perfetti? 11

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

• A cifra i suoi messaggi addizionando 14 alla prima lettera, 7 alla seconda,


8 alla terza, poi ancora 14 alla quarta, e così via, ciclicamente;
• B decifra conseguentemente, sottraendo 14 dalla prima lettera, 7 dalla
seconda, 8 dalla terza, ...

Thtte le operazioni sono ovviamente da intendersi modulo N. È quindi utile


tanto ad A quanto a B disporre della tavola additiva delle classi di resti modulo
N e utilizzarla per cifrare o decifrare. Riproduciamo qui la tavola additiva nel
semplice caso N = 7:

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

A e B potranno allora identificare


• le righe della tabella con i simboli del messaggio,
• le colonne con quelli della parola chiave.
Per codificare un simbolo, basterà sommargli il numero corrispondente nella
stringa chiave dedotto dalla sua posizione nel messaggio, cioè cercare il numero
all'incrocio delle relative riga e colonna nella tabella. Invece, per recuperare il
significato originario di un simbolo cifrato, basterà cercarlo nella colonna del
numero della stringa chiave che corrisponde alla sua posizione e, individuatolo,
risalire alla riga che lo contiene.

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

la tabella nel modo prima descritto o comunque sommando modulo 7, A


ricava
3+2=5
(del resto 5 è l'incrocio tra la riga 3 e la colonna 2 della tavola) e ancora

2 + 1 = 3, 4 + 6 = 3, 5 + 4 = 2, 0+2 = 2, 1 + 1 = 2,

quindi ottiene la codifica 5, 3, 3, 2, 2, 2. B recupera il messaggio originale


sottraendo modulo 7 e ricavando 5 - 2 = 3 (del resto 5 si trova nella
colonna 2 in corrispondenza della riga 3), e così via.
2. Supponiamo adesso N = 26. Tralasciamo per semplicità di riportare qui
la relativa tabella di 26 righe e 26 colonne: A e B avranno semmai cura
di compilarsela e scambiarsela preventivamente per le loro comunicazio-
ni. Ammettiamo poi che A intenda semplicemente salutare B dicendogli
CIAO in un alfabeto di 26 lettere, quindi 2, 8, 0,14 modulo 26, e ricorra
alla stringa chiave precedentemente concordata 14, 7, 8. Allora A procede
alle addizioni

2 + 14 = 16, 8 + 7 = 15, 0+8 = 8, 14 + 14 = 28 == 2 (mod26)

o, equivalentemente, incrocia righe e colonne opportune della tabella e


ottiene la cifratura 16, 15, 8, 2, ovvero QPIC, per dirla con le lettere
comuni. B recupera il saluto C I AO procedendo a ritroso, nel modo sopra
descritto.

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

ottenere anche allungando la parola chiave. Operando in questo senso, si ar-


riva al caso limite in cui ogni messaggio è accompagnato da una sua propria
parola chiave, della sua stessa lunghezza.
Il Cifrario di Vernam (proposto nel 1917 da Gilbert S. Vernam mentre la-
vorava per l'ATT) prevede proprio questa strategia. Descriviamolo in maggior
dettaglio. Assumiamo N = 2 per semplicità. Ammettiamo poi che A debba
trasmettere un messaggio x formato da una sequenza ordinata di lunghezza l
di O e 1. A ricorre ad una parola chiave che è una sequenza casuale y di O e 1,
ancora di lunghezza l. A questo punto:
• la codifica avviene sommando x con y componente per componente (e
ricavando il messaggio cifrato x'),
• il recupero di x da parte di B si ottiene addizionando x' con y ancora com-
ponente per componente (il che produce la somma x, come già illustrato
sopra).
Ad esempio, se il messaggio da spedire è

x= 1001010110101

e la parola chiave cui si ricorre è

y = 0010101101011,

la versione cifrata diventa

x' = 1011111011110.

In generale, siccome la chiave y è casuale, anche x' risulta assolutamente casua-


le, e quindi potenzialmente inattaccabile da C e dalle sue analisi di frequenza.
D'altra parte, il meccanismo presenta ovvie difficoltà pratiche:
(i) anzitutto la chiave y si può recuperare da x e x' come loro somma modulo
2, il che consiglia di usarla soltanto una volta, proprio per x e x';
(ii) del resto, il cripto sistema prevede esplicitamente che l'insieme delle chiavi
coincida con quello dei possibili messaggi: per ogni intero positivo l, ci
sono tanti messaggi di lunghezza l (2 1 per la precisione) quante chiavi che
li codificano;
(iii) A e B dovranno conseguentemente concordare per ogni loro corrispon-
denza una apposita chiave e trasmettersela;
(iv) ma generare una nuova chiave, e cioè una sequenza assolutamente casuale
di O e 1, è procedura complicata e costosa.
Una tale dovizia di cautele e attenzioni si può forse concepire nel mondo
misterioso dello spionaggio, ma non nella vita comune. Infatti è difficile im-
maginare che due innocenti interlocutori A e B concordino preventivamente
una parola chiave lunga quanto il loro successivo messaggio, la scrivano su
qualche foglietto o su qualche taccuino, la custodiscano attentamente per la
1.3 Esistono Criptosistemi Perfetti? 15

loro corrispondenza, la eliminino accuratamente dopo l'uso. Un simile com-


portamento è da spie più che da gente comune. In effetti il cifrario di Vernam è
anche chiamato one time pad (taccuino monouso) a sottolineare proprio que-
ste sue caratteristiche: buono per le spie, è scomodo in ambiti più generali.
D'altra parte, il codice di Vernam è, almeno teoricamente, l'unico sicuro nella
crittografia classica, nel senso che ora cerchiamo di spiegare.
Vale infatti la pena di approfondire finalmente, anche soltanto in modo infor-
male, il tema della sicurezza di un criptosistema: quando dichiararla assoluta,
ed in ogni caso come stabilirne il livello. L'argomento fu trattato da Claude
Sbannon nel 1949 con un approccio di tipo probabilistico che adesso descri-
viamo.
Ci muoviamo nel contesto consueto di due interlocutori A e E e di un pirata
C che cerca di carpirne la corrispondenza. Immaginiamo che A e E utilizzino
un cripto sistema composto da
• un insieme finito M di possibili messaggi,
• un insieme finito K di possibili chiavi
e che ogni chiave k E K determini una coppia di funzioni da M a M, l'una
inversa dell'altra, la prima ek di codifica, la seconda d k di decodifica. Quindi
dkek(m) = m per ogni messaggio m. Le lettere e, d sono proprio suggerite
dal compito richiesto a queste due funzioni, e cioè, rispettivamente, l'azione
di criptare e decriptare, encrypt e decrypt in inglese.
In questo ordine di idee possiamo addirittura azzardare formalmente una
definizione astratta di criptosistema.

Definizione 1.3.2 Criptosistema è una struttura (M, K, (ek, dkhEK) dove


M e K sono due insiemi finiti e, per ogni k E K, ek, d k sono funzioni da M
a M l'una inversa dell'altra.

Accettiamo dunque questa definizione. Ammettiamo adesso che, sulla base


di indagini statistiche sulla corrispondenza di A e E, C riesca ad assegnare
a priori a ogni m E M una probabilità di esser inviato: dunque, se un dato
messaggio mo viene spedito da A a E, C può considerare la probabilità al
variare di m E M che mo sia proprio m

Ammettiamo poi che C intercetti la versione cifrata Co di qualche messaggio.


C non sa né il messaggio originario né la chiave che lo ha criptato, ma può
considerare per ogni mo E M la probabilità al variare di k E K che Co sia
proprio la codifica di mo

Possiamo adesso definire che cosa si intende per criptosistema perfetto (cioè
sicuro da tentativi di violazione).
16 1 Dalla Crittografia ai Numeri

Definizione 1.3.3 Un criptosistema (M, K, (ek, dk hEK) si dice perfetto se


e solo se, per ogni Co in M, PrkEK(CO = ek(mo)) è la stessa per tutti gli
mo EM.

In altre parole, nessun vantaggio circa l'identificazione di mo deriva a C dalla


conoscenza di co. C'è un'altra caratterizzazione equivalente della nozione di
cripto sistema perfetto, che ne ribadisce la plausibilità. Notiamo infatti che,
intercettato Co, C può considerare ogni singolo messaggio mo di M, valutare
la probabilità (già sopra considerata) che il messaggio spedito sia proprio
mo PrmEM(m = mo) e confrontarla con la probabilità dello stesso evento
condizionata alla conoscenza di Co e calcolata anche al variare della chiave k,
cioè PrmEM,kEK(m = mo I Co = ek(mO)). Si dimostra allora:

Teorema 1.3.4 Un criptosistema (M, K, (ek, dkhEK) è perfetto se e solo


se, per ogni scelta di mo, Co in M, PrmEM(m = mo) = PrmEM,kEK(m =
mo I Co = ek(mo)).
Si ribadisce così che la conoscenza di Co non fornisce alcuna maggiore certezza
circa il messaggio originario.

Esempio 1.3.5 Mostriamo che il criptosistema di Vernam (per messaggi di


una fissata lunghezza l) è perfetto. Infatti si ha che M = K = {O, 1}1 e,
per ogni k in K, tanto ek quanto dk agiscono sui messaggi m di M come la
addizione modulo 2 per k. Allora, per ogni scelta di Co E M, PrkEK(CO =
ek(mo)) = 2- 1 è costante al variare di mo in M.
In realtà il cifrario di Vernam è l'unico perfetto. Il prossimo teorema ci dice,
infatti, che qualunque criptosistema perfetto deve condividere una proprietà
cruciale di quelli di Vernam, e cioè la necessità di una gran dovizia di chiavi.

Teorema 1.3.6 In un criptosistema perfetto (M, K, (ek, dk hEK) ci sono


almeno tante chiavi quanti messaggi.

Dimostrazione. Siano mo un messaggio di M, Co una sua versione cifrata


rispetto a qualche chiave di K. Dunque PrkEK(CO = ek(mo)) > O. Se il cripto-
sistema ammette più messaggi che chiavi, possiamo trovare mb E M tale che
mb "I- dk(co) per ogni k E K e quindi PrkEK(CO = ek(mb)) = O. Ma questo
contraddice l'ipotesi di perfezione perché si ottiene PrkEK(CO = ek(mO)) "I-
PrkEK(CO = ek(mb)). Segue che ci devono essere almeno tante chiavi quanti
messaggi. D

La conclusione del paragrafo è dunque scoraggiante: infatti, siccome i cifrari


di Vernam sono praticamente inutilizzabili, ma sono gli unici sostanzialmente
perfetti, dobbiamo ammettere che non esistono criptosistemi perfetti che si
possano realmente adoperare nella vita comune.
1.4 Crittografia a Chiave Pubblica 17

1.4 Crittografia a Chiave Pubblica

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ì.

Il metodo del doppio lucchetto. Supponiamo che B voglia trasmettere un


messaggio ad A senza dovergli preventivamente spedire alcuna chiave: B ripo-
ne il messaggio in uno scrigno che chiude con un suo lucchetto ed invia ad A.
18 1 Dalla Crittografia ai Numeri

A, ricevuto lo scrigno, lo chiude con un suo secondo lucchetto e lo rispedisce a


B. B a questo punto apre il proprio lucchetto: lo scrigno resta chiuso dalluc-
chetto di A, e viene rimandato ad A. A, ricevuto nuovamente lo scrigno, apre
l'ultimo lucchetto rimasto - il suo - e può finalmente leggere il messaggio. Si
noti che la trasmissione è avvenuta senza alcuno scambio preventivo di chiave,
anzi A e B hanno usato i loro privatissimi lucchetti per aprire e chiudere lo
scrigno.

Il racconto mostra a livello intuitivo come sia possibile, in linea di principio,


escogitare sistemi crittografici di cifratura e decifratura che evitino lo scam-
bio preventivo di chiavi, e dunque superino la proprietà 1 della crittografia
classica: i due interlocutori A e B operano con le loro chiavi, personalissime
e privatissime, e tra loro indipendenti, visto che la facoltà di A di aprire o
chiudere il suo lucchetto non interferisce con l'analoga libertà di B.
Ma certamente non possiamo immaginare di usare nella nostra vita comune,
per la nostra pur delicata corrispondenza, un simile macchinoso procedimen-
to di scrigni e lucchetti. Ci chiediamo allora se possiamo realmente costruire
sistemi efficienti e sicuri che possano garantire le esigenze sopra sottolineate.
Ebbene, la Matematica sa fornire idee e strumenti per realizzare nella pratica
di tutti i giorni il metodo del doppio lucchetto. Ma prima di introdurli ricapi-
toliamo ancora una volta quali sono le necessità della Crittografia moderna,
quella che viene adesso usualmente chiamata Crittografia a chiave pubblica:
1. non deve essere richiesto alcuno scambio di chiave;
2. decifrare deve essere un'operazione enormemente più difficile che cifrare,
a meno che non si disponga di ulteriori specifiche informazioni.
Un'idea per soddisfare queste esigenze potrebbe essere quella di usare funzioni
a senso unico: funzioni di cifratura che
(i) siano facilmente computabili (in modo che chiunque possa velocemente
criptare un messaggio per un dato utente A),
(ii) siano invertibili (in modo da permettere la decifratura),
(iii) ma abbiano un'inversa il cui calcolo è proibitivo in assenza di ulteriori
informazioni (che costituiscono la chiave privata di A, quella che solo A
deve conoscere e senza la quale nessun pirata potrà infrangere in tempi
rapidi un messaggio eventualmente intercettato).
Una funzione a senso unico potrebbe essere la base ragionevole di un efficiente
sistema di crittografia a chiave pubblica. A priori, però, niente assicura che
simili funzioni esistano. E, comunque, la nozione stessa di funzione a senso
unico non ha niente di matematicamente rigoroso: infatti la difficoltà di cal-
colare l'inversa potrebbe essere soltanto transitoria e passeggera, legata allo
stato attuale delle conoscenze scientifiche; una funzione che oggi si rivelasse
a senso unico domani potrebbe non esserlo più, perché niente vieta che nel
frattempo qualche genio - un novello Sherlock Holmes? - riesca ad ideare un
procedimento effettivo e rapido capace di computarla.
1.5 Problemi del millennio 19

D'altra parte ci sono due significativi settori della Matematica e dell'Infor-


matica Teorica che possono fornire numerosi spunti e fonti di ispirazione per
la costruzione di funzioni a senso unico e, conseguentemente, di criptosiste-
mi a chiave pubblica. Descriviamo brevemente nel prossimo paragrafo certe
strategie suggerite dall'Informatica.

1.5 Problemi del millennio

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

attendiamo un output del tipo sì o no a seconda che l'input soddisfi o no la


condizione richiesta dal problema.
Altre volte il problema consiste nel calcolare, per ogni parola dell'alfabeto, la
sua immagine in una qualche funzione. Ad esempio, per ogni naturale N 2': 2
possiamo chiederci di decomporre N nei suoi fattori primi, dedurre quindi 2 2
da 4, 2 . 3 da 6, 2 da 2 e via dicendo. Stavolta l'input è ancora una parola
dell'alfabeto, ma l'output non si riduce a un sì o no, ma si estende a parola, o
a coppie o terne di parole - nel caso specifico, nella sequenza dei fattori primi
di N-.
Nel seguito, considereremo prevalentemente problemi di queste forme o, an-
cora più frequentemente, del primo tipo sopra descritto (con le due risposte
alternative sì e no). Intenderemo dunque principalmente un "problema" da un
punto di vista astratto, come un insieme S di parole su un alfabeto finito A
(allo stesso modo in cui i numeri naturali, e in particolare i primi, si possono
intendere come parole sull'alfabeto {a, 1,2, ... , 9}). La questione da risolvere
è, per ogni parola w su A, se w è in S o no (così come, nel caso dei primi, per
ogni naturale N 2': 2, si vuole decidere se N è primo o no).
Possiamo adesso distinguere quali problemi hanno soluzione e quali no. In base
a quanto abbiamo fin qui stabilito un procedimento di soluzione tratta parole
sull'alfabeto (finito) del problema e tende a scegliere quelle che soddisfano
determinate condizioni, oppure a calcolare la loro immagine in determinate
funzioni. Per certi problemi questo procedimento si trova facilmente, per al-
tri si raggiunge con qualche maggior difficoltà, per altri ancora resta incerto
e misterioso: anzi, in questi ultimi casi si può addirittura dubitare che un
algoritmo di soluzione si possa realmente scoprire.
Il procedimento, quando c'è, dipende poi ovviamente dal problema, e cioè
dalla domanda a cui deve rispondere: un algoritmo che riconosce i numeri
primi non va bene per risolvere le equazioni di terzo grado, e viceversa.
Come possiamo allora sviluppare un trattamento astratto uniforme di queste
situazioni così disparate? Come possiamo dare una definizione teorica genera-
le di algoritmo? Ebbene, nel 1936, Alan Turing ideò una sorta di calcolatore
astratto ante litteram, in realtà più assomigliante ad una vecchia macchina
da scrivere che ad un moderno computer: la macchina di Turing. Egli pro-
pose di assumere questi meccanismi teorici come termine di paragone di ogni
computazione, e dunque di convenire che è calcolabile esattamente ciò che
una macchina di Turing sa calcolare. Sostanzialmente si afferma, a livello di
slogan:
Tesi di Turing. Un problema ha un "algoritmo" che lo risolve se e solo se
c'è una Macchina di Turing che è capace di farlo.
"Tesi" sta qui per proposta, ipotesi di lavoro.
Ci sono fondati argomenti che sostengono ancor oggi questo punto di vista,
espresso da Turing una settantina di anni fa.

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.

Così, se accettiamo la Tesi di Thring, disponiamo di una precisa identificazione


dei problemi che hanno procedimento di soluzione. Risulta allora addirittura
possibile provare in modo rigoroso che taluni problemi non si possono risolvere
perché non c'è macchina di Turing capace di farlo.
Si potrebbe tuttavia ancora obiettare che dai tempi di Thring i modelli pratici
di calcolatori, ed anche la relativa teoria astratta, si sono grandemente svilup-
pati: oggi, al posto delle macchine di Turing, si possono considerare computer
sofisticati e addirittura prevedere, secondo certi recenti progressi della Fisica,
calcolatori quantistici di eccezionale velocità (ne accenneremo nel seguito).
Thttavia questi sviluppi non mettono in crisi il modello di Thring: infatti si
prova che quello che un moderno calcolatore, o una macchina quantistica, sa
computare, anche un'opportuna macchina di Thring riesce a calcolarlo, sem-
mai più lentamente.
Arriviamo così al vero nocciolo della questione. Infatti la semplice esistenza di
un procedimento che fornisce le risposte di un problema non è talora sufficien-
te a garantire un trattamento pieno, adeguato e soddisfacente del problema
stesso. Sovente occorre che le risposte arrivino in tempo breve, senza indugi:
una soluzione che tarda ore, o anni, o millenni ad arrivare è tanto inutile quan-
to una soluzione che non c'è. Del resto lo stesso Turing aveva sperimentato
queste esigenze di rapidità nell'urgenza di infrangere il codice Enigma. Sotto
questo punto di vista, non ci basta più sapere che cosa è un algoritmo, e quali
problemi hanno un algoritmo che li risolva. Vogliamo invece caratterizzare la
nozione di algoritmo rapido e stabilire quali problemi hanno un procedimento
rapido di risposta e quali no. C'è in Informatica Teorica una proposta formu-
lata da Edmonds a metà degli anni sessanta, ribadita da Cook e Karp agli
inizi degli anni settanta (e in realtà già anticipata da Von Neumann, Rabin e
Cobham alcuni anni prima di Edmonds) che afferma:
Tesi di Edrnonds-Cook-Karp. Un algoritmo è efficiente (= rapido) se e
solo se lavora in tempo al più polinomiale rispetto alla lunghezza dell'input.
(La lunghezza di un input è il numero dei simboli che lo compongono.) Dun-
que, secondo una visione ormai accettata anche nella vita comune, si bolla
come lento e inefficiente qualunque procedimento che richieda un tempo espo-
nenziale rispetto alla lunghezza dell'input (maggiore o uguale di 21 se l indica,
appunto, questa lunghezza); al contrario si accetta come rapido ed effettivo
un algoritmo che impieghi un numero di passi al più polinomiale rispetto a l
(scelta che meriterà qualche commento nelle prossime righe).
22 1 Dalla Crittografia ai Numeri

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)

se e solo se 9 supera asintoticamente f a meno di un fattore costante positivo


c: per la precisione, se e solo se esistono un reale positivo c ed un naturale lo
tali che, per ogni l 2: lo, f(l) :::; c· g(l).
Allora si vede facilmente che ogni funzione polinomiale l I-t lk, con k intero
positivo, soddisfa

dove ll-t 21 è la funzione esponenziale (in base 2), ma viceversa non vale

per nessun k. Di più, per k, k' interi positivi, si ha


lk = o(lk') se e solo se k :::; k'.
La Tesi di Edmonds-Cook-Karp afferma, per usare termini ufficiali, che un
algoritmo opera in tempi rapidi se e solo se la corrispondente funzione f è
O(lk) per qualche intero positivo k. In particolare esclude che un algoritmo che
impiega un numero esponenziale 21 di passi rispetto alla lunghezza l dell'input
sia rapido: conclusione che pare facilmente condivisibile, come già osservato.
Ma per altri versi, la tesi di Edmonds-Cook-Karp è discutibile: ad esempio,
quanto possiamo ritenere efficiente un algoritmo che impiega un tempo lk se
l'esponente k è 222 "'? Comunque la proposta è, allo stato attuale delle cose,
prevalentemente accettata se non altro perché non se ne vedono di migliori,
dunque per pigrizia più che per convinzione.
La classe dei problemi che hanno un algoritmo di soluzione che lavora in tempo
polinomiale viene denotata P (P per polinomiale, appunto). Si chiama invece
N P la classe dei problemi che ammettono un algoritmo rapido (e cioè, anco-
ra, polinomiale) di verifica delle soluzioni, nel senso che adesso spieghiamo.
1.5 Problemi del millennio 23

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

perché ogni algoritmo (rapido) di soluzione costituisce implicitamente anche


una verifica. Ci si chiede allora se vale:
Problema. P = N P.
In altre parole ci si domanda se i tempi di soluzione siano o no significativa-
mente più lunghi di quelli di verifica, ovvero ancora se esistano problemi privi
di un algoritmo rapido di dimostrazione ma dotati di un algoritmo veloce di
verifica. Il problema P = N P è uno tra i più dibattuti e profondi della Mate-
matica Applicata (e dell'Informatica Teorica), e sembra ben lungi dal trovare
una risposta, anche se ci sono forti argomenti che sembrano avvalorare la con-
gettura negativa P -::f- N P. Comunque, proprio per la sua difficoltà e per il suo
interesse, è stato inserito nella lista dei 7 "Problemi del Millennio", ovvero di
quelle che sono sembrate le sette questioni più rilevanti per la Matematica del
duemila.
Ci sono poi vari problemi S, spesso di natura combinatoria, e ancor più spesso
di facile presentazione, che si trovano nella seguente condizione:
a) S ammette un algoritmo rapido di verifica, e dunque sta in N P,
b) ogni problema S'in NP si può ricondurre a S in tempo polinomiale (nel
senso che c'è una procedura che traduce in tempo polinomiale le istanze
24 1 Dalla Crittografia ai Numeri

s' di S'in corrispondenti istanze s di S in modo tale che s' ha risposta


positiva in S' se e solo se s la ha in S).
Così dimostrare che S E P implica che tutto NP è in P, e dunque P = NP;
viceversa, è ovvio che, se S f/. P, allora P -::f- N P. Questi problemi S sono
allora chiamati N P-completi, a sottolineare la loro caratteristica di test cam-
pione circa la congettura P = NP. Chiaramente, se si prova P = NP, allora
la nozione di N P-completezza perde di significato. Ma, siccome si congettura
proprio il contrario e cioè P -::f- N P, la N P-completezza assume piena rilevan-
za: concludere P -::f- N P si riduce, infatti, ad escludere qualunque algoritmo
rapido di soluzione per un qualsiasi problema NP-completo. Se P -::f- NP,
si dimostra poi che c'è spazio in N P - P anche per problemi che non sono
NP-completi: si chiamano NP-intermedi. Ne vedremo tra poco un possibile
esempio assai significativo.
Tornando alla crittografia, la disparità di tempo tra gli algoritmi di verifica
e quelli di soluzione di un problema N P-completo o N P-intermedio può for-
nire, in linea di principio, ottimi spunti per la costruzione di funzioni F a
senso unico: si tratta di legare in modo opportuno la computazione di F (e
dunque la codifica del criptosistema) alla procedura (rapida) di verifica, e la
computazione dell'inversa di F (quindi la decodifica) alla difficoltà di ottene-
re algoritmi veloci di soluzione. Nel Capitolo 6, presenteremo in dettaglio un
esempio famoso (e sfortunato) di cripto sistema a chiave pubblica basato su
questi argomenti: si tratta del Criptosistema di Merkle-Hellman, che si fonda
su un classico problema N P-completo, noto come Problema dello Zaino.
Il collegamento tra il problema P = N P e l'esistenza di funzioni a senso unico
ha comunque un fondamento teorico ben stabilito. Si prova infatti che ci sono
funzioni a senso unico se e solo se P eguaglia un'opportuna sottoclasse U P di
N P, definita - più o meno - come segue.
Un problema S è in U P se e solo se c'è un algoritmo di verifica delle sue
soluzioni che richiede esattamente un testimone per ogni istanza positiva.
Così si ha P ç U P ç N P, ma non è chiaro se P = U P né se l'uguaglianza
P = U P implica P = N P. La condizione di unicità che U P richiede va
sostanzialmente a tradurre la proprietà di invertibilità che una funzione a
senso unico F possiede, il fatto cioè che ogni sua immagine proviene da un
unico elemento del dominio.

1.6 Teoria dei Numeri e Crittografia


C'è però un'altra copiosa fonte di ispirazione per le funzioni a senso unico; per
stupefacente che possa sembrare, essa è la Teoria dei Numeri naturali, quegli
apparentemente innocui numeri 0, 1, 2, ... con cui siamo abituati a contare
fin da bambini. Infatti, a dispetto della loro presunta semplicità, i naturali
racchiudono alcuni dei misteri più profondi ed affascinanti della Matematica,
e gli enigmi che ne derivano si rilevano una buona fonte per la crittografia mo-
derna. Anche il cripto sistema oggi più comune, quello chiamato RSA, nasce
1.6 Teoria dei Numeri e Crittografia 25

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

"(12,28) (21,3) (6,14) (30,26)"

attraverso la funzione di codifica

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

[68] propone una storia della crittografia accattivante e facilmente accessibile,


[27] la espone in modo più rigoroso; ad esempio vi si possono trovare mag-
giori dettagli sul cifrario di Vernam. Anche la Teoria di Shannon è esposta
sinteticamente in [27]. Molti ottimi testi introducono la teoria della computa-
bilità e della complessità computazionale, discutendo in dettaglio il problema
p = NP: citiamo [13], [30], [43], [51], [69]. Si veda anche [71]. Una presen-
tazione dei problemi del millennio e dunque in particolare di P = N P è in
[20].
2
Primi e Composti

2.1 Divisori, resti e quozienti

Come già anticipato, consideriamo in questo capitolo l'insieme N dei naturali


O, 1, 2, ... , talora eventualmente allargato all'insieme Z di tutti gli interi
O, ±1, ±2, .... Assumiamo una minima dimestichezza con questi insiemi nu-
merici e con le usuali operazioni +, . e relazioni :S che li riguardano, quale si
può dedurre dai testi menzionati nei riferimenti bibliografici a fine capitolo. In
particolare, supponiamo noti il principio di induzione, il principio di induzione
completa e il principio del minimo. Trattiamo comunque in dettaglio alcuni
argomenti specifici che ci riguarderanno nel seguito del libro. Ci interessano
in particolare l'operazione di divisione, non sempre possibile né tra i naturali
né tra gli interi, e la conseguente relazione binaria di divisibilità ''l'': per a, b
naturali, si dice che b divide a, o anche che a è divisibile per b (o multiplo di
b), e si scrive b I a quando esiste qualche naturale q per cui a = b· q. Ana-
loga definizione si dà per gli interi. Si verifica facilmente che ogni naturale è
divisibile per 1 e per se stesso e divide O (esercizio). Viceversa, l'unico natu-
rale divisibile per O è lo stesso O. La relazione di divisibilità è una relazione
di ordine parziale e non totale tra i naturali; tra gli interi, invece, anche la
proprietà antisimmetrica va persa (ad esempio 2 I -2 e -2 I 2, ma 2 :I -2).
Il controllo di queste proprietà è un esercizio relativamente semplice.
Come detto, anche escludendo il caso eccezionale b = O, la divisibilità non
sempre è assicurata per coppie di naturali (ad esempio 2 divide 4, ma non 3),
ed il miglior risultato che possiamo citare a questo riguardo è quello ben noto
che segue.

Teorema 2.1.1 (del quoziente e del resto) Siano a e b naturali, b:l O.


Allora esistono due naturali q e r unici tali che a = b . q + r e r < b.
Con le opportune modifiche il teorema si estende anche agli interi (dove oc-
corre chiedere O :S r < Ibl invece che r < b); q si dice il quoziente, e r il resto
della divisione di a per b. Si ha che b divide a esattamente quando il resto r
28 2 Primi e Composti

della loro divisione è O.


Ricordiamo adesso la definizione di massimo comune divisore e minimo
comune multiplo (tra i naturali).
Definizione 2.1.2 Siano a e b due naturali non entrambi nulli. Un naturale
d si dice massimo comune divisore di a e b se:
(i) d divide tanto a quanto b,
(ii) ogni altro divisore comune di a e b è :S d.

Si noti che esiste almeno un divisore comune di a e b, ed è 1. Inoltre, per a f::- 0,


i divisori di a devono essere tutti :S a, ed altrettanto vale per b quando b f::- o.
Ne segue che, se almeno uno dei due elementi a, b è diverso da 0, l'insieme dei
loro divisori comuni è, oltre che non vuoto, anche finito, e quindi ha massimo.
In conclusione, il massimo comune divisore di a e b esiste, ed è ovviamente
unico. Possiamo allora denotarlo con uno specifico simbolo, ad esempio (a, b).
Ci chiediamo adesso come calcolarlo nella pratica: la definizione non pare
infatti utile in questa prospettiva. In certi casi, la computazione del massimo
comune divisore è comunque facile e diretta.

Esempio 2.1.3 Se b I a (in particolare se a = O), il massimo comune divisore


di a e b non può che essere b (che è il massimo tra i suoi divisori, e dunque
anche tra quelli comuni con a). Allo stesso modo si procede se a I b.

In tutti gli altri casi, dunque anche per a, b f::- 0, la seguente osservazione può
risultare utile.

Osservazione 2.1.4 Siano a e b due naturali, a, b f::- 0, a 2: b. Dividiamo a


per b ottenendo quoziente qo e resto ro:

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

Se ro = 0, allora b divide a e il massimo comune divisore cercato è, appunto,


b. Altrimenti possiamo dividere b per ro e calcolare i relativi quoziente e resto

Di nuovo, se rl = 0, allora possiamo dedurre ro I be ro = (b, ro). Ma (a, b) =


(b, ro), dunque (a, b) = ro. Altrimenti proseguiamo dividendo stavolta ro
per rl. Il procedimento ha comunque termine dopo un numero finito s di
passi: infatti il principio del minimo esclude l'esistenza di una successione
strettamente decrescente infinita di naturali

Al passo s, si avrà dunque

e, conseguentemente,

(a, b) = (b, ro) = (ro, rd = ... = (rs -2, rs-d = rs-l·


In altre parole, l'ultimo resto non nullo determinato dal procedimento è anche
il massimo comune divisore di a e b.

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.

Esercizio 2.1.5 Si determini attraverso l'algoritmo euclideo delle divisioni


successive il massimo comun divisore di
• 343 e 1421;
• 1650 e 8712.

Tornando al massimo comune divisore, sarà opportuno ricordare:

Teorema 2.1.6 (Identità di Bézout) Siano a e b due naturali non entram-


bi nulli. Allora ci sono due interi x e y tali che (a, b) = ax + by.
30 2 Primi e Composti

È 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

(a, b) = bX' + (a - bqO)Y' = ayl + b(X' - qoyl),

dunque in particolare x = yl e y = Xl - qoyl.


È facile poi controllare che il calcolo di x e y a partire da a e b richiede sostan-
zialmente gli stessi tempi dell'algoritmo euclideo e quindi è al più quadratico
rispetto alla lunghezza di a e b.
L'identità di Bézout ha varie interessanti conseguenze. Ad esempio implica:

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ì

c = c . 1 = c . (ax + by) = cax + cby = cax + qay = a . (cx + by)


dove cx + by è ovviamente naturale. Segue a I c. D
A proposito, ricordiamo che due naturali non nulli a e b che hanno massimo
comune divisore 1 si dicono primi tra loro.
Parliamo adesso del minimo comune multiplo di due naturali.

Definizione 2.1.8 Siano a, b due naturali non nulli. Un naturale m si dice


minimo comune multiplo di a e b se m # O e
(i) m è multiplo tanto di a quanto di b,
(ii) ogni altro multiplo comune n # O di a e b è 2: m.

Il motivo per cui O è stavolta brutalmente escluso dalla trattazione è facile


da capire: in effetti O è, ovviamente, il minimo multiplo di ogni naturale e co-
munque l'unico multiplo di se stesso. Supponiamo dunque a e b diversi da O:
2.2 Una parentesi computazionale 31

c'è almeno un multiplo comune a· b di a e b e, di conseguenza, per il principio


del minimo, c'è un minimo comune multiplo (# O) di a e b, ovviamente unico.
Possiamo convenire di rappresentarlo [a, b]. Quanto a calcolarlo esplicitamen-
te, il successivo paragrafo 2.3 ci mostrerà che, per ogni scelta di a e b non
nulli,
a . b = (a, b) . [a, b],
il che riduce la computazione di [a, b] a quella già considerata di (a, b): l'u-
so dell'algoritmo euclideo, seguito da una moltiplicazione e una divisione
determina
a·b
[a, b] = (a, b) .

2.2 Una parentesi computazionale

Come anticipato poche righe fa dedichiamo questo paragrafo a descrivere


a) come si rappresentano i numeri naturali e quindi come si misura la loro
lunghezza,
b) come si valutano i tempi delle computazioni sui numeri naturali.
Potremo così apprezzare pienamente l'efficienza degli algoritmi sui naturali,
come quello, già trattato, per la ricerca del massimo comune divisore, con-
frontando, appunto, tempi di computazione e lunghezza dei numeri coinvolti
come input. Cominciamo proprio parlando della lunghezza.
Sappiamo tutti che un numero naturale viene comunemente scritto in base lO,
elencando a partire da destra la cifra delle unità, quella delle decine, quella
delle centinaia, quella delle migliaia, e COSI via. Un numero tra 1 e lO (escluso)
richiede una sola cifra, una tra lO e 100 = 10 2 (escluso) necessita di due cifre,
una tra 100 e 1000 = 103 (escluso) di 3, e via di seguito. Dunque la lunghezza
di un numero intero positivo N fa diretto riferimento al suo logaritmo in base
lO o meglio alla sua parte intera, che infatti vale

• O per numeri fino a lO escluso,


• 1 per numeri da lO fino a 10 2 escluso,
• 2 per numeri da 10 2 a 103 escluso
e così via. Il valore preciso della lunghezza di N in base lO è, infatti

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, ...

La lunghezza aumenta, ma la regola che la calcola rimane la stessa: infatti la


lunghezza di un naturale N in base 2 eguaglia

llog2 N J + 1

e dunque è ancora collegata a lOg2 N. Ricordiamo poi la relazione che


intercorre tra i logaritmi di N in base 10 e 2:

loglO N = loglO 2 ·log2 N.

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

Così due successive applicazioni dell'algoritmo determinano un resto rl < ~a.


Non è difficile osservare che, allo stesso modo, rl > 2r3, dunque a > 2rl >
22r3; in generale, dopo t iter azioni si deduce

a> 2t . r2t-l

(dove r2t-l è il resto ottenuto al passo 2t - 1).


Sia s il passo finale dell'algoritmo, quello che produce rs = O e dunque dichiara
rs-l = (a, b). Supponiamo per semplicità che s sia pari, dunque s = 2T per
T numero naturale, e deduciamo

a> 2T r2T-l.

Siccome r2T-l = rs-l > O, 2~ ~ 1, cioè a ~ 2T e T :S lOg2 a, da cui


s :S 2log 2 a. Dunque le varie divisioni successive da svolgere sono 0(lOg2 a).
Inoltre i calcoli sui bit dei vari numeri coinvolti in ciascuna divisione si svol-
gono certamente in tempo O(log~ a) perché riguardano interi al più lunghi
quanto a, e anzi possono ridursi a 0(log2 a) con qualche opportuno accorgi-
mento. In conclusione il numero di passi dell'algoritmo euclideo è O(log~ a),
quindi al più polinomiale (e anzi quadratico) nella lunghezza dell'input a, e
conseguentemente anche in quella di b, visto che b :S a.

2.3 Il Teorema Fondamentale dell' Aritmetica


Ricordiamo che un numero naturale N si dice primo se N ~ 2 e gli unici
divisori di N sono 1 e N (quelli che N non può evitare). Dunque la sequenza
dei numeri primi è
34 2 Primi e Composti

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ...

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:

Teorema 2.3.1 (Teorema Fondamentale dell' Aritmetica) Qualunque


naturale N > 1 si decompone in uno e un solo modo (a meno dell'ordine dei
fattori) come prodotto di numeri primi.

Prima di iniziarne la dimostrazione, sarà bene premettere una considerazione


che si collega a quanto osservato nel paragrafo 1, quando si è sottolineato che,
se un naturale N è divisore di un prodotto a· b, non è detto che sia divisore di
uno dei fattori a e b. Questa conclusione è comunque vera quando N è primo,
come adesso proviamo.

Lemma 2.3.2 Siano p un primo, a e b due naturali tali che p I a . b. Allora


p I a oppure p I b.
Dimostrazione. (a, p) è un divisore di p e dunque vale 1 o p perché p è primo.
Nel secondo caso, p divide a. Altrimenti possiamo applicare il Corollario 2.1.7
sopra citato e dedurre che p divide b. D

Passiamo adesso alla dimostrazione del Teorema Fondamentale dell' Aritmeti-


ca.
Esistenza della decomposizione. Procediamo per induzione completa su
N 2 2. Se N è primo, in particolare se N = 2, la tesi è ovvia. Supponiamo
allora N composto (in particolare N > 2). Allora N = a· b per opportuni
fattori a e b entrambi minori di N e 2 2. Per l'ipotesi di induzione, tanto
a quanto b si scrivono come prodotto di numeri primi. Ma allora altrettanto
vale per N.
2.3 Il Teorema Fondamentale dell'Aritmetica 35

Unicità della decomposizione. È da provare che, se N = Po . . ... Pn =


qo ..... qm per n e m naturali, Po, ... , Pn, qo, ... , qm primi, allora n = m
e, salvo permutare gli indici, Pi = qi per ogni i :S n. Procediamo nuovamente
per induzione completa su N. Se N è primo, la tesi è immediata: deve essere
n = m = O, Po = qo = N. Adesso assumiamo N composto. Notiamo che Po
divide N = qo ..... qm' Per il Lemma 2.3.2, deve esistere un qualche j :S m
tale che Po I qj; salvo riordinare gli indici, possiamo supporre j = O, cioè
Po I qo· Anzi, siccome qo è primo e Po > 1, deve essere Po = qo. Consideriamo
adesso
N
- = Pl ..... Pn = ql ..... qm'
Po
Siccome N è composto, Po N > 2; inoltre N < N. Possiamo allora applicare
- Po
l'ipotesi di induzione e dedurre n = m e, salvo un riordinamento degli indici,
Pl = ql, ... , Pn = qn' D

Vale la pena di sottolineare che il Teorema Fondamentale dell'Aritmetica ed in


particolare l'unicità della decomposizione in fattori non ulteriormente riduci-
bili (validi in N e, salvo opportuni aggiustamenti, anche in Z) non si preservano
in strutture apparentemente vicine sia ai naturali che agli interi. Questo riba-
disce che il teorema è proprietà sostanziale e non banale dei naturali e degli
interi. Eccone infatti due controesempi.

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,

(4n + 1) . (4m + 1) = 4(4mn + m + n) + 1.


Tuttavia è facile controllare che, nel nostro insieme, 693 = 4 . 173 + 1 ha
due possibili decomposizioni in fattori irriducibili

693 = 9·77 = 21 . 33.

2. Consideriamo adesso i numeri reali della forma ao + al V15 con ao e


al interi. È facile controllare che essi formano un sottoanello del campo
reale, usualmente denotato Z[v'i5]. In questo anello 10 ha due possibili
decomposizioni

10 = 2·5 = (5 + v''i5) . (5 - v'i'5)


in fattori irriducibili 2, 5, 5 ± V15.
36 2 Primi e Composti

Ritorniamo ai naturali. Il Teorema Fondamentale dell'Aritmetica ci dice che


ogni naturale N ~ 2 si scrive in modo unico come

N --Poko ..... Pnkn

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.

Corollario 2.3.4 Nella notazione precedente,

=pmin{ko,ho}.
(a 'b)o 'pmin{kn,hn}
... n ,

[a 'blo
= pmax{ko, ho} .
...
. pmax{kn, hn}
n .

In particolare (a, b) . [a, bl = a· b, e dunque il minimo comune multiplo [a, bl


eguaglia il prodotto a . b se e solo se (a, b) = 1, cioè se e solo se a e b sono
primi tra loro.

In questo modo si ottiene un nuovo metodo di calcolo di massimo comune


divisore e minimo comune multiplo, alternativo all'algoritmo euclideo delle
divisioni successive. Valuteremo più tardi se questo secondo approccio sia
preferibile all'altro, perché più rapido ed efficiente. Vale comunque la pena di
sottolineare fin d'ora come esso faccia riferimento alla decomposizione di a e
b in fattori primi e dunque sia condannato a rispettarne i tempi di lavoro.
2.4 Il Teorema dei Numeri Primi 37

2.4 Il Teorema dei Numeri Primi

Il Teorema Fondamentale dell'Aritmetica ci dice che i numeri primi sono,


in un qualche senso, i fondamenti della struttura moltiplicativa dei naturali.
Cerchiamo allora di comprendere meglio la loro distribuzione all'interno di No
Intanto dobbiamo prendere atto che:

Teorema 2.4.1 Ci sono infiniti numeri primi.

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;

si tratta di un naturale certamente > 2 e, come tale, ammette almeno un


divisore primo p. Ma P non può essere né Po, ... , né Pr, altrimenti divide il
prodotto Po ..... Pr e dunque anche la differenza N - Po ..... Pr, cioè 1 (il
che è assurdo). D

In realtà vi sono molte possibili dimostrazioni dell'infinità dei primi: ad esem-


pio il libro di P. Ribenboim The new book oE prime number records ne raccoglie
una decina, e ne cita anche altre. Noi ci limitiamo a presentare una seconda
prova del teorema, dovuta ad Eulero e dunque successiva ad Euclide di molti
secoli: gli strumenti tecnici che vi sono coinvolti sono certamente meno sem-
plici di quelli di Euclide, ma mostrano come metodi di Analisi Matematica
possano intervenire fruttuosamente nella ricerca sui primi.
Dimostrazione di Eulero. Ricordiamo che ogni primo P è maggiore di 1 e
dunque soddisfa O < ~ < 1. Dunque la serie geometrica L%:o ;k
converge
alla somma l~l. Se q è un altro primo, si deduce allo stesso modo
p

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

Si noti poi che il prodotto al primo membro è la somma Lm ~ dove m varia


tra i naturali non nulli che hanno fattori primi tra P e q. Siano ora per assurdo
Po < ... < Pr tutti i primi. Si avrà
38 2 Primi e Composti

1 1
IILIi=II
00

1_ l
PJ
j"5.r k=O j"5.r P;

dove il prodotto al primo membro eguaglia Em ~ quando m varia tra i natu-


rali non nulli con fattori primi tra Po, ... , Pr e dunque, in definitiva, tra tutti
i naturali non nulli. Ma la serie Em>o ~ diverge, e dunque non può avere una
somma finita TIj<r l_Il. Si cade così in contraddizione per avere assunto che
- Pj
ci sia soltanto un numero finito di primi. Segue allora che i primi sono una
infinità. D

La (infinita) successione dei pnml non è comunque regolare e prevedibile,


presenta invece alcune singolari anomalie. Ad esempio si osserva facilmente
che i primi tra 11 e 20 sono 4 - e cioè 11, 13, 17 e 19 -; d'altra parte 4 è il
massimo numero di primi che possiamo attenderci tra dieci numeri consecutivi
tutti> 2, poiché tra dieci numeri consecutivi ce ne sono 5 pari - come 12,
14, 16, 18, 20 tra 11 e 20 - ed uno dispari ma multiplo di 5 - come 15 nel
nostro caso -, e tutti questi valori sono ovviamente composti. Così i primi si
addensano tra 11 e 20. Ma non altrettanto avviene, ad esempio, tra 10 milioni
e 10 milioni e 100, quando tra cento numeri consecutivi se ne incontrano
soltanto due che sono primi, e cioè

10.000.019, 10.000.079.

In generale, anzi, si ha:

Teorema 2.4.2 Sia k un qualunque intero > 1. Allora ci sono k numeri


naturali consecutivi nessuno dei quali è primo.

Dimostrazione. Consideriamo (k + 1)! = 1·2·3· .... k . (k + 1) e la sequenza


di naturali
• al = (k + 1)! + 2 maggiore di 2 e divisibile per 2,
• a2 = (k + 1)! + 3 maggiore di 3 e divisibile per 3,
fino a
• ak = (k + 1)! + (k + 1) maggiore di k + 1 e divisibile per k + 1.
Si ottengono in questo modo k numeri consecutivi, nessuno dei quali è primo.
D

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.

In definitiva, si conferma per questa via quanto anticipato sulla irregolarità e


imprevedibilità della sequenza dei primi e si ribadisce il problema di capire in
che modo essi si distribuiscono in N. La questione interseca i metodi di Analisi
già presenti nella dimostrazione di Eulero della infinità dei primi. In effetti,
una misura della distribuzione dei primi può essere fornita dalla funzione 7f
che ad ogni reale positivo x associa
7f(x) = numero dei primi ~ x.
Dunque 7f(2) = 1, 7f(3) = 2, 7f(6) = 3 e così via. Gauss congetturò nel 1792,
a soli 15 anni, che 7f(x) coincide asintoticamente con l'altra funzione x I-t
lo~ x per x che tende a +00, azzardando in questo modo almeno una stima
approssimata della distribuzione dei primi (log denota qui il logaritmo nella
base e).
Ma la Congettura di Gauss non si rivelò semplice da dimostrare. Ad esempio,
ci volle qualche tempo prima che Chebyshev riuscisse a provarne una versione
più debole, e precisamente che il grafico di 7f(x) può essere racchiuso per x> 1
da quelli di due opportuni multipli di lo~ x. In dettaglio, sappiamo oggi che,
per ogni x ~ 3,
x 2x
- - <7f(x) < - - .
2log x - - log x
Per progressi più sostanziali bisognò attendere Riemann, e il suo uso dell'anali-
si complessa in questioni di teoria dei numeri. Riemann introdusse la funzione
di variabile complessa
00 1
((s) = " ' -
L...J nS
n=l

definita quando s E <C e la parte reale Re(s) di 8 è > 1; (è chiamata, appunto,


la zeta di Riemann. Si noti che, per Re(8) > 1,

((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

essere ottenute dallo studio delle proprietà analitiche di ( e di analoghe funzio-


ni. Ad esempio, non è difficile osservare, avendo un minimo di dimestichezza
con l'analisi, che l'argomento di Eulero deriva l'esistenza di infiniti primi dalla
proprietà lims--+l ((s) = 00. D'altra parte, l'analisi complessa ci assicura che
( è una funzione olomorfa su tutto il semipiano Re(s) > 1 e si può estendere
opportunamente ad una funzione analitica sul semipiano Re(s) > O e addi-
rittura sull'intero piano complesso CC. Riemann, in una sua famosa ricerca,
stabilì il legame tra la funzione 1f e le radici in CC del prolungamento analitico
di (. Infatti, si può provare che questo prolungamento si annulla anzitutto
nei punti -2, -4, ... della retta reale: questi zeri sono detti banali. Riemann
congetturò:
Ipotesi di Riemann. Gli zeri non banali di ( si trovano tutti sulla retta
Re(s) = ~ e sono infiniti.
L'infinità degli zeri di ( sulla retta Re(s) = ~ fu provata da Hardy; ma la
prima parte dell'ipotesi di Riemann è ancora un problema aperto. Una sua
soluzione positiva implicherebbe, relativamente alla funzione 1f,

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

La dimostrazione si basa su ulteriori sviluppi dell'analisi complessa, in parti-


colare sulla prova che ((s) f::- O per Re(s) = 1. Il Teorema dei Numeri Primi dà
una luce parziale sul problema della distribuzione dei primi, ma solo attraverso
una stima asintotica. Molti misteri che accompagnano l'effettiva distribuzione
dei primi restano ancora aperti, e tra essi, come già detto, il numero effettivo
delle coppie di primi gemelli. Anche qui si hanno soltanto parziali stime asin-
totiche relative alla funzione 1f2 che ad ogni reale positivo x associa il numero
dei primi p :S x tali che p + 2 è ancora primo: si noti che il numero delle coppie
di primi gemelli è finito se e solo se 1f2 diviene costante da un certo x in poi.
Ma allo stato attuale quanto di meglio si sa è che

1f2(X) :S 8D _x_ (1 + O(loglogx))


log2 x log x

dove D denota il prodotto TI p (l - (p!1)2)' è chiamata la costante dei primi


gemelli ed è stimata 0,66016 ....
2.5 Riconoscere i Primi? 41

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.

2.5 Riconoscere i Primi?

Il Teorema Fondamentale dell'Aritmetica solleva anche la seguente coppia di


questioni: dato un naturale N > 1,

1. (primalità) riconoscere se N è primo o no;


2. (fattorizzazione) decomporre N nei suoi fattori primi.
I due problemi sono certamente collegati, ma non coincidenti: anche da un
punto di vista intuitivo, si può ragionevolmente ammettere che "decomporre
N in fattori primi" è più complicato che non "distinguere se N è primo o
composto". Torneremo più tardi su questo argomento. Ma intanto citiamo
l'autorevole parere che Gauss espresse a proposito delle due questioni nelle
sue Disquisitiones Arithmeticae del 1801:

"Il problema di riconoscere i primi dai composti e di decomporre i secondi


nei loro fattori primi è riconosciuto essere uno dei più importanti ed utili in
Aritmetica ... La dignità stessa della scienza sembra richiedere di esplorare
ogni possibile mezzo per risolvere problemi così eleganti e famosi."
Comunque, senza voler mancare di rispetto a Gauss, tanta attenzione sem-
bra, almeno a prima vista, spropositata e ingiustificata. In effetti, già gli an-
tichi Greci conoscevano un algoritmo semplicissimo per risolvere entrambe le
questioni. Lo chiameremo, tanto per fissare le idee, algoritmo elementare.
Algoritmo elementare. Sia dato un naturale N > 1. Dividiamo successiva-
mente N per 2,3,4,5, ... , N-L
• Se nessuna divisione dà resto 0, si dichiara N primo.
• Se qualche divisione dà resto 0, si deduce N composto, e si hanno infor-
mazioni sulla decomposizione di N (perché se ne conosce un divisore, col
relativo quoziente).
Che cosa c'è che non funziona in questo facile procedimento? In effetti, è
la sua efficienza che non soddisfa. Infatti, l'algoritmo può richiedere, almeno
nella forma in cui lo abbiamo proposto,

• N - 2 divisioni

(tante almeno occorrono se N si rivela primo). Ora, immaginiamo che N sia


un numero superiore al miliardo; possiamo aspettare un miliardo di divisioni
prima di riconoscerne la primalità? Il tempo di attesa sembra proibitivo, e
certamente lo è se ci rifacciamo alla tesi di Edmonds-Cook-Karp e ai dettami
42 2 Primi e Composti

della moderna Informatica Teorica. Infatti N - 2 è esponenziale rispetto alla


lunghezza dell'input N (che ricordiamo essere, più o meno, la parte intera di
[og2 N). È vero che il procedimento ha delle ovvie semplificazioni:

(i) se N = a· b con a e b minori di N (e maggiori di 1), si ha a ~ .../N o


b ~ .../N; in altre parole, se N è composto, allora N ha un divisore tra 2
e .../N, quindi la verifica dei possibili divisori di N si può limitare da 2 a
.../N;
(ii) se N non è multiplo di 2, non può esserlo neppure di 4, 6, ... ; in altre
parole, possiamo limitare la verifica ai numeri primi ~ .../N.
Ma anche con queste abbreviazioni l'algoritmo si mantiene lento e proibitivo
per numeri N grandi. C'è poi da osservare che ogni singola divisione non
corrisponde ad un unico passo di computazione, secondo la convenzione che
abbiamo fatto nel paragrafo 2, ma può a sua volta implicare un gran numero
di singoli passi. A questo proposito, va citata una variante del metodo, che
funziona in modo più rapido almeno per la primalità, si basa sul presupposto
che moltiplicare è più semplice che dividere ed era conosciuta anche agli antichi
Greci: viene infatti attribuita ad Eratostene (terzo secolo a. C.).
Crivello di Eratostene. Sia N un naturale> 1. Si determinano tutti i primi
~ N (e dunque anche la primalità di N) nel modo che segue:

(i) elenchiamo tutti i naturali da 2 a N (ad esempio distribuendoli su righe


corrispondenti alle decine, da 2 a lO, poi da 11 a 20, e così via);
(ii) 2 è primo; allora eliminiamo dalla nostra tabella tutti i multipli> 2 di 2;
(iii) il minimo numero rimasto (nella fattispecie 3) deve essere primo; elimi-
niamo comunque tutti i multipli> 3 di 3 ...
Si prosegue il procedimento fino a .../N. I numeri sopravvissuti alla selezione
sono i primi ~ N. In particolare, se N è rimasto nella tabella, N è primo.
Ma anche questa variante del metodo occupa troppo tempo ed anche troppo
spazio per la sua verifica di primalità. Dunque dobbiamo cercare algoritmi
più brillanti e veloci. È questo il senso della citazione di Gauss che ha aperto
il paragrafo. A questo argomento dedicheremo gran parte dei prossimi due
capitoli.

2.6 Generare i Primi

Alla ricerca di metodi adatti a riconoscere i primi si accompagna il problema di


generare nuovi primi, sempre più grandi, nella sequenza infinita che li elenca.
Diamo qualche esempio famoso di primi all'interno di opportune successioni
di naturali.
Primi di Fermat. La prima sequenza fa riferimento a Pierre de Fermat (1601-
1665), giudice francese a Tolosa e matematico "dilettante". Avremo modo di
2.6 Generare i Primi 43

incontrarlo ancora nelle prossime pagine. Con Fermat, possiamo considerare


le potenze di 2
1, 2, 4, 8, 16, ... , 2m , . . . (m E N)
ed i loro successori

2,3,5,9,17, ... , 2m + 1, ... (m E N).

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

non è primo, e del resto l'esponente 3 non è potenza di 2. Concentriamoci


allora sugli esponenti che sono potenze di 2 e chiamiamo, per ogni naturale n,
n-mo numero di Fermat.
Si ha, ad esempio,
• F(O) = 22° + 1 = 3,
• F(l) = 221 + 1 = 5,
• F(2) = 222 +1= 17,
• F(3) = 223 + 1 = 257,
• F(4) = 224 + 1 = 65537;
tutti questi numeri sono primi, come già Fermat aveva osservato. D'altra parte,
se m non è potenza di 2, 2m + 1 è composto: infatti, posto m = 2 h . d con h
naturale e d dispari> l,2 m + 1 si fattorizza come

con q maggiore di 1 perché d > 1. Sulla base di queste osservazioni Fermat


congetturò:
Congettura di Fermat. Tutti i numeri di Fermat F(n) sono primi.
Fermat tentò di provare questa proposizione senza riuscirei, ed anzi esprimen-
do qualche dubbio sulla sua verità. In effetti, un secolo dopo Fermat, Eulero
ne dimostrò la falsità: addirittura F(5) = 225 + 1 (il primo numero non ancora
considerato nella lista) è composto. A scusante di Fermat, va detto che F(5)
ha 10 cifre in base 10, e certamente non era facile controllarne la primalità ai
tempi di Fermat e di Eulero, quando i moderni calcolatori non erano certa-
mente disponibili. Lo stesso Eulero cercò dapprima di classificare teoricamente
i possibili divisori primi di un numero di Fermat F(n), e provò che dovevano
avere la forma
44 2 Primi e Composti

(in realtà Lucas provò successivamente che questa rappresentazione si può


ulteriormente migliorare, perché anche k deve essere pari, così che il generico
fattore primo di F(n) ha la forma
k' . 2n+2 +1
dove 2k' = k). In ogni caso Eulero, applicando la sua caratterizzazione degli
eventuali fattori primi dei numeri di Fermat al caso n = 5, scoprì che il numero
641 (che ha la forma richiesta 10.2 6 + 1) divide F(5)

F(5) = 641 . 6700417.


Che cosa sappiamo oggi dei numeri di Fermat?
1. Gli unici primi di Fermat conosciuti sono gli stessi già noti a Fermat, e
cioè F(n) per n :S 4. D'altra parte non è escluso che esistano altri esempi,
ed è ancora un problema aperto la possibilità che vi siano infiniti primi di
Fermat.
2. In effetti, i numeri di Fermat 22n + 1 diventano enormemente grandi anche
per valori relativamente bassi di n (si pensi a F(5)) e risulta difficile
decomporli, oppure verificarne la primalità, anche ricorrendo all'ausilio
dei moderni calcolatori. Per fare un ulteriore esempio, F(10) = 2210 + 1
si compone di oltre 300 cifre decimali. Del resto è stato provato che, per
ogni n > 1,
F(n) = F(O) . F(l) ..... F(n - 1) + 2
il che conferma quanto rapidamente crescano i numeri di Fermat F(n) al
variare di n. Così allo stato attuale ben poco si sa anche dei numeri di
Fermat composti, e la situazione è abbastanza chiara solo fino a F(30) (da
30 in su, si hanno solo informazioni frammentarie). Infatti è noto che F(n)
è composto per ogni n compreso tra 5 e 30. Tuttavia solo per 5 :S n :S 11
si conosce la decomposizione di F(n) in fattori primi. Per n = 14,20, 22,
24, invece, si sa che F(n) è composto ma non si conosce alcun suo divisore
primo. Finalmente, per gli altri valori di n da 5 a 30, si sa qualche fattore
primo di F(n) ma non l'intera decomposizione.
Ci sono comunque risultati molto belli a proposito dei numeri di Fermat.
Citiamo tra essi:
(i) un teorema di Goldbach che afferma che due numeri di Fermat diversi sono
primi tra loro;
(ii) un criterio di Pepin che stabilisce che, per ogni n, F(n) è primo se e solo
•• F(n)-1
se F(n) dlVlde 3-2- + 1;
(iii) ancora, il già citato criterio di Eulero e Lucas per identificare i fattori
primi di un numero di Fermat.
Ma il più famoso risultato che coinvolge i primi di Fermat è il teorema di Gauss
sulla classificazione dei poligoni regolari costruibili con riga e compasso, che
ricordiamo qui sotto.
2.6 Generare i Primi 45

Teorema 2.6.1 Sia n un naturale ~ 3. Allora si può costruire con la riga


e con il compasso un poligono regolare di n lati se e solo se n ha la forma
2h . Po . ... . Pr dove h è un naturale e Po, ... , Pr sono primi di Fermat a 2 a
2 distinti.

Dunque si possono costruire con riga e compasso poligoni regolari di 3, 4, 5, 6,


8, lO, 12, 15 ... lati (infatti 3, 5 sono primi di Fermat) ma non di 7, 9, 11, 13,
14, ... lati (visto che 7, 11, 13 non sono primi di Fermat, 3 lo è ma 9 contiene
il fattore 3 due volte, e così via).
Primi di Mersenne. Marin Mersenne (1588-1648) fu religioso francese.
I numeri di Mersenne si introducono come segue. Consideriamo ancora le
potenze di 2
1, 2, 4, 8, 16, ... , 2m , . . . (m E N)
ma stavolta rivolgiamo l'attenzione ai loro predecessori

O, 1,3, 7, 15, ... , 2m - 1, ... (m E N).

Notiamo che
3 = 22 - 1, 7 = 23 - 1
sono primi, così come i corrispondenti esponenti 2, 3, mentre

15 = 24 - 1

è composto, proprio come l'esponente 4. Per ogni naturale m, chiamiamo m-


mo numero di Mersenne ed indichiamo M (m) il naturale 2m - 1. Prendiamo
atto con Mersenne che, se m è composto, anche M(m) lo è. Infatti, posto
m = a . b con a e b maggiori di 1, si ha

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

M(l1) = 211 - 1 = 2047 = 23·89.

D'altra parte non è chiaro quanti siano complessivamente i primi di Mersenne:


anzi, è problema ancora aperto se non siano addirittura infiniti. Ma, a differen-
za dei numeri di Fermat, nuovi primi di Mersenne sono stati progressivamente
scoperti nel corso degli anni. Citiamo, in secoli diversi,
• M (13) (risultato di Eulero del 1722),
• M(127) (Lucas, 1876),
• M(2l609l) (Slowinski, 1987)
46 2 Primi e Composti

In effetti, l'interesse principale per i numeri di Mersenne risiede soprattutto


nella semplicità della loro rappresentazione e nella speranza di trovare nella
loro sequenza 2m -1 (m E N) nuovi numeri primi, sempre più grandi. L'aiuto
dei calcolatori è fondamentale in questa ricerca: esiste addirittura un program-
ma G I M P S (Great Internet Mersenne Primes Search) che coordina l'attività
di chi vuole scoprire primi di Mersenne mettendo a disposizione un server cen-
trale e software libero. Così record sempre nuovi si sono succeduti negli ultimi
anni tra i primi di Mersenne, nell'ambito del programma GIMPS. Citiamo:
• M(20996011) (Shafer, 2003),
• M(24036583) (Findley, 2004),
• M(25964951) (Nowack, 2005).
Quest'ultimo è il primo più grande conosciuto al momento della stesura di
questo libro: si compone di otto milioni di cifre decimali ed è il 42-mo primo di
Mersenne fin qui trovato. È verosimile che, al momento della pubblicazione di
questo libro, il suo primato sarà già stato infranto. Del resto, c'è da dubitare
che questa ricerca frenetica di nuovi record sia ancora Matematica, e non
piuttosto un esercizio informatico volto a esibire e migliorare la potenza dei
moderni calcolatori.
U n altro argomento collegato ai numeri di Mersenne è il seguente. Un numero
naturale n -::f- O si dice perfetto se è la somma dei suoi divisori propri. Ad
esempio:
• 6 = 1 + 2 + 3 è perfetto (e del resto è il numero dei giorni della creazione
secondo la Genesi, coincidenza osservata e commentata da S. Agostino nel
suo De Civitate Dei),
• 28 = 1 + 2 + 4 + 7 + 14 è perfetto,
• anche 496 e 8128 sono perfetti (ed esauriscono tutti i possibili casi <
10000).
C'è un teorema che collega i primi di Mersenne ed i numeri perfetti, afferman-
do:
Teorema 2.6.2 Per ogni intero positivo m, M(m) = 2m - 1 è primo se e
solo se 2m - l . M(m) è perfetto.
L'implicazione da sinistra a destra era già nota ad Euclide, l'altra fu provata,
molti secoli dopo, da Eulero. Ad esempio:
• il numero perfetto 6 = 2·3 = 22 - 1 ·M(2) corrisponde al primo di Mersenne
3,
• il numero perfetto 28 = 4·7 = 23 - 1 .M(3) corrisponde al primo di Mersenne
7.
Così il problema relativo al numero dei primi di Mersenne si trasmette ai
numeri perfetti: in effetti non si conosce quanti essi siano. Di più tutti gli
esempi conosciuti riguardano numeri pari, ed è questione ancora aperta se
esistano numeri perfetti dispari.
2.7 Numeri e Misteri 47

Primi di Germain. Sophie Germain (1776-1831) fu matematica francese


contemporanea di Gauss. Un numero primo p si dice primo di Germain se
2p + 1 è ancora primo. Ad esempio

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

non ha radici intere a, b, c tali che p non divide né a né b (né c) quando


p è, appunto, un primo di Germain. Anche i primi di Germain hanno i loro
misteri; ad esempio, non è noto se siano finiti o infiniti. In compenso si sa che
ci sono infiniti primi che non sono di Germain; a questo proposito, c'è una
congettura di Hardy e Littlewood che afferma che il numero dei primi :::; x
che non sono di Germain è asintoticamente uguale (per x tendente a +(0) a
l:!/x' dove D = 0,6601618 ... è la costante dei primi gemelli.
Sull'importanza di conoscere metodi anche casuali per generare primi e sulle
applicazioni possibili di questi metodi in crittografia avremo modo di tornare
nel nostro ultimo capitolo.

2.7 Numeri e Misteri


La relativa facilità con cui argomenti, esempi e problemi di Aritmetica si
possono proporre non deve far pensare che la Teoria dei Numeri (naturali) sia
un'area semplice della Matematica. Come affermò Kronecker circa un secolo
fa, "i numeri naturali sono i soli creati da Dio". Questa frase (al di là degli
intenti polemici con cui fu pronunciata, contro Cantor e l'introduzione dei
numeri transfiniti) suggerisce per i numeri naturali una sorta di genesi divina,
che si riflette nei tanti misteri irrisolti che ancora li accompagnano. Del resto,
le pagine precedenti hanno fornito una gran dovizia di esempi a sostegno di
questa affermazione (i primi gemelli, i primi di Fermat, quelli di Mersenne,
i numeri perfetti e, per altri versi, l'Ipotesi di Riemann). Per rimanere ai
confini tra scienza e religione, possiamo citare quel che André Weil diceva a
proposito di certi problemi sui naturali, e cioè che "dimostrano l'esistenza di
Dio e anche quella del diavolo" (a sottolineare la difficoltà quasi trascendente
di certe questioni apparentemente semplici che li riguardano, ed il dispetto
di dover ammettere, appunto, la nostra incapacità di risolverle, come se un
qualche demonio ci ostacolasse). In questo paragrafo illustriamo brevemente
i due misteri più appassionanti che riguardano i numeri naturali, l'uno (la
Congettura di Goldbach) ancora aperto, l'altro (l'Ultimo Teorema di Fermat)
risolto da pochissimi anni.
48 2 Primi e Composti

Congettura di Goldbach. Nel 1742, C. Goldbach propose in una lettera ad


Eulero il seguente problema:
• ogni numero naturale 2 6 è la somma di al più 3 primi (non necessaria-
mente distinti).
Eulero rispose senza risolvere il quesito, ma osservando che sarebbe stato
sufficiente provare:
• ogni numero naturale pari 2 4 è la somma (in modo non sempre unico) di
2 primi (non necessariamente distinti).
Il lettore potrà dimostrare per esercizio il collegamento delle due proposizio-
ni. La seconda è quella che comunemente si chiama la Congettura di Goldbach.
Dovizie di esempi la sostengono

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:

non ci sono soluzioni intere a, b, c -::f- O della equazione xn + yn = zn


per n 2 3.
Si noti che il caso n = 2 corrisponde al Teorema di Pitagora, per il quale
esistono - ed anzi sono completamente classificate - soluzioni intere a, b,
c -::f- O: si pensi a
a = 3, b = 4, c = 5,
a = 5, b = 12, c = 13
e così via. Fermat escludeva dunque la possibilità di analoghe soluzioni a, b,
c -::f- O quando l'esponente n è > 2. D'altra parte la asserita dimostrazione
( "troppo lunga per essere contenuta nel margine della pagina", per dirla con
le parole stesse di Fermat) non fu trovata in nessuna delle carte che il matema-
tico francese ci lasciò. L'affermazione di Fermat divenne allora un problema
classico di Matematica, cui molti si appassionarono senza riuscire a trovare
una risposta: pur non essendo un "teorema di Fermat" nel senso letterale del
termine (in quanto la dimostrazione di Fermat, ammesso che fosse corretta,
non fu mai trovata), fu battezzata Ultimo Teorema di Fermat. Le discussioni
sorte nel tentativo di risolverla portarono a profondi sviluppi della Matematica
2.7 Numeri e Misteri 49

(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

1. Si trovino con l'algoritmo euclideo il massimo comun divisore e il minimo


comune multiplo delle seguenti coppie di interi
• 316 e 1281,
• 215 e 896.
Si rappresentino poi i due massimi comuni divisori nella forma
• 316x + 1281y,
• 215x + 896y
rispettivamente per x, y interi opportuni.
2. Si determinino i valori degli interi x, y che soddisfano 315x + 1650y = 15.
3. Sia N = 782354 un numero naturale scritto in base lO. Si calcoli la
lunghezza di N in base 2.
4. Se un numero N è formato da lO cifre in base lO, è possibile che la sua
lunghezza diventi 35 quando viene scritto in base 2?
5. Per ogni naturale m, sia F(m) = 22~ + 1 l'm-mo numero di Fermat. Si
provi che, per ogni m, F(m) - 2 = F(O) . F(l) ... F(m - 1).
(Suggerimento: si proceda per induzione su m. Il caso m = 1 è chiaro; il
passaggio da m a m + 1 si ottiene osservando che F( m + 1) - 2 = 22~+1 - 1
si decompone nel prodotto (22~ + 1) . (22~ - 1): il primo fattore è F(m),
il secondo eguaglia F(m) - 2 e gli si può applicare l'ipotesi induttiva).
6. Si provi che due numeri di Fermat distinti sono primi tra loro.
(Suggerimento: si utilizzi l'esercizio precedente).
7. Si possono costruire con riga e compasso poligoni regolari di 25, 85, 132 e
514 lati rispettivamente?
50 2 Primi e Composti

8. 8191 è un primo di Mersenne?


9. Si riconosca quali tra 13, 17, 19, 23, 29 e 31 sono primi di Germain e quali
no.
10. La terna (-2,14,15) verifica l'equazione X122 + y122 = Z122?
11. Si verifichi che la congettura di Goldbach è equivalente a ciascuna delle
seguenti affermazioni:
• ogni intero pari ~ 6 è la somma di al più 3 primi;
• ogni intero pari ~ 6 è la somma di 2 primi (entrambi dispari).

Riferimenti bibliografici

Un ottimo libro introduttivo di Algebra e Aritmetica elementari è [16]. Su


computabilità e complessità computazionale si veda [71]. Tra i possibili testi
di riferimento per la Teoria dei numeri, citiamo i classici [22] e [34], o i più re-
centi [61] e [38], l'ultimo dei quali tratta dichiaratamente il tema del rapporto
tra numeri e crittografia. Una godibilissima presentazione dei primi e dei loro
misteri è [57], che tratta anche la congettura di Goldbach, i primi di Fermat,
i primi di Mersenne, quelli di Germain e così via. [24] tratta gli stessi argo-
menti in modo più divulgativo; dedica molte pagine all'ipotesi di Riemann e
ai vari tentativi di risolverla. Anche [19] discute questi temi; presenta anche
la traccia di una dimostrazione del teorema di Chebyshev sulla congettura di
Bertrand. L'ipotesi di Riemann, e l'uso degli strumenti di Analisi in Teoria
dei Numeri, sono presentati in modo approfondito in [5]. Per un'analisi più
specifica, si veda anche [25]. Sul tema specifico dei numeri di Fermat, si veda
[39]. Chi vuoI cimentarsi nella ricerca dei numeri di Mersenne, può esplorare
www.mersenne.orgjprime.htm. Sull'Ultimo teorema di Fermat, si veda anche
[68], che ne espone la storia in modo semplice e accessibile. In ambito d'eva-
sione, anche la lettura di [23] è da consigliare. Tornando all'Ultimo teorema
di Fermat [58] ne dà un mirabile resoconto prima della soluzione di Wiles, che
[59] discute con ampia dovizia di indicazioni bibliografiche.
3

Potenze, Radici e Logaritmi

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.

3.2 L'Aritmetica dell'Orologio


Consideriamo l'anello Z degli interi con le usuali operazioni di somma e pro-
dotto. I concetti ricapitolati nello scorso capitolo sui naturali si estendono
con le opportune modifiche a questo ambito esteso. Per ogni intero positivo
N consideriamo in Z la relazione di congruenza modulo N. Ne ricordiamo
anzitutto la definizione.
Definizione 3.2.1 Si dice che due interi a e b sono congrui modulo N, e si
scrive a == b (modN), se N divide a-b.
52 3 Potenze, Radici e Logaritmi

Ad esempio 26 == 2 (mod24) perché 24 divide ed anzi eguaglia 26 - 2. È


un facile esercizio verificare che la congruenza modulo N è una relazione
di equivalenza in Z. Per ogni intero a, denotiamo con aN la sua classe di
congruenza modulo N

aN = {b E Z : a == b (modN)} = {Nq + a : q E Z}.


ZN denota l'insieme di queste classi, cioè l'insieme quoziente di Z rispetto a
== (modN). Si osserva facilmente quanto segue.
Osservazioni 3.2.2
= Nq+ r
1. Siano a un intero, r il resto della divisione di a per N; allora a
per qualche intero q, dunque a == r (modN) e in conclusione aN = rN
dove O :S r < N.
2. Quando poi r, s sono due interi e O :S r, s < N, si ha r == s (modN) se e
solo se r = s.
Le classi di congruenza modulo N corrispondono quindi ai resti della divisione
per N; ci sono m classi ON,IN, ... , (N - 1) N (che indicheremo talora nel
seguito sbrigativamente come O, 1, ... , N-I quando non ci sarà pericolo di
confusione). Ad esempio Z24 si compone delle classi 024 , b4, ... , 23 24 ; Z26
delle classi da 026 a 25 26 .
La relazione di congruenza preserva poi l'addizione e la moltiplicazione degli
interi: se a, al, b, bI sono in Z e a == al (mod N), b == bI (mod N), allora

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,

Così 22 24 + 424 = 224 , e via dicendo. Dunque l'algoritmo di addizione o


moltiplicazione in ZN è il seguente:
• si svolgono le operazioni in Z,
• si dividono i risultati per N e se ne considerano i resti; si ottengono così
la somma e il prodotto modulo N.
I tempi di svolgimento di questa procedura sono quindi rapidi, anzi al più
quadratici rispetto alla lunghezza di N (e dei due addendi o fattori).
Si vede poi che, rispetto a + e ., ZN è un anello commutativo unitario (con
unità IN), soddisfa cioè molte delle proprietà (commutative, associative, di-
stributive e così via) che già valgono tra in Z. Ma gli unici interi invertibili
rispetto al prodotto sono ±1, e invece in ZN si ha:
Proposizione 3.2.3 Per ogni intero a, aN è invertibile in ZN se e solo se
(a, N) = 1. In particolare, ZN è un campo se e solo se N è primo.
3.3 Radici Quadrate e Resti Cinesi 53

Dimostrazione. aN è invertibile in ZN se e solo se esiste un intero x tale


che 1N = aN . XN = (a· X)N (cioè ax == 1 (modN)), e dunque se e solo se
ci sono due interi x e y per cui 1 = ax + Ny. Ma questo equivale a dire che
(a, N) = 1: (=?) è chiaro, ({:::) è l'identità di Bézout. In particolare, ZN è un
campo (e dunque tutti i suoi elementi -::f- ON sono invertibili) se e solo se ogni
intero a non congruo a O modulo N, e cioè non divisibile per N, è primo con
N: ma questo equivale ovviamente a chiedere che N sia primo. D

Si noti che la dimostrazione ci fornisce anche un algoritmo esplicito di calcolo


dell'inverso di a modulo N (quando a è primo con N). Basta esprimere il
massimo comune divisore 1 di a e N nella forma

ax+Ny

con x e y interi, secondo l'Identità di Bézout: allora l'inverso di aN è proprio


XN (e nello scorso capitolo abbiamo visto come computare x e y a partire da
a e N in tempo al più quadratico rispetto alle lunghezze di a e N).
Aggiungiamo che, se a è un intero che non è primo con N, allora aN è un
divisore dello zero in ZN (in particolare, se a è multiplo di N, allora aN = ON).
Ad esempio 12 24 , 224 -::f- 024 ma 12 24 .2 24 = 024 .
Z N manifesta così proprietà particolarissime, che nulla hanno a che vedere
con quel che capita tra gli interi.

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?

3.3 Radici Quadrate e Resti Cinesi

A esemplificare ulteriormente le differenze tra l'usuale aritmetica degli interi


e quella modulo N, consideriamo il caso delle radici quadrate. Sappiamo che
tra gli interi i quadrati si riducono a O, 1, 4, 9, ... e che ciascuno di essi,
escluso O, ammette esattamente due radici quadrate ±1, ±2, ±3 e via dicendo.
Esaminiamo lo stesso problema modulo N: abbiamo quindi un intero a e
cerchiamo di
1. stabilire se a è o no un quadrato modulo N,
2. identificare eventualmente le sue radici quadrate modulo N.

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

(_1)2 == (_3)2 == 1 (mod8),

cioè 72 == 52 == 1 (mod8).

La situazione pare dunque abbastanza confusa. Tuttavia per N primo qualcosa


di più preciso può essere ottenuto. Siano infatti a un intero e N, come detto,
un primo. Se a == O(modN), allora a è un quadrato modulo N, e l'unica sua
radice quadrata modulo N è O. Assumiamo allora che a non sia divisibile per
N e quindi che sia primo con N. Si ha quanto segue.

Proposizione 3.3.2 Siano N un primo dispari, a un intero primo con N.


Se a è un quadrato modulo N, allora a ha esattamente due radici quadrate
modulo N.
Dimostrazione. Sia b un intero tale che a == b2 (modN). Notiamo che si
ha anche a == (-b)2 (mod N) e che b, -b sono distinti modulo N (altrimenti
N divide il prodotto 2b e dunque, essendo primo, divide anche uno dei due
fattori; ma invece sappiamo che N non divide né 2 né a, quindi neppure
b). D'altra parte, se x è un intero e X2 == a == b2 (modN), allora N divide
X2 - b2 = (x - b) . (x + b). Ma N è primo e di conseguenza N divide x - b
oppure x + b. Corrispondentemente x == b (modN) oppure x == -b (modN).
Una dimostrazione alternativa si può ottenere facendo riferimento alla teoria
dei campi, ricordando in particolare che in un campo, come è ZN quando N è
primo, un polinomio di grado 2, come è X2 -a, ha al più 2 radici. D'altra parte,
se b soddisfax 2 - a modulo N, anche -b lo fa, e, come detto, b =t= -b (mod N)
per N dispari. D

Esercizio 3.3.3 Che cosa succede quando N = 2?


Affrontiamo adesso il problema di stabilire il numero delle possibili radici
quadrate modulo N quando N è un qualunque numero intero. Il risultato già
osservato per N primo si preserva almeno parzialmente in questo ambito più
generale, nel senso precisato dall'esercizio che segue.
3.3 Radici Quadrate e Resti Cinesi 55

Esercizio 3.3.4 Siano N un intero dispari> 2, a un intero primo con N.


Se a è un quadrato modulo N, allora a ha almeno due radici quadra-
te distinte modulo N (suggerimento: sia a == b2 (modN), allora vale anche
a == (_b)2 (modN) e si controlla facilmente b =t -b(modN)).

Assumiamo comunque N composto dispari> 2. Ci è utile strumento il Teore-


ma del Resto Cinese: ricordiamone allora velocemente enunciato e dimostra-
zione.

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

x == bj (modNj ) per ogni j :::; n

e questa soluzione è unica modulo N se N denota il prodotto ITj::;n N j .

Dimostrazione. Per ogni j :::; n poniamo qj = f:,.. Allora (qj, N j ) 1, e


dunque per la identità di Bézout esistono due interi Sj, tj per cui

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ì -

Inoltre, per ogni intero X, x soddisfa tutte le congruenze x == bj (mod N j ) per


j :::; n se e solo se x == x (mod N j ) per ogni j :::; n e dunque, in definitiva, se e
solo se x e x sono congrui modulo il minimo comune multiplo di No, ... , Nn,
che eguaglia il loro prodotto N perché No, ... , Nn sono a due a due primi tra
~. D
Si noti che il teorema ci mostra anche come calcolare rapidamente x a partire
da No, ... , Nn, bo, ... , bn come L:i<n qisibi: osservazione di qualche rilievo,
visto il nostro interesse a ridurre al massimo i nostri tempi di lavoro.
Vediamo adesso come applicare il Teorema del Resto Cinese allo studio delle
radici quadrate modulo N quando N è composto. Come detto, supponiamo
per semplicità N dispari.

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

Dimostrazione. È chiaro che, se a è un quadrato modulo N, allora lo è


modulo N j per ogni j :::; n: vale infatti a == b2 (modN), per qualche b, e
quindi a == b2 (modNj ) per ogni j :::; n.
Viceversa, supponiamo che, per ogni j :::; n, a sia un quadrato modulo N j , e
dunque ammetta almeno due radici quadrate bj,o, bj,1 distinte modulo N (si
ricordi l'esercizio 3.3.4). Per ogni j :::; n scegliamo i(j) E {O, l} e consideriamo
le congruenze
x == bj,i(j) (modNj ), j:::; n.
Per il Teorema del Resto Cinese, esse hanno una comune soluzione b: per j :::; n

Ma allora per ogni j :::; n

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

bO,i(O) , bl,i(I), ... , bn,i(n)

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

che fornisce 3100 a partire da 1 con


• 3 moltiplicazioni per 3,
• 6 elevamenti al quadrato,
dunque con un numero di operazioni largamente inferiore alle 99 moltiplica-
zioni prospettate in partenza.
Si noti che la sequenza delle divisioni che permettono questa semplificazione
è la stessa che conduce a rappresentare l'esponente 100 in base 2 nella forma
1100100 (intesa come sequenza dei resti di queste divisioni elencati a partire
da destra). I resti 0,1 corrispondono per la precisione:
58 3 Potenze, Radici e Logaritmi

• 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).

Si deduce 3100 == 1 (mod101).


L'algoritmo. In generale il procedimento da seguire per calcolare
a k (modN)
per a, k interi, k, N > 1 è il seguente:
• rappresentare k in base 2;
• sostituire le cifre O, 1 della rappresentazione di k rispettivamente con le
istruzioni
- quadrare (Q),
- quadrare e moltiplicare per a (QX);
• applicare la sequenza di istruzioni così ottenuta a 1 modulo N.
Esempi 3.4.3
l. 2340== 1 (mod341). Si vede che 340 in base 2 diviene 101010100. Si ha
dunque la sequenza di istruzioni:
QXQQXQQXQQXQQ.
Corrispondentemente
1 ---+Q 1 ---+ x 2 ---+Q 4 ---+Q 16 ---+ x 32 ---+Q 1024 == 1
---+QxQQxQ 1 ---+Q 1 (mod341).
2. 57 == 5 (mod24). Infatti 7 in base 2 è 111, e genera la sequenza di istruzioni
QXQXQX,
che, applicata a 1, produce

1 ---+Q 1 ---+x 5 ---+Q 25 == 1 ---+x 5 (mod24).


3.5 Il Piccolo Teorema di Fermat 59

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.

3.5 Il Piccolo Teorema di Fermat


Il paragrafo è dedicato a un risultato di Fermat sulle potenze degli interi
modulo un primo p, da non confondere con l'Ultimo Teorema di Fermat che
abbiamo discusso in precedenza (e che, a stretto rigore di termini, non è
neppure un teorema di Fermat, visto che non c'è alcuna certezza che Fermat
l'ab bia davvero dimostrato). La presente proposizione viene allora chiamata
Piccolo Teorema di Fermat, e dice:

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).

Dimostrazione. La seconda tesi è una semplice conseguenza della prima.


Supponiamo infatti che p divida aP - a = a· (a P - 1 - 1). Siccome p è primo,
p deve dividere uno di questi due fattori; se non divide a, divide a P - 1 - 1.
Passiamo allora a provare la prima tesi. Ci basta dimostrarla per a 2: O.
Procediamo per induzione su a. Per a = O è sufficiente prendere atto che,
addirittura, OP = O. Supponiamo allora il teorema vero per a e dimostriamolo
per a + 1. Sappiamo

Ricordiamo che (~) è un naturale e

= 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)

(l'ultima congruenza deriva dalla ipotesi di induzione). D

Il Piccolo Teorema di Fermat può essere utile per il calcolo dell'inverso di un


intero modulo un primo p. Sappiamo infatti che gli interi a inverti bili modulo
60 3 Potenze, Radici e Logaritmi

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.

Ma allora, per ottenere l'inverso di a modulo p, basta computarne la potenza


(p - 2)-ma modulo p: operazione che sappiamo svolgere in tempi rapidi. Va
tuttavia ricordato che già conosciamo un metodo per il calcolo dell'inverso
modulo un qualunque intero N 2 2, basato sull'algoritmo euclideo delle divi-
sioni successive e sulla identità di Bézout, e va sottolineato che quest'ultima
procedura è preferibile a quella fondata sul teorema di Fermat, che funziona
solo per N primo e richiede poi il calcolo preventivo di (a, N) per verificare
che a e N sono primi tra loro (e dunque finisce col fare comunque appello
all'algoritmo euclideo).
Ma la applicazione del Piccolo Teorema di Fermat che più ci interesserà nel
resto di queste note riguarda il problema della primalità. Infatti il teorema
di Fermat ci fornisce un criterio sufficiente a riconoscere che un dato intero
N 2 2 è composto: ci basta trovare un intero a primo con N, 1 < a < N, per
cui si verifica
a N - 1 =t 1 (modN);
questo garantisce che N è, appunto, composto. Si potrebbe sperare che il test
si applichi anche alla verifica che N è primo (quando lo è). In dettaglio, cioè,
ci si può chiedere quanto segue.
• Supponiamo di fissare un a primo con N, ad esempio a = 2 (che funziona
egregiamente quando N è dispari) e di scoprire che a N - 1 == 1 (modN): è
lecito dedurne che N è primo?
• Più in generale, supponiamo che tutti gli interi a compresi tra 1 e N e
primi con N soddisfino la congruenza a N - 1 == 1 (modN): di nuovo, è
lecito dedurne che N è primo?
Discuteremo l'argomento nel prossimo capitolo dedicato alla primalità.

3.6 La funzione c/J e il Teorema di Eulero

Il Piccolo Teorema di Fermat si estende in modo opportuno dai primi p ad


arbitrari interi N 2 2. Consideriamo infatti la funzione cjJ che ad ogni intero
positivo N associa
cjJ(N) = numero degli interi a compresi tra 1 e N e primi con N.
cjJ è detta la funzione di Eulero.

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

cp(m . n) = cp(m) . cp(n).


Dimostrazione. Dobbiamo contare il numero degli interi positivi a < m .
n primi con m . n. Osserviamo che, siccome m e n sono primi tra loro, la
condizione (a, m . n) = 1 equivale a (a, m) = 1, (a, n) = 1. Distribuiamo gli
interi positivi a ~ m . n su m righe e n colonne nel modo che segue:
1 m+ 1 km+l (n -1)· m +1
2 m+2 km+2 (n -1)· m +2

r m+r km+r (n -1)· m +r


m 2m (k + 1)· m n·m
Sia 1 ~ r ~ m. Per ogni k < n, km + r ha lo stesso massimo comune divisore
di r con m. Dunque tutti gli elementi della riga r-ma sono primi con m se lo è
r, mentre nessuno lo è se r non lo è. Ci interessa ovviamente il primo caso: le
righe coinvolte sono cp(m) , tante quanti gli interi positivi r ~ m primi con m.
Ci domandiamo quanti elementi in ognuna di queste righe sono anche primi
con n. Osserviamo che per k, k' naturali < n, km + r == k'm + r (modn) se
e solo se n divide la differenza (km + r) - (k'm + r) = (k - k') . m; d'altra
parte n è primo con m, perciò n divide (k - k') . m se e solo se n divide k - k'
e quindi k = k' (infatti, O ~ k, k' < n). In altre parole, gli elementi della riga
r-ma descrivono al variare del naturale k < n tutte le possibili classi di resti
modulo n. Ma allora quelli tra loro che sono primi con n sono esattamente
cp( n). In conclusione
62 3 Potenze, Radici e Logaritmi

• <jJ(m) è il numero delle righe su cui ci sono elementi primi con m (e


conseguentemente tutti gli elementi sono primi con m),
• <jJ(n) è il numero degli elementi primi anche con n su ciascuna di queste
righe.
Quindi <jJ(m· n) = <jJ(m) . <jJ(n). D

Come già anticipato, possiamo combinare il teorema appena dimostrato e le


osservazioni che lo precedono per ottenere un algoritmo di calcolo di <jJ. Infatti,
dato un intero N 2: 2, decomponiamo N nel prodotto di potenze di fattori
primi distinti (e dunque primi tra loro)

N -
- I I Piki -- Poko ..... Ptk, .,
i<;.t

applicando il teorema precedente otteniamo

<jJ(N) = II <jJ(p~i)
i<;.t

e finalmente dall'osservazione 3 di 3.6.2 concludiamo

<jJ(N) = IIp~i-l . (Pi - 1).


i<;.t

Ad esempio, da 12 = 22 ·3 si deduce <jJ(12) = <jJ(2 2 ) . <jJ(3) = 2 . 2 = 4. Allo


stesso modo si vede <jJ(6) = 2. Va tuttavia sottolineato che l'algoritmo appena
proposto fa esplicito riferimento alla decomposizione in fattori primi di N;
dunque non può garantire una accettabile efficienza in assenza di procedimenti
rapidi di fattorizzazione.

Esercizio 3.6.4 Per quali valori di N <jJ(N) è pari? Divisibile per 3? Divisibile
per un assegnato primo p?

Un'altra importante proprietà della <jJ di Eulero è la seguente:

Teorema 3.6.5 Per ogni intero positivo N, N = EdlN <jJ(d) (equivalente-


mente, N = EdlN <jJ(!f), visto che al variare di d anche !f descrive i divisori
di N).

Ad esempio, i divisori di 12 sono 1, 2, 3, 4, 6 e 12 ed hanno come immagine in


<jJ 1, 1, 2, 2, 2 e 4 rispettivamente; si vede facilmente che la somma di questi
valori è proprio 12.
Dimostrazione. Nell'insieme dei naturali compresi tra 1 e N definiamo
la seguente relazione binaria "': per 1 :S a, b :S N, a '" b se e solo se
(a, N) = (b, N). È facile verificare che'" è una relazione di equivalenza,
che ogni elemento a è nella stessa classe di equivalenza del suo massimo co-
mune divisore con N e che divisori distinti di N stanno in classi distinte: in
3.6 La funzione cjJ e il Teorema di Eulero 63

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

La funzione 4> di Eulero permette la generalizzazione del Piccolo Teorema di


Fermat promessa all'inizio del paragrafo.
Teorema 3.6.6 (Eulero) Sia N un intero positivo. Allora, per ogni intero
a primo con N, a</>(N) == 1 (modN).

Si noti che, se N è primo, allora 4>(N) = N-I e dunque in questo caso


particolare il Teorema di Eulero afferma che, per ogni a primo con N, a N - I ==
1 (mod N) ribadendo così quanto stabilito dal Piccolo Teorema di Fermat. In
questo senso il teorema di Eulero generalizza quello di Fermat ad arbitrari
interi N > 2.
Dimostrazione. Siano bI, ... , b</>(N) i naturali primi con N tra 1 e N. In
particolare bI, ... , b</>(N) sono a 2 a 2 incongrui modulo N. Supponiamo a
primo con N. Allora i prodotti ab l , ... , ab</>(N) sono anch'essi primi con N
ed inoltre rimangono a 2 a 2 incongrui modulo N. Quindi ab l , ... , ab</>(N)
rappresentano tutte le 4>(N) classi di resti modulo N di interi primi con N.
In particolare, per ogni i = 1, ... , 4>(N), esiste un unico j = 1, ... , 4>(N) per
cui bi == ab j (mod N). Moltiplicando al variare di i (e quindi di j) otteniamo
</>(N) </>(N) </>(N)
II bi == II (ab j ) == a</>(N) II b j (modN).
i=l j=l j=l

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

3.7 Campi finiti

Prima di proseguire, abbiamo bisogno di richiamare qualche fatto sui campi


finiti, quale si può desumere da un corso elementare di Algebra. Tra i campi
finiti ci sono, come abbiamo visto poche pagine fa, i campi Zp al variare di
p tra i primi. Ma adesso vogliamo ricordare come si descrivono tutti i campi
finiti e sottolineare alcune delle loro proprietà. Ecco intanto il teorema che li
classifica.

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.

Dunque, per ogni q potenza di primo, esiste a meno di isomorfismi un unico


campo di q elementi, che possiamo conseguentemente denotare F q. Ad esem-
pio, per q primo, F q coincide (a meno di isomorfismi) con Zq. Accenniamo
adesso brevemente alla dimostrazione del teorema. Maggiori dettagli possono
trovarsi, come già detto, nei manuali di Algebra.
Dimostrazione. (Cenni) Sia F un campo finito, e sia q il numero dei suoi
elementi; OF e lF denotino poi rispettivamente l'elemento nullo e l'elemento
unità di F. La prima considerazione da fare riguarda la caratteristica di F
car F, che non può essere O (altrimenti F ammette come sotto campo il campo
razionale ed è dunque infinito), e quindi è un primo p. In altre parole, il
sotto campo minimo di F è proprio Zp (a meno di isomorfismi). F è, allora,
uno spazio vettoriale su Zp, finito e dunque di dimensione finita m (con m
intero positivo). Ne consegue che il numero q degli elementi di F coincide con
la potenza pm di p
q =pm.

Infatti ogni elemento di F si scrive in modo unico come combinazione lineare


a coefficienti in Zp degli m elementi di una base di F su Zp, il che stabilisce
appunto in pm la cardinalità complessiva di F.
Consideriamo adesso il gruppo moltiplicativo F* degli elementi f::- OF di F.
Ovviamente, F* ha cardinalità q-L Quindi, per la teoria elementare dei
gruppi, e segnatamente per il teorema di Lagrange, ogni elemento a E F*
soddisfa

da cui si deduce

uguaglianza che è soddisfatta anche da OF: quindi a q = a per ogni a E F (tra


l'altro, si può osservare che, nel caso F = Zp, riscopriamo per questa via il
Piccolo Teorema di Fermat). Consideriamo allora il polinomio x q - x E Zp[x]:
ha grado q ed i q elementi distinti di F sono sue radici. Dunque F è proprio
costituito dalle radici di x q - x, e x q - x si decompone in fattori lineari in F[x]
3.7 Campi finiti 65

xq - x = II (x - a);
aEF

come si usa dire in termini ufficiali, F è il campo di riducibilità completa di


x q - x (il minimo ampliamento di Zp in cui il polinomio x q - x si decompone
in fattori di primo grado).
Viceversa, consideriamo un primo p, un intero positivo m e la potenza q = pm
di p; ci domandiamo se esiste un campo F con q elementi. Per cercare di
costruirlo, partiamo dal campo Zp con p elementi e dal polino mio x q - x. È un
fatto relativamente elementare di Algebra che, a meno di isomorfismi (identici
su Zp), esiste uno ed un solo campo che amplia Zp, decompone x q - x in
fattori lineari ed è minimo rispetto a queste condizioni (il campo di riducibilità
completa di x q - x su Zp, appunto): indichiamolo con K (e denotiamo con
OK e lK i suoi elementi nullo e unitario). Notiamo che x q - x ha derivata
qx q - l - lK = -lK perché stiamo lavorando in caratteristica p (e dunque q
vale O). Conseguentemente x q - x non ha radici multiple (perché le eventuali
radici multiple dovrebbero annullare anche la derivata - l K ). Ne consegue che
le radici di x q - x in K sono tutte semplici, e dunque sono complessivamente
q. Consideriamo a questo punto

F = {a E K : aq = a}.

F è un sotto campo di K perché include OK = 0'k e l K = 1'k ed è chiuso per


±, . e inverso: ricordando che lavoriamo in caratteristica p, si ha infatti, per
a, b in F,

(a-l)q = (aq)-l = a-l.


Inoltre F ha esattamente q elementi (le q radici distinte di x q - x, come già
osservato). Dunque F è il campo cercato (di più F coincide proprio con K).
In conclusione:
• si trova un campo con q elementi se e solo se q è la potenza pm di un primo
p;
• un campo con q = pm elementi amplia Zp ed è il campo di riducibilità del
polinomio x q - x su Zp: come tale, è unico a meno di isomorfismi.
D

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

COn ao, al E Z3, e ognuno di essi ha un'unica rappresentazione di questo


tipo. Si raggiungono così 9 elementi distinti, e si esauriscono i 9 posti a
disposizione in F9. Addizione e moltiplicazione di F9 = Z3(V) si descrivono
facilmente facendo riferimento a questa rappresentazione. Infatti la somma
si calcola componente per componente,

e il prodotto si ottiene sostanzialmente ricordando che v 2 = v + 1: dunque

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

26 == 7 t'- 1 (mod 19), 29 == -1 t'- 1 (mod 19)


e quindi il periodo di 2 non può essere un divisore proprio di 18, e quindi
deve coincidere con 18: in altre parole, ci sono 18 potenze distinte di 2
modulo 19, ed esse esauriscono i 18 elementi non nulli di F 19 .
2. Consideriamo adesso il campo F9 appena studiato negli Esempi 3.7.2. Si
vede facilmente che v genera tutti gli elementi nOn nulli di F 9 come sue
potenze. Infatti abbiamo già osservato

dunque v ha periodo 8 nel gruppo moltiplicativo di F9.

Adesso enunciamo con precisione e dimostriamo la proprietà appena confer-


mata dagli esempi.
Teorema 3.7.4 Un sottogruppo finito G del gruppo moltiplicativo F* di un
campo F è sempre ciclico. In particolare, se F è finito, allora F* è ciclico.
3.7 Campi finiti 67

Dimostrazione. Sia N il numero degli elementi di G. Allora ogni elemento


di G ha periodo che divide N. Per ogni divisore d di N, sia 'lj;(d) il numero
degli elementi di G di periodo esattamente d. Segue che

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

'lj;(d) -I- O per ogni d I N.


Così G ha elementi di periodo d per ogni d. In particolare 'lj;(N) > O e G ha
elementi di periodo N, capaci cioè di generarlo: quindi G è ciclico. D

Un risultato analogo al precedente, ugualmente utile nel seguito, è


Teorema 3.7.5 Per ogni primo p, il gruppo moltiplicativo degli elementi
invertibili di Zp2 è ciclico.
Lasciamo la dimostrazione al lettore per esercizio, richiamando ancora la sua
attenzione sul fatto che l'anello Zp2 delle classi di resti modulo p2 non è un
campo, meno che mai coincide con F p2 (suggerimento: per p = 2, la tesi è
ovvia perché il gruppo moltiplicativo degli elementi invertibili di Z4 ha ordine
68 3 Potenze, Radici e Logaritmi

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).

Esercizio. Si provi che il gruppo moltiplicativo degli elementi invertibili di


1',,8 = 1',,23 non è ciclico (suggerimento: gli elementi del gruppo sono 1,3,5,7 e
12 == 32 == 52 == 72 == 1 (mod8)).

3.8 Logaritmi discreti

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.

Fissati F e g, si pone in generale il problema di calcolare, per ogni a E F*,


il logaritmo discreto di a in base g. Procedere per tentativi, calcolare cioè gX
per ogni x finchè non si trova a, è procedimento elementare che può richiedere
tempi proibitivi quando q è "grande". D'altra parte bisogna prendere atto che
non si conoscono attualmente metodi ragionevolmente rapidi di calcolo del
logaritmo discreto. Avremo modo di riparlarne.

3.9 I simboli di Legendre e di Jacobi

Torniamo al problema di identificare i quadrati e estrarne le radici. Nei campi


infiniti più familiari, quello razionale ij, o quello reale OC, o quello complesso
3.9 I simboli di Legendre e di Jacobi 69

C, la situazione che si registra è assai disomogenea. In tutti i casi O è un


quadrato (solo di se stesso). Ma per valori a :I O ciascuno dei tre campi ha
sua specifiche proprietà:
• in C ogni a :I O è un quadrato e ammette esattamente due radici,
• in ffi. la cosa accade se e solo se a > O,
• in ij, finalmente, la situazione è assai più ingarbugliata.
Vediamo allora che cosa succede modulo un primo p, e cioè nel campo finito
Zp. Il caso p = 2 si tratta facilmente: ambedue le classi O2 e b sono quadrati
(di se stesse).
Dunque supponiamo p dispari. Op è ancora un quadrato (di se stesso e solo di
se stesso). Escludiamo dunque Op, e quindi tutti gli interi a == O(modp), dalle
nostre indagini e consideriamo valori di a primi con p.

Definizione 3.9.1 Un intero a primo con p si dice


• un residuo quadratico modulo p se a è un quadrato modulo p, cioè se esiste
un intero b tale che a == b2 (mod p),
• un non residuo quadratico modulo p altrimenti.
Notiamo subito che la proprietà di essere residuo o non residuo quadratico
modulo p si trasmette da a a tutti gli interi congrui ad a modulo p: dipende
quindi dalla classe di congruenza ap e non direttamente da a. Ricordiamo poi
che un residuo quadratico ha esattamente due radici quadrate modulo p.

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

Infatti, supponiamo che gj sia residuo quadratico modulo p, allora esiste un


naturale i < p - 1 per cui gj == g2i (mod p). Ricordando che 9 ha periodo
moltiplicativo p - 1 modulo p, deduciamo j == 2i (mod (p - 1)). Ma 2i è pari,
ed anche p - 1 è pari, dunque j deve essere pari. Il contrario è ovvio.
Si ha dunque, come preannunciato dagli esempi:

Teorema 3.9.3 Sia p un primo dispari. Allora tra le p - 1 classi di resti


modulo p di interi primi con p, P;l corrispondono a residui quadratici modulo
p e P;l no.

Del resto, la proprietà si può provare più direttamente ricordando che:


• ogni intero b (primo o no con p) ha il suo quadrato modulo p,
• uno stesso quadrato ammette esattamente due radici quadrate distinte ±b
modulo p.
Così le p - 1 classi di congruenza di interi primi con p si ripartiscono modulo
p in coppie con ugual quadrato e determinano P;l
quadrati. Quindi abbiamo
a meno di congruenze P;l residui quadratici modulo p, P;l non residui qua-
dratici modulo p.
Per ogni intero a, il simbolo di Legendre (~) di a rispetto a p stabilisce a
quale dei casi a corrisponde; infatti si pone:
• ( ~ ) = O se p divide a;
• ( ~ ) = 1 se a è primo con p e a è residuo quadratico modulo p;
• ( ~) = -1 se a è primo con p ma a è un non residuo quadratico modulo
p.
Il nostro obiettivo è, allora, quello di calcolare (possibilmente in modo rapido)
il simbolo di Legendre (~ ) per ogni intero a. Una prima utile osservazione è
la seguente.

Osservazione 3.9.4 Se a e al sono congrui modulo p, allora ( ~ ) = ( ~ ).


Infatti sappiamo che la proprietà di essere residuo o non residuo quadrati-
co modulo p, e dunque (~), dipendono da ap e non direttamente da a. In
particolare, per ogni a, se r denota il resto della divisione di a per p, allo-
ra (~) = (~). Quindi, salvo dividere a per p e sostituirlo con il suo resto,
possiamo sempre assumere O :::; a < p.

Ulteriori proprietà del simbolo di Legendre si deducono dal seguente risultato


provato da Eulero.

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

Dimostrazione. Se p divide a, la tesi è ovvia, infatti (~) = O e a p;-l ==


O(modp). Supponiamo allora che a sia primo con p. Per il Piccolo Teorema
di Fermat
(a P;-I)2 == a P - 1 == 1 (modp)

e dunque, visto che p è primo, aP;-1 == ±1 (modp). Ma anche (~) vale ±1 in


questo caso, così ci basta provare che, per a primo con p,

(~)
p-l

=1 {:} a-2- == 1 (modp).

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.

Osservazione 3.9.6 Il simbolo di Legendre preserva il prodotto: per ogni


scelta di interi a e b,

(~) (~) . (a; b) .


Infatti dal Teorema di Eulero deduciamo

(pa) . (b)p == a-2-


p-l
. b-2-
p-l
== (a· b)-2-
p-l
== (a.b)
P (modp).
Ma p > 2 e (~), (~) e (a;b) assumono i soli valori O, 1 e -1. Ne segue,
appunto,

(~) (~) . (a; b) .


Conseguentemente, per il calcolo del simbolo di Legendre ( !f; ) di un qualche
intero N 2 2, possiamo procedere decomponendo N come prodotto di potenze
di fattori primi distinti
N = q~; II
j<;.t

e poi applicare la precedente osservazione e dedurre

(N) _ II ( qj ) t. 3.

P - '<t p ,
J_

la computazione del simbolo di Legendre si riduce in questo modo al caso in


cui N è primo.
72 3 Potenze, Radici e Logaritmi

Se poi N è negativo < -2, possiamo nuovamente applicare l'Osservazione


3.9.6 per concludere
(;) (~1). (-;) .
A questo proposito è facile notare:

Osservazioni 3.9.7
1. O) = 1 perché 1 = 12 •
2. (~l) = (-1) P;l; infatti per il teorema di Eulero

(P-1) == (-1)-2 p-l


(modp)

e tanto ( ~l ) quanto (_1(;1 valgono ±1. Dunque


• (~l) = 1 se e solo se P;l è pari, e cioè p == 1 (mod4),
• (~l) = -1 altrimenti, dunque se e solo se p == 3 (mod4).
L'algoritmo ora proposto fa comunque riferimento alla decomposizione di N
nel prodotto dei suoi fattori primi, e dunque risente dei tempi necessari a svol-
gere questa operazione. Riduce poi il calcolo di ( !f; ) al caso in cui N è primo
(eventualmente 2). Esaminiamo allora quest'ultimo problema distinguendo se
N è 2 (appunto),
N è dispari.
I risultati che otterremo nei due casi ci suggeriranno un criterio di calcolo
del simbolo di Legendre che addirittura prescinde dalla fattorizzazione di N
e lavora in tempo polinomiale rispetto alla lunghezza di N. Ma di questo
parleremo più tardi. Affrontiamo adesso il caso N = 2.

Teorema 3.9.8 Per ogni primo dispari p, O) = (_1(2 8-


1

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

(~) (~) =-1


perché 3,5 t'- ±1 (mod8), mentre

(~) = 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:

Teorema 3.9.9 (Legge di Reciprocità Quadratica di Gauss) Siano p


e q due primi dispari tra loro distinti. Allora

(~) = (_I(;l.Q;l (~).

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

(~) = (~) (= -1)


perché 5 == l (mod4), mentre

(~) = - (~)
74 3 Potenze, Radici e Logaritmi

perché 3,7 t'- 1 (mod4).


I lettori interessati troveranno la dimostrazione del Teorema 3.9.9 nel pros-
simo paragrafo. Qui ne discutiamo le conseguenze per il calcolo pratico del
simbolo di Legendre.
Prima però ci conviene allargare il nostro orizzonte introducendo una genera-
lizzazione del simbolo di Legendre stesso: il simbolo di Jacobi. Consideriamo
infatti non più un primo dispari p, ma un qualunque intero dispari n > 2.
Decomponiamo n nel prodotto di potenze di primi distinti

e definiamo corrispondentemente, per ogni intero N, il simbolo di Jacobi di


N rispetto a n nel modo che segue:

Dunque, per n primo, il simbolo di Jacobi coincide con quello di Legendre.


Vediamo allora un esempio per n composto: si ha

C25) (~). (~) = (-1)· (-1) = 1;

ricordiamo infatti che 2 non è residuo quadratico né modulo 3 né modulo 5. Si


noti che 2 non è un quadrato neppure modulo 15 (altrimenti lo sarebbe anche
modulo 3 e 5) ed è primo con 15, pur tuttavia ( 125 ) = 1.
Dunque il simbolo di Jacobi, pur estendendo quello di Legendre, non ne pre-
serva alcune proprietà, in particolare non è vero che ( z;f ) vale 1 se e solo se
N (è primo con n ed) è residuo quadratico modulo n.
Si ha poi, per ogni intero N, (z;f) = O se e solo se (!f;) = O per qualche
divisore primo p di n e dunque se e solo se N è divisibile per qualche divisore
primo p di n, quindi, in definitiva, se e solo se N e n non sono primi tra loro.
Consideriamo allora ( z;f ) quando (N, n) = 1. È facile verificare che valgono
ancora le seguenti proprietà.

Osservazioni 3.9.10 Siano n un numero dispari> 2, a, b due interi primi


con n.

1. Se a = b (mod n), allora (~) = (*). In particolare, se b è il resto della


divisione di a per n, allora (~) = (*).
2. (~). (*) = (a~b).
Si generalizzano poi la Legge di Reciprocità Quadratica di Gauss e l'altro
teorema che la accompagna. Per la precisione

3. (~) = (_lf 28- 1 ,


3.9 I simboli di Legendre e di Jacobi 75

4. per m intero dispari> 2 diverso da n,

(:) = (_I)n2"'~2" (:).


Esercizio 3.9.11 Il lettore può provarsi a verificare 1, 2, 3 e 4 sulla base delle
analoghe proprietà per n, m primi.
Le precedenti osservazioni ci permettono di elaborare un procedimento di
calcolo rapido del simbolo di Jacobi ( ~ ) e dunque, in particolare, del simbolo
di Legendre. La strategia da seguire consiste dei passi di seguito descritti. Ci
riferiamo alle proprietà 1, 2, 3 e 4 appena enunciate.
• Per la proprietà 1, salvo dividere N per n e sostituire N con il suo resto
in questa divisione, possiamo supporre N < n.
• Sfruttando le proprietà 2 e 3 ci si riduce al caso in cui N è dispari. Infatti si
estrae anzitutto la massima potenza di 2 che divide N ottenendo N = 2h m
con m dispari; usando la proprietà 2, si scrive (~) = (~) h . (~ ); usando la
3, si calcola poi (~) h (per h dispari, perché per h pari (~) h è forzatamente
1); ci si riporta così a (~) con m dispari.
• A questo punto, con la Legge di Reciprocità Quadratica (cioè con 4),
riduciamo il calcolo di ( ~ ) a quello di ( ;:; ), dove n> m (e dunque si può
dividere n per m ricominciando il procedimento con valori più bassi).
Illustriamo l'algoritmo appena descritto con un esempio.
Esempio 3.9.12 Ammettiamo di dover calcolare ( 1A213 ). Anzitutto si so-
stituisce 1123 con il suo resto nella divisione per 151, cioè 66, e si passa a
calcolare
66
(1 51) = (1~1) . (13531) .
Siccome 151 == -1 (mod8), si ha dalla proprietà 3 che (1;1) = 1, dunque ci si
riduce al calcolo di (13531)' D'altra parte

( ~)
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

C:) (~) (~) (~) =-1.


76 3 Potenze, Radici e Logaritmi

Il metodo descritto evita così il ricorso obbligato alla fattorizzazione di N per


calcolare ( z;f ). In particolare, estrarre al secondo passo la massima potenza
di 2 che divide N è assai più semplice che decomporre N in tutti i suoi fattori
primi. Anzi, si può verificare che il procedimento appena illustrato lavora in
un numero di passi 0(log2 N), e dunque in tempo polinomiale (= rapido)
rispetto alla lunghezza dell'input N.

3.10 La Legge di Reciprocità Quadratica di Gauss

Come promesso, proviamo qui i due teoremi fondamentali enunciati nello


scorso paragrafo, e cioè:

a) se p è un primo dispari, O) = (_1(2 8-


1
;

b) la Legge di Reciprocità Quadratica di Gauss: se p f::- q sono due primi


dispari, (;) = (_1)P;1.Q;1 (~).

Il lettore che non è interessato ai loro dettagli può procedere direttamente al


paragrafo successivo.
Ci servono alcune ulteriori premesse sui campi finiti.
In un campo finito F (e più in generale in ogni campo) ci sono sempre 2 radici
quadrate dell'unità ±1F, che coincidono se e solo se F estende Z2. Infatti un
polinomio di grado 2, come x2 - 1F, ammette al massimo 2 radici in F, e
d'altra parte (±1 F )2 = 1F ; in caratteristica 2, poi, X2 - 1F = (x - 1F)2.
Allo stesso modo, per ogni r 2 2, le radici r-me di 1F in F, e cioè le radici
del polinomio x T - 1F , sono al più r e includono 1F . Inoltre si verifica fa-
cilmente che queste radici formano un sottogruppo del gruppo moltiplicativo
F*: infatti, per a, b E F*, aT = bT = 1F implica (a· bt = aT . bT = 1F. Il
Teorema 3.7.4 ci dice che questo sottogruppo è, come F*, ciclico, c'è dunque
un suo elemento opportuno che genera tutti gli altri come sue potenze.
Ci interessa comunque sapere per quali valori di r ci sono esattamente r
radici r-me dell'unità in F. A questo proposito osserviamo anzitutto che si
ha:

Proposizione 3.10.1 Sia d = (r, IFI- 1). Allora F contiene esattamente d


radici r-me dell'unità.

Dimostrazione. Sia q il numero degli elementi di F; ricordiamo che q = pm


è una potenza di un primo p. Sia poi 9 un generatore del gruppo ciclico F*.
Allora gli elementi di F* sono esattamente le potenze gj di 9 per O :S j < q
e 9 ha periodo moltiplicativo q-L Ci chiediamo quali di queste potenze gj
sono radici r-me dell'unità: a questo proposito osserviamo che, per j < q,
gj è radice r-ma dell'unità (e cioè gjT = 1F )

se e solo se
3.10 La Legge di Reciprocità Quadratica di Gauss 77

q-l divide jr (in altre parole jr == O(mod (q - 1)).


D'altra parte, posto d = (r, q-l),
.r q-l
jr==O(mod(q-1)) se e solo se J d == O (mod -d-).

Siccome ~ e qd 1 sono primi tra loro, si deduce che, per O :S j < q,


gj è radice r-ma dell'unità se e solo se j è multiplo di qd 1 ,
dunque per d valori di j. In conclusione, ci sono d = (r, q-l) radici r-me
dell'unità in F. D

Corollario 3.10.2 Siano Wl == 1 (modr). Allora F contiene esattamente r


radici r-me dell'unità.
Dimostrazione. Quando Wl == 1 (modr), cioè quando r divide Wl-l, si ha
d=r. D

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,

fU) = f(P) . f(P· j). (3.1)


78 3 Potenze, Radici e Logaritmi

Questo è chiaro se j è pari e quindi anche p . j è pari. Ammettiamo allora che


j sia dispari, così che

p2_ l ) 2 2 ;2_1 ( 2) ;2~1


= ( (-1)-8- . (-1)P ·-8 = (-1)P

che coincide con (-1 f ~ cioè con f (j) perché p è dispari e (-1)P =-1.
·2 1 2

Vogliamo provare f(P) = (~). Poniamo in F

'Y = L f(j)TJj
05,j<8

(continuiamo ad identificare gli interi f(j) e le loro classi modulo p in F).


Usando le stime già fatte per TJ4, TJ5 e via dicendo, si ottiene

(in particolare 'Y -:j:. O perché TJ = O, ±1) e ancora

'Y P = b 2) p-l
-2 • 'Y = 8p-l
2- 'Y =
(8)P (2)P
'Y = 3
'Y = (2)P 'Y

(la terzultima uguaglianza usa il teorema di Eulero 3.9.5 modulo p, l'ultima


l'ovvia osservazione che (~ )2 = 1). D'altra parte in F (dunque modulo p)

'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

05,j<8 05,j<8 05,j<8

Ma, al variare di j, anche jp descrive le 8 classi di resti modulo 8, anzi, per


j == j'p(mod8), si ha TJj = TJj'p perché TJ8 = 1. Ne segue che anche la somma
L:05,j<8 f(jp)TJjp coincide con 'Y e quindi

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

Dimostrazione di b). p ha periodo finito modulo q, fissiamo dunque un


intero positivo m tale che pm == 1 (modq). Allora per il Corollario 3.10.2
F = F p= contiene esattamente q radici q-me dell'unità, e possiamo fissare
una radice primitiva q-ma 7] di 1 in F (continuiamo a confondere i numeri
interi e le loro classi di resti modulo p, che fanno parte di F). Poniamo in F

Vogliamo provare che in F


2 q-l
'Y = (-1)-2 q. (3.2)

Assumiamo provvisoriamente (3.2) vera, e mostriamo come dedurne la con-


clusione della dimostrazione. Da (3.2) otteniamo in F
2 p-l q-l p-l q-l p-l p-l
'Y P = ('Y ) -2 . 'Y == (( -1) -2 q) -2 'Y = (-1) -2 . -2 q -2 'Y

che, per il Teorema 3.9.5 di Eulero prima dimostrato, eguaglia

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

'Y P = (2:0::;j<p (~) 7]J r = 2:0 ::;j<p .~~) ~ 7]jp =


(2.q
uO::;j<p (J:...)
-- '" q 'I1JP
., -- 'uO::;j<p
" 'I1JP-
., -

=
- '"
~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

Confrontando le due espressioni ottenute per 'Y P , si ha in F


80 3 Potenze, Radici e Logaritmi

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

(~) = (_l)Q;l.P;l (~)


anche in Z, come volevamo dimostrare.
Ci resta comunque da controllare la 3.2
2 q-l
l' = (-1)-2 q.

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

1'2 = 1"1' = (Lo<j<p (f) 17j) . (Lo<k<P (~k) 17-k) =


= LO<j, k<p ( -~k) 17 j - k = ( ~l ) LO<j, k<p (j: ) 17 j - k =
= (-1) Q;l LO<j, k<p (7) 17j-k.
Notiamo che, siccome j è primo con p, al variare di k da 1 a p-l, anche j k
percorre tutte le classi di resto non nulle modulo p. Possiamo quindi operare
un cambio di variabile da k a j k e conseguentemente affermare che l' eguaglia
anche

(perché ( t;- ) ( ~) quando j si trova tra 1 e q-l e quindi è primo con


q). Così
1'2 = (-1) Q;l L (~) L 17j(l-k).
O<k<p q O<j<q
Adesso notiamo che l'indice dimenticato j = O soddisfa 170.(l-k) = 1; di conse-
guenza la somma LO<k<p ( ~ ) 170.(l-k) = LO<k<p ( ~ ) coincide con O perché
tra 1, ... , q-l ci sono tanti residui quadratici modulo q quanti non residui
quadratici modulo q. Così possiamo includere l'indice j = O nella precedente
espressione di 1'2 e scrivere
3.11 Ancora Radici Quadrate 81

Per k = 1, EO<j<q 'Tjj(1-k) = q. Per k :I 1, EO<j<q 'Tjj(1-k) è la somma s


delle q potenze -distinte di 'Tjj(1-k) che è radice primitiva q-ma dell'unità in
F (esercizio: perché?); ma tale somma è zero, infatti s . 'Tjj(1-k) = s, quindi
s = O visto che 'Tjj(1-k) :I 1. Ma allora

2
'Y = (-1)-2
q-l (1)q q= (-1)-2
q-l
q

che è quanto volevamo dimostrare. D

3.11 Ancora Radici Quadrate


Sia p un primo dispari. I precedenti paragrafi ci hanno fornito un algoritmo
per decidere rapidamente se un intero a primo con p è o no un residuo quadra-
tico modulo p, cioè soddisfa (~) = 1. In questo caso, resta comunque aperto
il problema di determinare le radici quadrate di a modulo p (questione già
introdotta e discussa nello scorso paragrafo 3.3). Per p == 1 (mod4), il proble-
ma non è semplice da risolvere; invece, per p == 3 (mod4) la risposta è quasi
immediata. Si ha infatti:

Proposizione 3.11.1 Siano p un primo dispari, p == 3 == -1 (mod4), a un


residuo quadratico modulo p. Allora le radici quadrate di a modulo p sono
±aP!l.

Così le radici quadrate di a si calcolano agevolmente come potenze di a.


Dimostrazione. Sia b un intero tale che a == b2 (modp). Ovviamente b è
primo con p. Dal Piccolo Teorema di Fermat si ha bP- 1 == 1 (modp) , dunque
1 == (b 2(;1 == aP;l (modp). Moltiplicando i membri di questa congruenza
per a ottemamo a == a 2
• p-l +1
== a 2 (modp). Ma p == -1 (mod4), dunque
p+l +1
T
è pari, è quindi il doppio dell'intero P!1.
Segue (a P!1)2 == aP!l == a (modp).
Di conseguenza vale anche (_a P!1)2 == a (modp). D

Una conseguenza notevole della precedente proposizione è:

Corollario 3.11.2 Siano p un primo == 3 (mod4), a un intero primo con p.


Allora a è un residuo quadratico modulo p se e solo se -a è un non residuo
quadratico modulo p.

· .
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

3. p = 5 t'- 3 (mod 4) e 1 == -4, 4 == -1 sono i residui quadratici modulo 5.

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.

Esercizio 3.11.4 Si dimostri che ci sono infiniti primi p == 3 (mod4).


(Suggerimento: siano Pl, ... , Pt primi == 3 (mod4) tra loro distinti. Il loro
prodotto q può essere congruo a 1 o a 3 modulo 4 a seconda che t sia pari o
dispari. Se consideriamo s = q + 2 nel primo caso e s = q + 4 nel secondo,
otteniamo comunque un intero s > q e == 3 (mod4). Dunque s ha un fattore
primo == 3 (mod 4). Questo fattore può essere tra Pl, ... , Pt?).

Esercizio 3.11.5 Sia N = p. q dove p, q sono due primi distinti, entrambi ==


3 (mod 4). Siano poi a, b due interi tale che a 2 == b2 (mod N), a t'- ±b (mod N).
Allora
(~) = - (~).
Invece (N) = (-;), ( -k)
= (il)·
(Suggerimento: si ha a == b (mod p) e a == - b (mod q) o, viceversa, a ==
-b(modp) e a == b(modq). Ammettiamo che valga il primo caso. Siccome
q == 3 (mod4), (~l) = -1. Segue (~) = -(~). Invece (~) = (~). A questo
punto basta ricordare che (N) = (~) . (~) e che altrettanto vale per b).

3.12 Curve Ellittiche, per finire

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.

Dunque una curva ellittica su F è l'insieme dei punti di F 2 che soddisfano


un polinomio di terzo grado f (x, y) nelle indeterminate x, y a coefficienti in
F e non annullano mai contemporaneamente le derivate parziali di f rispetto
a x e a y. Conviene comunque supporre, per ragioni che saranno chiarite più
3.12 Curve Ellittiche, per finire 83

tardi, che la curva ammetta un ulteriore punto all'infinito, che denoteremo


con O.
Il polinomio f(x, y) ha in generale la forma

con i coefficienti ai,j (O ~ j ~ i ~ 3) in F e, ovviamente, a3,j (j ~ 3) non


tutti nulli.
Thttavia calcoli opportuni mostrano che almeno nei casi in cui la caratteristica
di F è diversa da 2 e da 3, l'equazione f(x, y) della curva ellittica si può sempre
ridurre alla forma più semplice

(3.3)

dove a, 13 E F e il polinomio al secondo membro x 3 + ax + 13 non ha radici mul-


tiple (condizione che la teoria delle equazioni algebriche dimostra equivalente
a 4a 3 + 2713 2 :I O).
Quando la caratteristica di F è 2 o 3 i meccanismi tecnici che permettono di
arrivare alla (3.3) non si possono ripetere perché prevedono talora divisioni per
2 e per 3. Così, quando F ha caratteristica 3 (e dunque anche per campi finiti
il cui ordine è potenza di 3), il meglio che si riesce ad ottenere è un'equazione

(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)

Ritorniamo comunque alle caratteristiche diverse da 2,3 e in particolare a


F = lR (e dunque alla caratteristica O) per proporre in questo ambito familiare
alcuni esempi di curve ellittiche su lR.

Esempi 3.12.2 Ecco i grafici delle curve ellittiche su lR di equazione, rispet-


tivamente,
• y2 = x3 +1
84 3 Potenze, Radici e Logaritmi

-1

-1

-1

La prima curva consiste di un unico ramo, che va invece a restringersi a sinistra


e a generare due rami distinti nel secondo esempio.
Ogni curva ellittica su un campo F (incluso il punto all'infinito O) ha una
struttura di gruppo rispetto ad una opportuna operazione di addizione +, che
adesso descriviamo. Il riferimento visivo al caso F = ]R, e magari al secondo
degli esempi appena proposti, può aiutare a capire la definizione di +, come le
seguenti osservazioni ci spiegano. Assumiamo dunque di considerare, rispetto
ad un opportuno sistema di riferimento, la curva ellittica y2 = x 3 + ax + (3,
con 4a 3 + 27(32 -::f- O.

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.

Formule esplicite determinano il terzo punto in ognuno dei due casi


precedenti. Per la precisione poniamo

t = Y2 - Yl per Xl f::- X2, cioè in 1,


X2 - Xl

e
86 3 Potenze, Radici e Logaritmi

Allora qualche calcolo e un po' di pazienza svelano che la terza intersezione


è
(X3, Y3) = (e - Xl - X2, t(X3 - xd + yd·
Si noti che queste formule hanno senso anche su campi diversi da ffi., purché
di caratteristica diversa da 2 e da 3.

Ma anche quando la caratteristica è 2 o 3 si riesce a procedere in modo analogo


per individuare la terza intersezione. Omettiamo i dettagli.
Definiamo adesso l'addizione tra due punti della curva ellittica. Ricordiamo
che la curva ammette anche un punto all'infinito O.

i) Se Pl == (xl,yd, P2 == (X2,Y2) sono due punti diversi da O, e la retta per


Pl , P2 ha una terza intersezione P3 == (X3, Y3) con la curva, si pone

dunque la somma tra Pl e P2 è il punto simmetrico di P3 rispetto all'asse


x.
ii) Se poi P l e P2 sono simmetrici rispetto all'asse X, cioè Xl = X2 e Yl = -Y2
- eventualmente Yl = O -, si definisce Pl + P2 = O (il punto all'infinito
della curva).
iii) Finalmente l'addizione per O coincide con l'identità: P + O = O + P = P
per ogni P.

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

y2 = x 3 + ax + (3, con a, (3 E F, 4a 3 + 27(32 =I- O. (3.6)

Le conclusioni che stiamo per trarre valgono comunque anche quando F ha


caratteristica 2 o 3. Ci interessa anzitutto capire:
Problema. Quanti punti ha una curva ellittica E su F?

Osservazione 3.12.4 Ammettiamo che E abbia equazione (3.6). Notiamo


che ci sono
• q possibili valori in F per X,
• per ognuno di questi valori, al più due corrispondenti valori per Y (perché
in un campo ogni elemento x 3 + ax + (3 ha al più due radici quadrate).
3.12 Curve Ellittiche, per finire 87

Ricordiamo che E ha poi un punto all'infinito O. Deduciamo che E ha al più


2q + 1 punti, I E I:::; 2q + 1.

Possiamo però ricavare una valutazione più precisa di E, in ragione di più


attente considerazioni sulle radici quadrate in F = F q'
Osservazione 3.12.5 Per q primo, in F q = 7l q , O ha l'unica radice quadrata
O, mentre dei q - 1 elementi non nulli, esattamente la metà ha radici q;l
quadrate (per la precisione due radici distinte). Il simbolo di Legendre ( ~ )
regola, per ogni intero z, se z ha o no radice quadrata in 7l q • È facile dedurre
che, per una curva ellittica E su 7l q ,

I E I:::; L (1 + (Z3 + az + (3) ) + 1 + 1+


= q L (Z3 + az + (3) .
O::;z<q q O::;z<q q

Infatti, per z intero, O :::; z < q,


• se z3 + az + (3 = O e dunque z3 + az + (3 ha 1 radice quadrata modulo q,
allora (z3+~z+,B) = O e quindi 1 + ( z3+~z+,B) vale, appunto, 1;
• se z3 + az + (3 è un residuo quadratico modulo q e dunque ha 2 radici
quadrate modulo q, allora (z3+~z+,B) = 1, così 1 + (z3+~z+,B) è 2;
• se z3 + az + (3 è un non residuo quadratico modulo q, quindi è privo di
radici quadrate modulo q, allora (z3+~z+,B) = -1 e 1 + (z3+~z+,B) vale
O, cioè coincide ancora col numero delle radici quadrate.
Bisogna però tenere presente che, al variare di z, z3 + az + (3 può assumere
meno di q valori distinti modulo q, per cui il numero dei punti di E diversi da
quello all'infinito è soltanto superiormente limitato dall'espressione

A questi punti dobbiamo poi aggiungere quello all'infinito, per cui si conclude

Si vede poi facilmente che il secondo membro di questa diseguaglianza coincide


con

Questa stima di I E I si estende in realtà a ogni campo finito F = F q, qua-


lunque sia il valore di q, nel modo che segue. Si generalizza anzitutto a F il
simbolo di Legendre, ponendo per ogni z E F,
88 3 Potenze, Radici e Logaritmi

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.

Si deduce facilmente, per E curva ellittica su F, che

zEF q zEF q

Una valutazione ancor più precisa di E dipende ovviamente da una stima di


LZEF q X(z3 + az + ;3). Un teorema di Hasse limita con 2y'q il valore di questa
somma e deduce:

Teorema 3.12.6 (Hasse) Per E curva ellittica su F 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:

mP = ,P+P+ ... +P.


... "
m

Il fatto che E è finito assicura che, per ogni P, mP = O per un opportuno


divisore m di I E I. A differenza di quel che accade per il gruppo moltiplicativo
di un campo finito, una curva ellittica E su un campo finito non è in genere
un gruppo ciclico. Si prova però che essa è sempre il prodotto diretto di al più
due gruppi ciclici, e dunque a meno di isomorfismi, ha la forma

dove l, h sono interi positivi, con operazione binaria definita nel modo ovvio,
componente per componente,

(a,b) + (a',b') = (a+a',b+b').

Anche se E non è un gruppo ciclico, ha comunque senso, fissato un punto


G E E, domandarsi per ogni P E E se P è o no multiplo di G e, se sì,
cercare il minimo intero positivo m tale che P = mG, definire poi un tale
m il logaritmo discreto di P rispetto a G in E. Il conseguente problema del
logaritmo discreto (trovare cioè m a partire da P) è, per curve ellittiche e
punti G arbitrari, talora ancora più complicato che non sui campi finiti.
3.12 Curve Ellittiche, per finire 89

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).

Ad esempio p = 23 divide M(l1) = 211 - 1 e 23 == 1 (mod11), 23 ==


-1 (mod8).
(Suggerimento: si noti che anche p è dispari; si ha 2m == 1 (modp) , dunque
m è divisore dell'ordine p-l del gruppo Z; e vale la prima congruenza.
Anzi p-l = 2q· m per qualche q, perché p-l è pari. A questo punto si
calcoli il simbolo di Legendre ( ~ ), cioè 2P;1 modulo p, usando P;l = q·m.
Si verifichi che (~) = 1 e si deduca la seconda congruenza).
7. Si calcolino, se possibile, le radici quadrate di 2 e di 3 modulo 35, 119 e
161.
8. Una curva ellittica sul campo F67 può avere meno di 48 punti? E più di
85?
9. L'equazione y = x 3 + 1 determina una curva ellittica E sul campo Z5? Se
sì, quanti sono gli elementi di E (incluso quello all'infinito)? È poi vero
che E, come gruppo additivo, è ciclico?

Riferimenti bibliografici

Maggiori informazioni sull'aritmetica dell'orologio possono trovarsi in [16] o


[45]. Sui campi finiti si vedano [36] o [44]. Sulle curve ellittiche rimandiamo
a [15], [29], [37], o ancora [67]. La prova del teorema di Hasse 3.12.6 si può
trovare, ad esempio, in [67].
4

Il Problema della Primalità

4.1 Dagli antichi Greci ad AKS


Il Problema della Primalità, già incontrato nel corso del Capitolo 2, chiede di
determinare un algoritmo che sappia decidere, per ogni intero positivo N 2 2,
se N è primo oppure no. A scanso di equivoci, sottolineiamo che, almeno
inizialmente, cerchiamo algoritmi di natura deterministica, capaci cioè di rag-
giungere la risposta corretta in modo diretto e privo di dubbi ed errori in un
numero finito di passi.
Non c'è perdità di generalità a supporre N dispari: infatti, l'unico primo pari
è 2 e comunque è facile riconoscere i numeri pari. D'altra parte un semplice
algoritmo di primalità era già noto agli antichi Greci: quello che abbiamo di-
scusso nel Capitolo 2 e che consiste nel considerare ogni numero naturale (anzi
primo) a da 2 a VN e verificare se a divide oppure no N; se la divisione per
un qualche a è precisa (cioè dà resto nullo), allora N è composto, ed a è un
suo divisore; altrimenti, se nessuna divisione si dimostra esatta, N è primo.
Thttavia molti secoli dopo gli antichi Greci, per la precisione nel 1801, una
personalità matematica eminente come Gauss continuava a celebrare nelle sue
Disquisitiones Arithmeticae il Problema della Primalità come "elegante e fa-
moso, meritevole di ogni possibile attenzione". Quale è il motivo di questo
interesse, se un facile algoritmo era già disponibile da oltre due millenni?
Il fatto si è che, come abbiamo già visto nel Capitolo 2, il procedimento ele-
mentare dei Greci non è utile nella pratica: può richiedere troppe divisioni (un
numero comparabile a VN) e dunque tempi proibitivi di attuazione prima di
dare la risposta. In effetti, a voler essere pignoli, quel che cerchiamo non è
tanto un semplice algoritmo di primalità, quanto piuttosto un procedimento
che risolva il nostro problema lavorando in tempo rapido (cioè polinomiale
rispetto alla lunghezza dell'input N, ovvero rispetto al logaritmo di N).
In effetti Gauss stesso ammetteva nel 1801 la mancanza di procedure veloci
di primalità e scriveva: "dobbiamo confessare che tutti i metodi che sono sta-
ti proposti finora si restringono a casi molto speciali, oppure sono talmente
faticosi e prolissi da non applicarsi ai numeri più grandi".
92 4 Il Problema della Primalità

Ebbene, la ricerca di un algoritmo efficiente di primalità ha richiesto altri due


secoli di lavoro dal tempo di Gauss, non è stata facile e si è conclusa solo nel
2002, quando i tre ricercatori indiani Agrawal, Kayal e Saxena sono riusci-
ti a mettere a punto un procedimento (denominato AKS dalle loro iniziali)
che risolve il problema della primalità di N in tempo al più polinomiale nella
lunghezza di N. Questo capitolo è dedicato a introdurre AKS, ma anche a
descrivere e discutere i vari tentativi che lo hanno preceduto.
Infatti anche prima del 2002 progressi sostanziali ma non decisivi verso la
ricerca del nostro algoritmo erano stati compiuti, soprattutto sulla base del
Piccolo Teorema di Fermat, quello che afferma che, se N è primo, allora ogni
a primo con N soddisfa la congruenza a N - 1 == 1 (modN). A questo proposito
ci siamo già chiesti se vale anche il contrario di questo teorema, e quindi se,
ove si abbia a N - 1 == 1 (modN) per qualche a primo con N, o addirittura
per ogni a primo con N, non si possa dedurne che N è primo. Tuttavia ve-
dremo presto che la domanda ha risposta negativa. Ci sono infatti esempi di
numeri composti N per cui la precedente congruenza è soddisfatta da ogni
possibile elemento a: si chiamano pseudoprimi di Carmichael, e avremo modo
di discuterli nel paragrafo 2.
Thttavia il Piccolo Teorema di Fermat si presta a procedimenti, talora anche
eleganti, di primalità. Nel paragrafo 3 ne vedremo vari esempi: alcuni risalgono
all'Ottocento e comunque non migliorano quanto ad efficienza il procedimento
degli antichi Greci, altri, più recenti, formano addirittura la base dell'algorit-
mo AKS. Questi metodi valgono, se non proprio a provare che il problema
della primalità si può risolvere in tempi polinomiali e dunque sta in P, almeno
a mostrare che esso appartiene alla classe N P dei problemi che si controllano
in tempo polinomiale, come vedremo nel paragrafo 4. Mostrano poi come il
problema della primalità si possa scindere da quello della fattorizzazione: in
altre parole, è possibile decidere se un dato naturale dispari N > 2 è primo
o composto, senza doverne necessariamente determinare la decomposizione in
fattori primi; basta infatti accertarne certe proprietà intrinseche, che equival-
gono alla primalità, ma poco hanno a che vedere con la fattorizzazione e anzi,
come nel caso del Piccolo Teorema di Fermat, hanno la forma di semplici
congruenze. Infatti, come già Gauss osservava nel 1801, ci sono metodi che
''pur non sapendo fornire i fattori dei numeri composti, riescono certamente a
distinguere i numeri composti da quelli primi"; inoltre alcuni di questi metodi
sanno procedere abbastanza speditamente nell'accertamento della primalità.
Progressi più sostanziali nella ricerca di procedure di primalità si ottengono se
rivediamo parzialmente la visione che abbiamo sopra tratteggiato del concetto
di algoritmo, rigidamente legata al modello deterministico, e ne allarghiamo
un po' i contorni; accettiamo cioè di sacrificarne la precisione pur di accelerar-
ne i tempi di lavoro; ammettiamo errori per avere risposte rapide. Ovviamente,
eventuali sbagli dovranno avere probabilità minima, e comunque preventiva-
mente stimata. In conclusione, ci accingiamo a considerare quei procedimenti
di decisione che sono chiamati probabilistici perché ammettono errori, purché
di bassa probabilità. Del resto, secondo una opinione autorevole come quella
4.1 Dagli antichi Greci ad AKS 93

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.

4.2 Gli Pseudoprimi di Carmichael

Come già convenuto, N denota in questo capitolo, salvo diversamente speci-


ficato, un intero dispari > 2: il nostro obiettivo è verificarne rapidamente la
primalità. Ci basta dunque sapere in tempi veloci se N è primo oppure no,
eventualmente prescindendo dalla decomposizione di N nei suoi fattori primi.
Per chiarire ancora che cosa intendiamo, proponiamo il seguente risultato.

Teorema 4.2.1 (Wilson) Sia N un intero 2: 2. Allora N è primo se e solo


se (N - l)! == -1 (modN).
4.2 Gli Pseudoprimi di Carmichael 95

Dunque la verifica della primalità si riduce al controllo di un'unica congruenza


che prescinde completamente dalla fattorizzazione di N. Thttavia è da rilevare
che neppure il Teorema di Wilson costituisce un criterio di primalità efficien-
te e manifestamente migliore delle procedure elementari dei Greci. Infatti il
calcolo di (N - I)! modulo N richiede in linea di principio N - 2 successi-
ve moltiplicazioni, dunque un numero di operazioni esponenziale rispetto alla
lunghezza di N.
Dimostrazione. Supponiamo dapprima N composto, dunque N ammette
un divisore proprio 1 < a < N. In particolare a divide (N - I)! . Se fosse
(N -I)! == -1 (modN), a (che divide N) sarebbe anche sottomultiplo di -1,
e questo è impossibile perché a è maggiore di 1.
Assumiamo ora N primo. Se N = 2, la tesi è ovvia, visto che (2 - I)! == 1 ==
-1 (mod2). Supponiamo allora N> 2. Le N -1 classi di resti modulo N degli
interi 1, 2, ... , N-I hanno inverso modulo N. Le uniche classi che hanno
per inverso se stesse sono quelle degli elementi a per cui a 2 == 1 (mod N), e
dunque quelle di 1 e di -1 == N-I (modN). Osserviamo che 1 'l'- -1 (modN)
per N > 2. Le altre N - 3 classi (quelle di 2, 3, ... , N - 2) si suddividono in
coppie formate da elementi l'uno inverso dell'altro. Complessivamente

2 . 3· ... . (N - 2) == 1 (mod N),

e quindi
(N - I)! == 1 . (N - 1) == -1 (mod N).
D

Un'altra proprietà che è soddisfatta dai numeri primi e si esprime in termini


di congruenze è, appunto, quella stabilita dal Piccolo Teorema di Fermat:
se N è primo, allora, per ogni intero a primo con N, a N - 1 == 1 (modN).
Si noti che, dati N e a, la verifica di questa congruenza richiede il calcolo
di una potenza a N - 1 e una successiva divisione. È dunque facile e rapida da
eseguire. Si potrebbe allora sperare che il test suggerito dal Teorema di Fermat
sia non solo necessario, ma anche sufficiente a garantire che l'input N è primo
(quando lo è). In dettaglio, ci si può chiedere quanto segue:
• scegliamo un qualche a primo con N (eventualmente 1 < a < N) e sup-
poniamo che valga a N - 1 == 1 (modN); possiamo dedurne che N è primo?
In particolare, se ricordiamo che N è dispari e assumiamo, come è lecito,
a = 2, dalla verifica che 2N - 1 == 1 (modN) possiamo dedurre che N è
primo?
La risposta è negativa: Sarrus osservò che N = 341 = 11 . 31 non è pri-
mo, eppure 2 è primo con 341 e soddisfa 2340 == 1 (mod341) (come abbiamo
avuto modo di verificare nel capitolo precedente, e più precisamente nel para-
grafo 3.4, parlando di potenze). D'altra parte, se 2 è cattivo testimone della
96 4 Il Problema della Primalità

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

390 == 1 (mod91), 290 == 64 (mod91),


come è facile controllare usando l'algoritmo rapido del calcolo di potenze.
Semmai si può provare che, se N è un composto dispari> 2 e c'è almeno una
base a rispetto a cui N non è pseudoprimo, allora N non risulta pseudoprimo
rispetto ad almeno metà dei cjJ(N) possibili interi primi con N e minori di N (il
lettore può provare a dimostrarlo per esercizio, magari attendendo il prossi-
mo teorema 4.5.3 per ricavare qualche utile indicazione per la dimostrazione).
Ma il guaio è, come già sottolineato, che certi N possono essere pseudoprimi
rispetto a tutte le possibili basi a prime con N.
Definizione 4.2.3 Un numero composto dispari N > 2 tale che, per ogni
intero a primo con N, a N - 1 == 1 (modN) si chiama uno pseudoprimo di
Carmichael.
Il seguente teorema aiuta ad individuare esempi espliciti di pseudoprimi di
Carmichael.
Teorema 4.2.4 Sia N > 2 un intero composto dispari.
1. Se esiste un primo p tale che p2 divide N, allora N non è uno pseudoprimo
di Carmichael.
4.2 Gli Pseudoprimi di Carmichael 97

2. Se invece N è libero da quadrati (cioè è prodotto di primi distinti), allora


N è uno pseudoprimo di Carmichael se e solo se, per ogni divisore primo
p di N, p-l I N-L

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!).

Dimostrazione del Teorema.


1. Sia p un primo tale che p2 divide N. Sia poi g un naturale tale che 1 ~ g < p2
e g genera modulo p2 il gruppo moltiplicativo (ciclico per il Teorema 3.7.5)
degli elementi invertibili di Z p 2: in particolare g ha periodo </J(p2) = p' (p - 1)
modulo p2. Sia ora pk (con k 2 2) la massima potenza di p che divide N;
allora p non divide p11[, e (p2, p11[,) = 1. Grazie al Teorema del Resto Cinese,
possiamo trovare un intero a tale che

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à

modulo p: 9 ha periodo p-l modulo p. Come in 1. adoperiamo il Teorema


del Resto Cinese per trovare un intero a tale che

= (modp), a = (mod-).
a 9 1
N
p

Allora a è primo con N e a = (modp). Ma


N - 1 gN-1 gN-1 =t 1 (modp) perché
p-l non divide N -1 e 9 ha periodo p-l modulo p. Segue a N - 1 =t 1 (modp)
e, in conclusione, a N - 1 =t 1 (modN). D

Si osservi che gli esempi di pseudoprimo di Carmichael sopra proposti

561 = 3 . 11 . 17, 1105 = 5 . 13 . 17, 1729 = 7· 13 . 19

non consistono soltanto nel prodotto di primi distinti, ma coinvolgono tutti


esattamente tre fattori. In generale si ha:
Teorema 4.2.6 Ogni pseudoprimo di Carmichael N è il prodotto di almeno
tre primi (distinti).
Dimostrazione. Già sappiamo che N è prodotto di almeno due primi distinti,
dobbiamo escludere che N = p.q sia prodotto di esattamente due primi P:l q.
Ammettiamo che, invece, questo sia il caso, e fissiamo, come è lecito, p < q.
Siccome N è pseudoprimo di Carmichael, q-l I N-L Ma

N-l = pq - 1 = p(q - 1) + p-l =p-l (mod (q - 1)),


dunque q-l divide anche p-l, e questo è assurdo perché O < p-l < q-L
D

4.3 Variazioni sul Piccolo Teorema di Fermat


La scoperta degli infiniti pseudoprimi di Carmichael non attenua l'attenzione
al Piccolo Teorema di Fermat come strumento di verifica della primalità. Il
fatto si è che, per dirla con le parole di Carl Pomerance, "usare la congruenza
di Fermat è così semplice che pare un peccato dovervi rinunciare solo perché
c'è qualche controesempio".
Così, preso atto che la validità della semplice congruenza a N - l = 1 (mod N)
per un certo a primo con N, o anche per ogni a primo con N, è condizione
solo necessaria, ma non sufficiente perché N sia primo, si può cercare di raffor-
zarla con ulteriori assunzioni per ottenere, finalmente, una caratterizzazione
equivalente della primalità. In questo senso vanno le seguenti osservazioni,
originariamente formulate da Lucas nella seconda metà dell'ottocento. L'idea
è che:
• N è primo se e solo se 7l N è un campo e cioè se e solo se ci sono N-l
interi primi con N (a meno di congruenze modulo N),
4.3 Variazioni sul Piccolo Teorema di Fermat 99

• in questo caso il gruppo Z~ è ciclico, e dunque gli interi primi con N si


ottengono modulo N come le potenze di uno opportuno di loro.
È facile dedurne:
Teorema 4.3.1 Siano N un numero dispari> 2, a un intero. Ammettiamo
che:
(i) a N - 1 == 1 (modN),
(ii) a m =t 1 (modN) per ogni m con 1 :S m < N-L
Allora N è primo.
Dimostrazione. Da (i) segue che a è primo con N. Allora, per la (ii), 1, a,
a 2 , ... , a N -2 sono N-l interi primi con N (e dunque invertibili modulo N)
a 2 a 2 distinti modulo N. Così cp(N) ~ N-l, e questo basta ad assicurare
la primalità di N. D

Ma l'osservazione di Lucas non è sufficiente a garantire un algoritmo rapido


di primalità. Il difetto è che (ii) richiede il controllo di N - 2 congruenze, e
N - 2 è esponenziale rispetto alla lunghezza di N.
D'altra parte (ii) si può esprimere in modo più conciso, come la teoria elemen-
tare dei gruppi, ed in particolare il teorema di Lagrange, ci insegnano. Basta
infatti richiedere:
(ii)' a m =t 1 (modN) per ogni divisore m -I- N -1 di N-L
Infatti, se vale (i), il periodo di a modulo N, cioè il minimo intero positivo k
per cui a k == 1 (mod N) è un divisore di N-l. Se poi vale (ii)', questo periodo
coincide necessariamente con N-L Si ha dunque:

Teorema 4.3.2 Siano N un numero dispari> 2, a un intero. Ammettiamo


che:
(i) a N - 1 == 1 (modN),
(ii)' a m =t 1 (modN) per ogni divisore m -I- N-l di N-L
Allora N è primo.

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à

Teorema 4.3.3 Siano N un numero dispari 2: 2, a un intero. Ammettiamo


che:
1 == 1 (modN),
(i) a N -
t. 1 (mod N).
N-l
(ii)" per ogni fattore primo q di N-l, a-q-
Allora N è primo.

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.

Teorema 4.3.4 Siano N 2: 2, a un intero primo con N (compreso tra 1 e


N-l). Allora N è primo se e solo se i due polinomi

(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).

Dimostrazione. La direzione da sinistra a destra è implicitamente provata


dal Piccolo Teorema di Fermat che, per N primo, anzitutto esplicitamente
dichiara a N == a (mod N) (cioè che (x + a) N e x N + a hanno lo stesso termine
noto modulo N) e mostra poi come, per O < i < N, il coefficiente di xi in
(x - a)N

è divisibile per N perché lo è (~), e dunque è nullo modulo N.


Sia adesso N composto, q denoti un fattore primo di N, qk la massima potenza
di q che divide N. Ci basta provare che il coefficiente (~) a N -q di x q in
(x + a)N non è divisibile per N e quindi differisce modulo N dal coefficiente
di ugual grado di x N + a. Certamente (a N -q, N) = 1, così ci è sufficiente
dimostrare che qk non divide

N) = N· (N -1)· .... (N - q + 1)
(
q q·(q-1)· ... ·1

Altrimenti qk+l divide N· (N - 1) ..... (N - q + 1). Ora ricordiamo che qk


è la massima potenza di q che divide N. Ne segue che, per qualche i tale che
O < i < q, q divide N - i e conseguentemente anche i: ma questo è assurdo
proprio perché O < i < q e q è primo. D
4.4 Primi e N P 101

Come detto, questa caratterizzazione della primalità ha poca rilevanza dal


punto di vista pratico. La ragione si intuisce facilmente: infatti, la verifica
della congruenza tra i due polinomi (x - a)N e x N - a, ed anzi già addirittura
il calcolo preliminare della potenza (x - a)N richiedono di computare preven-
tivamente gli N + 1 coefficienti di (x - a)N rispetto ad x, e questo impiega
tempo almeno esponenziale rispetto alla lunghezza dell'input N. Vedremo tut-
tavia più tardi come AK S perfezioni proprio questa intuizione per sviluppare
finalmente una procedura rapida di primalità.

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.

C'è un famoso aneddoto che illustra la situazione. Nel 1903, ad un convegno


della American Mathematical Society, ebbe vasta risonanza una comunicazio-
ne di F. N. Cole, che mostrò che il numero di Mersenne M(67) = 267 - 1 non
è primo. Ecco la dimostrazione di Cole:

267 - 1 = 147573952589676412927 = 193707721· 761838257287.

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.4.2 L'insieme dei numeri primi è in NP.

Dimostrazione. In base al Teorema 4.3.3, un testimone della primalità di


un fissato primo dispari N può consistere di
• un naturale a minore di N e primo con N,
• la sequenza qo, ... , qs dei fattori primi di N-L
Le verifiche che
N-l

(a, N) = 1, aN - 1 == 1 (modN), a ----.-;- =t 1 (modN) per ogni j :S s


bastano infatti a confermare che N è primo. Ovviamente tanto a che i primi
qj hanno lunghezza minore o uguale a quella di N; inoltre i fattori qj coinvolti
sono tutti ~ 2, dunque il loro numero è al massimo [og2 (N - 1) e non supera
la lunghezza di N. Tuttavia si può obiettare che anche la primalità di ciascun
qj richiede la sua certificazione. D'altra parte, se qj = 2, non c'è bisogno di
ricorrere a testimoni, mentre per qj dispari si può procedere come già per N,
citando un nuovo aj primo con qj e i fattori primi di qj - 1. Questa ripetizione
della procedura preserva ovviamente i vincoli di lunghezza sui nuovi testimo-
ni e sui tempi di lavoro. Semmai c'è da controllare che ripetute iter azioni del
procedimento (per N, poi per i qj dispari, poi per i loro eventuali testimoni,
e via dicendo) non alterino in modo decisivo i limiti temporali richiesti. Ma
questo è facile da vedere perché ciascun qj è minore di ~, gli eventuali testi-
moni dei qj sono minori di lf, e così via, dunque le possibili ripetizioni del
procedimento sono al più [Og2 N e non superano la lunghezza di N. Si prova
così che l'insieme dei primi è in N P. D

4.5 L'Algoritmo di Solovay-Strassen

Nella nostra ricerca di algoritmi di primalità, abbandoniamo momentanea-


mente il Piccolo Teorema di Fermat e consideriamo invece il Teorema di Eu-
lero sui residui quadratici, quello che dice: se N è primo, allora ogni intero a
(in particolare ogni a primo con N) soddisfa

La verifica di quest'ultima congruenza è rapida da compiersi, perché ci sono


procedure veloci di calcolo sia per le potenze che per i simboli di Legendre
e Jacobi. Possiamo allora sperare che la proprietà dei primi stabilita dalla
congruenza (*) abbia maggior fortuna di quella osservata da Fermat. In altre
parole possiamo domandarci:
4.5 L'Algoritmo di Solovay-Strassen 103

• siano N un intero dispari > 2 e supponiamo che per qualche prefissato


intero a primo COn N (ad esempio per a = 2) valga

possiamo dedurne che N è primo?


La risposta è, nuovamente, negativa. Ad esempio 91 = 7 . 13 è composto, 2 è
primo con 91 eppure già sappiamo che 290 == 64 (mod91), dunque

2 9 ";" == 245 't. -1 (mod91),


mentre
(921) =-1
perché 91 't. ±1 (mod8). Poniamo allora:
Definizione 4.5.1 Siano N un intero composto dispari> 2, a un intero
primo con N. N si dice uno pseudoprimo di Eulero in base a se

Ad esempio 91 è pseudoprimo di Eulero in base 2. A proposito degli pseudo-


primi di Eulero può intanto essere utile notare:
Osservazione 4.5.2 Se N è pseudoprimo di Eulero in base a, N è anche
pseudoprimo in base a.
Infatti da a N; 1 == ( N) (mod N) si ottiene a N - l == 1 (mod N) quadrando e
ricordando che ( N) = ± 1 per a primo COn N.
Non è tuttavia vero il contrario: ad esempio N = 91 = 7·13 è pseudoprimo
in base 3 perché 390 == 1 (mod91), ma nOn è pseudoprimo di Eulero in base 3
perché
3 9 ";" == 345 == 27 't. ±1 (mod91).
Aggiustiamo comunque la nostra domanda e chiediamoci:
• sia N un intero dispari> 2 e supponiamo che per ogni intero a primo con
N (ad esempio per a = 2) valga

possiamo dedurne che N è primo?


Oppure esistono anCora "anomalie" come gli pseudoprimi di Carmichael per
il Piccolo Teorema di Fermat? La risposta stavolta cambia. Infatti, se tutti
gli a interpellati soddisfano (*), allora N deve essere primo. Vale anzi una
condizione anCora più forte, che adesso enunciamo e dimostriamo.
104 4 Il Problema della Primalità

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

Dimostrazione. Ci basta provare che esiste almeno un intero a primo con


N che non soddisfa (*). Supponiamo infatti che questo sia vero, e prendiamo
un intero b primo con N per cui si ha invece

(*) (Nb) =- b- N-l


2- (modN).

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 . b N; l=-( ab( ; l=-( ~) =- (~) (~ ) =- (~) . b N; l (mod N)


e, dividendo per b N ; l che è primo con N, si ottiene

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

un periodo (moltiplicativo) che divide N -1. D'altra parte il numero di questi


elementi, e dunque l'ordine del gruppo moltiplicativo da essi formato, è

ed è quindi multiplo di p perché k - 1 2: 1. A questo punto possiamo ricorrere


ad un risultato non banale della Teoria dei Gruppi Finiti (il Teorema di Sylow)
e dedurre che tra questi elementi ce n'è qualcuno di periodo p. Da quanto
abbiamo detto in precedenza ricaviamo p I N -1. Ma p I N e dunque cadiamo
nella contraddizione p I 1. In conclusione a può essere trovato nel Caso 1.
Passiamo allora a considerare il Caso 2. Fissiamo N = ITi<r Pi dove Po, ... ,
Pr sono primi distinti. Per semplicità poniamo poi P = Po. Proviamo anzitutto
che esiste un intero a per cui

N
(~) = -1, a == 1 (mod-).
P

Consideriamo infatti gli interi non negativi c < N che soddisfano c ==


1 (mod ~): li possiamo scrivere la forma k· ~ + 1 con O:::; k < p. Notiamo poi
che, per O :::; k, k' < P

k . -N + 1 == k , . -N + 1 (mod P) {:} k == k' (modp)


P P
perché ~ è primo con p. Così i P elementi c = k . ~ + 1 (per O :::; k < p) sono
a 2 a 2 incongrui modulo P e rappresentano tutte le classi di resti modulo p.
Se escludiamo il rappresentante di Op e i P;l residui quadratici modulo P, ci
resta O :::; k < P tale che a = k· ~ + 1 soddisfa ( ~) = -1, e conseguentemente
(* *), come richiesto.
Si deduce facilmente da (* *) che a è primo sia con P che con ~, dunque anche
con N. Ancora,
(~) = II (~) = -1
i'5,r P.

perché (;,) = (~) = -1 mentre, per O < i < r, a == 1 == 12 (modpi) e


quindi (t) = 1. A questo punto, se fosse a N:; 1 == ( N) (mod N), si avrebbe
a N:;l == -1 modulo N e quindi anche modulo ~, in contraddizione col fatto
che ~ è dispari (come N), dunque ~ > 2, e a == 1 (mod ~). D

Sulla base del teorema appena dimostrato possiamo organizzare il seguente


algoritmo per controllare la primalità di N > 2. Ricordiamo che cjJ(N) :::; N-I
(e vale esattamente N-I se e solo se N è primo). Scegliamo allora almeno
N:;l interi a primi con N e incongrui tra loro modulo N:

• se almeno uno di loro non soddisfa (*), allora N è composto;


106 4 Il Problema della Primalità

• se invece tutti rispettano (*), allora N è primo.


Il Teorema 4.5.3 assicura che la procedura è corretta. Thttavia si riscontra
il solito difetto: il metodo richiede almeno N:;l controlli, troppi rispetto alla
lunghezza di N.
Ma possiamo adattarlo nel modo che segue ad un algoritmo probabilistico
di primalità, che può ammettere errori nelle sue risposte, ma raggiunge in
tempi brevi una garanzia di precisione, se non assoluta, almeno con probabilità
superiore alla soglia critica di 1 - 10-50.
Algoritmo di primalità di Solovay-Strassen. Sia N > 2 un intero dispari.
Prendiamo un intero a con 1 :S a < N. Calcoliamo (a, N), poi, se necessario,
a N ; l e(N)·
• Se (a, N) -::f- 1, dichiariamo N COMPOSTO.
• Se (a, N) = 1 ma a N ;1 t'- (N) (mod N), dichiariamo nuovamente N
COMPOSTO.
Se finalmente (a, N) = 1 e a-2-
N-l
• == (N) (mod N), dichiariamo N
PROBABILMENTE PRIMO.

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

2. Sappiamo che il numero N = 341 è composto, e l'algoritmo di Solovay-


Strassen lo riconosce come tale se ricorre ad a = 2. Infatti ( 3~1 ) = -1
perché 341 t'- ±1 (mod8) e 234~-l = 2 170 == -1 (mod340) (si ricordi il
calcolo di 2340 modulo 341 nel paragrafo 3.4).
Riflettiamo adesso sull'esattezza dell'algoritmo. È evidente che, quando si di-
chiara N COMPOSTO, N è davvero composto. Ma, quando si conclude N
PROBABILMENTE PRIMO, potrebbe accadere che N sia in realtà composto
(e cioè pseudoprimo di Eulero in base a). Tuttavia, la probabilità che questo
accada è, per quanto primo osservato, :S ~ (rispetto alla scelta di a). Natu-
ralmente, dopo che si sono effettuati k controlli relativi ad interi distinti al,
· .. , ak tutti compresi tra 1 e N-I e primi con N e dopo che, in ogni caso,
si è ottenuta la comune risposta N PROBABILMENTE PRIMO derivandola
dalle congruenze

aT == (a")
N-l
~ (modN), 1 :S j :S k,

la probabilità di errore discende a :S 21k. In particolare, se vogliamo abbas-


sarla ben sotto la soglia di 10-50, ci basta operare k = 200 controlli distinti.
Invece, come già detto, la certezza assoluta che N è primo si raggiunge solo
per k > q,(!;l.
4.6 L'Algoritmo di Miller-Rabin 107

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.

4.6 L'Algoritmo di Miller-Rabin

Un altro esempio di procedimento probabilistico di tipo Montecarlo per la


primalità è l'algoritmo di Miller-Rabin. Esso si basa su una più sofisticata
analisi del Piccolo Teorema di Fermat, combinata con l'osservazione che, per
N primo (dispari), la congruenza x2 == 1 (modN) ha le due uniche soluzioni
x == ±1 (modN) (proprietà non sempre condivisa dagli N composti). Così sia
N un primo dispari. Sia poi a un intero primo con N, allora si ha

aN - 1 == 1 (modN).
Ma N-l è pari, quindi possiamo scrivere

da cui deriviamo N-l


a-2- == ±1 (modN).
Se poi aN:;l == 1 (modN) e anche N:;l è pari, abbiamo

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

e si può ripetere ancora il ragionamento. In generale, ripercorrendo a ritroso


modulo N le potenze di a, e cioè a2S - 1.t , a2S - 2 •t , ... , a2t , at,
• incontriamo-l
• oppure concludiamo at == 1 (modN).
Sulla base delle precedenti considerazioni, possiamo allora organizzare un
nuovo test probabilistico di primalità.
Algoritmo di primalità di Miller-Rabin. Sia N un intero dispari> 2.
Poniamo N -1 = 28 • t per s, t naturali, s f::. O e t dispari. Scegliamo un intero

a con 1 < a < N e calcoliamo prima (a, N) e poi, se necessario, le potenze


a2T .t modulo N (per r < s naturale).
• Se (a, N) f::. 1, dichiariamo N COMPOSTO.
• Se (a, N) = 1 ma a N - 1 =t 1 (modN), dichiariamo ancora N COMPOSTO
• Se (a, N) = 1, a N - 1 = a2s .t == 1 (modN) ma at =t 1 (modN) e, per
ogni naturale r < s, a 2T .t =t -1 (modn), dichiariamo nuovamente N
COMPOSTO.
• Se invece (a, N) = 1, aN - 1 1 (modN) e at == 1 (modN) oppu-
re, per qualche naturale r < s, a 2T .t == -1 (modn), dichiariamo N
PROBABILMENTE PRIMO.

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

222 . 85 = 2 340 == 1 (mod341), 22 . 85 = 2 170 == 1 (mod341)

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

Definizione 4.6.2 Siano N un numero composto dispari> 2, N-I = 28 • t


con s > O e t dispari, a un intero primo con N. N è uno pseudoprimo forle
in base a se at == 1 (mod N) oppure, per qualche naturale r < s, a 2r .t
-1 (modN).

Si noti che, conseguentemente, si ha a N - 1 == a 2s .t == 1 (modN): in altre paro-


le, uno pseudoprimo forte in base a è anche pseudoprimo in base a.
Ci chiediamo allora quale è la probabilità che il test di Miller-Rabin applica-
to a N dichiari per una scelta sfortunata di a che N è PROBABILMENTE
PRIMO, mentre N è in realtà composto, e dunque pseudoprimo forte in base
a.
Come vedremo tra poco, questa probabilità è ~ t. Così, dopo k tentativi con
valori distinti di a ed una comune risposta N PROBABILMENTE PRIMO,
la probabilità che N sia invece composto diventa ~ -b. Questa stima è da
paragonare che quella ~ b del test di Solovay-Strassen, che è quindi peggio-
re. Ad esempio, nell'algoritmo di Miller-Rabin k = 100 controlli sono più che
sufficienti per abbassare la probabilità di errore sotto la soglia di 10-50.
Di più si può provare (e tra poco effettivamente proveremo) che, per ogni inte-
ro a, uno pseudoprimo forte in base a è anche pseudoprimo di Eulero in base
a (dunque ogni testimone inattendibile per il test di Miller-Rabin è inaffida-
bile anche per quello di Solovay-Strassen). Inoltre i tempi di lavoro dei due
algoritmi sono equiparabili, e comunque polinomiali rispetto alla lunghezza
dell'input N. L'affermazione è già stata illustrata nel caso di Solovay-Strassen,
ma richiede qualche chiarimento per il metodo di Miller-Rabin; si può infatti
osservare che l'applicazione di questo secondo test può richiedere un numero
s di controlli successivi per una data base a al fine di valutare se per qualche
naturale r < s si ha a 2r .t == -1 (mod n). Thttavia, ricordando N = 28 • t + 1
con t dispari, si deduce facilmente che s ~ Llog2NJ + 1 è O(log2N). Si pro-
va allora che una singola applicazione del test di Miller-Rabin sull'input N
richiede complessivamente O(log~ N) passi di computazione. Va anzi detto
che c'è un unico numero composto dispari N < 2,5· 10 10 (per la precisione,
N = 3215031751) che è pseudoprimo forte in ognuna delle basi 2, 3, 5 e 7. In al-
tre parole, 4 applicazioni del test di Miller-Rabin (per a = 2, 3, 5, 7 appunto)
bastano a decidere senza errore la primalità di qualunque input N < 2,5.10 10
escluso 3215031751.
Naturalmente l'algoritmo di Miller-Rabin si può adattare ad un contesto de-
terministico e non probabilistico. Infatti, nei casi dubbi, dopo k = N 41 appli-
cazioni del test con interi a primi con N e tali che 1 ~ a ~ N, at == 1 (mod N)
oppure, per qualche naturale r < s, a 2r .t == -1 (modN), possiamo certamente
concludere che N è primo. Ma gli N 41 controlli necessari rendono il tempo di
applicazione dell'algoritmo esponenziale rispetto alla lunghezza dell'input N.
Supponiamo però di riuscire a determinare una funzione B di N con le seguenti
proprietà:
(i) B è limitata polinomialmente rispetto a log2 N;
110 4 Il Problema della Primalità

(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).

Conseguentemente, il test di Miller-Rabin si può adattare ad un algoritmo


deterministico efficiente di primalità purché una versione allargata dell'Ipotesi
di Riemann sia valida.
Per completare la nostra trattazione dell'algoritmo di Miller-Rabin, dobbiamo
adesso dimostrare i 2 fatti sopra anticipati e cioè che, per N > 2 composto
dispari, si ha quanto segue.

Teorema 4.6.4 Se N è pseudoprimo forte in una qualche base a prima con


N, allora N è anche uno pseudoprimo di Eulero in base a.

Teorema 4.6.5 N è pseudoprimo forte in base a per al più t degli interi a


primi con N compresi tra 1 e 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

e, per t dispari, questo implica ( N) = 1, come richiesto.


Adesso dobbiamo trattare l'altra possibilità per a, quella per la quale a 2r .t ==
-1 (modN) per qualche r < s. Ci limitiamo comunque per semplicità al caso
4.6 L'Algoritmo di Miller-Rabin 111

particolare r = s -1, dunque ad a N :;l == -1 (modN): il caso generale si af-


fronta allo stesso modo, con qualche maggiore complicazione tecnica.
C'è da verificare ( N) = -1. Consideriamo un qualunque divisore primo p di
N; anche p è dispari, e così possiamo porre p-I = 28 ' • t' con s' e t' naturali, s'
positivo e t' dispari. Come passo preliminare verso la computazione di ( N),
calcoliamo ( ~ ). Si prova:

Lemma 4.6.6 s' 2s e (~) = -1 se s' = s, (~) = 1 se s' > s.


Dimostrazione di 4.6.6. Dalla condizione -1 == a N:;l == a 2S - l .t (modN)
deduciamo
(a 28 - l .t ')t == (a 28 - l .t )t' == -1 (modN)

perché t' è dispari. Segue (a 28 - l . t ')t == -1 (modp) perché p divide N. Così,


se s' < s, si ha che aP - 1 = a 28 ' ·t' non può essere congruo ad 1 modulo p, e
questo è assurdo per il Piccolo Teorema di Fermat. Allora deve essere s' 2 s.
Se poi s' = s,

_ p-l _ 2s'-1.t' _ 2s-1.t' (


( -a) = )
a 2 = a = a mod p ;
p

dunque (~) = 1 implica a 2s - l .t ' == 1 (modp) e (a 2S - l .t ')t == 1 (modp), il


che contraddice le precedenti osservazioni. Quindi deve essere ( ~ ) = -1. Se
invece s' > s, allora

( -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

e, siccome tanto t quanto p sono dispari, se ne deduce (~) = 1. D

Procediamo adesso nella dimostrazione del Teorema 4.6.4. Decomponiamo


N = TIppk p nel prodotto di potenze di primi distinti. Dal Lemma 4.6.6
deduciamo
(~) = II (~rp = (_I)K
p

dove K è la somma degli esponenti kp relativi ai fattori primi p di N per cui


s' = s. Notiamo che, siccome t è dispari, 2 8 • (t - 1) è divisibile per 2 8 +1 , cioè
28 • t == 28 (mod2 8 + 1 ) e dunque N = 1 + 28 • t == 1 + 28 (mod2 8 + 1 ). Quanto ai
fattori primi p = 1 + 28 ' • t' di N, si ha
p == 1 (mod2 8 +1 ) se s' > s,
p == 1 + 28 (mod2 8 +1 ) se s' = s.
Così
1 + 28 == N == IIpk p == (1 +2 8
)K == 1 + K· 28 (mod2 8 +1),
p
112 4 Il Problema della Primalità

da cui si deduce K dispari e quindi, in conclusione, ( N) = (-l)K = -1. D

Dimostrazione di 4.6.5. Come al solito poniamo N-l = 28 • t con t e s


naturali, s positivo e t dispari. Distinguiamo nuovamente due casi:
1. N non è libero da quadrati, cioè c'è qualche primo p tale che p2 divide N,
2. N è libero da quadrati, e cioè N è il prodotto di primi distinti.
Affrontiamo dapprima 1. Mostriamo che in questo caso le basi a rispetto
a cui N è pseudoprimo sono al più N 41 (quindi anche le basi a per cui
N è pseudoprimo forte sono al più N41). Chiediamoci infatti quante so-
no le possibili scelte di un intero a compreso tra 1 e N, primo con N
e tale che a N - 1 == 1 (modN). L'ultima condizione implica in particolare
a N - 1 == 1 (mod p2). Ricordiamo che gli elementi invertibili di Zp2 sono in
tutto cjJ(p) = p . (p - 1) e formano (come osservato alla fine del paragrafo
3.7) un gruppo moltiplicativo ciclico: si ottengono cioè come le potenze di
uno opportuno 9 di loro. Il nostro problema consiste nel contare quanti ele-
menti di questo gruppo, cioè quante potenze gj di 9 con O ~ j < p(p - 1),
hanno periodo che divide N-L Con argomenti che ci sono oramai familiari
si controlla che il loro numero eguaglia proprio il massimo comun divisore
d = (p. (p - 1), N-l). Notiamo che p non divide N-l e quindi neppure
d. Perciò d ~ p-l, e quindi ci sono al più p - l possibilità di scegliere la
nostra base a a meno di congruenze modulo p2. Se ne deduce facilmente che
la probabilità di trovare un valore a compreso tra 1 e N-l rispetto a cui N
è pseudoprimo è al più
p-l = _1_ <!
p2-l p+1-4
(visto che p 2 3). Questo conclude la dimostrazione nel caso 1.
Consideriamo adesso 2. Per semplicità ci limitiamo al caso particolare in cui
N è il prodotto di due primi distinti: quando il numero dei fattori primi di N
è superiore, si procede in modo analogo, con qualche maggiore complicazione
tecnica. Fissiamo allora N = p' . p" con p' e p" primi distinti (dispari perché
N è dispari). Poniamo anzi

p' - 1 = 28 ' • t' , p" - 1 = 28 " • t"

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

Se facciamo riferimento al gruppo ciclico 1',,;,


e procediamo come nel caso 1,
vediamo che il numero delle possibilità di scegliere a tale che at == 1 (modp')
è (t, p' -1) = (t, 28 ' • t'), che eguaglia (t, t') perché t è dispari. Allo stesso mo-
do, ci sono (t, t") possibilità di scegliere a tale che a t == 1 (modp"). Siccome
(t, t') ~ t'e (t, t") ~ t", possiamo dedurre che ci sono al più t'· t" possibilità
di soddisfare i).
Adesso consideriamo ii). Argomentazioni analoghe alle precedenti (ma di mag-
giore complessità) assicurano che, per ogni r < s' ~ s", il numero delle
possibili scelte di a tale che

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

</J(N) = </J(p') . </J(p") = (p' - 1) . (p" - 1) = 28 '+8" t't".

Segue che la probabilità di trovare a è al massimo

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

N-I == p'p" - 1 == (p' - l)p" + (p" - 1) == p" - 1 (modt'),


114 4 Il Problema della Primalità

si deduce che ti divide p" - 1; ma ti è dispari, e quindi divide addirittura t".


Invertendo i ruoli di ti e t", si deduce allo stesso modo t" I ti e, in definitiva,
ti = t", dunque p' = p" -assurdo-o Allora almeno uno tra ti e t" non divide
t; in altre parole (t, ti) < ti oppure (t, t") < t". Supponiamo ad esempio che
(t, ti) sia un divisore proprio di ti; siccome ti è dispari, il relativo quoziente è
almeno 3, quindi (t, ti) :S ~t' e

(t, ti) . (t, t") :S ~tltll


(conclusione cui evidentemente si arriva anche nell'altro caso quando è t" >
(t, t")). Così, al posto della limitazione (t, ti) . (t, t") :S t't" adoperata
precedentemente si può usare
1
(t, ti) . (t, t") :S 3tltll.

Una paziente reVISIOne delle precedenti computazioni conferma allora che,


anche in questo caso, la probabilità di trovare a si mantiene :S t. D

4.7 AKS: l'Algoritmo di Agrawal-Kayal-Saxena


A, K ed S sono le iniziali dei cognomi di tre studiosi indiani. Il primo, Manin-
dra Agrawal, informatico teorico, esperto di complessità di algoritmi, si era
in particolare interessato al problema P = N P, già presentato nel capitolo L
Non è stupefacente che, in questo ambito, coltivasse una qualche curiosità per
le questioni della primalità e della fattorizzazione dei numeri naturali. Aveva
così individuato, insieme al suo collaboratore Biswas, un nuovo test probabi-
listico di primalità, basato sulla elegante caratterizzazione dei primi fornita
dal Teorema 4.3.4. D'altra parte, abbiamo già osservato come questo criterio
di primalità ha di per sé poca utilità pratica. Né il conseguente algoritmo
probabilistico di Agrawal e Biswas ha migliore fortuna: pur polinomiale, non
è neanche lontanamente competitivo con quello di Miller e Rabin.
Ad evitare le lungaggini della computazione di (x + a)N, si può comunque
cercare di ovviare sostituendo (x + a)N con il suo resto nella divisione per
un qualche binomio x T - 1 dove r è esponente che si può calcolare in tempo
polinomiale rispetto al logaritmo di N; così, anziché verificare la congruenza

(x + a)N == x N + a (mod N),

si va a considerare la possibilità di esprimere la differenza (x+a)N - (x N +a)


nella forma
N· g(x) + (x T - 1) . h(x)
per una qualche scelta di polinomi a coefficienti interi g(x) e h(x): condizio-
ne che potremmo sintetizzare scrivendo, con notazione che ci pare di facile
comprensione,
4.7 AKS: l'Algoritmo di Agrawal-Kayal-Saxena 115

(x + a)N == x N + a (mod N, xT - 1).


Quest'ultima congruenza ha il pregio di poter esser verificata, per un r fis-
sato come sopra, in tempo polinomiale rispetto alla lunghezza di N. Infatti,
se operiamo modulo x T - 1 oltre che modulo N, e dunque sostanzialmente
assumiamo che x T coincide con 1, i due polinomi da confrontare

si riducono a grado minore di r nel modo che segue.


• x N coincide con x N ' dove N' è il resto di N nella divisione per r, dunque
x N + a va a eguagliare x N ' + a.
• La potenza (x + a)N si calcola con l'algoritmo descritto nel paragrafo 3.4.
In effetti là si trattano interi, ma il procedimento si applica ovviamente
anche a polinomi: si parte da 1, si quadra o si moltiplica per x+a, si arriva a
(x + a)N in un numero di passi linearmente limitato dal logaritmo in base
2 di N. Inoltre, siccome si opera modulo N, i coefficienti dei polinomi
ottenuti a ogni passo si restringono tra O e N-L Di più, dato che si
opera modulo x T - 1, il polinomio calcolato a ogni passo si riduce a essere
nullo o ad avere grado < r salvo sostituirlo col suo resto nella divisione per
x T -1: in questo modo ogni nuova moltiplicazione o quadratura continua a
trattare polinomi nulli o di grado minore di r. Così i tempi di lavoro sono
abbassati a livello polinomiale.
C'è comunque da chiedersi se la nuova condizione

(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

(x + a)N == x N + a (mod N, x T - 1).

per qualche r opportuno implica che N è primo.


Fu a questo punto della questione che la K e la S fecero il loro ingresso nella
storia di AK S, quali iniziali di due dottorandi di Agrawal, Neeraj Kayal e
Nitin Saxena, matematici interessati anche agli argomenti dell'Informatica.
Nell'estate del 2002, la collaborazione tra i tre approdò finalmente al chia-
rimento della questione rimasta in sospeso ed alla costruzione completa del
sospirato algoritmo deterministico polinomiale di primalità. La prima versio-
ne del loro lavoro cominciò a circolare in rete 1'8 agosto 2002; nei mesi che
seguirono vari suggerimenti (di Hendrik W. Lenstra Jr. ed altri) condussero
116 4 Il Problema della Primalità

a redazioni più nitide e perfezionate. Ecco allora come si presenta l'algoritmo


AKS, quale è stato riformulato da Agrawal, Kayal e Saxena nell'aprile 2003.
Ci si basa sulla seguente nuova caratterizzazione dei numeri primi (potenza
perfetta indica qui, ovviamente, un numero della forma Mh con M, h naturali
2 2).
Teorema 4.7.1 (Agrawal, Kayal, Saxena) Sia N un intero dispari> 2.
Sia poi r un intero positivo tale che r < N e N ha periodo > log~ N modulo
r. Allora N è primo se e solo se valgono le seguenti condizioni:
(i) N non è una potenza perfetta;
(ii) N non ha fattori primi ~ r;
(iii) (x+a)N == x N +a (mod N, x T -1) per ogni intero positivo a < ..jrlog2 N.

Daremo più tardi cenni della dimostrazione di questo teorema. L'algoritmo


AK S è una diretta conseguenza del suo enunciato. In dettaglio, si procede
infatti nel modo seguente.
Algoritmo AKS (Agrawal-Kayal-Saxena) È dato un intero dispari N >
2.
1) Se N è una potenza perfetta, dichiariamo N COMPOSTO.
2) Altrimenti, troviamo il più piccolo r < N tale che il periodo (moltiplicati-
vo) di N modulo r è > log~ N e consideriamo il massimo comune divisore
tra a e N per a ~ r. Se (a, N) f::- 1 per qualche a, diciamo nuovamente N
COMPOSTO.
3) Altrimenti, per a = 1, ... , l..jr log2 NJ, verifichiamo la nostra congruen-
za (x + a)N == x N + a (mod N, x T - 1). Se qualche a non la soddisfa,
dichiariamo N COMPOSTO.
4) In caso contrario, dichiariamo N PRIMO.
Infatti 1) 2), 3) negano rispettivamente le condizioni (i), (ii), (iii) del teorema,
mentre 4) corrisponde al loro contemporaneo verificarsi. Valutiamo allora il
tempo di lavoro di AK S. Vogliamo confermare che il numero dei passi che
il procedimento impiega su un dato input N è asintoticamente limitato da
una qualche funzione polinomiale della lunghezza di N e dunque di log2 N:
se d è il grado di questo polinomio, si scrive, secondo le convenzioni ufficiali
di Analisi e Complessità già ricordate nel Capitolo 1, che il tempo di lavoro
o
dell'algoritmo è O(logg N); si afferma invece che il tempo è (logg N) se è
O(logg N) a meno di un fattore polinomiale nel logaritmo del logaritmo di
N (il che specifica con maggior precisione il numero dei passi necessari alla
computazione, ma lo mantiene ad un livello ancora polinomiale rispetto al
parametro decisivo, e cioè il logaritmo di N). Ciò premesso ripercorriamo i
singoli momenti del procedimento.

1) Il primo passo dell'algoritmo controlla se l'intero dispari N si può o no


esprimere come potenza Mh con M, h 2 2. Procedimenti rapidi a questo pro-
posito erano noti ben prima di AK S. Infatti non è difficile ammettere che si
4.7 AKS: l'Algoritmo di Agrawal-Kayal-Saxena 117

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).

2) Nel secondo passo si fa riferimento al minimo r < N tale che il periodo di N


modulo r supera log~ N. È anzitutto da stabilire che un tale r esista davvero.
Se sì, sarà da notare che log~ N < r < N, infatti un periodo moltiplicativo
modulo r non può eccedere r; così r ha lunghezza che è almeno logaritmica
in N ma può arrivare anche ad essere lineare in N; sarà quindi opportuno
precisare l'ambito effettivo di questa lunghezza, e magari ridurlo al minimo
possibile. Ma rimandiamo il problema dell'esistenza di r e quello della sua
lunghezza a più tardi, e assumiamo di sapere che r c'è davvero. Domandiamoci
piuttosto quale è il costo per trovarlo. A tale fine dobbiamo considerare tutti i
possibili valori s = 1,2,3, ... per r, controllare in ogni caso se Nk =t= 1 (mod s)
per ogni k :S log~ N. Per ogni s, la verifica richiede O(log~ N) moltiplicazioni
modulo s (quelle necessarie per calcolare N k modulo s al variare di k), seguite
dal controllo della relativa congruenza: se ne deduce che il costo di questa
fase per un dato s :S r è O(log~ N . lOg2 r). Ma l'analisi va estesa a tutti gli
s :S r, e quindi raggiunge un tempo asintotico O(r log~ N). A questo punto
si deve computare il massimo comun divisore di a ed N per ogni a :S r.
Ma abbiamo già avuto modo di ricordare come il classico algoritmo euclideo
delle divisioni successive permette di svolgere questo calcolo in un tempo
rapido e specificamente O(log~ N), per ogni dato a. In conclusione, allora,
la complessità totale del passo 2 è O(r log~ N).
3) Adesso dobbiamo verificare l y'r log2 NJ congruenze: in ciascuna di esse il
grado si può rendere minore di r e i coefficienti hanno lunghezza O(log2 N).
Conseguentemente ogni congruenza può essere controllata in O(r log~ N)
passi, il che fissa la complessità totale di questo passo in

O(ry'r log~ N) = O(r! log~ N).


118 4 Il Problema della Primalità

Il tempo di 3) supera ovviamente quello dei passi precedenti, e stabilisce con-


seguentemente la complessità asintotica totale dell'algoritmo in funzione di N
e di r.
Resta da stabilire l'esistenza di r, e limitare superiormente in modo ottimale la
sua lunghezza rispetto a quella di N. A questo proposito, si è già detto che r >
log~ N, il che implica che AKS non può lavorare in tempi inferiori a O(log~ N)
(infatti r 3 / 2 > log~ N). Agrawal, Kayal, Saxena usano argomenti non banali
per provare r = O(log~ N) il che fissa i tempi di lavoro di AK S in O(log~O,5 N).
In realtà risultati ancor più profondi di natura analitica di Fouvry permettono
di abbassare questo livello fino a O(log~,5 N) perché implicano la possibilità
di trovare r vicino a log~ N. In conclusione possiamo comunque affermare:
Teorema 4.7.2 Il problema della primalità è in P.
Infatti l'algoritmo AK S riconosce se un intero N 2: 2 è primo o no in tempo
O(log~,5 N). Vedremo nel prossimo paragrafo che, in realtà, recenti ulteriori
perfezionamenti dell'idea di AK S raggiungono addirittura il livello minimo
O(log~ N) sopra accennato.
Ma passiamo ora, come promesso, alla dimostrazione del teorema 4.7.1 e della
sua caratterizzazione della primalità. Come al solito, il lettore non interessato
ai dettagli può passare direttamente oltre, al paragrafo successivo. Notiamo
che, in aggiunta agli articoli originali di Agrawal, Kayal, Saxena, ci sono vari
lavori espositivi che presentano la prova del teorema. Seguiamo qui uno dei più
recenti, quello scritto da Granville per il Bullettin oE American Mathematical
Society. La prova è in ogni caso lunga e articolata, usa tuttavia argomenti re-
lativamente elementari. Ne accenniamo le idee fondamentali, lasciando talora
per esercizio certi particolari più facilmente accessibili.
Dimostrazione del teorema 4.7.1. È evidente che, se N è primo, allora
vale (i), così come (ii) per r < N e, finalmente, anche (iii), che segue dal
teorema 4.3.4 e dalle considerazioni iniziali di questo paragrafo.
Va quindi provato che, viceversa, un N composto viola, per ogni scelta di
r, una delle condizioni (i), (ii), o (iii). Assumiamo per assurdo il contrario,
supponiamo cioè che un qualche N composto soddisfi (i), (ii) e (iii) insieme
a r. Poniamo per semplicità
l= l Vr log2 NJ, m = periodo di N modulo r
(dunque m > log~ N). Sia p un fattore primo di N. Da (i), N non è potenza
di p - osservazione che avremo modo di sfruttare più tardi -; da (iii) si ha
che, per ogni a :S l,
(x + a)N == x N + a (mod p, xT - 1)
e cioè che
x T -1 divide (x + a)N - (x N + a) modulo p tra i polinomi a coefficienti
nel campo Zp[x].
4.7 AKS: l'Algoritmo di Agrawal-Kayal-Saxena 119

Da (ii), p > r e quindi (p,r) = 1 e pT-l == 1 (modr). Allora, per il corollario


3.10.2 ci sono r radici r-me di 1 in qualche ampliamento finito di Zp (si veda
in particolare l'esempio 2 in 3.10.3). Fissiamo una radice primitiva r-ma v di
r su Zp; h(x) E Zp[x] definisca il suo polinomio minimo su Zp (per semplicità
indichiamo qui alla stessa maniera un numero intero e la sua immagine in
Zp, semmai riservandoci di chiarire caso per caso se ci riferiamo a Z o a Zp;
in modo analogo procediamo con i polinomi in Z[x] e con le loro proiezioni
modulo p). Ampliamo adesso Zp con v e formiamo F = Zp(v): quindi, se t è il
grado di h(x), F è isomorfo a F p'. Come già notato, v T = 1 in F e anzi v ha
periodo r in F. Ogni polinomio g(x) E Z[x] definisce un elemento g(v) E F,
e due polinomi g(x),g'(x) E Z[x] determinano lo stesso elemento g(v) = g'(v)
se e solo se g(x) == g'(x) (modp, h(x)). Ci interessa il caso dei polinomi della
forma
g(x) = II
(x + a)k a, ka E N
a5}

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.

Altrimenti 0= (v+a)N = v N +a (per (iii)), dunque v N = -a = v in F, e v ha


periodo moltiplicativo che divide N-L Ma questo periodo è proprio r, quindi
N == 1 (modr), e questo è assurdo, visto che N ha periodo m > log~ N > 2
modulo r.
A questo punto è un facile esercizio di Algebra Astratta provare che gli ele-
menti ITa<l(v + a)ka formano al variare degli esponenti ka un sottogruppo G
del gruppo finito F*, per la precisione quello generato da v, v + 1, ... , v + l.
Inoltre, G è ciclico, così come F*, dunque c'è un opportuno polinomio go(x)
in Z[x] tale che go(v) è capace di generare G tramite le sue potenze.
A questo punto la dimostrazione procede studiando G, stabilendo due limi-
tazioni diverse, tra loro contrastanti, dell'ordine IGI di G e arrivando in tal
modo alla contraddizione desiderata.
Prima stima di IGI. Osserviamo che, per ogni polinomio g(x) E Z, g(X)N ==
g(x N ) (modp, x T-1) (esercizio: si usi (iii)). Sia allora S l'insieme degli interi
positivi k tali che

g(X)k == g(xk) (modp, x T - 1) per ogni g(x) E Z.

Abbiamo appena visto che N E S. Anche p è in S: infatti, siccome p è primo,


segue dal Piccolo Teorema di Fermat che (x + a)P == x P + a (mod p) per ogni
intero a primo con p; se poi pia, la stessa conclusione è ovvia.
Ecco altre proprietà di S, presentate in forma di esercizio.
Esercizio 4.7.3
120 4 Il Problema della Primalità

(a) S è chiuso rispetto al prodotto: se k, k' E S, anche k . k' è in S.


(b) Siano k, k' interi tra loro congrui modulo r. Allora xk == x k' (modx T -1).
(Suggerimento: poniamo per semplicità k ~ k'; per ipotesi k - k' = qr
è multiplo di r; segue xk - x k' = x k' (x k- k' - 1) = x k' (x qT - 1); si noti
adesso che x T - 1 divide x qT - 1).
(c) Siano k, k' E S interi congrui modulo r e sia g(x) E Z. Allora g(x)k ==
g(x)k' (modp, x T - 1).
(Suggerimento: da (b), xk == x k' (modx T -1), dunque xk e x k' coincidono
anche (modp,x T -1). Dalla definizione di S, g(x)k == g(xk) (modp,x T -
1), g(x)k' == g(x k') (modp, x T - 1). Ma xk == x k' (modp, x T - 1) implica
g(xk) == g(x k') (modp,x T -1)).
(d) Siano ancora k, k' E S congrui modulo r. Allora k == k' (mod IGI).
(Suggerimento: conviene applicare (c) al polinomio go(x) E Z che definisce
il generatore go(v) di G. Deduciamo allora go(v)k = go(v)k', dunque, per
k ~ k', go(v)k-k' = 1 in G. Ma go(v) ha periodo IGI, perciò IGI divide
k - k').
Ciò premesso, consideriamo tra gli interi i prodotti N i . pJ con i, j E No Tutti
appartengono a S perché N,p E S e vale (a). Inoltre, per (i,j) :I (i',j'), è
N i . pJ :I N i' . pJ' perché N non è potenza di p e 1 non è potenza né di N
né di p. Da (ii) N (e di conseguenza p) è primo con r; altrettanto vale per
tutti i prodotti Ni . pJ, che determinano quindi elementi invertibili modulo
r. Sia s ~ r il numero di questi elementi distinti modulo r. Le coppie (i, j)
con O ~ i, j ~ l y'sJ sono più di s, quindi possiamo trovarne due distinte
(i,j) :I (i',j') tali che

N i . pJ == N i ' . pJ' (modr).


Da (d), Ni . pJ e Ni' . pJ' sono congrui anche modulo IGI, dunque IGI divide
Ni . pJ - Ni' . pJ'. Ma Ni . pJ :I Ni' . pJ' perché (i,j) :I (i',j'), quindi

In conclusione IGI < N 2 Lv'sJ. Ma possiamo migliorare ulteriormente questa


limitazione e arrivare addirittura ad affermare

Vediamo perché.
Lemma 4.7.4 Siano k,k' naturali tra loro congrui modulo Nm-l. Se k E S,
anche k' E S.

Dimostrazione del lemma. Siccome r divide N m -1 e k == k' (mod N m -1),


si ha che r divide k - k' e quindi da (b) xk == x k' (modx T - 1), ed anzi xk ==
x k' (modp, x T -1). Sia ora g(x) E Z, sappiamo che g(xk) == g(x)k (modp, x T -
1) perché k ES, e vogliamo mostrare che altrettanto vale per k'. Da x k ' ==
4.7 AKS: l'Algoritmo di Agrawal-Kayal-Saxena 121

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

Adesso applichiamo il lemma appena dimostrato al caso in cui

dove 'P è la funzione di Eulero. Le condizioni del lemma valgono: infatti,


siccome plN, p è primo con N m - 1 e quindi pcp(Nm-l) == 1 (modN m - 1);
moltiplicando per !j; otteniamo allora

Osserviamo poi che lipcp(Nm-l)


p
= Npcp(Nm-l)-l è in S. Dal lemma 4.7.4
ricaviamo che !j; è in S. Ripetendo allora per !j;, p le argomentazioni sopra
svolte a proposito di N, p, otteniamo stavolta

IGI < (PN) lv'sJ .plv'sJ = Nlv'sJ,


cioè IGI < Nlv'sJ come annunciato.
Seconda stima di IGI. Adesso proviamo per altra via che IGI 2: Nlv'sJ,
ricavando così la contraddizione cercata. Partiamo ancora con un lemma
generale.
Lemma 4.7.5 Siano g(x),g'(x) E Z di grado < s. Se g(x) == g'(x) (mod
p,h(x)) (cioè g(v) = g'(v)), allora g(x) == g'(x) (modp).

Dimostrazione del lemma. Consideriamo il polinomio g(x) - g'(x). Per


ipotesi, v lo annulla in F. In realtà, per ogni k E S, v k è radice di 9 - g'.
Infatti, per k ES,

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à

Gli elementi k di S includono anche i prodotti N i . pJ e, tra questi, quegli s


elementi distinti invertibili modulo r. Allora g(x) - g'(x) ha ~ s radici in F.
Ma g(x) - g'(x) è nullo o ha grado < s in Z[x] e dunque in Zp[x]. Dunque
g(x) - g'(x) è nullo in Zp; vale quindi in Z[x]
g(x) == g' (x) (modp).
D
Tra gli s elementi inverti bili modulo r che derivano da prodotti N i . pJ stanno
anche quelli determinati dalle m potenze distinte 1, N, N 2, ... , N m - 1 di N
modulo r. Quindi
s ~ m > log~ N.
Allora

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

che ha grado < l Vs log2 N J < s e definisce un elemento gT (v) E G perché


ogni a E T soddisfa a < l; gT(X) corrisponde quindi alle ipotesi del lemma
4.7.5. I polinomi così ottenuti sono
2lv'sJlog2 N+l _ 1 > 2lv'slog2 NJ > Nlv'sJ.
- -
Per T = T', gT(X) e gTI(X) non possono essere congrui modulo p. Dal lemma
4.7.5 segue che i polinomi gT(X) definiscono elementi distinti in G. Dunque

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

Esercizio 4.8.1 Sia N > 2 un primo. Si ricordi che ZN è un campo e si fissi


un polinomio monico a coefficienti interi f(x) di grado d irriducibile modulo
N. Si provi che esiste un polinomio g(x) E Z[x] che soddisfa
(a) g(x)N d - l == 1 (modN,f(x))
e, in riferimento ad un qualunque intero d' > 1 che divide N d - 1,
Nd_l
(b) per ogni fattore primo q di d', g(x)-q- -1 è invertibile modulo N,f(x).
(Suggerimento. Si costruisca l'ampliamento semplice F = ZN(V) di ZN tra-
mite una radice v di f(x) modulo N, si ricordi che Wl = Nd e che il gruppo
moltiplicativo F* è ciclico e ha, ovviamente, ordine Nd - 1. Si fissi conse-
guentemente un polinomio g(x) a coefficienti interi tale che g(v) genera F*.
Si osservi che g(v) ha periodo N d - 1 in F*. Si deducano (a) e (b).)

Sulla base di queste osservazioni, consideriamo un intero dispari N > 2 e


un polinomio monico f (x) a coefficienti interi di grado d. Il procedimento di
Bernstein-Berriz beitia prevede di fissare
• un altro polinomio a coefficienti interi g(x),
• un intero d' > 1 tale che d'IN d -1 e d' > (2dlogN)2
per cui valgano (a) e (b). Si prova allora:

Teorema 4.8.2 (Bernstein-Berrizbeitia) Siano N, f(x), g(x), d, d' come


appena descritto, valgano in particolare (a) e (b). Allora N è primo se e solo
se
(1) N non è una potenza perfetta,
(2) (y _1)N d == yN d -1 (modN,f(x),yd' - g(x)) in Z[x,y].

È 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

da Lenstra e Pomerance fanno riferimento a idee di Gauss per la costruzione


dei poligoni regolari di n lati.

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à

lavoro di Carmichael relativo agli pseudoprimi è [14]. L'infinità degli pseudo-


primi di Carmichael è provata in [4]. Un'altra prova che l'insieme dei primi
sta in NP è in [54]. L'algoritmo di Solovay-Strassen fu proposto in [70]. Una
trattazione del teorema di Sylow (usato nella dimostrazione del teorema 4.5.3)
è in [36], ad esempio. L'idea dell'algoritmo di Miller-Rabin nasce da [49] e si
sviluppa in [55]. A proposito di altri algoritmi di primalità citati nel corso
del capitolo, rimandiamo a [2] per quello di Adleman-Huang, a [3] per quello
di Adleman-Pomerance-Rumely, a [18] per quello di Cohen-Lenstra, e final-
mente a [31] per quello di Goldwasser-Kilian. La computazione quantistica è
introdotta, ad esempio, in [71]; per l'algoritmo quantistico di Shor si vedano
[65], [66]. Arriviamo finalmente ad AKS. L'ultima versione dell'articolo di
Agrawal, Kayal e Saxena si trova in [1]. [8] e il più recente [33] sono articoli
espositivi che introducono e discutono l'algoritmo. L'articolo di Fouvry, citato
nella nostra esposizione di AK S è [28]. I più recenti sviluppi segnalati a fine
capitolo si trovano in vari articoli [9], [42] e altri ancora non pubblicati: [33]
ne dà ampio resoconto. Un algoritmo per riconoscere le potenze di interi è
discusso in [7] e [lO].
5

Il Problema della Fattorizzazione

5.1 Introduzione

Nel precedente capitolo abbiamo discusso gli algoritmi di primalità. Adesso


affrontiamo quelli che riguardano la fattorizzazione. Abbiamo già osservato
come quest'ultimo problema sia da ritenersi più complicato: infatti è possibile
stabilire che un numero N è composto senza ottenere alcuna informazione sulla
sua decomposizione in fattori primi. Del resto, già nel capitolo 1 abbiamo
avuto modo di osservare come talora i numeri di Fermat siano riconosciuti
come composti senza che sia ancora noto alcun loro divisore proprio. La stessa
paradossale situazione si manifesta tra i numeri di Mersenne, come il lettore
può facilmente controllare visitando il sito http://www.mersenne.org.
Vedremo in questo capitolo che, allo stato attuale delle conoscenze, i metodi
conosciuti per la fattorizzazione sono effettivamente più lenti di quelli di pri-
malità. Questa differenza non è cosa da poco, è anzi il fondamento di alcune
procedure crittografiche di largo impiego e alta sicurezza, quali il sistema RSA
che tratteremo nel prossimo capitolo. È anche da dire che, ove i calcolatori
quantistici fossero applicabili nella pratica, l'algoritmo quantistico di Shor an-
nullerebbe questa differenza tra primalità e fattorizzazione, insieme alle sue
conseguenze.
Consideriamo comunque un intero dispari N> 2, come nel capitolo preceden-
te. Già conosciamo algoritmi rapidi per verificare se N è composto oppure no.
Come già sottolineato, può capitare che in questi procedimenti la risposta N
COMPOSTO, pur assicurando l'esistenza di un divisore proprio d di N, non
fornisca esplicitamente un tale d e dunque non dia informazioni dirette sulla
fattorizzazione di N. Cerchiamo allora algoritmi per il seguente:
Problema. Per N composto dispari, determinare un divisore d di N tale che
1 < d < N.
U n simile procedimento, applicato, dopo N, a d ed al quoziente .Jt
e così via,
fornisce, in definitiva e almeno in linea di principio, la decomposizione in fat-
tori primi di N. Di più, il numero delle eventuali iter azioni del procedimento
128 5 Il Problema della Fattorizzazione

necessarie per completare la fattorizzazione si può limitare polinomialmente


rispetto a [og2 N (come è facile controllare), dunque, se si trova un algorit-
mo rapido che determina d da N, se ne deduce un metodo veloce anche per
decomporre N in fattori primi. Il capitolo sarà allora dedicato a presentare al-
cuni algoritmi per la risoluzione del problema sopra enunciato ed a discutere,
finalmente, l'efficienza di queste procedure. Nel dettaglio, descriveremo due
metodi relativamente elementari dovuti a Pollard; poi un altro procedimento
basato su un approccio classico e su un'idea già nota a Fermat (conseguen-
temente denominato "fattorizzazione alla Fermat"); infine, un algoritmo per
certi versi rivoluzionario e innovativo di H. Lenstra Jr., che inaugura l'uso del-
le curve ellittiche nella fattorizzazione. Un breve panorama di altri possibili
approcci è fornito nel paragrafo finale.

5.2 Il Metodo p - l

Cominciamo con un procedimento molto semplice, dovuto a Pollard. Sia N


il nostro numero composto dispari. Ogni fattore primo p di N è, ovviamente,
dispari, e quindi il suo predecessore p-l è divisibile per 2. Assumiamo poi
che p-l sia prodotto di fattori primi tra loro distinti e "piccoli", ad esempio
~ s dove s è un intero prefissato. Allora p-l divide s! e quindi possiamo
dedurre dal Piccolo Teorema di Fermat che, per ogni intero a primo con p (ad
esempio per a = 2) vale la congruenza

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).

Esempio 5.2.1 Vediamo come il metodo rivela la fattorizzazione di N = 91:


ovviamente il procedimento si applica in genere a valori ben più grandi di 91,
il caso di 91 serve solo per illustrarlo. Scegliamo s = 3 (così s! = 6), a = 2.
Allora 26 - 1 = 63, (63, 91) = 7. Si conferma in questo modo che 7 è divisore
di 91, e si conclude facilmente 91 = 7 ·13. Si noti che la scelta s = 5 (e quindi
s! = 120), a = 2 non sarebbe altrettanto fortunata, infatti 2120 == 1 (mod91),
e quindi (2 120 - 1, 91) non rivela alcun divisore proprio di 91.

5.3 Il Metodo p

Il Metodo p, ancora dovuto a Pollard, considera il composto dispari N e ne


cerca un divisore proprio d all'interno di sequenze predefinite di interi, ad
esempio quelle generate da
• un intero xo,
• una funzione polinomiale f da Z a Z
ponendo

(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.

Esempio 5.3.1 Supponiamo ancora di considerare N = 91 e di sapere già


che 91 è composto. Scegliamo

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).

Sulla base di queste osservazioni, possiamo allora organizzare il seguente


raffinamento della precedente strategia.
Metodo p (Pollard) Per ogni k come sopra, cerchiamo il naturale h tale che
2h :S k < 2h +1 (in altre parole, k ha lunghezza h + 1 in base 2) e consideriamo
j = 2h - 1. Calcoliamo d = (Xj - Xk, N). Se d # 1, N, siamo a posto.
Altrimenti passiamo a k + 1.
Ricordiamo per chiarezza che:
• k = 1 ha lunghezza 1 in base 2, dunque corrisponde ad h = 0, j = 0,
5.3 Il Metodo p 131

• k = 2, 3 (dunque 2 :S k < 4) hanno lunghezza 2 in base 2, dunque


corrispondono ad h = 1, j = 1,
• k = 4, 5, 6, 7 (dunque 4 :S k < 8) hanno lunghezza 3 in base 2, dunque
corrispondono ad h = 2, j = 3
e così via.
Il vantaggio del Metodo p è evidente: per ogni intero positivo k, si deve cal-
colare (Xj - Xk, N) per un solo naturale j < k.
Lo svantaggio principale consiste invece nel fatto che può capitare per questa
via di saltare proprio qualche coppiajo < ko per cui (Xjo -Xko' N) = d:l 1, N.
Supponiamo comunque che (io, k o) sia una tale coppia, e che in particolare
2h :S ko < 2h+1. Consideriamo

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

k < 2h+2 = 4· 2h :S 4ko.


Così, se la coppia (io, k o) è sfuggita, il metodo prende comunque in considera-
zione una coppia (i, k) che soddisfa k :S 4ko e, con alta probabilità, testimonia
ancora (Xj - Xk, N) :IN.

Esempio 5.3.3 Per illustrare il procedimento, ritorniamo a N = 91. Sceglia-


mo ancora Xo = 1, f(x) = x 2 + 1 per ogni intero x. Ricordiamo

Xo = 1, Xl = 2, X2 = 5, X3 = 26, X4 == 40 (mod91),
Procedendo col metodo p si ha

(Xl - Xo, N) = (1, 91) = 1,

(X2 - Xl, N) = (3, 91) = 1,


(X3 - Xl, N) = (24, 91) = 1,
(X4 - X3, N) = (14, 91) = 7;
così, con breve ritardo su k rispetto a 5.3.1, si ottiene comunque 7 I 91.

Si può comunque obiettare che il Metodo p, come già quello p - 1, si ba-


sa parzialmente sulla speranza di circostanze favorevoli e non garantisce con
sicurezza di fornire rapidamente il divisore d :I 1, N richiesto. È quindi ragio-
nevole chiedersi se una selezione appropriata di Xo e f possa favorire la ricerca
di d. Ma si vede con l'uso di argomenti probabilistici che la scelta di Xo e f
132 5 Il Problema della Fattorizzazione

può essere completamente arbitraria e neSSun vantaggio è garantito, almeno


in linea di principio, da una particolare preferenza su Xo e f. Nella pratica si
osserva che f(x) = X2 + 1 per ogni x E Z è una buona funzione di controllo,
mentre le funzioni lineari f(x) = ax + b per ogni x E Z (con a e b interi
ed a -::f- O) sono da evitare perché incapaci di produrre senza troppi ritardi la
ripetizione cercata Xj == Xk (modd).

5.4 Fattorizzazione alla Fermat

Un'altra strategia per ottenere un divisore d -::f- 1, N del nostro composto


dispari N > 2 si basa sulla seguente osservazione, già nota a Fermat.
Proposizione 5.4.1 Sia N un composto dispari. Allora è possibile esprimere

N=a·b

come prodotto di due fattori a ~ b >1 se e solo se N si rappresenta come


differenza di quadrati

con t, s naturali e t - s > 1.


Dimostrazione. Chiaramente, se N = t 2 - s2 è la differenza dei quadrati
dei due naturali t, s e t - s > 1, allora N si può decomporre nel prodotto
N = (t + s) . (t - s) dove t + s ~ t - s > 1.
Viceversa, supponiamo N = a· b con a ~ b > 1. Notiamo che a e b devono
essere dispari perché N è dispari. Dunque i due naturali a ± b sono pari e
dividendoli per 2 otteniamo due nuovi naturali at b e a;-b. Inoltre

dove a+b
2
> a-b
2
e a+b _ a-b
2 2
= b> 1
. D

In conclusione, fattorizzare N = a·b con a ~ b > 1 equivale a de comporlo nella


differenza di quadrati N = t 2 - s2 COn t - s > 1, e le formule che permettono
di passare dall'una all'altra di queste rappresentazioni SOnO

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

La ricerca è facilitata quando a e b sono molto vicini tra loro, e dunque è


lecito assumere che s = a;-b
sia molto "piccolo" e t = at b
sia molto vicino a
VN. Allora possiamo considerare i valori
t = LVNJ + 1, LVNJ + 2, ... ,
per ciascuno di essi calcolare t 2 - N e verificare se è il quadrato perfetto di
qualche naturale s. In tal caso t 2 - N = S2 implica N = t 2 - S2 = (t+s)· (t-s).
Ovviamente non è detto che a e b soddisfino la premessa di essere vicini (e
del resto a e b non sono conosciuti da chi sta cercando la fattorizzazione di
N). Thttavia, se la precedente strategia non conduce a successo in un numero
ragionevolmente breve di passi, possiamo seguire una procedura più elaborata,
ma simile: per ogni intero m > 1, considerare gli elementi
t= Lv'mNJ + 1, Lv'mNJ + 2, ... ,
e per ciascuno di essi calcolare t 2 - mN e verificare se è il quadrato perfetto
di qualche naturale s. In tal caso t 2 - mN = s2 implica mN = t 2 - s2 =
(t + s) . (t - s) e, per m abbastanza piccolo, si può ritenere che N e t + s
abbiano qualche fattore primo comune, in altre parole che (N, t + s) -::f- 1,
il che determina un divisore -::f- 1, N di N. Può anche essere che sia invece
(N, t - s) a svelare questo divisore.
Illustriamo il procedimento con un paio di esempi. Al solito, usiamo valori
di N "piccoli" e dunque facili da trattare. Il lettore deve comunque tenere
presente che questi procedimenti di fattorizzazione si applicano a numeri N
ben più grandi e ricchi di cifre di quelli che per semplicità qui consideriamo.
Esempi 5.4.2
1. Sia N = 91. Sappiamo già che 91 = 7 . 13 dove i fattori 7 e 13 sono
relativamente vicini tra loro; anzi, applicando le formule sopra descritte,
si ricava facilmente che 91 = 10 2 - 32 . Ma fingiamo di non sapere niente
di tutto questo, e procediamo considerando LVNJ + 1 = lO. Allora già al
primo tentativo troviamo che 10 2 - 91 = 9 = 32 è un quadrato perfetto.
Così abbiamo la conferma che
91 = 10 2 - 32 = (lO + 3) . (lO - 3) = 13 . 7.
2. Sia ora N = 203. È facile vedere che N = 7· 29 e quindi N = 18 2 - 11 2 .
Facciamo però finta di non saperne niente e consideriamo LVNJ + 1 = 15.
Si osserva che
• 15 2 - 203 = 22 non è un quadrato perfetto,
• 16 2 - 203 = 53 non è un quadrato perfetto,
• 172 - 203 = 86 non è un quadrato perfetto,
e il fallimento di questi tentativi potrebbe indurre a qualche scoraggiamen-
to (anche se, in realtà, basterebbe aspettare un ulteriore passo per incon-
trare la rappresentazione corretta). Potremmo allora decidere di cambiare
strada, ricorrere a m = 3, considerare mN = 609 e LV3NJ + 1 = 25 e
ottenere direttamente al primo tentativo
134 5 Il Problema della Fattorizzazione

• 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).

Descriviamo allora il nostro algoritmo.


Metodo di fattorizzazione alla Fermat È dato il composto dispari N.
1. Si fissano numeri interi arbitrari b(O), ... , b(k), si calcolano i minimi resti
assoluti dei loro quadrati modulo N e si decompongono questi minimi resti
assoluti in fattori primi (eventualmente utilizzando l'ulteriore fattore -1
quando il resto è negativo). Queste decomposizioni attingeranno i loro
5.4 Fattorizzazione alla Fermat 135

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

per opportuni naturali ai, j (i :::; k, j :::; h).


2. Si moltiplicano tra di loro membro a membro le congruenze appena
raggiunte e si ottiene

II b(i)2 == II p;i,; == II IIp;i,; == II pf'9 ai,; (modN).


i5,.k i5,.k, j5,.h j5,.h i5,.k j5,.h

Osserviamo che l'elemento a sinistra in questa congruenza è evidentemente


un quadrato (ITi<k b(i))2. Anche quello all'estrema destra lo è purché per
ogni) :::; h -

sia un numero pari e dunque si scriva come 2f3j per qualche intero f3j. In
tal caso, infatti,

II pfi~k ai,; = II p~t3; = (II p~;)2.


j5,.h j5,.h j5,.h

3. Si ha allora

i5,.k j5,.h

Siano t ed s i minimi resti assoluti modulo N di IT i 5,.k b( i), IT j 5,. h P~;


rispettivamente. Dunque

e, se verifichiamo anche t t:. ±s (mod N), abbiamo ottenuto quanto


cercato.
Osservazioni 5.4.5
a) Dobbiamo ovviamente domandarci quanto è probabile che i due valori
t ed s trovati soddisfino t t:.
±s (mod N) e non piuttosto l'alternativa
t == ±s (mod N). Ma sulla base di quanto sopra ricordato a proposito dei
quadrati modulo N, se N ammette almeno 2 fattori primi, allora ogni
quadrato modulo N ammette almeno 4 radici quadrate, e dunque s ha
probabilità al più ~ di coincidere con ±t modulo N.
b) Il procedimento appena descritto si basa in modo decisivo sulla possibilità
che L:i<k ai,j sia divisibile per 2 per ogni j :::; h. Per favorire questa
situazione la pratica suggerisce di ricorrere, se possibile, a
- numeri b(O), ... , b(k) vicini a vmN con m intero positivo piccolo,
136 5 Il Problema della Fattorizzazione

- B composto da pochi numeri primi, possibilmente tutti piccoli (insieme


eventualmente a -1).
Esempi 5.4.6
1. Sia dapprima N = 2701. Osserviamo che v'2701 si trova tra 51 e 52,
dunque 52 e 53 sono abbastanza "vicini" a v'2701. I minimi resti assoluti
di 52 2 e 53 2 sono rispettivamente
52 2 == 3 (mod2701),
53 2 == 108 == 22 .3 3 (mod2701).
Moltiplicando le due congruenze otteniamo
52 2 .53 2 == 22 .3 4 (mod2701),
in cui gli esponenti al secondo membro sono tutti pari e per la precisione
si ha
/30 = 1, /31 = 2.
Possiamo allora fissare
t = 52·53 == 55 (mod2701), s == 21 .3 2 == 18 (mod2701).
Ovviamente 55'1'- ±18 (mod2701). Si ricava poi (2701, 55 -18) = 37, anzi
55 - 18 = 37 divide 2701.
2. Sia ora N = 1037. Stavolta ci riferiamo agli interi 29, 32 e 33, che risultano
"vicini" a v'1037, compresa infatti tra 32 e 33. I minimi resti assoluti
modulo 1037 dei loro quadrati sono
29 2 == -196 == (-1) .2 2 .72 (mod 1037),
32 2 == (-1) . 13 (modl037),
33 2 == 52 == 22 . 13 (mod 1037).
Poniamo allora B = {-I, 2, 7, 13} e notiamo
29 2 .32 2 .33 2 == (_1)2.2 4 .72 .13 2 (mod 1037).
Di nuovo, la condizione chiave sulla parità degli esponenti a destra è
soddisfatta per
/30 = 1, /31 = 2, /32 = /33 = 1.
Scegliamo allora
t = 29·32·33 == -486 (mod 1037),
s == (_1)1.2 2 .71 .13 1 == -364 (mod1037)
e notiamo 486 'l'- ±364 (mod 1037), (1037,486 - 364) = 61.
Naturalmente gli esempi precedenti corrispondono a casi fortunati, che ar-
rivano rapidamente al lieto fine. Ma non sempre le cose scorrono così facil-
mente, come il lettore potrà verificare direttamente azzardando qualche altra
applicazione dell'algoritmo.
5.5 Fattorizzazione e Curve Ellittiche 137

5.5 Fattorizzazione e Curve Ellittiche

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

con a, 13 interi. L'equazione si può leggere allora sia su Z - dunque su ij -, sia


su Zp per ogni p primo.

1) Sappiamo che su ij l'espressione (*) definisce una curva ellittica purché


4a 3 + 2713 2 -::f- O - cioè x 3 + ax + 13 non abbia radici multiple in ij -.
Indichiamo con E(ij) questa curva ellittica.
2) (*) definisce anche una curva ellittica in Zp per ogni primo p divisore di
un fissato N (magari p -::f- 2,3) purché 4a 3 + 2713 2 sia diverso da O modulo
ogni tale p e quindi, in definitiva, purché (4a 3 + 2713 2 , N) = 1. In tal caso
indichiamo con E(Zp) la curva ellittica di equazione (*) su Zp.
138 5 Il Problema della Fattorizzazione

Indicheremo nel seguito con O il punto all'infinito di E(ij) e con Op quello di


E('L p) per ogni p.
I punti di E(ij) (escluso quello O all'infinito) sono coppie ordinate di razionali
(mn-\ rs- 1 ) con m, n, r, s interi, m, s -::f- O, (m, n) = 1, (r, s) = 1. Ciascuna di
queste coppie ha senso nei campi 'Lp al variare di p tra i divisori primi di N
(nel senso che definisce un punto di E('L p) per ogni p) purché n, s siano primi
con N e dunque invertibili in 'Lp per ogni p. Siano P, P' due punti di E(ij)
che hanno questa proprietà e non sono opposti tra loro. Sia poi p un divisore
primo di N. Ci possiamo domandare in quali casi anche la loro somma in
E(ij)
P+P',
così come è stata definita dalle formule nel paragrafo 3.12, determini un punto
diverso da quello all'infinito anche in E('L p) per ogni divisore primo p di N,
abbia cioè coordinate con denominatore primo con p. Non sorprendentemente
si verifica che questo accade se e solo se per ogni p
i punti P, P' non sono l'uno l'opposto dell'altro in nessuna delle curve
ellittiche E('L p) al variare di p tra i divisori primi di N.
Il lettore può trovare il relativo controllo in dettaglio in [37], proposizione
VI.3.1. Adesso notiamo che, per p divisore primo di N, la curva E('L p) è
finita. Di conseguenza ogni suo punto ha periodo finito. In particolare, se P
è un punto di E(ij), allora per qualche intero positivo k che divide IE('Lp)l,
vale in E('L p) che k . P = Op e cioè che P e P' = (k - 1) . P sono opposti.
Ma allora il punto k . P in E(ij) ha qualche coordinata il cui denominatore t
non è più primo con N, e possiamo sperare che questo denominatore t riveli
un divisore d -::f- 1, N di N come d = (t, N).
L'algoritmo di Lenstra tende dunque a identificare gli interi positivi k per cui
k· P ha qualche coordinata non più prima con N. Eccone i dettagli.
Algoritmo di Lenstra. Sia N composto dispari> 2. Possiamo supporre
che N non sia divisibile per 2 e per 3 (è facile verificare se lo è o no e, se
lo è, possiamo prendere d = 2 o d = 3). Assumiamo anche che N non sia
una potenza perfetta, conosciamo infatti procedure rapide che riconoscono
le potenze perfette e ne calcolano la base (si veda la relativa discussione nel
paragrafo 4.7). Scegliamo
• due interi a, (3
e calcoliamo 4a 3 + 27(32.
(i) Se (4a 3 + 27(32, N) = N, cioè se N divide 4a 3 + 27(32 e quindi 4a 3 + 27(32
O(mod p) per ogni divisore primo p di N, cambiamo subito a, (3.
=
(ii) Se (4a 3 + 27(32, N) -::f- 1, N, possiamo prendere d = (4a 3 + 27(32, N).
(iii) Se (4a 3 +27(32, N) = 1, allora y3 = x 3 +ax+ (3 definisce una curva ellittica
E('L p) in 'Lp per ogni primo p divisore di N.
Se vale (iii) scegliamo ancora
5.5 Fattorizzazione e Curve Ellittiche 139

• un punto P == (mn- 1 , rs- 1 ) su E(Q) che ammetta denominatori n, s primi


con N (e quindi generi punti su ogni curva ellittica E(71 p ) per p primo,
pIN).
Si fa poi riferimento a un intero k prodotto di potenze "piccole" di primi
''piccoli'': dunque per L, L' prefissa ti, k = IT r r hr dove r varia tra i primi :S L
e anche gli esponenti h r sono piccoli nel senso che ciascun r hr è :S L'.
Si calcola k . P = P + ... + P in E(Q) e si controlla se il risultato mantiene
~
k
ancora la proprietà di avere coordinate con denominatori primi con N. Se no,
e t è un denominatore che non rispetta la condizione, allora (N, t) è verosimil-
mente il divisore d che stiamo cercando (perché è probabile che N non divida
t). Altrimenti si scelgono nuovi interi a, (3 e eventualmente un nuovo punto
p == (mn-\ rs- 1 ) sulla relativa curva ellittica su Q.
Dunque l'algoritmo sceglie anzitutto una curva ellittica E su Q e un suo punto
P, cerca poi i possibili interi k tali che k·P = Op in E(71 p) per qualche divisore
primo p di N tra i numeri che hanno fattorizzazione

dove tanto i prImI r quanto gli esponenti k r sono piccoli (rispettivamente


minori o uguali a L, L').
Ovviamente la possibilità di successo nella ricerca di k aumenta se le restrizioni
che riguardano L, L' diventano meno rigide, e si ammettono valori più grandi
per L, L'. Ma crescere L, L' significa anche allungare i tempi di calcolo di k·P.
In questo senso, la scelta di valori piccoli di L, L' può essere più conveniente.
Valutiamo allora la probabilità che un intero k ottenuto in questo modo sod-
disfi k· P = O su qualche curva ellittica E(71 p) quando p varia tra i divisori di
N.
Si ricordi che, se vale k . P = Op in E(71 p), allora k - in quanto periodo di P
- divide IE(71 p) I, e dunque anche i fattori primi r di k - tutti :S L - dividono
IE(71 p) I. Quindi dobbiamo controllare quanto segue.
Punto chiave: per p divisore primo di N, quale è la probabilità che una curva
ellittica arbitraria E su 7l p abbia ordine lEI non divisibile per nessun primo
> L (ed anzi per nessuna potenza di primo> L')?
In tal caso, i divisori primi r di lEI sono :S L e possono fornirci un valore k
come da noi cercato. Il teorema di Hasse 3.12.6 ci torna allora utile, perché ci
dice che lEI soddisfa le limitazioni

p + 1 - 2yIP :S lEI :S p + 1 + 2y1P.


Si ottiene conseguentemente una stima attendibile del tempo di lavoro che
l'algoritmo richiede per arrivare a determinare con successo d; se N non è
divisibile né per 2 né per 3 e non è neppure potenza perfetta, tale stima è al
più
140 5 Il Problema della Fattorizzazione

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.

5.6 Riflessioni finali


Abbiamo descritto vari algoritmi di fattorizzazione non banali, anzi abbastan-
za sofisticati dal punto di vista teorico, e pur tuttavia non sicuri (visto che
si fondano spesso su situazioni contingenti e fortunate) e conseguentmente
neppure soddisfacenti dal punto di vista della rapidità. Vi è una dovizia di
altri possibili procedimenti di fattorizzazione. In altri casi, questi metodi sono
legati alla natura degli interi N da fattorizzare. Ad esempio, nel caso dei nu-
meri di Fermat N = F(n), sappiamo che i divisori primi di F(n) hanno forma
particolare
k· 2n+2 + 1,
il che facilita - almeno in linea di principio - la loro ricerca.
Alcuni procedimenti più generali e sofisticati si basano sulla teoria algebrica
dei numeri su campi quadratici, altri sulle frazioni continue. Pur tuttavia, i
metodi migliori oggi conosciuti per la fattorizzazione di un composto N (ad
eccezione del procedimento quantistico di Shor già discusso) richiedono un
numero di passi che si può restringere a
éV10g N log log N

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

2. Si fattorizzino gli stessi numeri 2639 e 2821 dell'esercizio precedente usan-


do però il metodo p (suggerimento: ci si riferisca ad esempio a Xo = 1 e
alla funzione f(x) = X2 + 1 per x E Z).
3. Si fattorizzi il numero 4633 utilizzando il metodo di Fermat (suggerimento:
si usino gli interi 67 e 68, oppure gli interi 68, 69 e 96).
4. Si utilizzi l'algoritmo di Lenstra per fattorizzare:
• 6 (utilizzando la curva ellittica E di equazione y2 = x 3 + X - 1 e il suo
punto P(1, 1));
• 36;
• 54.

Riferimenti bibliografici

I procedimenti di fattorizzazione di Pollard SOnO sviluppati in [52] e [53].


Una loro implementazione è presentata in [50]. [41] inaugura l'uso delle curve
ellittiche per la fattorizzazione degli interi. [37], così come [19], danno ampio
resoconto di questi e altri procedimenti di fattorizzazione. Si veda anche [56].
Una discussione sui tempi di lavoro dei metodi conosciuti di fattorizzazione è
in [40].
6

Ancora Crittografia

6.1 Crittografia a Chiave Pubblica


Ritorniamo finalmente al tema introdotto nel primo capitolo: la crittografia
a chiave pubblica. Ricordiamo il suo ambito di applicazione e le esigenze che
vanno conseguentemente soddisfatte.
1. Non è previsto uno scambio preventivo di chiave tra gli interlocutori; ogni
utente A, invece, ha una chiave privata, segreta e personale, e semmai
una chiave pubblica, aperta a chiunque; la seconda serve in genere per la
codifica dei messaggi da spedire ad A, la prima per la loro decodifica.
2. Conseguentemente, la decodifica deve essere un'operazione accessibile so-
lo all'utente destinatario dei messaggi, e dunque deve risultare per gli
estranei enormemente più difficile della codifica.
Per soddisfare queste richieste si ha bisogno di funzioni a senso unico, e cioè
di funzioni di cifratura che
• siano facilmente computabili (in modo che chiunque possa velocemente
criptare un messaggio per un dato utente A),
• siano invertibili (in modo da permettere la decifratura),
• ma abbiano un'inversa il cui calcolo è proibitivo in assenza di ulteriori
informazioni (quelle che costituiscono la chiave privata di A, che solo A
deve conoscere e senza la quale nessun pirata potrà infrangere in tempi
rapidi un messaggio eventualmente intercettato).
Una funzione a senso unico è quindi la base ragionevole di un efficiente sistema
di crittografia a chiave pubblica. Abbiamo però osservato che niente assicu-
ra a priori che simili funzioni esistano. Anzi, la nozione stessa di funzione a
senso unico non ha niente di matematicamente rigoroso: infatti la difficoltà
di calcolare l'inversa potrebbe essere soltanto transitoria e passeggera, legata
allo stato attuale delle conoscenze scientifiche, destinata a essere superata nel
futuro.
Abbiamo comunque sottolineato che ci sono due significativi settori, l'uno
144 6 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.

6.2 Il Logaritmo Discreto e il Criptosistema di


Diffie-Hellman

Storicamente parlando, il primo cripto sistema a chiave pubblica ad essere stato


proposto (nel 1976) è dovuto a Diffie ed Hellman: esso adopera il logaritmo,
non quello delle famigerate tavole (che riguarda i numeri reali), ma l'analoga
nozione sviluppata nel contesto degli interi (e delle congruenze tra interi) nel
paragrafo 3.8. Infatti tra i reali l'esponenziazione in una fissata base g E OC
maggiore di O e diversa da 1

x I-t gX, \::Ix E OC,

ovviamente approssimata a meno di un preassegnato grado di precisione, non


è computazionalmente più facile della operazione inversa, e cioè il calcolo del
logaritmo
Y I-t togg y, \::Iy E OC, Y > O.
6.2 Il Logaritmo Discreto e il Criptosistema di Diffie-Hellman 145

Consideriamo invece, per N numero primo molto grande, il gruppo ciclico


moltiplicativo Z~ composto dalla potenze distinte 1, g, g2, ... , gN-2 di un
opportuno g primo COn N (modulo N), oppure più in generale il gruppo
moltiplicativo F*, parimenti ciclico, di un qualunque campo finito F. In questi
ambiti la situazione cambia. Infatti, fissato g,
• esistono, come sappiamo, metodi rapidi di calcolo di gX (modulo N) per
ogni intero x,
• ma, come anticipato nel paragrafo 3.8, nOn SOnO attualmente noti metodi
altrettanto ragionevoli per recuperare da una data potenza y di g un espo-
nente naturale x < N-I per cui y coincide con gX (quello che si chiama
il logaritmo discreto di y in base g).
Anzi, la questione di trovare algoritmi efficienti per il calcolo del logaritmo
discreto è conosciuta come il Problema del logaritmo discreto, e pare molto
complessa e delicata: esistono semmai procedimenti quantistici rapidi, ancora
dovuti a Shor (il lettore interessato può far riferimento a [66]), ma già abbia-
mo descritto le complicazioni pratiche di attuazione di tali metodi.
Diffie e Hellman sfruttarono nel 1976 la difficoltà di calcolo del logaritmo di-
screto per costruire il primo cripto sistema a chiave pubblica: in esso la funzione
a senso unico è proprio la esponenziazione in base g modulo un opportuno N.
Infatti essa è inverti bile e facile da computare, ma ha una funzione inversa
(il logaritmo discreto) proibitiva da calcolare, almeno allo stato attuale del-
le COnOscenze. Vediamo allora una esposizione (molto elementare) di questo
cri ptosistema.
Criptosistema di Diffie-Hellman
1. A e B concordano anzitutto una potenza q di un primo, il corrispondente
campo finito F q e un generatore g del gruppo ciclico F~. Essi fanno parte
delle informazioni pubbliche del sistema.
2. A questo punto A si sceglie un intero positivo nA (che si può supporre
< q-I) e calcola gnA:
• gn A completa la chiave pubblica di A, da diffondere tra tutti gli altri
utenti,
• nA rappresenta invece la sua chiave privata.
3. Supponiamo adesso che A e B vogliano mettersi in corrispondenza; anche
B ha scelto la propria chiave privata nB e divulgato la sua chiave pubblica
gnB. Tanto A quanto B possono a questo punto calcolare
gnA ·nB = (gnA) nB = (gnB) nA :

B dalla sua chiave segreta nB e dalla chiave pubblica gn A di A; A, invece,


dalla sua chiave segreta nA e dalla chiave pubblica gn B di B. Allora A
e B possono usare l'elemento gnA·n B come chiave comune per cifrare e
decifrare i loro messaggi (vedremo tra poche righe in che modo).
La sicurezza del sistema rispetto a possibili incursioni di pirati si basa, come
detto, sulla difficoltà del problema del logaritmo discreto. Infatti, ammettiamo
146 6 Ancora Crittografia

che un malintenzionato C intercetti un messaggio cifrato. Per decriptarlo in


tempi rapidi, C ha bisogno di COnOscere gn A .ns ; ma le uniche informazioni di
cui dispone a questo proposito SOnO le chiavi pubbliche di A e H, dunque gn A
e gns. Il problema è dunque quello di
(*) recuperare gn A ·ns da gn A e gns.
Una semplice strategia per riuscirci è quella di calcolare gli esponenti nA e
nE, cioè 2 logaritmi discreti, poi moltiplicarli e assegnare il prodotto nA . nE
come esponente a g. Naturalmente si possono seguire altre idee e tentare altri
procedimenti. Ma si concorda che, allo stato attuale delle conoscenze, (*) è
computazionalmente intrattabile, e comunque non più facile del problema del
logaritmo discreto: questa ipotesi di lavoro è comunemente conosciuta come
Ipotesi di Diffie-Hellman.
Aggiungiamo che il sistema di Diffie-Hellman ha (ovviamente) maggiori ga-
ranzie di sicurezza quando il valore scelto per q è molto grande.
Per concludere, resta da chiarire come l'elemento gn A ·ns concordato da A e
H in F~, più in generale un elemento arbitrario di un campo finito F~, riesca
da solo a generare un criptosistema comune tra A e H. Ci sono varie possibi-
li strategie a questo riguardo. Ad esempio possiamo riferirei ai cripto sistemi
classici del Capitolo 1, come quelli che maneggiano coppie di digrafi, ciascuno
composto da 2 lettere scelte in un alfabeto di N elementi: si ha dunque a che
fare COn vettori (~) COn x e y interi compresi tra Oe N 2 -1. Sappiamo allora

che una possibile codifica (tradizionale) di (~) tramite la versione cifrata

( Xy',) avviene allora nel modo descritto dalla seguente formula

dove a, b, c, d, e, i sono interi prefissati tra O e N 2 - 1 e ad - be è primo con


N 2 (dunque con N). Vediamo adesso come, per N e q opportuni, un elemento
di F~ possa determinare a, b, c, d, e, f.
Notiamo anzitutto che questi 6 elementi a, b, c, d, e, i SOnO univocamente
definiti come coefficienti della decomposizione in base N 2 di un opportuno
naturale M < N 12

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

appena menzionato q = p e s = 1). Se però fissiamo una base B di F q su Zp


(intendendo F q, appunto, come spazio vettoriale sul sottocampo Zp), all'intero
M, decomposto in base p secondo le potenze 1, p, ... , ps-l di p con coefficienti
tra O e p-I, possiamo far corrispondere l'elemento di F q che ha le stesse
coordinate modulo p rispetto alla base B. Questa corrispondenza è biunivoca
ed effettiva. Così possiamo determinare a, b, c, d, e, f (ed in definitiva la
chiave di codifica del nostro criptosistema) scegliendo un elemento del campo
F q e tramite esso, con la corrispondenza ora introdotta, il naturale M < q.

6.3 Doppi Lucchetti


Sulla difficoltà di calcolare il logaritmo discreto si basa anche il Criptosistema
di Massey-Omura, che fu proposto nel 1983 e riproduce nell'ambito numerico il
modello del doppio lucchetto, quello in cui gli utenti A e B cifrano e decifrano
l'uno dopo l'altro, adoperando ciascuno una propria chiave privata.
Criptosistema di Massey-Omura
1. Si fissa anzitutto un primo (grande) q e si considera il campo Zq.
2. L'utente A sceglie un numero nA con 1 < nA < q-I e nA inverti bile
modulo q-I, calcola poi l'inverso n:.:;.l di nA modulo q-I: nA e ni
costituiranno la chiave privata di A. Si noti che, per il Piccolo Teorema
di Fermat, ogni intero a soddisfa
-1
a nA ·nA == a (modq)
perché nA . ni == 1 (modq - 1). B si comporta ovviamente allo stesso
modo, scegliendo il proprio nE e calcolando n"B 1.
3. La corrispondenza tra B e A avviene come segue. Sia a il messaggio che
B vuole inviare ad A.
• B spedisce ad A il testo a cifrato con la propria chiave privata, dunque
come a na modulo q;
• A cifra ulteriormente con la sua chiave privata e ottiene modulo q
(ana)n A cioè a na · nA e invia il risultato a B·
" ,
• B inizia a decifrare (a na · nA )ni3 1 == anA (modq) e rispedisce il risultato
adA;
• A termina di decifrare elevando alla n i modulo q e recuperando
finalmente a.

Così il Criptosistema di Massey-Omura riproduce esattamente il meccanismo


del doppio lucchetto: nA e n:.:;.l rappresentano la chiave con cui A chiude e
apre lo scrigno, ed altrettanto vale per B. Si noti che le procedure che A esegue
(elevare alla nA, o alla ni) sono indipendenti da quelle di B che usa invece
gli esponenti nE e n"B 1. In altre parole si ha
148 6 Ancora Crittografia

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.

6.4 Il Problema dello Zaino


Come già anticipato nel Capitolo 1, altri cripto sistemi a chiave pubblica sono
ispirati ai così detti problemi N P-completi, e cioè a problemi, spesso di na-
tura combinatoria, e ancor più spesso di facile presentazione, che si trovano
6.4 Il Problema dello Zaino 149

nella seguente condizione: ammettono un algoritmo rapido per la verifica delle


soluzioni - dunque stanno in N P -, non si sa se consentono un procedimento
rapido per la ricerca delle soluzioni - cioè se stanno in P -, si sa invece che,
parlando alla buona, se stessero in P, costringerebbero N P e P a coincidere.
Un semplice esempio di problema NP-completo è costituito dal Problema del-
lo Zaino, che si può formulare come segue. Sono dati uno zaino con un volume
intero prefissato V, e k oggetti di volume - ancora intero - Va, ... , Vk-l rispet-
tivamente; il problema è stabilire se è possibile scegliere alcuni dei k oggetti in
modo che essi riempiano esattamente lo zaino, cioè la somma dei loro volumi
eguagli V. Ci sono chiari algoritmi per rispondere, ad esempio procedendo per
tentativi, considerando cioè ogni possibile sequenza di oggetti e controllando
se occupa completamente o no lo zaino: ma questo metodo, ancora accessibile
se k è piccolo e gli oggetti sono pochi, diventa impraticabile quando k diventa
enormemente grande. In realtà non si conosce nessun algoritmo polinomiale di
soluzione del problema. In compenso, esistono metodi rapidissimi di verifica:
infatti, se conosciamo la soluzione, è semplice controllarla, basta sommare i
volumi coinvolti e verificare che il risultato è V, riempire in altre parole lo
zaino con gli oggetti scelti e realizzare, appunto, che essi lo occupano senza
lasciare spazi vuoti e senza farlo scoppiare. Di più, si sa che il problema dello
zaino è, appunto, N P-completo: se l'algoritmo rapido di soluzione si trovasse,
potremmo dedurne P = NP.
Si capisce facilmente che una simile situazione si presta a definire funzioni
a senso unico. In effetti, vari criptosistemi a chiave pubblica si fondano sul
problema dello zaino. Ne descriviamo il più antico, quello proposto da Merkle
e Hellman nel 1978. Anzitutto rienunciamo il problema dello zaino in versione
più asciutta e matematica.
Problema dello Zaino. Dati i naturali k, V, Va, ... , Vk-l -::f- O, determinare,
se possibile, aa, ... , ak-l E {O, I} tali che V = 2:i<k aiVi·
Gli oggetti che riempiono lo zaino corrispondono in questa versione del pro-
blema agli indici i < k per cui ai = l.
Una più semplice variante della questione è quella conosciuta come Problema
Supercrescente dello Zaino, e richiede sequenze Va, ... , Vk-l tali che, per ogni
i < k, Vi > 2: j <i Vj. Ad esempio, 2, 3, 7, 15,31 è una sequenza supercrescente
perché 2 < 3, 2 + 3 < 7, 2 + 3 + 7 < 15 e 2 + 3 + 7 + 15 < 31, mentre 2,
5, 4 non lo è perché 2 + 5 -I- 4. Neppure 2,5,6, che pure è crescente, riesce
supercrescente, visto che 2 + 5 -I- 6.
È facile trovare algoritmi rapidi di soluzione per il Problema Supercrescente
dello Zaino: fissati k e Vela sequenza supercrescente Va, ... , Vk-l, si per-
corre Va, ... , Vk-l a ritroso da Vk-l fino ad incontrare il primo indice i per
cui Vi :S V (se i non esiste, non c'è soluzione): i va posto obbligatoriamente
nello zaino, perché gli oggetti di indice maggiore sono più grandi dell'intero
V e quelli di indice minore, anche sommati insieme, non riescono neppure a
raggiungere il volume Vi e dunque a riempire da soli lo zaino. Dunque, se c'è
soluzione, i vi partecipa; in altre parole, dobbiamo assumere ai = 1 ed aj = °
150 6 Ancora Crittografia

per i < j < k. Adesso sostituiamo V con V - Vi; se V - Vi = O allora ai = 1,


aj = O per ogni O :::; j < k con j -:j:. i costituisce la soluzione del problema.
Altrimenti ripetiamo il procedimento guardando alla sequenza supercrescente
Va, ... , Vi-l. Applicando questo metodo, recuperiamo alla fine una soluzione
del problema, se essa esiste. Anzi, si può osservare che la soluzione, se c'è, è
anche unica.
Esempio 6.4.1 Consideriamo V = 24 e la sequenza supercrescente di sopra
2 < 3 < 7 < 15 < 31. Siccome 31 > 24 > 15, si comincia col porre a4 = O ed
a3 = 1. A questo punto si calcola 24 - 15 = 9 e si nota 7 < 9, deducendone
a2 = 1. Da 9 - 7 = 2 < 3 si ottiene al = O e aa = 1, riempiendo finalmente lo
zaino.
In conclusione, il Problema Supercrescente dello Zaino ha un algoritmo rapido
di soluzione, mentre non si conosce nessuna procedura veloce per il Proble-
ma generale dello Zaino (ed anzi si paventa che non ci sia). Il Criptosistema
di Merkle-Hellman cerca di sfruttare questa situazione nel modo che adesso
descriviamo. Anzitutto possiamo convenire di rappresentare le unità di mes-
saggio con sequenze (aa, ... , ak-d di O e 1. La cosa non è difficile, basta
scrivere le lettere dell'alfabeto (e cioè gli interi positivi:::; N, dove N vale al
solito 26, o 27, o altro ancora) in notazione binaria, e dunque come sequenze
ordinate finite di O e 1; possiamo supporre che queste sequenze abbiano co-
mune lunghezza k (eventualmente premettendo qualche O alle sequenze più
corte). Ad esempio, se N = 27, possiamo rappresentare ogni simbolo dell'al-
fabeto come una sequenza ordinata di 5 cifre tra O e 1, da O che si rappresenta
00000 a 26 che è invece 11010. Ciò premesso, si procede come segue.
Criptosistema di Merkle-Hellman
1. L'utente A sceglie anzitutto
• una sequenza supercrescente (va, ... , vk-d,
• un intero m > Ei<k Vi,
• un intero positivo a primo con m
ad esempio tramite la seguente procedura. Si prendono k+ 1 interi positivi
arbitrari Za, ... , Zk-l, Zk e si computano

Va = Za, VI = Va + Zl, Vi = L Vj + Zi per ogni i < k


j<i

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

V == bW == Laibwi == Laivi (modm), O:::; V < m.


i<k i<k

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.

6.5 Il Criptosistema RSA

In effetti, il criptosistema a chiave pubblica più conosciuto ed usato è quello


chiamato RSA dalle iniziali dei suoi inventori Rivest, Shamir e Adleman. Esso
fu proposto nel 1978 e la sua funzione a senso unico è il prodotto. La cosa può
apparire stupefacente: che cosa c'è di difficile a calcolare le moltiplicazioni o
le loro operazioni inverse oggi, negli anni duemila, con l'aiuto dei calcolatori?
Eppure, come già sappiamo, allo stato attuale delle conoscenze,
152 6 Ancora Crittografia

• moltiplicare due primi distinti p, q ottenendo il prodotto N = p . q


è enormemente più rapido che
• decomporre in fattori primi N = p . q e dunque recuperare p e q da N
(almeno quando i primi coinvolti sono molto grandi). Per parafrasare le parole
di un grande esperto del settore (H. W. Lenstra Jr.),
"supponiamo di avere due primi grandi p :I q, di perderli in un pa-
gliaio e di restare in possesso solo del loro prodotto N = p . q: è una
sconfitta della scienza il dover ammettere che la maniera più efficace
oggi disponibile per ritrovare p e q è quella di cercare nel pagliaio".
Infatti, pagliai o non pagliai, i metodi più rapidi e sofisticati di decomposi-
zione in fattori primi oggi conosciuti richiedono tempi comunque esponenziali
rispetto alla lunghezza dell'input N, e dunque proibitivi secondo ogni ragio-
nevole parametro di valutazione della complessità degli algoritmi.
Vediamo allora i dettagli di RSA. Lavoriamo su un alfabeto che ha n simboli e
conveniamo poi di trasmettere messaggi a singole lettere, o anche come gruppi
di lettere di lunghezza k opportunamente codificati da numeri < nk: infat-
ti, come abbiamo visto più volte, possiamo rappresentare la sequenza ao, ... ,
ak-l di numeri < n tramite

ao + al .n + a2 . n2 + ... + ak-l . nk-l.

Ciò premesso si procede nel modo che segue.


Criptosistema RSA (Rivest-Shamir-Adleman)
1. Ogni utente A del sistema fissa due primi P:l q molto grandi e ne calcola
poi il prodotto N = p . q. Conoscendo questa decomposizione di N gli
riesce agevole anche computare
cjJ(N) = (p - 1) . (q - 1).
Possiamo poi facilmente convenire che tutti i naturali a chiamati a rap-
presentare le unità di messaggio nel modo appena descritto siano molto
minori di p e q, e conseguentemente, se diversi da zero, primi tanto con
p quanto con q, e dunque anche con il prodotto N. Allora ogni a :I O
soddisfa il teorema di Eulero
a</J(N) = 1 (modN);

r
ma cjJ(N) è primo anche con al per ogni intero positivo t, vale dunque

(al)</J(N) = (a</J(N) = 1 (modN);

r. =
moltiplicando gli ultimi due membri di questa congruenza per a otteniamo

(a</J(N) a a (modN),

che è soddisfatta anche da O.


6.5 Il Criptosistema RSA 153

2. A sceglie allora due naturali dA ed eA, l'uno inverso dell'altro modulo


<jJ(N). Vale dunque
dA' eA == 1 (mod<jJ(N)).
In altre parole, dA . eA ha resto 1 nella divisione per <jJ(N) e dunque si
scrive come dA . eA = t· <jJ(N) + 1 per qualche opportuno naturale t. Allora
per ogni naturale a < p, q (e quindi per ogni unità a di messaggio) si ha

3. A rende noti N ed eA come sua chiave pubblica, mantiene invece gelosa-


mente segreto dA - la sua chiave privata -.
4. A questo punto, se un altro utente B vuole trasmettere ad A un messaggio
a, lo eleva alla eA modulo N

a r-+ aeA (modN),

e lo invia così cifrato ad A. Questa è la procedura EA di codifica per A.


5. A da parte sua recupera il testo originale elevando quanto ricevuto alla
dA modulo N
aeA r-+ (aeA)d A == a (modN).
Così avviene la decodifica DA.

Questo è il fondamento (invero assai elementare) di RSA. Ma quale è il rischio


che un pirata C riesca a violare un messaggio eventualmente intercettato? C
conosce la chiave pubblica N, eA e per decifrare deve recuperare a da a eA , in
altre parole estrarre rapidamente le radici eA-me modulo N.
La strada maestra per raggiungere questo obiettivo sembra essere quella che
si affida al recupero di dA, infatti la radice eA-ma di un intero modulo N si
ottiene elevando questo intero a dA. D'altra parte dA è identificato come l'in-
verso di eA modulo <jJ(N). Dunque il punto cruciale per infrangere RSA pare
ridursi alla conoscenza di <jJ( N) = (p - 1) . (q - 1), che a sua volta fa riferimen-
to a p e q e, in conclusione, alla decomposizione di N in fattori primi. Siamo
quindi nella situazione descritta all'inizio del paragrafo: dunque, siccome non
esistono algoritmi rapidi per decomporre N, non c'è verso di infrangere RSA,
almeno per questa via.
Si può obiettare che la sicurezza di RSA si basa in realtà, come già osservato,
sulla difficoltà di estrarre radici eA-me modulo N, e sull'assenza di algoritmi
capaci di svolgere rapidamente questi calcoli. Il collegamento tra i due pro-
blemi (estrarre radici modulo N, e decomporre N in fattori primi) è ancora
dibattuta. Abbiamo visto che un algoritmo rapido di decomposizione ne ge-
nera uno altrettanto veloce di estrazione di radice. Ma ci sono argomenti per
ritenere che il secondo problema sia più semplice nel primo, nel seguente sen-
so, sottolineato da recenti lavori di Boneh e Venkatesan: se esiste un algoritmo
rapido di decomposizione che si fonda su una procedura veloce di estrazione
di radice modulo N, allora esiste un algoritmo rapido di decomposizione che
154 6 Ancora Crittografia

prescinde da ogni estrazione di radice modulo N. In altre parole, la rapidità


di decomporre in fattori primi non dipende decisivamente dal calcolo rapido
di radici modulo N.
Come detto, RSA è il sistema crittografico maggiormente in uso: capita, svol-
gendo transazioni con carta di credito in Internet, di leggere talora sullo scher-
mo che la segretezza della trasmissione è garantita proprio da RSA.
Naturalmente, l'uso di RSA richiede alcune ragionevoli precauzioni. Ad esem-
pio, fino a qualche anno fa, il numero delle cifre decimali dei fattori p e q di
una comune chiave RSA N = p. q per comuni transazioni commerciali era
ragionevolmente collocato intorno a 150 (500 in base 2). Poi, nel 1999, si vide
che un programma svolto in parallelo da vari calcolatori riusciva a recupera-
re in alcune settimane i fattori p e q dei numeri N di questa forma. Non è
certamente probabile che un pirata impieghi un tale dispendio di tempo e di
energie per intercettare il numero di una carta di credito il cui limite massi-
male di spesa può raggiungere poche migliaia di euro mensili, tanto più che
un comune calcolatore richiederebbe qualche anno per sviluppare da solo la
stessa computazione. Comunque si ritenne, come misura prudenziale, di dover
alzare il numero delle cifre decimali di p e q fino a circa 300 (1000 in base 2).
Ci sono altre precauzioni da prendere per evitare che situazioni contingenti
(errori casuali di software e hardware, uso di calcolatori tascabili - le smart-
cards -, errori indotti dal pirata, virus, frettolosa accelerazione dei tempi di
codifica e decodifica) possano rivelare parzialmente o totalmente la chiave pri-
vata dA di un utente A. Di questo parleremo nel prossimo paragrafo.
C'è comunque un altro problema che vogliamo trattare prima di concludere
il presente paragrafo, e cioè: come si generano i fattori primi p e q? La loro
segretezza è, evidentemente, importante, e dunque l'uso di metodi prevedibili
per determinarli potrebbe aiutare un pirata a ricavare la chiave privata di
qualche utente e diminuire così la sicurezza del sistema. Del resto la scelta
di numeri primi "grandi", o di loro potenze, è prerequisito essenziale di quasi
tutti i cripto sistemi fin qui trattati in questo capitolo.
Ricordiamo allora che ogni primo si esprime anche con la rappresentazione bi-
naria, e quindi come sequenza di O e 1, che la primalità si verifica rapidamente
e che conosciamo la distribuzione almeno asintotica dei primi tra i naturali.
Dunque si può cercare di generare nuovi primi considerando sequenze casuali
di O e 1 e poi controllando che gli interi che ad esse corrispondono sono primi.
Ci serve allora un generatore casuale di queste sequenze, capace di produrle in
modo che ogni nuovo bit non dipenda in nessun modo da quelli che lo precedo-
no. Un simile procedimento non può essere gestito da un comune calcolatore
proprio a motivo della sua casualità: infatti le computazioni di una macchina
si svolgono secondo programmi prestabiliti e dunque sono deterministiche. La
Fisica suggerisce invece procedimenti basati sulla emissione di neutroni da
parte di sostanze radioattive: questi metodi soddisfano le esigenze sopra rife-
rite, ma sono in genere lenti e costosi. Per superare queste difficoltà si tenta
di conciliare le due strategie, generando quelli che vengono chiamati numeri
pseudocasuali, e cioè sequenze casuali brevi di O e 1 (chiamate semi), cui si
6.6 Attacchi aRSA 155

aggiungono ulteriori bit secondo un programma deterministico, in modo tale


che la sequenza finale prodotta sembri ad un estraneo assolutamente casuale,
e non sia comunque possibile recuperarne il seme senza conoscerlo a priori.

6.6 Attacchi aRSA

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

dp == dA (modp - 1), d q == dA (modq - 1)

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)

perché dA == dp (modp - 1), e, analogamente,

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

x == cdp (modp), x == c dq (modq).

Passiamo adesso a 3. L'idea qui è quella di accelerare la codifica

a I-t a eA (modN)

usando un esponente pubblico eA piccolo, oppure scegliendo un eA la cui rap-


presentazione in base 2 contiene poche cifre 1 (ricordiamo che ogni cifra 1
corrisponde, negli algoritmi di elevamento a potenza, ad operazioni più com-
plesse di quelle previste da O): eA = 3 potrebbe essere un'ottima opzione nel
primo caso, mentre eA = 216 + 1 = 65537 (che è grande, ma contiene solo
2 cifre uguali ad 1 nella rappresentazione in base 2) è soluzione ottimale nel
6.7 Crittografia e Curve Ellittiche 157

secondo caso. Ci sono però argomentazioni (di Hastad, Reiter-Franklin, Cop-


persmith) che mostrano come queste scelte possano essere talora pericolose,
perché facilitano il calcolo delle radici eA-me e dunque la violazione del cripto-
sistema. In particolare, per questi valori di eA, una conoscenza parziale di dA
(anche limitata a poche cifre) permette di ricostruire l'intera chiave privata
dA·
Finalmente accenniamo brevemente a
4. attacchi rivolti ad implementazioni insicure.
Supponiamo infatti che A usi per decifrare un calcolatore tascabile (ad esem-
pio una smartcard, e cioè un piccolo dispositivo hardware, delle dimensioni
di una comune carta di credito, che contiene un sistema operativo ed una
RAM temporanea per crittografia e registrazione chiave). Il pirata C può al-
lora sollecitare A a firmare (nei modi che discuteremo nei prossimi paragrafi)
qualche petizione popolare, o dare un cenno di assenso a qualche documento,
dedurre poi informazioni sulla chiave privata di A dai tempi che la smartcard
impiega per rispondere, oppure dalla energia che consuma. Questi attacchi so-
no stati proposti da Kocher. Altri possibili rischi per RSA possono derivare,
ovviamente, da errori casuali (virus hardware/software, guasti momentanei
dell'hardware, guasti originati dal pirata stesso). Opportuni modelli matema-
tici permettono di formalizzare in astratto la situazione e sviluppare attacchi
teorici basati su queste contingenze.
Ma il pericolo più consistente per RSA deriva dai possibili progressi della com-
putazione quantistica (accennati nel paragrafo 4.1): se i calcolatori quantistici
riuscissero a gestire nella pratica numeri con molte cifre, l'algoritmo rapido
di fattorizzazione di Peter Shor provocherebbe una crisi definitiva di tutte le
procedure basate sulla difficoltà di decomporre gli interi, ed in particolare di
RSA. Analoghe devastanti conseguenze si avrebbero per i metodi crittografici
fondati sul logaritmo discreto.

6.7 Crittografia e Curve Ellittiche

Abbiamo visto come in molti cripto sistemi (Diffie-Helman, Massey-Omura,


EIGamal) le procedura di codifica e decodifica identifichino i messaggi cifra-
ti o decifrati con punti di un campo finito F, più precisamente nel gruppo
moltiplicativo F*. Un più vasto repertorio di possibilità è prevedibile ove si
attinga a punti di curve ellittiche E su campi finiti F.
Vediamo allora un procedimento che associa ad ogni messaggio un punto su
un'opportuna curva ellittica. L'algoritmo è probabilistico, ma il margine di
tolleranza di possibili fallimenti può essere preventivamente stabilito secondo
le esigenze degli utenti.
L'algoritmo. Trattiamo messaggi rappresentati da naturali a < N. Sceglia-
mo:
158 6 Ancora Crittografia

• un intero positivo "grande" k (tale che f.


sia il limite massimo di tolleranza
di probabilità di insuccesso),
• una potenza q di un primo :I 2,3 tale che q ~ k . N, e il corrispondente
campo finito F = F q,
• due interi a, (3 e una curva ellittica E: y2 = x 3 + ax + (3 su F (così
(4a 3 + 27(32,q) = 1).
Notiamo che ogni intero da 1 a k· N si rappresenta in modo unico in riferimento
ad ogni intero positivo a < N come

k . a + j con 1 :::; j :::; k;

si può poi identificare con un elemento x j di F (visto che q ~ k . N).


Sia ora a > O un messaggio e procediamo per associargli un punto Pa su E.
Per ogni j = 1, ... , k,
• si calcola x j = k . a + j in F;
• si considera x1 + ax j + (3;
• se x1 + ax j + (3 è un quadrato, si calcola Yj E F tale che Y] = x1 + ax j + (3:
(x j, Yj) è il punto Pa cercato;
• altrimenti, se j < k, si passa a j + 1, mentre se j = k, si passa ad altra
scelta di a, (3.

Come si vede, l'algoritmo che determina Pa si riconduce in conclusione al


problema delle radici quadrate (e al calcolo di Yj a partire da Xj). Per q
primo, sappiamo che la metà degli interi primi con q sono residui quadratici
modulo q, cioè hanno radice quadrata in F. Naturalmente ci si può chiedere
• quanti interi si rappresentano nella forma x 3 +ax+(3 modulo q per qualche
x (e per a, (3 fissati),
• cosa avviene se q non è un primo, ma soltanto una sua potenza.
Si verifica tuttavia che il procedimento ha successo per circa la metà dei casi.
Così, per una data scelta di a,(3 (dunque di E), e per ogni j = 1, ... , k,
la probabilità di fallimento, cioè di non trovare una radice quadrata Yj di
x1 + aXj + (3, è circa ~; quando j varia da 1 a k, la probabilità di insuccesso
diviene allora 21k ' come previsto.
I tempi di lavoro dell'algoritmo si ricollegano a quelli di calcolo delle radici
quadrate.
In questo modo molti criptosistemi basati sulla scelta di punti in campi finiti
si adattano facilmente alle curve ellittiche. Vediamo un esempio.
Criptosistema di Massey-Omura per curve ellittiche.
i) Gli interlocutori A e B concordano una curva ellittica E di ordine N. Si
ricordi che N . P = O per ogni punto P di E.
ii) A sceglie un intero eA primo con N e ne calcola l'inverso dA modulo N.
Lo stesso fa B.
6.8 Firme digitali 159

iii) E traduce il messaggio a nel punto Pa.


iv) A questo punto A e E procedono con un algoritmo di doppio lucchetto,
costruendo successivamente e alternativamente in E i punti

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.

Un pirata C che vuole violare a si trova ad affrontare un problema di logaritmo


discreto su curve ellittiche, non più facile di quello per campi finiti.

6.8 Firme digitali


Quando E invia ad A un messaggio tradizionale su carta lo firma per qualifi-
carsi come mittente. Allo stesso modo, un messaggio cifrato di E ad A (magari
trasmesso via Internet) dovrebbe avere un qualche contrassegno che garantisca
ad A che il suo interlocutore è proprio E, e non un pirata che si spaccia per E.
Abbiamo già avuto modo di mostrare i rischi che si corrono trascurando que-
sta ovvia misura di cortesia e prudenza. Ma concludere un messaggio cifrato
con una firma esplicita (anche se criptata) può essere pericoloso, perché può
fornire informazioni ad un pirata che lo intercetti. Si pone allora il problema di
contrassegnare i messaggi cifrati con una firma digitale che faccia riconoscere
il mittente al destinatario senza dare troppi suggerimenti agli estranei.
Ricordiamo che nei criptosistemi a chiave pubblica, basati sulle funzioni a
senso unico, ogni utente A (o E) dispone di una funzione di codifica EA (Ea)
e di una di decodifica DA (Da), l'una inversa dell'altra. Assumiamo per sem-
plicità che EA, DA (e ovviamente anche Ea, Da) coincidano precisamente
con la chiave pubblica e quella privata di A (e di E).
Allora E potrebbe apporre una firma digitale sul messaggio cifrato spedito ad
A concludendolo con
EADa(E),
(come gli è possibile visto che conosce sia la chiave pubblica EA di A che la
propria chiave privata Da). A, da parte sua, sapendo la propria chiave privata
DA e la chiave pubblica Ea di E, riconosce la firma di E calcolando

Ci sono però due possibili ostacoli a questo procedimento.


1. Un pirata C potrebbe preliminarmente rendere pubblica una chiave spac-
ciandola per quella di E e poi sostituirsi a E nella corrispondenza con
A.
160 6 Ancora Crittografia

2. Se un pirata C intercetta molti messaggi spediti da H a A, può identificare


la firma digitale EADa(H) alla fine di ciascuno di essi ed ottenerne infor-
mazioni sulla chiave privata Da di H, oppure, più semplicemente, usare
questa firma per spacciarsi per H.
Vediamo come è possibile ovviare a queste difficoltà.
La strategia più sicura per evitare il problema 1 consiste nel costituire un
Ente Certificatore super partes, presso cui ciascun utente va a depositare la
sua chiave pubblica, facendosi identificare con criteri che vanno dal banale
documento di riconoscimento al più sofisticato esame dell'iride. Negli Stati
Uniti questo Ente Certificatore (il N I ST, National Institute of Standards
and Technology) esiste da anni.
Quanto a 2, un primo rimedio può essere quello di variare la posizione della
firma all'interno del messaggio (all'inizio, oppure all'interno, invece che alla
fine). Alternativamente, la si può fare dipendere anche dal messaggio oltre che
dal mittente (e dunque variare a seconda del contenuto di quanto trasmesso).
Questa ultima soluzione richiede l'uso di specifiche funzioni, che sono chiamate
"impronta" in italiano ("hash" in inglese). Una funzione impronta i trasforma
ogni messaggio a in una versione concentrata i (a) che rispetta i seguenti criteri:
• i(a) ha lunghezza fissata (in genere ~ 200 simboli);
• è computazionalmente poco plausibile che messaggi diversi a f::- al abbiano
impronte uguali i(a) = i(a l ).
Ad esempio la impronta i(a) può raccogliere informazioni quali il numero dei
caratteri del messaggio a, il numero delle vocali, delle consonanti, dei punti e
delle virgole che esso contiene, quale è il suo centesimo simbolo, e così via. Si
ottengono in questo modo brevi notizie chiave sul messaggio, che verosimil-
mente lo determinano senza pericolo di confusione.
Una volta che l'Ente Certificatore ha stabilito la funzione impronta i da utiliz-
zare e l'ha resa pubblica, ogni utente H del sistema può firmare un messaggio
a scrivendo Da(i(a)) al termine (così la firma dipende non solo da H ma an-
che dal messaggio e cambia caso per caso). A questo punto, il destinatario
A, una volta ricevuto il testo criptato EA(a), decifra a = DA(EA(a)) e poi
calcola i(a); successivamente considera la firma Da(i(a)) e le applica la chiave
pubblica Ea di H ottenendo per altra via i(a); controlla finalmente che i due
valori coincidono.

Concludiamo il paragrafo con qualche breve cenno relativo alla normativa


italiana sulla firma digitale. La legge le ha dato validità legale, ed ha autoriz-
zato Enti Certificatori per cerchie di utenti formate da istituti bancari; si può
prevedere un'estensione del sistema ai privati cittadini entro pochi anni.
6.9 Protocolli a Conoscenza Zero 161

6.9 Protocolli a Conoscenza Zero


Gli strumenti di Teoria dei Numeri sono utili anche per il problema dei Proto-
colli a Conoscenza Zero. Si tratta di argomento che non riguarda direttamen-
te la crittografia, ma le è comunque collegato. Per spiegarlo, immaginiamo
la seguente situazione. A ha risolto un particolare problema (ad esempio, è
riuscito a calcolare un difficile logaritmo discreto) e vuole informare un suo
corrispondente E della scoperta. A, tuttavia,
• preferisce evitare di divulgare la soluzione (vuole riservare a se stesso gli
eventuali vantaggi),
• deve comunque produrre argomenti sufficienti a convincere E della fonda-
tezza del suo annuncio.
Mostriamo come questo sia possibile, limitando ci per ora al semplice esempio
che riguarda, appunto, il tema del logaritmo discreto. Fissiamo allora la situa-
zione: sono dati un gruppo ciclico moltiplicativo G di ordine N, un generatore
9 di G ed un elemento a E G (quindi N, 9 e a sono pubblici). A è riuscito
a calcolare il logaritmo discreto x di a in base g, cioè ha risolto l'equazione
gX = a, e vuole provare a E che conosce x senza comunicargliene il valore. Un
algoritmo per ottenere questo scopo, con piena soddisfazione da parte tanto
di A quanto di E, è il seguente.
A sceglie un intero positivo n < N, calcola g' = gn e spedisce g' a E. E
lancia una moneta (magari delle vecchie lire). Se esce testa, E si fa dire n
da A e verifica gn = g'. Se esce croce, E si fa dire x + n da A e controlla
gx+n = gX . gn = a . g'.
L'intera operazione può essere ripetuta quante volte si vuole (naturalmente
variando n ad ogni nuova applicazione). Mostriamo che il procedimento può
convincere E della scoperta di A senza costringere A a rivelare x.

(a) In effetti, A non comunica x, né E ottiene informazioni tali da poterlo


recuperare: ogni volta, infatti, E viene a conoscere n oppure x + n, ma
mai contemporaneamente i due valori distinti n e x + n (la cui differenza
gli fornirebbe x).
(b) A non può reggere al gioco e rispondere ad ogni richiesta di E se non
conoscendo x: se A ignora x, quando esce croce deve comunicare a E
un valore errato di x + n e E lo può smascherare perché può verificare
gx+n -::f- a· g'. Naturalmente, A può rimediare a questo guaio barando e
spedendo a E all'inizio della comunicazione g' = gn. a-l invece di gn; così,
quando esce croce, A può dire n invece di x+n (che non conosce) e E, che
è ignaro dell'imbroglio, controlla gn = a . gn . a-l = a . g'. Ma in questo
caso A non riesce a reggere il gioco quando esce testa, proprio perché non
conosce x e dunque non sa rispondere l'esponente n - x da sostituire ad
n per ottenere g' = gn . a-l = gn-x.

I Protocolli a Conoscenza Zero sono dunque procedure volte a trasmettere


certezze ma non conoscenze, informazioni incomplete ma sufficienti a convin-
162 6 Ancora Crittografia

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.

6.10 Testa o Croce telefonico

Immaginiamo il caso di una partita a scacchi al computer: i giocatori sono


situati in città o stati diversi e devono sorteggiare in partenza chi usa i pez-
zi bianchi e quindi ha facoltà di muovere per primo. Oppure, per anticipare
il tema del prossimo paragrafo, pensiamo ad una partita di poker, ancora a
distanza, e al problema di scegliere a sorte chi distribuisce le carte. In tutte
queste situazioni si ha la necessità di simulare una sorta di lancio di moneta
a distanza che operi la scelta richiesta con assolute garanzie per tutti i con-
tendenti.
Limitiamo per semplicità a due il numero dei giocatori interessati, e conve-
niamo di indicarli al solito con A e B. Come detto, si suppone che A e B
operino a distanza. La procedura che essi devono eseguire si può descrivere
con il seguente modello elementare:
• c'è un pozzo profondo di acqua trasparente,
• A ha una moneta e ne sceglie di intesa con B uno dei lati, "testa o "croce",
• A lancia la moneta nel pozzo da qualche metro di distanza,
• B è sul bordo del pozzo, rileva l'esito del lancio e lo comunica a A.
Dunque
• A opera ma non vede,
• B vede ma non opera.
Naturalmente, a cose fatte, si può consentire ad A di avvicinarsi al pozzo e
comunque controllare l'esito del lancio e la correttezza della comunicazione di
B.
Questa è dunque la situazione informale che vogliamo considerare. Ovvia-
mente, nei casi che ci interessano, A e B sono ben più lontani di pochi metri,
comunicano tra loro semmai per telefono o via internet e non ci sono pozzi in
cui gettare monete. Ma vogliamo protocolli che riproducano la situazione e ne
mantengano le caratteristiche. Un modello matematico che garantisce questi
obiettivi è quello che adesso descriviamo, e che si basa sulle proprietà delle
radici quadrate modulo un intero N. Vediamo come.
Esempio 6.10.1 A e B compiono in partenza i seguenti preliminari.
6.10 Testa o Croce telefonico 163

• A sceglie due primi grandi p -:j:. q (meglio se == 3 (mod4)), calcola il


prodotto N = p' q e comunica N aB.
• B sceglie a sua volta un intero positivo a < ~, calcola a 2 modulo N e lo
dice ad A.
A questo punto
• A, conoscendo i fattori primi p e q di N, calcola con il Teorema del Resto
Cinese (magari sfruttando le semplificazioni che derivano dall'ipotesi p ==
q == 3 (mod4)) le quattro radici di a2 modulo N: ±x, ±y con 1 :::; x, y < ~.
Adesso ricordiamo che, nel modello elementare della moneta e del pozzo, A
sceglie uno dei lati della moneta, "testa" oppure "croce". Nel nostro nuovo
ambito una simile alternativa si può riprodurre sollecitando da parte di A
una affermazione sul valore a scelto da B e concordando che "testa" e "croce"
corrispondono rispettivamente al fatto che A ha ragione oppure torto. L'af-
fermazione di A su a può essere una delle due "a = x" o "a = y". Infatti a
deve eguagliare uno dei due valori e ambedue gli eventi a = x e a = y hanno
a priori la stessa probabilità di verificarsi.
Ma non conviene che A si sbilanci in una asserzione così dettagliata, per mo-
tivi di prudenza che vedremo tra pochissimo. È più sicuro che A confronti x
e y (scritti in base 2 come sequenze di O e 1) e identifichi la prima cifra da
destra in cui x e y differiscono: supponiamo che questa cifra sia la i-ma e che
valga O per x e 1 per y. Allora, invece di azzardare a = x oppure a = y, A
afferma "l'i-ma cifra di a è O" (come in x) oppure "l'i-ma cifra di a è 1" (come
in y). A questo punto
• B controlla l'i-ma cifra di a e dice ad A se la sua affermazione è vera
oppure no.
"Testa" corrisponde alla verità della affermazione di A, "croce" alla sua falsità.
In questo modo si conclude la procedura. Si osservi che, proprio come nel caso
del pozzo, compiuti i preliminari,
• A opera ma non vede,
• B vede ma non opera.
Alla fine del procedimento, poi,
• B può comunque rivelare a ad A, per assicurare l'onestà del suo compor-
tamento,
• A può comunicare p e q aB.
In questo modo A e B controllano vicendevolmente che tutto si è svolto rego-
larmente. Questa cautela finale è necessaria. Infatti B potrebbe imbrogliare A,
comunicandogli l'esito "testa" anche se è uscito "croce", o viceversa, dunque
adattando il valore di a per rendere vera o falsa (e comunque corrispondente
ai propri interessi) l'affermazione di A. Ma perché B riesca nel suo inganno
senza tema di essere smascherato bisogna che B conosca x e y, e quindi essen-
zialmente la fattorizzazione p . q di N: sappiamo infatti come la conoscenza
164 6 Ancora Crittografia

di x, y tali che x2 == y2 (modN) ma x t'- ±y (modN) può svelare un divisore


non banale di N come (N, x±y). È per questo motivo che ad A non conviene
sbilanciarsi in asserzioni quali a = x oppure a = y, perché in questo modo
A rischia di comunicare a B l'altra radice quadrata di a2 diversa da a, quella
che B non conosce; serve piuttosto ad A limitarsi ad una affermazione meno
categorica, come quella sulla i-ma cifra.
Il protocollo ora descritto corrisponde in realtà ad uno schema generale, in cui
si dà ad A facoltà di scegliere una tra due risposte equiprobabili (come a = x
e a = y nel caso precedente). Ovviamente altri modelli matematici possono
condurre a questa stessa situazione. Eccone un altro, ideato da Goldwasser e
Micali, ancora parzialmente legato alle radici quadrate modulo N, ma stavolta
essenzialmente basato sul simbolo di Legendre e Jacobi CNl
Sia infatti N il
prodotto di due primi distinti p e q (meglio se grandi). Allora, per ogni intero
positivo a primo con N (quindi con p e con q) e minore di N, si ha

(~ ) = (~) . (~) .
Inoltre sappiamo che

1. (~) vale 1 se a è un residuo quadratico modulo p, -1 altrimenti,

2. (~) = 1 per l'esatta metà dei valori di a

e che lo stesso vale anche per q. Si deduce 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.

Esempio 6.10.2 A e B concordano nuovamente di assumere come "testa"


una affermazione vera di A e come "croce" il contrario. Procedono poi come
segue.
• B sceglie due primi p =I- q grandi, calcola il loro prodotto N = p . q, fissa
poi un intero a primo con N e tale che (N) = 1, rivela finalmente a e N
ad A.
• A scommette se "a è un residuo quadratico modulo p e modulo q" oppure
"a non è un residuo quadratico né modulo p né modulo q".
6.11 Poker al telefono 165

• B controlla la risposta, interpretandola come "testa" o "croce" nel modo


sopra descritto.
Si ha nuovamente che, conclusi i preliminari,
• A opera e non vede,
• B vede e non opera.
Naturalmente, ad A è lasciata la facoltà di verificare a cose fatte i valori
di p e q. In effetti B può ingannare A adoperando valori disonesti di p e q:
ammettiamo infatti che B scelga all'inizio
tre primi distinti Pl, P2, P3,
un intero positivo a primo con essi
per i quali si abbia

(~) (~) = -1, (~) = 1.


Allora B può adattare e distorcere la risposta finale di A secondo i suoi inten-
dimenti nel modo che segue. Ammettiamo che B voglia che l'esito del lancio
sia "testa" e dunque che A "dica la verità". Allora:
• se A afferma che "a è residuo quadratico modulo p e q", B utilizza Pl . P2
come p e P3 come q per attestare (~) = (~) = 1;
• se invece A sostiene che "a non è residuo quadratico né modulo p né modulo
q", B adopera Pl come P e P2 . P3 come q per attestare (~) = (~) = -1.

In modo analogo B procede se vuole comunque ottenere l'esito "croce".


È dunque importante che, una volta che il procedimento si è completato, A
abbia la possibilità di vedere p e q e controllare la loro primalità.

6.11 Poker al telefono

Consideriamo in questo paragrafo il caso di una partita a poker a distanza tra


giocatori incalliti, ma inabilitati a ritrovarsi tutti alla stessa ora nello stesso
luogo. Stavolta le operazioni da eseguire sono assai più complicate, delicate e
disparate del semplice lancio virtuale di una moneta, ed includono
la distribuzione delle carte,
la loro eventuale sostituzione,
l'esibizione finale delle 5 carte in possesso di ciascun giocatore.
Dunque anche i protocolli da adoperare per garantire la regolarità della partita
sono più complessi che nel lancio della moneta. Per semplicità, limitiamoci
allora al caso di due soli giocatori A e B. Ammettiamo poi che le 52 carte (13
per ogni seme) siano identificate da numeri di codice preassegnati
166 6 Ancora Crittografia

Vediamo allora un modello matematico relativamente elementare per la loro


distribuzione a distanza. Ci si basa sostanzialmente su una tecnica di doppio
lucchetto.

Esempio 6.11.1 Ammettiamo che A e B dispongano di


chiavi di codifica EA, EB,
chiavi di decodifica DA, DB,
intese qui come funzioni da naturali a naturali. Ovviamente EA, DA (e
EB, DB) sono l'una inversa dell'altra. Assumiamo inoltre la condizione di
commutatività delle chiavi: in altri parole si richiede che, per ogni naturale a,

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

• A sceglie 5 carte dal mazzo mescolato e le passa aB. B le decodifica con


DB e le tiene per sé come le carte della sua prima mano.
• A sceglie altre 5 carte, le cripta ulteriormente trasformandole con la sua
chiave pubblica EA e poi le passa a B: ogni carta a(c) arriva dunque a B co-
me EAEB(a(c)); B provvede a decifrarla parzialmente con DB, sfruttando
l'ipotesi di commutatività e dunque il fatto che

trasmette poi il risultato ad A.


• A completa la decifrazione di ognuna delle 5 carte applicando la sua chiave
privata DA e recuperando in conclusione in ogni caso a(c); le 5 carte così
ottenute sono quelle a sua disposizione per la prima mano.
6.11 Poker al telefono 167

Come si vede, si tratta di procedimento semplice, che permette di distribuire


a ciascuno dei due giocatori le sue cinque carte senza che il contendente abbia
modo di "vederle". Thttavia il meccanismo non è completamente sicuro. Ad
esempio, si osserva che parziali esposizioni della chiave privata di B possono
permettere ad A, se non di identificare tutte le carte

del mazzo mescolato da B, almeno di individuarne sottoinsiemi notevoli, come


quello degli assi, o dei re, o delle carte di un dato seme, e di indirizzare
conseguentemente il gioco a proprio favore.

Proponiamo allora un modello più evoluto, duttile e sicuro, e pur tuttavia


più complicato da attuarsi, costruito ancora da Goldwasser e Micali. Ci si
basa nuovamente sulla teoria dei residui quadratici e sul simbolo di Legendre
e Jacobi. In particolare, si ricorda che, se N = p. q è prodotto di due primi
distinti, allora per a intero, l'evento (N) = 1 corrisponde a due possibilità
equiprobabili:
• a è residuo quadratico modulo p e modulo q,
• a non è residuo quadratico né modulo p né modulo q;

Di più, per p == q == 3 (mod4), due interi a e b per cui vale

a 2 == b2 (modN), a 'l'- ±b(modN)


soddisfano
(~) = - (~)
(come osservato nell'esercizio 3.11.5). Ciò premesso, vediamo m maggior
dettaglio il protocollo di Goldwasser-Micali.

Esempio 6.11.2 Conveniamo anzitutto di rappresentare le 52 carte Cl, C2,


· .. , C52 in base 2, cioè come sequenze di O e 1. Poiché la minima potenza di
2 che supera 52 è 64 = 26 , possiamo supporre che 6 sia la comune lunghezza
di queste sequenze. La distribuzione della carte avviene con il coinvolgimento
di ambedue i giocatori. Si suppone infatti che sia uno dei due, ad esempio A,
ad inaugurarla dando una carta a B, e poi B continui distribuendo un'altra
carta a A, e via dicendo. Vediamo in che modo. Iniziamo con i preliminari.
• A mescola il mazzo delle 52 carte con una permutazione casuale u. Per
ogni i = 1, ... , 52, A prende poi due primi grandi tra loro distinti Pi ==
qi == 3 (mod 4) e calcola N i = Pi . qi; associa poi alla carta u (Ci) il valore N i
e una sequenza ordinata di 6 interi (til, ... , ti6) scelti in modo tale che,
per j = 1, ... , 6,

(~) = 1 se e solo se la j-ma cifra della rappresentazione di u( Ci) in


base 2 è 1.
168 6 Ancora Crittografia

Alla fine di queste procedure, A passa a H il mazzo mescolato, ovvero le


carte a(Ci) per i = 1, ... , 52, ciascuna accompagnata dal suo intero N i e
dalla sequenza (til, ... , ti6); A conserva invece per sé Pi e qi per ogni i.
• H opera indipendentemente allo stesso modo, usando una sua permutazio-
ne a' e associando poi, per ogni i = 1, ... ,52, alla carta a'(ci) due primi
distinti ri, Si == 3 (mod4), il loro prodotto Mi e la relativa sequenza di 6
interi, rivelando poi ad A queste due ultime informazioni, ma non ri e Si.
Adesso passiamo alla distribuzione delle carte. Supponiamo che sia A a
iniziarla.
• A propone a H una sequenza di 52 valori casuali Xi (1 :::; i :::; 52), ciascuno
scelto tra gli interi compresi tra 1 e ~i.
• Per ogni i, H calcola xT modulo N i e ('!Vi)'
sceglie poi un valore k compreso
tra 1 e 52. Notiamo che H conosce k, ma non la carta che gli corrisponde.
Comunque H calcola e trasmette ad A
x; modulo N i e C~;,) per ogni i -I- k,
x% modulo N k e - (~:).
• A non sa il valore di k. Tuttavia, per ogni i = 1, ... , 52, dunque anche
per i = k, A considera x;
modulo N i , ne estrae le radici quadrate modulo
N i grazie alla conoscenza di Pi e qi e seleziona in particolare quella che è
compresa tra 1 e ~i e corrisponde al valore del simbolo di Jacobi comuni-
catogli da H, dunque ('f.J.) per i -I- k e - (~:) per i = k. Così A recupera
Xi per i -I- k, ma ottiene una radice di x% diversa da ±Xk modulo Nk per
i = k (si ricordi infatti che (~ ) = (N;;-)
per la nostra scelta di N k). A
comunica questi risultati a H.
• H riceve in questo modo per i -I- k il valore Xi che già sapeva ma, per i = k,
una seconda radice t'- ±Xk modulo Nk; da quest'ultima informazione può
ricavare la decomposizione Pk . qk di Nk. Da questa fattorizzazione e dalla
sequenza (tkl, ... , tk6), poi, H ottiene finalmente le 6 cifre che identificano
la carta a(ck); H conserva allora a(ck) come sua prima carta, la rimuove
dal suo mazzo e procede con le 51 carte restanti per assegnare allo stesso
modo ad A la sua prima carta.

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

l. Il primo quesito chiede di determinare un generatore g del gruppo F 31.


Dopo dieci minuti di riflessione, 007 azzarda g = 2, e XlI g = 3. Chi dei
due ha ragione?
2. Supponiamo poi che, sempre in riferimento al primo q = 31, XlI scelga
nA = 5 e 007 nB = 7, e che 007 voglia poi scrivere a XlI "I LOVE
YOV" usando il cripto sistema di Massey-Omura. Quale è la sequenza delle
quattro successive codifiche e decodifiche che 007 e XlI si scambiano?
3. 007 sceglie la sequenza supercrescente 1, 2,4,9, 17 e poi m = 51, a = 2 per
impostare un criptosistema di Merkle-Hellman. Quale è la chiave pubblica
di 007? In che modo XlI codifica il messaggio 1001O?
4. 007 vuole spedire a XlI una cartolina digitale col messaggio cifrato "I
NEED YOV". 007 e XlI concordano di usare un criptosistema RSA
basato sui primi p = 7, q = 11. XlI sceglie poi la chiave privata 2,
e 007 invece 3. Quali sono le loro chiavi pubbliche? In che modo 007
cripta il suo messaggio per XlI? Assumiamo poi che 007 e XlI adottino
la seguente funzione impronta i: per ogni messaggio a, i(a) è la coppia
ordinata (numero delle lettere E in a, numero delle T in a). In che modo
007 firma il suo messaggio?
A questo punto 007 e XlI, stanchi di scambiarsi messaggi, passano a giocare
a testa o croce come descritto nel paragrafo 6.10.
5. XlI fissa allora i primi p = 3, q = 5 e l'intero a = 2. La scelta di XlI è
corretta o XlI cerca di imbrogliare? 007 scommette poi che a è residuo
quadratico modulo p e q. 007 vince o perde?

Riferimenti bibliografici

L'uso di tecniche di teoria dei numeri in crittografia è discusso in vari testi,


come [6], [38], [48], [60], [63]. Il cripto sistema di Diffie-Hellman è proposto in
[21], quello di Massey-Omura in [46] e quello di ElGamal in [26]. [35] espone
il cripto sistema dello zaino, [17] tratta sue possibili implementazioni che ne
superino i difetti evidenziati da [64]. RSA nasce in [62]; [11] ne discute la sicu-
rezza, [12] i rapporti col problema della fattorizzazione. Per una panoramica
sull'uso delle curve ellittiche in crittografia, si vedano [38] e [47]. Ricordia-
mo anche gli articoli di Shor [65], [66] che propongono algoritmi "quantistici"
veloci sia per la fattorizzazione che per il logaritmo discreto. I protocolli di
Goldwasser e Micali per il lancio di monete, o per il poker a distanza sono in
[32].
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

19. Crandall R., Pomerance C., Prime Numbers: A Computational Perspective,


Springer (2005).
20. Devlin K., I problemi del Millennio, Longanesi, (2004).
21. Diffie W., Hellman M., New Directions in Cryptography, IEEE Trans. InEorm.
Soc. 22 (1976), 644-654.
22. Dickson L. E., History oE the Theory oE Numbers, Chelsea (1952).
23. Doxiadis A., Zio Petros e la Congettura di Goldbach, Bompiani (2004).
24. Du Sautoy M., L'enigma dei numeri primi, Rizzoli (2004).
25. Edwards H., Riemann's Zeta Function, Academic Press (1974).
26. EIGamal T., A Public Key Cryptosystem and Signature Scheme based on
Discrete Logarithms, IEEE Trans. InEorm. Theory IT-31 (1985), 469-473.
27. Ferragina P., Luccio F., Crittografia: Principi, Algoritmi, Applicazioni, Bollati
Boringhieri (2001).
28. Fouvry E., Théorème de Brun-Titchmarshj Application au Théorème de Fermat,
Invent. Math. 79 (1985), 383-407.
29. Fulton W., Algebraic Curves, Benjamin (1969).
30. Garey M., Johnson D., Computers and Intractability: A guide to the Theory oE
Completeness, Freeman (1979).
31. Goldwasser S., Kilian J., Almost All Primes can be Quickly Certified, Proc.
18th Ann. ACM Symp. on the Theory oE Computing (1986), 316-329.
32. Goldwasser S., Micali S., Probabilistic Encryption and How to Play Mental
Poker keeping Secret all Partial Information, Proc. 14th Annual ACM Symp.
on Theory oE Computing (1982), 365-377.
33. Granville A., It Is Easy to Determine Whether a Given Integer Is Prime, Bull.
Amer. Math. Soc. 42 (2005), 3-38.
34. Hardy G. H., Wright E. M., An Introduction to the Theory oE Numbers, Oxford
University Press (1979).
35. Merkle R., Hellman M., Hiding Information and Signature in Trap-door
Knapsacks, IEEE Trans. InEorm. Theory IT-24 (1978), 525-530.
36. Herstein I., Algebra, Editori Riuniti, (1994).
37. Koblitz N., Introduction to Elliptic Curves and Modular Forms, Springer (1993).
38. Koblitz N., A Course in Number Theory and Cryptography, Springer (1994).
39. Krizek M., Luca F., Somer L., 17 Lectures on Fermat Numbers: From Number
Theory to Geometry, Springer (2001).
40. Lenstra A. K., Factoring, Lecture Notes in Comp. Sci. 857, Springer (1994),
28-38.
41. Lenstra H. W. Jr., Factoring Integers with Elliptic Curves, Ann. Math. 126
(1987), 649-673.
42. Lenstra H. W. Jr., Pomerance C., Primality Testing with Gaussian Periods,
preprint (2005).
43. Lewis H. R., Papadimitriou C. H., Elements oE the Theory oE Computation,
Prentice-Hall (1981).
44. Lidi R., Niederreiter H., Introduction to Finite Fields and their Applications,
Cambridge University Press (1986).
45. Leonesi S., Toffalori C., Un Invito all'Algebra, Springer 2006.
46. Massey J. L., Logarithms in Finite Cyclic Groups-Cryptographic Issues, Proc.
4th Benelux Symp. on InEorm. Theory (1983), 17-25.
47. Menezes A., Elliptic Curve Public Key Cryptosystems, Kluwer (1993).
48. Menezes A., van Oorschot P., Vanstone S., Handbook oE Applied Cryptography,
CRC Press (1996).
Riferimenti bibliografici 173

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

AKS, 92,114 analisi di frequenza, 2


GIMPS, 46
NP, 22, 101 Bézout, identità, 29
0,83 Bernstein, 93, 117, 122
Op, 138 Berrizbeitia, 93, 122
P,22 Bertrand, 39
P=NP, 19 Biswas,114
RSA, 24,151 Boneh, 153, 156
UP,24
=,51 campo finito, 64
1>, 60 Carmichael
1l"(x), 39 pseudoprimo, 96
( di Riemann, 39 Cesare, 2
aN,52 Chebyshev, 39
F q ,64 Cheng, 122
ZN,52 chiave di codifica, 4
privata, 143
Adleman, 93, 151 pubblica, 143
Agrawal, 92, 114 chiave di decodifica, 4
Alberti,2 chiavi indipendenti, 18
Alford,97 Chor, 151
algoritmo, 20 cifrare, 4
di Lenstra, 138 cifrario di Vernam, 14
di primalità Cobham,21
AKS, 116 Cohen,93
di Miller-Rabin, 107 Cole, 101
di Solovay-Strassen, 106 congettura
di tipo Las Vegas, 93 di Fermat, 43
di tipo Montecarlo, 93 di Gauss, 39
efficiente, 21 di Goldbach, 48
euclideo delle divisioni successive, 28 di Hardy e Littlewood, 47
probabilistico, 93 congruenza modulo N,51
quantistico, 94 Cook, 21
rapido, 21 Coppersmith, 157
176 Indice analitico

criptare, 4 legge di reciprocità quadratica, 73, 76


criptosistema, 4, 5, 15, 144 Germain,47
RSA, 151 Goldbach, 44, 48
di Diffie-Hellman, 144 Goldwasser, 94, 164, 167
di ElGamal, 148 Granville, 97, 118
di Massey-Omura, 147
per curve ellittiche, 158 Hadamard, 40
di Merkle-Hellman, 150 Hardy,40
crittoanalisi, 5 Hasse, 88
crittografia, 4 Hastad,157
a chiave pubblica, 17, 143 Hellman, 144, 150
e curve ellittiche, 157 Huang,93
crivello di Eratostene, 42
curva ellittica, 82 identità di Bézout, 29
ipotesi di Riemann, 40, 110
De La Vallée-Poussin, 40 Ishaq-al-Kindi, 2
decifrare, 4
decriptare, 4 Karp, 21
Diffie-Hellman, criptosistema, 144 Kayal, 92, 114
digrafo, 7 Kilian,94
divisibile, 27 Kocher, 157
doppio lucchetto, 147 Kronecker, 47
Durfree, 156
legge di reciprocità quadratica di Gauss,
Edmonds,21
73,76
ElGamal, criptosistema, 148
Lehmer,99
Ente Certificatore, 160
Lenstra, 93, 124
Eratostene, 42
algoritmo, 138
Eulero, 45, 46, 70
logaritmo discreto, 68, 88, 145
pseudoprimo, 103
Lucas, 45, 98
fattorizzazione
alla Fermat, 132 macchina di Turing, 20
problema, 127 Massey-Omura, cripto sistema, 147
Fermat massimo comune divisore, 28
congettura, 43 Merkle, 150
numero di, 42 Merkle-Hellman
piccolo teorema, 59 criptosistema, 150
ultimo teorema, 48 Mersenne, numero di, 45
Findley,46 metodo p, 129
firma digitale, 159 metodo p - 1, 128
Fouvry,118 Micali, 164, 167
Franklin, 157 Miller-Rabin
funzione algoritmo di primalità, 107
di Eulero, 39, 60 minimo comune multiplo, 30
di Riemann, 39 minimo resto assoluto, 134
hash, 160 multiplo, 27
impronta, 160
Nowack, 46
Gauss, 39, 44 numero
Indice analitico 177

perfetto, 46 Reiter, 157


primo, 33 residuo quadratico modulo p, 69
pseudocasuale, 154 resto, 27
Riemann,39
Omura, 147 ipotesi, 40
Rivest, 151
Pepin, 44 Rumely,93
piccolo teorema di Fermat, 59
poker telefonico, 165 Sarrus,95
Pollard Saxena, 92, 114
metodo p, 129 Shafer,46
metodo p-I, 128 Shamir, 151
Pomerance, 93, 97, 124 Shor, 94
potenza simbolo
modulo N,58 di Jacobi, 74
perfetta, 116 di Legendre, 70
primi Slowinski, 45
gemelli, 38 smartcard, 157
primo, 33 Solovay-Strassen
di Fermat, 42 algoritmo di primalità, 106
di Germain, 47 supercrescente, sequenza, 149
di Mersenne, 45 Sylow, 105
problema
N P-completo, 24 teorema
del logaritmo discreto, 88 dei numeri primi, 40
della fattorizzazione, 41, 127 del quoziente e del resto, 27
della primalità, 41, 91 di Bernstein-Berrizbeitia, 123
dello zaino, 148 di Lagrange, 64
supercrescente, 149 di Lenstra-Pomerance, 124
problemi di Sylow, 105
del millennio, 19 fondamentale dell' Aritmetica, 34
protocollo tesi di
a conoscenza zero, 161 Edmonds-Cook-Karp, 21
di Goldwasser-Micali, 167 Thring,20
pseudocasuale, numero, 154 testa o croce telefonico, 162
pseudoprimo, 96 Turing, 3, 20
di Carmichael, 96 macchina, 20
di Eulero, 103
forte, 108 ultimo teorema di Fermat, 48
punto all'infinito, 83
Venkatesan, 153
quadrato modulo N,53 Vernam, cifrario, 14
quantistico, algoritmo, 94 Von Neumann, 21
quoziente, 27
Weil,47
Rabin, 21, 107 Wiles,49
radice modulo N,53 Wilson, 94
Springer - Collana Unitext

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

A. Bernasconi, B. Codenotti, G. Resta


Metodi matematici in complessità computazionale
1999, X+364 pp, ISBN 88-470-0060-2

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. Graffi, M. Degli Esposti


Fisica matematica discreta
2003, X+248 pp, ISBN 88-470-0212-5

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)

A partire dal 2004, i volumi della serie sono contrassegnati da un


numero di identificazione

13. A. Quarteroni, F. Saleri


Introduzione al Calcolo Scientifico (2a Ed.)
2004, X+ 262 pp, ISBN 88-470-0256-7
(la edizione 2002, ISBN 88-470-0149-8)

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

17. L. Formaggia, F. Saleri, A. Veneziani


Applicazioni ed esercizi di modellistica numerica
per problemi differenziali
2005, VIII + 396 pp, ISBN 88-470-0257-5

18. S. Salsa, G. Verzini


Equazioni a derivate parziali - Complementi ed esercizi
2005, VIII +406 pp, ISBN 88-470-0260-5

19. C. Canuto, A. Tabacco


Analisi Matematica I (2a Ed.)
2005, XII+448 pp, ISBN 88-470-0337-7
(la edizione, 2003, XII+376 pp, ISBN 88-470-0220-6)

20. F. Biagini, M. Campanino


Elementi di Probabilità e Statistica
2006, XII + 236 pp, ISBN 88-470-0330-X

21. S. Leonesi, C. Toffalori


Numeri e Crittografia
2006, VIII + 177 pp, ISBN 88-470-0331-8

Potrebbero piacerti anche