Sei sulla pagina 1di 15

Testare la primalità

Metodi probabilistici e algoritmi aleatori

Alessio Proietti
Dipartimento di Matematica e Fisica
Università degli Studi Roma Tre

February 22, 2021

1 / 15
Numeri Primi

Ogni numero intero maggiore di 1 è un numero primo o si fattorizza in maniera unica come
prodotto di numeri primi. Questo è il ben noto teorema fondamentale dell’ aritmetica ed esso
giustifica la centralità dei numeri primi nella teoria dei numeri. Poiché larga parte della
crittografia asimmetrica moderna si fonda sui fatti della teoria dei numeri, i numeri primi
acquistano un ruolo centrale anche in crittografia, dove spesso appaiono come parametri degli
algoritmi.

2 / 15
Numeri Primi /2

Sappiamo che esistono infiniti numeri primi e che non esistono semplice formule per
distinguere numeri primi da numeri composti. Tuttavia conosciamo alcuni fatti importanti
riguardo alla distribuzione dei numeri primi nei numeri naturali, uno di questi fatti è il teorema
dei numeri primi. Quello di cui abbiamo bisogno è un meccanismo per generare numeri primi
(spesso giganti) oppure test per stabilire se un numero è primo. In questa presentazione
parleremo di alcuni test probabilistici per questo problema.

3 / 15
Fattorizzazione
È bene ricordare che anche la fattorizzazione in primi è un problema difficile.
Potremmo suggerire la difficoltà della fattorizzazione quantificando la probabilità di trovare un
fattore di un numero n in maniera aleatoria, infatti vale il:
Theorem (Fattori random)
Supponiamo che n = pq con p e q primi e che α ∼ Uniforme (2, ..., n).
Allora si può dire che
1 1
P(α è un fattore di n) ≤ + .
p q

Inoltre, ripetendo O( n) volte il test, con probabilità almeno 1/2 potremmo trovare un

fattore di n in quanto min{p, q} ≤ n e quindi

1
P(α è un fattore di n) ≤ √ )
n

4 / 15
Test di Primalità

Elenchiamo alcuni test di primalità interessanti:


• algoritmo elementare di primalità
• test di Fermat
• test di Solovay e Strassen
• test di Miller e di Rabin
• algoritmo Las Vegas per la primalità

5 / 15
Algoritmo elementare


C’è un algoritmo elementare che purtroppo ha complessità O( n log n) dato n il numero da
testare. Diciamo purtroppo perché cerchiamo algoritmi con runtime polinomiale in log n che è
proporziale alla lunghezza in bit del numero da testare.

L’ idea fondamentale è di cercare il più piccolo fattore di un numero n tra i primi n numeri
perché solo lı̀ può trovarsi, altrimenti n è primo.

6 / 15
Test di fermat

L’ idea di questo test è avere a dispozione un numero α uniformemente aleatorio in


{2, ..., n − 1} e vedere se n soddisfa la tesi del Piccolo Teorema di Fermat per la base α. L’
algoritmo ha runtime O(log n)!
Riportiamo, per completezza, il teorema usato.

Theorem (Piccolo Fermat)


se n è primo allora ogni intero a soddisfa

an ≡ a (mod n)

7 / 15
Numeri di Carmichael

Il test di fermat non solo può sbagliare, ma esistono i cosiddetti numeri di Carmichael, per i
quali l’ algoritmo fallisce sempre (sono infatti detti pseudoprimi assoluti). Fortunatamente essi
sono assai rari ed escludendoli possiamo avere il seguente teorema molto utile:

Theorem (i numeri di Carmichael sono gli unici problemi per il test di Fermat)
Se n non è di Carmichael, allora vale
1
P(αn−1 ≡ 1 (mod n)) ≤
2

8 / 15
Non ci sono Carmichael ”forti” o di ”Eulero”

Ci sono altri due risultati riguardo l’ esponenziazione in aritmetica modulo p primo e su essi si
possono basare altrettanti test probabilistici. Anche questi due test possono sbagliare,
indicando che un certo n composito è un primo. Questi numeri ”cattivi” sono detti α -
pseudoprimi (di Eulero e forti) per certe basi α. Il risultato sorprendente è che non esistono
pseudoprimi assoluti forti o pseudoprimi assoluti di Eulero.

9 / 15
Test di Solovay e Strassen

Euler dimostrò che:


Theorem (di Eulero)
se n è primo allora ogni intero a soddisfa
a
a(n−1)/2 ≡ (mod n)
n
Si può allora costruire un test, detto di Solovay e Strassen: si sceglie un parametro di sicurezza
t e si testa un numero n scegliendo in maniera aleatoriamente uniforme una base a nel range
[2, n − 1]. Questo test ha runtime O(t log n).

10 / 15
Test di Miller e Rabin

C’è infine un algoritmo, fondamentale, che è un test probabilistico di primalità per n con
runtime O(l log n) (con l = O(log n) a sua volta). Esso si basa sul seguente teorema,

Theorem (proprietà dei numeri primi)


sia p un numero dispari candidato primo che si decompone

p − 1 = 2u r

con rdispari. Se possiamo trovare un intero a che soddisfa


j
ar 6≡ 1 (mod p) e a2 r 6≡ −1 (mod p)

per ogni j ∈ {0, 1, ..., u − 1} allora p è composto.

11 / 15
Probabilità di trovare un witness

Riusciamo a quantificare la probabilità di errore di Miller e Rabin? Si, è infatti la tesi del

Theorem (di errore per algoritmo MR)


Se n è dispari, composto e non è una potenza di primo, allora
1
P(MR dice ”n è primo ”) ≤ .
2

12 / 15
MR v. SS

Mentre per il test di Solovay e Strassen si può dimostrare che la probabilità di trovare un
witness per un numero composto è almeno 1/2 senza possibilità di miglioramento, per Miller
Rabin una analisi più approfondita consente di calcolare che questa probabilità è almeno un
3/4 ed è ottimale asintoticamente.

13 / 15
Algoritmo Las Vegas per la primalità

Adleman e Huang trovarono un test di primalità con possibilità di errore solo se n è primo,
cioè ”nell’ altro verso” rispetto all’ algoritmo di Miller e di Rabin. I due algoritmi possono
essere combinati in un solo algoritmo di tipo Las Vegas.

14 / 15
Grazie per l’ ascolto!

15 / 15