Teorema di Rabin (forma semplificata).

Teoria dei numeri
Lezione del giorno 6 maggio 2008
Test di primalità di Rabin-Miller
E’ un test di primalità probabilistico, che si applica ad un input n>1 naturale dispari (non è una
restrizione sostanziale perché un naturale pari è sempre composto, tranne nel caso n=2).
Rispetto al test di Fermat non presenta “eccezioni” (come i numeri di Carmichael) ed inoltre la
probabilità che un numero composto superi il test è 1/4 (contro il 1/2 del test di Fermat per i
numeri non di Carmichael).
I passi dell’algoritmo del test di Rabin-Miller sono:
1) in input il naturale n>1 dispari
2) si calcola la massima potenza 2s di base 2 ed esponente s>0 tale che 2s sia divisore del numero
pari n-1, e si scrive: n-1=2st, con t>0 naturale dispari
3) si sceglie casualmente un intero a con 1an-1 (detto base)
4) si costruiscono le riduzioni modulo n delle s potenze di base a ed esponente t, 21t, 22t, ….. , 2s-1t:
i
a 2 t modn i=0,1,…..,s-1
5) se è verificata almeno una delle seguenti condizioni:
i
a t modn =1 oppure a 2 t modn =n-1 per qualche i=0,1,….,s-1
si esce con output ”n è primo”, altrimenti si esce con output “n è composto”.
Notiamo che le condizioni del passo 5) equivalgono alle congruenze:
i
at1 (mod n), a 2 t -1 (mod n).
Verifichiamo prima di tutto che un input n primo (dispari) supera sempre il test.
Utilizzeremo la proprietà seguente: se n è primo e se x è un naturale tale che x21 (mod n) , allora
x1 (mod n) (infatti da x21 (mod n) segue n(x2-1), n(x-1)(x+1), n(x-1) oppure n(x+1)).
Supponiamo dunque l’input n primo (dispari) e per assurdo supponiamo non verificata nessuna
delle condizioni del passo 5); essendo a non multiplo di n, per il Piccolo Teorema di Fermat si ha:
s
an-1= a 2 t = (a 2
s -1
) 1 (mod n)
t 2
e per quanto detto sopra si ha a 2
condizioni del passo 5)) a 2
s-1
t
s-1
t
= (a 2
1 (mod n), ma allora (non essendo verificata nessuna delle
s-2
) 1, a 2
t 2
s -2
t
1, a 2
s -2
t
1, e così via procedendo a ritroso,
1
fino ad arrivare ad a 2 t = (a t ) 2 1, a t 1, contraddizione perchè a t 1, a t -1 sono fra le
condizioni del passo 5).
Esaminiamo poi la complessità dell’algoritmo.
Nel passo 2), per rappresentare n-1 nella forma n-1=2st, con t>0 naturale dispari, si tratta di
effettuare s successive divisioni per 2 (fermandosi quando il quoziente è dispari): queste divisioni
consistono semplicemente nell’elidere le cifre =0 a destra nella rappresentazione binaria di n-1.
Nel passo 4) si tratta di calcolare (come già notato) le riduzioni modulo n delle s potenze:
i
a 2 t modn dove i=0,1,….,s-1
ognuna con esponente e base <n, e si può utilizzare l’esponenziazione modulare, che ha complessità
polinomiale di ordine O(k3) se k=L(n) è la lunghezza binaria di n (notare anche che si possono
semplificare i calcoli osservando che ognuna di tali s potenze è il quadrato della precedente, quindi
dal calcolo della riduzione modulo n della prima at si possono ricavare facilmente le riduzioni delle
successive, quadrando ripetutamente). Poiché 2sn-1<n<2k, si ha s<k, dunque l’algoritmo ha in
totale complessità di calcolo polinomiale di ordine O(k4).
Anche per il test di Rabin-Miller, come per il test di Fermat, può avvenire che un input n composto
(dispari) superi il test, “fingendo” di essere primo.
Diremo che un naturale n composto dispari è fortemente pseudoprimo nella base a (dove 1an-1
è la base scelta casualmente nel passo 3)), se n supera il test di Rabin-Miller per tale scelta di a.
Ricordiamo che n composto é detto pseudoprimo nella base a, se n supera il test di Fermat per tale
scelta di a, cioè se a,n sono coprimi e se an-11 (mod n).
Ma allora se n composto (dispari) è fortemente pseudoprimo nella base a, certamente n è anche
pseudoprimo nella stessa base a: infatti, essendo verificata una delle condizioni del passo 5),
s
s -1
quadrando successivamente si ottiene (essendo (-1)2=1) an-1= a 2 t = (a 2 t ) 2 1 (mod n) (la proprietà
che a,n sono coprimi è ovvia, perché in Zn si ha che [a] è invertibile con inverso [an-2]).
Esempio.
Consideriamo il minimo numero di Carmichael n=561=31117.
Sappiamo che esso è pseudoprimo in tutte le basi a tali che a,561 sono coprimi, quindi in tutte
queste basi (che sono la maggioranza) “finge” di essere primo superando il test di Fermat.
Una di tali basi è per esempio a=2; se utilizziamo con tale base il test di Rabin-Miller, si ha:
n-1=560=2st dove s=4, t=35, le potenze da studiare sono 235,2235=270, 2435=2140, 2835=2280, con le
seguenti riduzioni modulo 561
235mod561=263
270mod561=(263)2mod561=166
2140mod561=(166)2mod561=67
2280mod561=(67)2mod561=1
quindi non é verificata nessuna delle condizioni del passo 4), e il numero n=561 non supera il test di
Rabin-Miller nella base a=2 (cioé 561é soltanto pseudoprimo nella base a=2, ma non é fortemente
pseudoprimo nella stessa base): 561 “si rivela” composto utilizzando la base a=2 nel test di RabinMiller.
Per concludere in modo definitivo che il test di Rabin-Miller sia un test di primalità probabilistico,
dobbiamo calcolare un maggiorante per la probabilità che un input n composto (dispari) superi il
test per una scelta casuale della base a.
In effetti storicamente Miller (1977) implementò per primo il test, ma avendo come scopo la
costruzione di un test di primalità deterministico di complessità polinomiale: aveva infatti
congetturato che se n è un input composto (dispari) di lunghezza binaria k, allora esiste una base a
con 1a2k2 in cui n non è fortemente pseudoprimo (cioè in cui n non supera il test rivelando di
essere composto); se tale congettura fosse vera (ma nessuno ha trovato una dimostrazione di ciò) il
test diventerebbe deterministico, perché non si dovrebbe scegliere casualmente la base a, ma farle
assumere tutti i valori nell’intervallo [1, 2k2] e se il test è sempre superato concludere con certezza
che n è primo (la complessità del test è polinomiale di ordine O(k6)).
Solo in seguito Rabin (1980) ebbe l’idea di utilizzare lo stesso test ma come test di primalità
probabilistico, e dimostrò che la probabilità che un numero composto superi il test è 1/4: quindi
eseguendo il test k volte, con k scelte indipendenti della base casuale a, la probabilità che un
numero composto superi tutte le volte il test è 1/4k.
Poiché la dimostrazione del Teorema di Rabin è molto macchinosa, ci limiteremo ad una forma
semplificata in cui però la maggiorazione ottenuta per la probabilità è 1/2 (come nel test di Fermat),
ma senza le eccezioni presentate nel test di Fermat dai numeri di Carmichael:
Teorema di Rabin (forma semplificata).
Sia n>1 un numero naturale composto dispari. Il numero di basi a (con 1an-1) in cui n è
fortemente pseudoprimo è  (n)/2.
Dimostrazione:
Se n non è un numero di Carmichael, sappiamo che il numero delle basi a in cui n è pseudoprimo è
 (n)/2, e poiché se n è fortemente pseudoprimo nella base a, n è pseudoprimo nella stessa base a,
