teoria dei numeri

Download Report

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

• N.B.:

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

Numeri di Carmichael

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

Numeri pseudo-primi

Fermat: Dato

n

1. si sceglie a caso un intero

a

, con

1

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

Test di Miller e Rabin: principi

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

Test di Miller e Rabin

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

Teorema Cinese del Resto (CRT)

      risolve sistemi di congruenze del tipo:

x

a1

mod

m1 x

a2

mod 

m2

con

MCD(m i , m j ) = 1

i

j

x

ar

mod

mr

il teorema (CRT) afferma che la soluzione è unica a meno di multipli di

M = m1m2

mr

, ed è uguale a:

x

i r

  1

a i M i y i

mod

M

 dove

Mi = M/mi

e

yi = Mi-1

mod

mi

, per

1

i

r

20

Esponenziazione modulare

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

* = {1,2,…,p-1}

si dimostra che

p

*

è un gruppo ciclico 

g

 

p

*

tale che

p

* = {g

0

, g

1

,…, g

p-2

}

l’esponenziazione modulare è la funzione

f :

  

p

*

definita come segue:

f(z) = g

z

mod

p

21

Esponenziazione modulare

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

Esponenziazione:

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

Generatori modulo p

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

Generatori mod 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

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

Esponenziazione modulare

Altro esempio :   

5

* = {1,2,3,4}

è il gruppo moltiplicativo contenuto nel campo

5

= {0,1,2,3,4} 2

è un generatore di

5

*

; infatti:

5

* = {2

0

,2

1

,2

2

,2

3

} = {1,2,4,3}

possiamo definire la seguente esponenziazione modulare:

f(z) = 2

z

mod

5

 ogni esponenziazione modulare produce una permutazione (one-way) degli elementi di

p

*

26

Esponenziazione modulare

   dato

x

, possiamo calcolare polinomiale

g

x

possiamo supporre che la dimensione dell’input

0

x

è il numero di bit rappresentare gli elementi di mod 

p-2

p

*

, quindi

n =

log

2

p

La rappresentazione in base 2 di x è:

p

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

Esponenziazione modulare

   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:

g

0

, g

1

, g

2

, …, g

x

(sempre mod

n

) problema : fa un numero di iterazioni pari a (esponenziale rispetto a

n

)

x

2

n

28

Esponenziazione modulare

 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

g

2 j

, per

j

{0,1,…,n-1}

, e moltiplicare tra loro solo quelli per cui

x

j

=1

il tutto può essere fatto in tempo polinomiale (rispetto a

n

) tramite il cosiddetto algoritmo “ square-and-multiply ”

29

Esponenziazione modulare

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

Esponenziazione modulare

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

1 1 8 6

j

3 2 1 0

x j

0

111 0

1

11 01

1

1 011

1

ris*ris

1 1 9 3

ris*g

8 6 2

ris*ris

1 1 64

ris*g

8 512

262144 2097152

31

Complessità

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

Esponenziazione e logaritmo discreto

p grande Z* p

y = g x mod p facile

x y

x = log g difficile y 33

Logaritmo discreto

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

Logaritmo discreto

“ 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

Algoritmi per il logaritmo discreto

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

g

x

y (mod p) g

qm+r

y g

r

y.g

-qm

g

r

y.((g

-m

)

q

g

r

Passi del bambino, passi del gigante

y.c

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