• Non ci sono risultati.

Teoria dei numeri e Crittografia: lezione del 28 aprile 2011

N/A
N/A
Protected

Academic year: 2021

Condividi "Teoria dei numeri e Crittografia: lezione del 28 aprile 2011"

Copied!
1
0
0

Testo completo

(1)

Teoria dei numeri e Crittografia: lezione del 28 aprile 2011

Nella lezione scorsa abbiamo costruito un algoritmo che, dati in input i numeri naturali a, n (con n>1) fornisce in ouput la parte intera di na: esso ha complessità  O(x4) dove x=L(a).

Osservazione: nell’istruzione in cui si calcola la massima cifra binaria {0,1} tale che:

(2yi-1+)n 2nxi-1+i

ovviamente si deve verificare che la diseguaglianza vale almeno per =0 (altrimenti il valore di  non sarebbe calcolabile):

(*) (2yi-1)n 2nxi-1+i (per ogni i=1,….,k) La (*) si può dimostrare usando l’induzione (Ia forma).

Per i=1 la (*) è vera in quanto (2y0)n=0 2x0+1=1. Supponiamo vera la (*) per i e dimostriamola vera per i+1.

Ricordiamo che per costruzione yi=2yi-1+, xi=2nxi-1+i dove (2yi-1+)n 2nxi-1+i . Si ha allora:

(2yi)n=2n(2yi-1+)n 2n(2nxi-1+i) 2nxi  2nxi+i+1 (essendo i+10) dunque la (*) è vera per i+1.

L’algoritmo precedente (per il calcolo della parte intera di na) si può trasformare facilmente in un algoritmo che risponda al quesito: dati in input i numeri naturali a, n (con n>1) il numero a coincide con la potenza di esponente n di un opportuna base intera ? (per esempio potremmo eseguire un test per decidere se a è un quadrato perfetto, un cubo perfetto etc…..).

Infatti basta calcolare con l’algoritmo precedente la parte intera yk dina, ed verificare se essa coincida esattamente con na: quindi basta aggiungere all’algoritmo una istruzione che esegua il calcolo della potenza ykn e verifichi se il risultato è =a : in caso affermativo a è una potenza n-esima esatta di base naturale (e la base è proprio yk), in caso negativo non lo é.

Tale algoritmo ha anch’esso complessità  O(x4): infatti si deve aggiungere all’algoritmo precedente solo il calcolo della potenza ykn che, come visto nella lezione precedente quando si esaminava il calcolo delle potenze yin , ha complessità  O(x3) .

Infine possiamo notare che si può costruire un algoritmo che risponda al quesito: dato in input un numero naturale a, il numero a coincide con la potenza di esponente n di un opportuna base intera, per un opportuno esponente intero n>1 (notare che n non è fissato a priori).

Infatti (tranne nel caso banale a=1) un eventuale valore dell’esponente n>1 (se esiste) è certamente

<x=L(a) (come già notato nella lezione precedente, se n x allora la parte intera di na è =1 quindi in tale caso a è potenza n-esima di base naturale solo per a=1): quindi basta ripetere l’algoritmo precedente per tutti gli n con 2 n<x: se per nessuno di tali valori il test dà esito positivo, possiamo concludere con certezza che l’input a non è potenza di un opportuna base intera, per nessun esponente n>1; se invece per qualcuno di tali valori n il test dà esito positivo, abbiamo trovato che per quel valore dell’esponente n il numero a è potenza di un opportuna base intera.

Poiché l’algoritmo precedente ha complessità di ordine  O(x4) ed esso viene ripetuto (nel caso peggiore) un numero x-2 di volte, complessivamente questo algoritmo ha complessità polinomiale di ordine  O(x4(x-2))=O(x5).

Algoritmo per la soluzione di sistema somma-prodotto.

Supponiamo che p, q siano due numeri naturali di cui si conoscono somma a=p+q, e prodotto n=pq.

Costruiamo un algoritmo per calcolare, dati in input a, n, i valori di p, q.

Se x=L(n), si ha a n tranne nel caso banale p=q=1: infatti se pq2 si ha a=p+q2ppq=n . Se dunque supponiamo a n si ha L(a) x.

(2)

E’ ben noto che p, q sono soluzioni dell’equazione di secondo grado:

x2 – ax + n = 0 dunque (se p q):

p =( a+2d )/2, p =( a-2d )/2 dove d = a2- 4n.

In tale algoritmo, tranne le moltiplicazioni per 4 e le divisioni per 2 (che si ottengono con semplici aggiunte o cancellazioni di cifre binarie 0 a destra), le uniche operazioni significative sono il calcolo di d = a2- 4n, l’estrazione di 2d , la somma (o differenza) di a e 2d .