si ha la tesi.
Quindi supponiamo che n sia un numero di Carmichael.
Sia n-1=2st, con s>0, t naturale dispari.
Esiste qualche esponente k fra t, 2t, 22t,…,2s-1t per il quale la congruenza xk-1 (mod n) abbia
qualche soluzione x con 1xn-1 (per esempio k=t, x=n-1, perché (n-1)t(-1)t-1 (mod n)).
Dunque possiamo considerare il massimo esponente k fra t, 2t, 22t,…,2s-1t per il quale la congruenza
xk-1 (mod n) abbia qualche soluzione x con 1xn-1, e sia x=a una tale soluzione. Notiamo che
a,n sono coprimi: infatti si ha a2k1 (mod n), e [a] è invertibile in Zn con inverso [a2k-1].
Essendo n numero di Carmichael, per il criterio di Korselt n è prodotto di primi distinti:
n = p1p2…..pr
(r>1, pi primi distinti dispari)
Consideriamo i numeri coprimi v=p1, z=p2…..pr ; per il Teorema Cinese del Resto esiste una
soluzione del sistema di 2 congruenze:
x  a (mod v)

 x  1 (mod z)
Se si considera una soluzione canonica x si ha 0xvz-1=n-1, anzi 1x n-1 (perché 0 non è
soluzione della seconda congruenza). Inoltre ak-1 (mod n), quindi (essendo vn) a maggior ragione
ak-1 (mod v), xkak-1 (mod v), xk1k=1 (mod z). Ma allora non si ha xk1 (mod n) (se fosse
xk+1 (mod n), sarebbe 1-1 (mod v), impossibile perché v è dispari; se invece fosse xk-1 (mod n),
sarebbe -11 (mod z), impossibile perché z è dispari). Infine x,n sono coprimi: se per assurdo non lo
fossero, x sarebbe multiplo di qualche pi con i=1,2,…,r; ma x non è multiplo di v=p1 (dalla prima
congruenza del sistema seguirebbe p1a mentre a,n sono coprimi) ed x non è multiplo di pi con i>1
(dalla seconda congruenza del sistema seguirebbe pi1 contraddizione perché pi è primo)
Consideriamo allora gli insiemi:
A={y interi / 1yn-1, n fortemente pseudoprimo nella base y}
S={y interi / 1yn-1, yk1 (mod n)}
T={y interi / 1yn-1, y,n coprimi}
Si ha AS : se n é fortemente pseudoprimo nella base y, allora o si ha yt1 (mod n) (nel qual caso
i
j
essendo k=2it si ha yk= (y t ) 2 1 (mod n)) oppure si ha y 2 t -1 (mod n) per qualche j=0,1,…,s-1
j
i- j
i- j
(nel qual caso se k=2it si ha per costruzione ji, da cui se j<i yk= (y 2 t ) 2  (1) 2 =1 (mod n),
j
mentre se j=i yk= y 2 t -1 (mod n)).
Si ha poi ST: se yk1 (mod n), y2k1 (mod n), [y] è invertibile in Zn (con inverso [y2k-1]), y,n
sono coprimi.
Se consideriamo il numero x costruito nella prima parte (1x n-1, tale che non é xk1 (mod n),
x,n coprimi) si ha xT-S. Sia g=S, e siano a1,a2,…,ag gli elementi distinti di A. Consideriamo le
riduzioni bi=(aix)modn con i=1,2,…,g: sono g elementi distinti ( se fosse (aix)modn=(ajx)modn con
ij, nel gruppo Zn* sarebbe [ai][x]= [aj][x], [ai]=[aj], contraddizione perché le classi [1],[2],…,[n-1]
sono distinte). Inoltre i bi sono coprimi con n (perché [bi]= [ai][x]Zn*), e sono in T-S (perché se
fosse bik=aikxk1 (mod n), sarebbe xk1 (mod n), contraddizione).
Dunque T-S contiene un sottoinsieme di cardinalità g=S, e si conclude che:
AST/2 =(n)/2
Come conseguenza di tale versione del Teorema di Rabin, si ha che la probabilità che un numero
composto superi il test di Rabin-Miller è 1/2 (in effetti 1/4 nella versione originale del Teorema):
infatti le basi casuali a sono in numero totale di n-1, e se h è il numero di quelle in cui n (composto)
è fortemente pseudoprimo, la probabilità che n (composto) superi il test è (essendo (n)n-1):
h/(n-1)h/(n)[(n)/2]/(n)=1/2
Test di primalità per numeri di forma particolare
Studieremo ora dei test deterministici di primalità che sono di complessità polinomiale, ma che
sono validi solo se l’input è un numero naturale di forma particolare.
In particolare ci occuperemo di numeri naturali della forma 2k1: quelli della forma 2k+1 sono i
cosiddetti numeri di Fermat, quelli della forma 2k-1 sono i cosiddetti numeri di Mersenne.
Dimostreremo un risultato di Pocklington, che, sotto particolari ipotesi, dimostra una notevole
proprietà dei fattori primi di un numero naturale.
Teorema di Pocklington.
Sia n>1 un numero naturale, q un fattore primo di n-1, qm la massima potenza di q che divide n-1.
Se esiste un naturale a con 1an-1 tale che:
1) an-11 (mod n)
2) mcd(a(n-1)/q-1,n)=1
allora per ogni fattore primo p di n, si ha p1 (mod qm), quindi p è della forma 1+tqm, con t intero.
Dimostrazione:
Essendo pn dalla 1) segue an-11 (mod p), quindi [a]n-1=[1] in Zp, ossia [a] è invertibile in Zp (con
inverso [an-2]) e nel gruppo moltiplicativo Zp* il periodo r di [a] è divisore di n-1; inoltre il periodo
r di [a] è anche divisore della cardinalità p-1 di Zp* .
Affermiamo che:
r non è divisore di (n-1)/q
(*)
Infatti se per assurdo fosse (n-1)/q=rk (con k intero), seguirebbe [a](n-1)/q=([a]r)k=[1], p(a(n-1)/q-1), in
contraddizione con la 2).
Ma allora è anche vero che:
q non è divisore di (n-1)/r (notare che (n-1)/r è intero perché r(n-1) )
Infatti se per assurdo fosse (n-1)/r=qh (con h intero), sarebbe (n-1)/q=rh, in contraddizione con (*).
Essendo qm la massima potenza di q che divide n-1, si ha n-1=qmz, con z intero non divisibile per q.
Da r(n-1) segue n-1=rw=qmz (con w intero), e poiché q non è divisore di (n-1)/r=w, per la
fattorizzazione unica si ha che qmr, ma r(p-1), quindi qm(p-1), e si ha la tesi.
Da questo teorema, aggiungendo un’ulteriore ipotesi, si ottiene un test deterministico di primalità:
Teorema di Proth-Pocklington.
Sia n>1 un naturale dispari, e sia 2m la massima potenza di 2 che divide il numero pari n-1, in modo
che sia n-1=2mh con h naturale dispari. Se 2m>h si ha:
n è primo  esiste un naturale a, con 1an-1, tale che a(n-1)/2-1 (mod n)
Dimostrazione:
(): Supponiamo n primo. Per il teorema di Gauss il gruppo moltiplicativo Zn* è ciclico, e se [a] è
un suo generatore, il periodo di [a] è la cardinalità n-1 di Zn* .
Poiché [a]n-1=[1], si ha (a(n-1)/2)2=an-11 (mod n), e per una proprietà già osservata nel test di RabinMiller, ciò implica a(n-1)/21 (mod n), ma a(n-1)/21 (mod n) è da escludere (perché, essendo n il
periodo di [a], si ha [a](n-1)/2[1]), dunque a(n-1)/2-1 (mod n).
(): Supponiamo l’esistenza del naturale a, con 1an-1, tale che a(n-1)/2-1 (mod n), e per assurdo
sia n non primo. Allora esisterebbe un divisore d (non banale) di n con d n , e a maggior ragione
esisterebbe un divisore primo p di n con p n (basta scegliere un fattore primo p di d).
Verifichiamo le ipotesi 1) e 2) del Teorema di Pocklington (con q=2).
La 1) è verificata in quanto basta elevare al quadrato l’ipotesi a(n-1)/2-1 (mod n).
Per quanto riguarda la 2), posto t= mcd(a(n-1)/2-1,n)=1, si ha, essendo a(n-1)/2-1 (mod n), a(n-1)/2+1=kn
(con k intero), 2=kn-(a(n-1)/2-1), ossia t2 (perché tn, t(a(n-1)/2-1)); ma tn con n dispari, dunque
necessariamente t=1, e la 2) è verificata.
Dal Teorema di Pocklington segue allora che p1 (mod 2m), p-1=2mw (con w naturale), 2mp-1<p.
Ma per ipotesi n-1=2mh con h naturale dispari e con 2m>h, da cui n=1+2mh<1+2m2m=1+22m, n22m.
Essendo n dispari la disuguaglianza è stretta cioè n<22m, da cui p n <2m, contraddizione.
Possiamo notare che il teorema fornisce un test di primalità deterministico per input n dispari, tale
che n-1=2mh con h naturale dispari e con 2m>h: tuttavia il test non ha complessità polinomiale,
perché, benché testare la congruenza a(n-1)/2-1 (mod n) equivalga alla condizione a(n-1)/2modnn-1
(verificabile con complessità polinomiale con l’esponenziazione modulare), la ricerca dell’esistenza
di un valore a che soddisfi tale congruenza ha complessità esponenziale (il numero dei valori
possibili di a è <n<2k se k=L(n) ).
Esaminiamo però il caso particolare in cui il numero n>1 dispari sia tale che n-1=2mh con h=1 (cioè
il caso n=2m+1): si ha sempre 2m>h=1, quindi si può applicare il Teorema di Proth-Pocklington, e
vedremo in seguito che in tal caso basta verificare la condizione del teorema solo per a=3 per
concludere con certezza che n è primo.
Otterremo quindi un test di primalità deterministico di complessità polinomiale (detto criterio di
Pepin) valido solo per i numeri della forma n=2m+1 (i numeri di Fermat).
Studiamo dunque i numeri naturali dispari n>1 della forma n=2m+1, con m>0.
Fermat dimostrò che:
Teorema.
Se n=2m+1 (con m>0), e se n è primo, allora necessariamente l’esponente m è una potenza di 2 della
forma m=2r, con r0.
Dimostrazione:
Per ogni naturale s>1 vale la seguente identità algebrica:
(xs-ys)=(x-y)(xs-1+xs-2y+….+xys-2+ys-1)
Per assurdo supponiamo n=2m+1 primo, e l’esponente m non potenza di 2. Se 2r (con r0) è la
massima potenza di 2 che divide r (al limite r=0), si ha m=2rs, con s>1, s dispari.
r
r
r
Dall’identità algebrica precedente, con x= 2(2 ) , y=-1, si ha n= 2(2 )s +1 multiplo di x-y= 2(2 ) +1:
r
tale divisore di n è >1 (perché 2(2 ) >0) ed è <n (perché 2rs>2r, essendo s>1), in contraddizione con
l’ipotesi che n è primo.
r
Visto il risultato precedente, studieremo i cosiddetti numeri di Fermat della forma Fr = 2(2 ) +1 (al
variare dell’intero r0), cercando quali fra essi sono numeri primi.
Notizie sullo stato attuale delle ricerche si possono trovare all’indirizzo:
www.prothsearch.net/fermat.html
r
Fermat congetturò che per ogni intero r0 il numero Fr = 2(2 ) +1 fosse primo.
In effetti per r<5 i valori F0=3, F1=5, F2=17, F3=257, F4=65.537 sono numeri primi.
Ma per r=5 il numero F5=4.294.967.297 non è primo, essendo divisibile per il numero primo 641.
Quindi Fermat si sbagliava: inoltre a tutt’oggi per nessun r5 si è trovato un Fr che sia primo, e si
congettura che un tale Fr non esista (F33 è il numero di Fermat del quale non si conosce la primalità
o la non primalità).