Transcript teoria dei numeri
I numeri primi sono divisibili soltanto per 1 e se stessi Non possono essere espressi come prodotto di altri numeri Numeri primi sono un elemento centrale nella teoria dei numeri 1 è primo, ma generalmente non interessa La lista dei primi 44 numeri primi è:
2 3 5 7 17 19 23 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 1
• • • • •
• b divisore di a: b
a
se a = m b con m intero
p numero primo:
se i suoi divisori sono solo 1 e p
primi di Mersenne:
numeri primi della forma
fattorizzazione di n
:
n = p 1 e1
p 2 e2 ..
p k ek
con
p 1 … p k massimo comun divisore di a , b : primi
,
ei
interi
MCD(a,b) = k
con k più grande divisore di a e di b
0 a , b coprimi (o relativamente primi): MCD(a,b) = 1 2
Teorema (Fermat). Se p è un numero primo e a
3
f (
n
) (per
n
positivo) definito come il numero di interi positivi minori di
n
e coprimi a
n
p.e. 37è primo e così (37) = 36 In generale, per
n
primo f (
n
) =
n
-1 35 Bisogna selezionare tutti gli interi positivi minori di 35 e che sono coprimi ad esso 1, 2, 3, 4, 6, 8, 9, 11, 12, 13, 16, 17, 18, 19, 22, 23, 24, 26, 27, 29, 31, 32, 33, 34 Questi sono 24, sicché (35) = 24 f (n) è sempre pari per n < 3 Per convenzione (0) = 1
4
Per calcolare f (
n
) bisogna contare il numero di elementi da escludere In generale serve la fattorizzazione in primi, ma Per
p
(
p
P
) f
(p)
=
p
-1 Per
p, q
(
p, q
coprimi) f (
pq)
= f
(p)
f
(q)
= (
p
-1)(
q
-1)
La funzione toziente è moltiplicativa
p.e.
f (37) = 36 f (21) = f (3>7) = (3-1)(7-1) = 12
5
6
Se a appartiene a Z
n
a
j
(n) = 1 mod n
allora: equivalentemente:
n divide ( a p divide (a p-1
j
(n - 1) ) - 1) In particolare se p è primo e p non divide a allora: Il caso particolare di p primo, cioè a p-1 = 1 mod p viene detto Piccolo Teorema di Fermat, perché venne scoperto da Fermat (1601-1665), che però non lo dimostrò.
La dimostrazione venne data da Eulero (1707-1783).
Per esempio: n = 15, j (n) = 8, a = 11, 11 8 - 1 = 214358880 = 15 14290592
7
In criptografia si ha spesso bisogno di generare grandi (e random) numeri primi Serve quindi un test di primalità Due tipi di test di primalità: deterministici e probabilistici Un test deterministico determina con sicurezza la primalità Diversi test deterministici: Crivello di Eratostene, test di Lucas-Lehmer , test di curva ellittica , etc Il metodo più naturale è quello di generare un numero casuale
n
di dimensione appropriata, e provare se è primo
8
Crivello basato sul tentativo esaustivo di divisione Tenta di dividere il numero candidato (dispari) per tutti i numeri (primi) minori della sua radice quadrata Possibile usarlo soltanto per numeri piccoli Anche gli altri controlli deterministici sono molto lenti Alternativa è l’uso dei test di primalità statistici I test statistici solo raramente possono identificare un numero composto come primo (per quanto non viceversa) Un numero composto siffatto è chiamato numero pseudoprimo
9
Il crivello di Eratostene
Metodo per individuare tutti i numeri primi minori o uguali ad un certo N. Si costruisce una tavola dei numeri naturali compresi tra 2 ed N, si eliminano in successine tutti i multipli di 2, di 3, di 5 e così via fino a quando non si trova un numero il cui quadrato è maggiore di N.
La tavola contiene a questo punto solo numeri primi N = 30 7.7 = 49 > 30 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 p (30) = 10
10
Test
Lucas-Lehemer
Per ogni primo p, il numero M p =2 p -1 è detto
numero di Mersenne.
Notizie sui numeri di Mersenne primi si possono trovare sul sito: www.mersenne.org
(progetto GIMPS: Great Internet Mersenne Primes Search). Attualmente si conoscono 44 numeri di Mersenne primi: il più grande è stato scoperto nel settembre 2006, ed è il numero 2 32,582,657 -1, ed ha 9.808.358 cifre in base 10. In corrispondenza sono stati trovati 44 numeri perfetti pari. Le tecniche per verificare se un numero di Mersenne è primo fanno uso del cosiddetto criterio di Lucas-Lehmer.
11
Test
Lucas-Lehemer
Definiamo la seguente successione S n di numeri naturali: S 1 = 4; per ogni i>1 S i = S i-1 2 -2 (quindi per esempio S 2 =14, S 3 =194 etc.) Il criterio di Luca-Lehmer afferma che: Dato un numero di Mersenne M p =2 p -1, con p primo >2, si ha: M p è primo S p-1 0 (mod M p ) Il criterio di Lucas-Lehmer fornisce un test deterministico di primalità per i numeri di Mersenne, di complessità polinomiale.
12
Test di primalità
1. Test
deterministici
: se
n
non lo supera è
composto
, se lo supera è primo 2. Test
probabilistici
: se
n
fallisce il test è composto; se lo supera è
probabilmente primo
Efficace test di primalità probabilistico, detto
test ARCL di Adleman, Rumely, Cohen e Lenstra
(con tale test su computer veloci si può verificare la primalità di un numero di 100 cifre in pochi secondi).
Applica il teorema di Fermat
13
Test di primalità
I test deterministici sono computazionalmente più onerosi dei test probabilistici (algoritmi non polinomiali).
2002: algoritmo polinomiale (Indian Institute of Technology) I test probabilistici sono polinomiali, ma devono essere poi ripetuti più e più volte per far tendere a 1 la probabilità di avere realmente individuato un primo.
Per esempio nel test di Miller-Rabin dopo t iterazioni superate positivamente la probabilità che n non sia primo è più piccola di
2 -2t
.
14
Considerazioni sul Teorema di Fermat
Il teorema di Fermat afferma che se n è primo, per ogni a a n-1 =1 mod n Il test di Fermat permette di stabilire con certezza che un numero è composto, ma non può provare che esso sia primo • Inoltre, il test di Fermat prova che un numero è composto, ma non fornisce la sua scomposizione in fattori primi Ne segue che l’inverso del piccolo teorema di Fermat, invece, non è vero, anche se in passato qualcuno ne ha fatto un criterio per stabilire se un numero è primo. 15 Un numero di Carmichael è un intero positivo che soddisfa la congruenza a n-1 =1 mod n Per tutti gli interi a che sono coprimi con n I numeri di Carmichael sono anche detti pseudoprimi di Fermat assoluti 16 Fermat: Dato n 1. si sceglie a caso un intero a , con 2. si calcola a n-1 mod n : 2.1 se il risultato è diverso da 1, allora 2.2 se il risultato vale 1, n n è composto; è pseudo-primo in base a Fermat, Eulero, Dirichlet, ecc. Test di Solovay-Strassen Test di Miller-Rabin 17 n (il numero da sottoporre al test) deve essere dispari. Si pone n-1 = r ·2 s (con r dispari, s 1) Si sceglie a caso un intero a e si calcola: a n-1 2 s mod n = (a r ) mod n n è sicuramente composto se a r mod n 1 e se , per ogni j, 0 j s-1, [2] pag.138 [9] pag.236 (a r j ) mod n -1 18 z = a r mod n certamente composto = 1? =-1? NO j=1 SI SI SI j=s-1? NO z = z 2 mod n NO 1? probabilmente primo j=j+1 NO n-1? SI 19 risolve sistemi di congruenze del tipo: mod mod con MCD(m i , m j ) = 1 i j mod il teorema (CRT) afferma che la soluzione è unica a meno di multipli di , ed è uguale a: x i r 1 a i M i y i mod M dove e mod , per 20 primo esempio di funzione che sembra essere one-way: l’ esponenziazione modulare sia p un numero primo consideriamo il campo p , e in particolare il suo gruppo moltiplicativo p si dimostra che p è un gruppo ciclico p tale che p 0 1 p-2 l’esponenziazione modulare è la funzione p definita come segue: z mod 21 f(z) = g z mod p f(z) = (g g … g) mod p z volte f(z) = [(g mod p) (g mod p) … (g mod p)] mod p z volte Possono essere utilizzati algoritmi più efficienti del precedente per l’esponenziazione modulare 22 esempio per p=11 b 1 2 3 8 9 10 4 5 6 7 1 1 2 3 8 9 10 4 5 6 7 2 1 4 9 9 4 1 5 3 3 5 3 1 8 5 6 3 10 9 4 7 2 4 1 5 4 4 5 1 3 9 9 3 6 1 9 3 3 9 1 4 5 5 4 5 1 10 1 10 1 10 1 1 10 10 x 7 1 7 9 2 4 10 5 3 8 6 8 1 3 5 5 3 1 9 4 4 9 9 1 6 4 7 5 10 3 9 2 8 10 1 1 1 1 1 1 1 1 1 1 Le righe 2,6,7,8 sono i generatori di p=11 colonna 10 p-1 Le colonne p-1, (p-1)2, 2, p-2 evidenziano proprietà notevoli g z mod 11 g,z Z* 11 23 Per ogni primo p , esiste un g < p , detto generatore modulo p o radice primitiva di p, le cui potenze g 1 mod p , g 2 mod p , … g p-1 mod p forniscono tutti gli interi compresi tra 1 e p-1 Es: 2 è uno dei generatori di 11 Mod[2^{1,2,3,4,5,6,7,8,9,10},11] {2,4,8,5,10,9,7,3,6,1} i generatori di p sono F (p-1) ; F (10) = 2×5 = 10×(1-1/2)×(1-1/5) = (2-1)×(5-1) = 4 Th: a è un generatore di Z* n se e solo se a F (n)/q per ogni q divisore primo di F (n) 1 24 i g 1 2 3 4 5 6 7 8 9 10 2 2 4 8 5 10 9 7 3 6 1 6 6 3 7 9 10 5 8 4 2 1 7 7 5 2 3 10 4 6 9 8 1 8 8 9 6 4 10 3 2 5 7 1 g i mod 11 I generatori di p = 11 sono 2, 6, 7,8 In colonna i = 5 si ha p-1=10 In colonna i = 2 manca 1( per ogni b 1 e p-1 b 2 mod p 1 ) 25 Altro esempio : 5 è il gruppo moltiplicativo contenuto nel campo 5 è un generatore di 5 ; infatti: 5 0 1 2 3 possiamo definire la seguente esponenziazione modulare: z mod ogni esponenziazione modulare produce una permutazione (one-way) degli elementi di p 26 dato , possiamo calcolare polinomiale x possiamo supporre che la dimensione dell’input è il numero di bit rappresentare gli elementi di mod p , quindi log 2 La rappresentazione in base 2 di x è: in tempo necessari per x = x n-1 2 n-1 + b n-2 2 n-2 + ……….+ b 1 2 1 + b 0 2 0 x j n 1 0 x j 2 j 27 primo tentativo risultato = 1 while x > 0 : ModExp(p, g, x) do risultato = risultato * g mod p x = x – 1 return risultato in pratica, nella variabile risultato calcola: 0 1 2 x (sempre mod ) problema : fa un numero di iterazioni pari a (esponenziale rispetto a ) n 28 soluzione corretta : poiché vale: g x g 1 n j 0 x j 2 j 1 n j 0 g x j 2 j 1 n j 0 ( g 2 j ) x j mod p allora ci basta calcolare i valori 2 j , per , e moltiplicare tra loro solo quelli per cui j il tutto può essere fatto in tempo polinomiale (rispetto a ) tramite il cosiddetto algoritmo “ square-and-multiply ” 29 algoritmo “ square-and-multiply ”: ModExp(p, g, x) ris = 1 for j = n-1 downto 0 do ris = (ris * ris) mod p if x j = 1 then ris = (ris * g) mod p return ris esempio : 8 7 mod 11 p = 11, g = 8, x = 7, n = 4 osservazione : 8 7 = 2097152 30 esecuzione dell’algoritmo : nella prima colonna, il valore di ris all’inizio della j-esima iterazione nelle ultime due colonne , non è stata fatta la riduzione modulo p ris j x j 0 1 1 1 ris*ris ris*g ris*ris ris*g 262144 2097152 31 1 - Riducendo in modulo il risultato di ogni moltiplicazione si riesce ad operare sempre e solo su numeri di Z* p 2 – Non separando il calcolo dei g i da quello dei ( g i ) bi tempi di esecuzione più brevi si ottengono O( log 2 p ) moltiplicazioni Moltiplicazione e divisione: O((log p) 2 ) operazioni su bit Esponenziazione: O((log p) 3 ) operazioni binarie . Robustezza e tempo d’esecuzione Modulo: da 1024 bit a 2048 bit Tempo: da 1 a 8 32 p grande Z* p y = g x mod p facile x y x = log g difficile y 33 Sia G un gruppo e g un generatore di G. Si consideri l’equazione y=g x il più piccolo intero x che soddisfa l’equazione è il logaritmo discreto di y in base g (log discreto è l’inverso di esponenziazione) Il logaritmo discreto è considerato un problema computazionalmente difficile • x →g x è facile (computazionalmente veloce). • g x →x si crede sia difficile (non possibile in tempo polinomiale, potrebbe essere un esempio di one way function. 34 “ Dati un primo p , un generatore g esiste un unico intero x , 1 x ed un qualunque intero p-1, tale che g x y mod p = y. Z* p , i g 1 2 3 4 5 6 7 8 9 10 2 2 4 8 5 10 9 7 3 6 1 6 6 3 7 9 10 5 8 4 2 1 7 7 5 2 3 10 4 6 9 8 1 8 8 9 6 4 10 3 2 5 7 1 y = 3 g = 2 x = 8 g = 6 x = 2 g = 7 x = 4 g = 8 x = 6 35 Ricerca esauriente polinomiale nel valore del dato esponenziale y p-1 , nel numero di bit n = log 2 T = O(exp (n)) . p : Baby-step Giant-step T = O(exp (n 1/2 )) Index Calculus ( sub-esponenziale ) T = O(exp ((n) 1/2 (ln(n) 1/2 )) Number field sieve ( sub-esponenziale ) T = O(exp ((n) 1/3 (ln(n) 2/3 )) 36 1E+30 1E+27 1E+24 1E+21 1E+18 1E+15 1E+12 1E+09 1E+06 1000 1 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 bit 37 x qm+r r -qm r -m q r q m = sqrt(p) x = q.m + r r q=0 0 g 0 mod p 1 g 1 mod p . . . 2 g 2 mod p m-1 g m-1 mod p Approfondimenti: [3] pag.130 i=1, z=y z = y×c = z ? NO SI fine i=i+1 fine SI = y ? NO 38• N.B.:
Numeri di Carmichael
Numeri pseudo-primi
Test di Miller e Rabin: principi
Test di Miller e Rabin
Teorema Cinese del Resto (CRT)
x
a1
m1 x
a2
m2
x
ar
mr
M = m1m2
mr
Mi = M/mi
yi = Mi-1
mi
1
i
r
Esponenziazione modulare
* = {1,2,…,p-1}
*
g
*
* = {g
, g
,…, g
}
f :
*
f(z) = g
p
Esponenziazione modulare
Esponenziazione:
Generatori modulo p
Generatori mod p
Esponenziazione modulare
* = {1,2,3,4}
= {0,1,2,3,4} 2
*
* = {2
,2
,2
,2
} = {1,2,4,3}
f(z) = 2
5
*
Esponenziazione modulare
x
g
0
x
p-2
*
n =
p
p
Esponenziazione modulare
g
, g
, g
, …, g
n
n
x
2
Esponenziazione modulare
g
j
{0,1,…,n-1}
x
=1
n
Esponenziazione modulare
Esponenziazione modulare
1 1 8 6
3 2 1 0
111 0
11 01
1 011
1 1 9 3
8 6 2
1 1 64
8 512
Complessità
Esponenziazione e logaritmo discreto
Logaritmo discreto
Logaritmo discreto
Algoritmi per il logaritmo discreto
g
y (mod p) g
y g
y.g
g
y.((g
)
g
Passi del bambino, passi del gigante
y.c