Il calcolo di a2 si può eseguire con un algoritmo di complessità  O(x2); poiché L(a2)  2L(a)  2x, L(4n)=2+L(n)=2+x, il calcolo di d = a2- 4n si può eseguire con un algoritmo di complessità O(x);

poiché L(d)  L(a2)  2x, il calcolo di 2d (che sarà per ipotesi un numero naturale quindi coinciderà con la sua parte intera) si può eseguire con un algoritmo di complessità  O((2x)4)=

O(x4) (vedere paragrafo precedente); infine il calcolo della la somma (o differenza) di a e 2d si potrà eseguire con un algoritmo di complessità  O(x).

In totale il calcolo dei numeri p,q si potrà eseguire con un algoritmo di complessità  O(x4) : ciò completerà le considerazioni fatte in precedenza sulla funzione di Eulero e la fattorizzazione unica.

Esponenziazione modulare

Torniamo alla complessità delle operazioni nell’insieme delle classi di congruenza.

Sia m>1 un intero, fissiamo un esponente intero positivo h<m, una classe di congruenza [b]Zm

(possiamo supporre 0b<m), e poniamoci il problema di trovare un algoritmo “efficiente” per calcolare la potenza [bh] (o equivalentemente la riduzione bhmodm): sarebbe anche utile che i numeri coinvolti nei calcoli eseguiti dall’algoritmo non fossero “eccessivamente” grandi rispetto ad m.

Esporremo un algoritmo molto efficiente che risolve tale problema, detto esponenziazione modulare.

Siano x=L(m), t=L(h) le lunghezze (binarie) del modulo m e dell’esponente h: essendo h<m si ha tx. Poiché t rappresenta il numero di cifre binarie di h, si ha una rappresentazione della forma:

h=at-12t-1+ at-22t-2+….+a12+a0 (con ai=0,1, at-1=1)

Costruiamo una successione y0,y1,...,yt di numeri interi 0 ponendo:

y0=1; per ogni i>0 : yi=(yi 1- 2bat i- )modm

Dimostriamo che tale algoritmo risolve il problema iniziale, poiché fornisce il valore della riduzione bhmodm: precisamente dimostriamo che si ha yt= bhmodm.

Dimostriamo prima per induzione che per ogni i con 1 i  t, si ha:

yib(a 2t 1- i 1-+a 2t 2- i 2-+…+. at i 1-+2 a+ t i-) (mod m) (*)

Si ha y1=(y b02 at 1- )modm quindi y1bat 1- (mod m), e la (*) è vera per i=1.

Supponiamo (*) vera per i e dimostriamola per i+1: si hanno le seguenti congruenze modulo : yi+1 (y bi2 at i 1-- )b[ (2 a 2t 1- i+a 2t 2- i 1-+… +. at i 1-+2 a+ t i-)+at i 1- -]=b(a 2t 1- i+a 2t 2- i 1-+… +. a 2 at i- + t i 1- -)

quindi la (*) è vera per i+1.

In particolare, per i=t, si ottiene la congruenza:

ytb(a 2t 1- t 1-+a 2t 2- t 2-+… +. a 2 a1 + 0)= bk (mod m)

Poiché si ha 0≤ yi<m (ogni elemento della successione yi è una riduzione modulo m) la precedente congruenza implica che yt = xkmodm.

Calcoliamo la complessità dell’algoritmo.

Come già notato si ha 0 yi<m per ogni i.

(3)

Inoltre ogni elemento della successione yi (con i>0) si può calcolare (a partire dal precedente) nel modo seguente: si calcola il prodotto yi-12= yi-1yi-1 di 2 fattori di lunghezza  x (con un algoritmo di complessità  O(x2)) ottenendo un risultato di lunghezza  L(yi-1)+ L(yi-1)  2x; si moltiplica tale risultato per bat i- (che è un fattore che coincide con b o con 1 poiché l’esponente at-1 è =0,1) con un algoritmo di complessità  O((2x)2)=O(x2) (perché L(b) x) ottenendo un risultato di lunghezza  2x+x = 3x) ; infine si calcola la riduzione modulo m di tale risultato, con un algoritmo di complessità  O((3x)2=O(x2). Dunque il calcolo di ogni elemento della successione yi (con i>0) si può effettuare con un algoritmo di complessità  O(x2).

Osserviamo anche che il numero degli elementi della successione da costruire è tx, dunque complessivamente l’algoritmo ha complessità  O(x3).

Notiamo che nell’algoritmo anche la grandezza dei numeri coinvolti nei calcoli è limitata (rispetto al modulo m): ad ogni passo, nella costruzione di yi , sono coinvolti sempre numeri non superiori ad m3.

Esempio.

Siano m=341, b=2, e calcoliamo [2340] in Z341.

Si tratta quindi di calcolare con l’esponenziazione modulare la riduzione 2340mod341.

La rappresentazione binaria dell’esponente 340 è:

340 = 128+027+126+025+124+023+122+021+0 = (101010100)2

Seguendo i passi dell’algoritmo, costruiamo la successione y0,y1,y2,y3,y4,y5,y6,y7,y8,y9 con y0=1 e per i>0 : yi=(yi 1 22a9 i-)mod341 , dove at-i è la cifra binaria coefficiente di 2t-i nella rappresentazione di 340.

Si ha, facendo i calcoli:

y1 = 2 ; y2 = 4 ; y3 = 32 ; y4 =1 ; y5 = 2 ; y6 = 4 ; y7 = 32 ; y8 =1 ; y9 = 1 = 2340mod341.

Possiamo allora concludere che [2340]=[1] in Z341.

Osservazione: l’ipotesi che l’esponente h nella esponenziazione modulare sia < m non è restrittiva.

Infatti possiamo dimostrare che:

per ogni esponente naturale k si ha [bk]= [bh] per un opportuno h con h<m (*)

Infatti essendo Zm=m fra gli elementi [b0],…., [bm-1], [bm] ne esisteranno almeno 2 coincidenti, dunque esisteranno interi non negativi r,s m con r>s tali che [bs]= [br].

Dimostriamo la (*): se ks allora è banale (in quanto ks<rm dunque basta porre h=k). Sia dunque k>s: dividiamo (k-s) per (r-s) ottenendo quoziente q e resto t con 0t<r-s

(k-s) = (r-s)q+h

Notiamo che per ogni intero i0 si ha [bs+(r-s)i]= [bs] (utilizzando la Ia forma dell’induzione, la tesi è vera banalmente per i=0; se è vera per i allora [bs+(r-s)(i+1)]= [bs+(r-s)i][br-s]= [bs][br-s]= [br]= [bs] quindi è vera anche per i+1).

Dunque nel nostro caso [bk]=[bs+(r-s)q][bt]=[bs+t] con h=s+t<s+(r-s)=r m, e si ha la tesi.

Dimostriamo alcune proprietà elementari dei gruppi.

Teorema.

Sia G un gruppo (in notazione moltiplicativa).

1) Se a,b,cG, da ac=bc segue a=b (legge di cancellazione a destra); da ca=cb segue a=b (legge di cancellazione a sinistra).

(4)

2) (Lagrange) Se G è commutativo e finito di cardinalità n, per ogni aG il prodotto di n fattori uguali ad a è l’elemento neutro di G: aa….a = 1G (n fattori).

Dimostrazione:

1) Se ac=bc, moltiplicando a destra per l’inverso di c si ha (ac)c-1=(bc)c-1, da cui (per la proprietà associativa) a(cc-1)=b(cc-1), a1G=b1G , a=b. Analogo ragionamento per l’altra legge.

2) Siano a1,a2,…,an gli elementi distinti di G. Per la legge di cancellazione, gli elementi:

aa1,aa2,…,aan

sono distinti, quindi sono n elementi di G, e dunque esauriscono G:

{ aa1,aa2,…,aan } = G = {a1,a2,…,an } Per la proprietà commutativa si ha:

1G 1 n

i i

a

1 1 1

( ) ...

n n n

i i i

i i i

a aa aa a a

  

e per la legge di cancellazione si ha la tesi.

Nota: Si può dimostrare, con altre tecniche, che la 2) del Teorema vale anche nel caso di un gruppo (finito) non commutativo.

Riferimenti

Documenti correlati

Per assurdo sia non vuoto l’insieme S di tutti i numeri naturali &gt;1 non fattorizzabili nel prodotto di un numero finito di numeri primi, e sia a il minimo in S.. In particolare a

La dimostrazione precedente fornisce anche un algoritmo per il calcolo di una soluzione x (se essa esiste cioè se db): basta moltiplicare t (ottenuto dividendo b per d) per

Ricordiamo che un test di primalità probabilistico è un algoritmo tale che, dato in input un numero naturale n&gt;1, dopo una serie di calcoli che coinvolgono anche alcuni

Infatti basta per esempio scegliere m=minimo naturale ³j che sia multiplo di k-j : per tale scelta di m si ha allora b m =b 2m (perché m,2m³j, e perché 2mm (mod k-j),

[r]

Alcuni dei principali argomenti trattati nel corso saranno i seguenti: studio della Teoria dei Numeri (soprattutto l’aritmetica dei numeri interi e in particolare dei numeri

Quest’ultimo risultato dimostra che nella stima dell’ordine della somma di funzioni “prevale” quella di ordine maggiore (se gli ordini delle 2 funzioni sono confrontabili): se

Nella lezione precedente abbiamo detto che sceglieremo come operazione elementare (che funga da “unità di misura” della complessità di un algoritmo) l’operazione di somma sui