Teoria dei numeri e Crittografia: lezione del 20 aprile 2011 Esempio. Risolviamo il sistema formato dalle prime 2 congruenze del problema del manoscritto cinese: x 1(mod 3) x 2 (mod 5) Le soluzioni della prima congruenza sono della forma x=1+3y, con y intero, e imponendo che siano soluzioni anche della seconda si ottiene la congruenza di primo grado in y: 3y1 (mod 5) Una soluzione è y=ts, dove t si ottiene dividendo il termine noto 1 per il mcd(3,5)=1(quindi t=1), ed s è il coefficiente di 3 nella rappresentazione di 1=mcd(3,5) come combinazione lineare di 3 e 5: quindi da 1=32+5(-1) segue s=2. Si ha y=2, e una soluzione del sistema è allora x=1+3y=7: tutte le soluzioni del sistema sono i numeri della classe di congruenza [7] 15 rappresentata da 7 modulo 15, dunque tutti gli interi della forma 7+15k, con k intero relativo (per esempio i numeri -8, 22, 37 etc…). Nel caso generale di n congruenze si ottiene un risultato analogo a quello del caso n=2: Teorema (Teorema Cinese del Resto nel caso generale di n congruenze). Nel sistema (*), con n>1 qualunque, se i moduli m1 sono a due a due coprimi esiste una soluzione intera x=x0 del sistema e le soluzioni del sistema sono tutti e soli gli interi x1 tali che x1x (mod m1m2…mn) (quindi gli elementi della classe di congruenza x0 m m ...m rappresentata da x0 modulo 1 2 n m1m2…mn). Dimostrazione: Per induzione (Ia forma) su n, con base n=2. Per n=2 la tesi segue dal Teorema precedente. Supponiamo il Teorema vero per n e dimostriamolo per n+1. Dato il sistema di n+1 congruenze: x b1 (mod m1 ) x b (mod m ) 2 2 ..... ...... x bn 1 (mod mn 1 ) Per induzione esiste una soluzione intera z del sistema formato dalle prime n congruenze, e inoltre tutte e sole le soluzioni di tale sistema sono z (mod m1m2…mn). Dunque il sistema di n+1 congruenze dato equivale al sistema di 2 congruenze: x z (mod m1m2 ...mn ) x bn1 (mod mn1 ) Notiamo che i moduli delle 2 congruenze sono coprimi: se per assurdo d=mcd(m1m2…mn,mn+1)>1, considerato un divisore primo p di d sarebbe p divisore del prodotto m1m2…mn (quindi p divisore di qualche mi con i=1,2,…,n) e di mn+1, contro l’ipotesi che mi,mn+1 sono coprimi. Per il Teorema precedente (il caso di 2 congruenze) si ha la tesi per n+1: il sistema ha soluzione x0 e le soluzioni sono tutti e soli gli interi x0 (mod m1m2…mn+1). Fissata una soluzione x=x0 del sistema (*), poiché tutte le soluzioni del sistema sono gli elementi della classe di congruenza modulo m1m2…mn rappresentata da x0, la riduzione modulo m1m2…mn di x0 è anch’essa una soluzione ed è l’unica con valore compreso fra 0,1,…, m1m2…mn-1: tale soluzione è detta soluzione canonica del sistema (ovviamente essa è anche la minima soluzione 0 del sistema) Esempio. Risolviamo il sistema formato dalle 3 congruenze del problema del manoscritto cinese: x 1(mod 3) x 2 (mod 5) x 3(mod 7) Abbiamo già risolto il sistema formato dalle prime 2 congruenze, le cui soluzioni sono 7 (mod 15). Il sistema dato equivale allora al sistema di 2 congruenze: x 7 (mod15) x 3(mod 7) Le soluzioni della prima congruenza sono della forma x=7+15y con y intero, e imponendo che siano soluzioni della seconda si ottiene la congruenza in y: 15y -4 (mod 7). Sostituendo -4 con la sua riduzione modulo 7, si ottiene la congruenza equivalente: 15y 3 (mod 7) una cui soluzione è y=rs , dove r=3/mcd(15,7)= 3, s è il coefficiente di 15 nella rappresentazione di 1=mcd(15,7) come combinazione lineare di 15, 7 (si ha 1=151+7(-2), quindi s=1), e si ha y=3. Una soluzione del sistema iniziale è allora x=7+153= 52. La soluzione canonica del sistema è la riduzione 52mod(357)=52mod105=52 (è l’unica compresa fra 0,1,…,104). Quindi x=52 è la soluzione (minima fra quelle positive) del problema del manoscritto cinese. Ragionando come nel caso della singola congruenza di primo grado, si verifica che nel sistema di n congruenze (supponendo i termini noti bi<mi quindi di lunghezza L(m)=x dove m è il più grande dei moduli mi) si può trovare una soluzione con un algoritmo di complessità O(x3) (almeno nel caso in cui il numero n di congruenze non dipende da m, perché se n=f(m) è funzione di m è ovvio che la complessità dipende da O(f)). Insiemi dotati di operazione. Dato un insieme A non vuoto, una operazione in A è una funzione f: AxA A che associa ad ogni coppia (a,b)A di operandi un unico risultato f(a,b)A (indicato anche con a b). L’operazione soddisfa la proprietà associativa se per ogni a,b,cA si ha (a b) c= a (b c). L’operazione soddisfa la proprietà commutativa se per ogni a,bA si ha a b = b a. Un elemento neutro in A è un elemento eA tale che per ogni aA si ha a e = e a=a. Se vale la proprietà associativa A è un semigruppo; un semigruppo in cui esiste un elemento neutro (necessariamente unico) è un monoide. Se A è un monoide con elemento neutro eA, un elemento aA è simmetrizzabile se esiste a’A (detto simmetrico di a, necessariamente unico) tale che a a’ = a’ a=e. Un gruppo è un monoide in cui tutti gli elementi sono simmetrizzabili. Se A è un monoide, l’insieme A* di tutti gli elementi simmetrizzabili è non vuoto (contiene almeno il neutro di A) ed è un gruppo rispetto alla stessa operazione di A. Useremo spesso la notazione moltiplicativa ab oppure ab per indicare il risultato dell’operazione (in questo caso il neutro sarà detto unità e indicato con 1A oppure semplicemente con 1, il simmetrico di a sarà detto inverso di a e indicato con a-1), oppure la notazione additiva a+b (in questo caso il neutro sarà detto zero e indicato con 0A oppure semplicemente con 0, il simmetrico di a sarà detto opposto di a e indicato con –a). Un semigruppo (rispettivamente un monoide, un gruppo) è detto commutativo se l’operazione soddisfa la proprietà commutativa (spesso se si tratta di un gruppo commutativo si usa il termine gruppo abeliano). Esempi. L’insieme N dei naturali è semigruppo commutativo rispetto alla somma e monoide commutativo rispetto al prodotto. L’insieme Z degli interi relativi è gruppo commutativo rispetto alla somma e monoide commutativo rispetto al prodotto: in questo caso il gruppo degli elementi invertibili è Z*={1,-1}. L’insieme Q dei razionali relativi (rispettivamente R dei reali relativi) è gruppo commutativo rispetto alla somma e monoide commutativo rispetto al prodotto: in questo caso il gruppo degli elementi invertibili è Q*= Q -{0} (rispettivamente R*= R -{0}). Operazioni in Zm Fissato il modulo m>1, nell’insieme Zm={[0],[1],…,[m-1]} delle classi di congruenza modulo m si possono definire le operazioni di somma e prodotto ponendo per ogni [a], [b] Zm: [a] + [b] = [a+b] [a][b] = [ab] L’unicità dei risultati, indipendenti dai rappresentanti a,b delle classi, è garantita dalla compatibilità della congruenza rispetto alle operazioni di somma e prodotto di numeri interi. Rispetto alla somma Zm è gruppo commutativo (il neutro è [0], se 0 a <m l’opposto di [a] è [0] se a=0, mentre è [m-a] se a>0, perché [a]+[m-a]=[m]=[0]) e rispetto al prodotto è monoide commutativo (il neutro è [1]). Rappresentazione digitale delle classi di congruenza e complessità delle operazioni Se rappresentiamo le classi di congruenza [0],[1],…,[m-1] Zm identificandole con i valori numerici 0,1,….,m-1 (per esempio allo scopo di inserirle come dati in un algoritmo implementato al computer), comunque presi i valori a,b=0,1,….,m-1 i risultati delle operazioni di somma e prodotto si ottengono con la riduzione modulo m dei risultati di somma e prodotto aritmetici (la somma è (a+b)modm, il prodotto è (ab)modm). Con tale rappresentazione “digitale” delle classi di congruenza, possiamo calcolare la complessità di calcolo delle operazioni in Zm. Poiché i casi a=0 o b=0 sono banali, possiamo supporre 0<a,b<m. Sia poi x=L(m) la lunghezza (binaria) di m: si ha L(a), L(b)L(m)=x. Complessità della somma in Zm: sappiamo che la somma aritmetica a+b dei numeri naturali a,b ha complessità O(x) (essendo gli addendi di lunghezza x) ; sappiamo anche che L(a+b)max{L(a),L(b)}+1x+1, e dunque il calcolo della riduzione (a+b)modm (essendo ottenuta come resto della divisione di (a+b) per m) ha complessità O((x+1)2+x)=O(x2). Complessità del prodotto in Zm: sappiamo che il prodotto aritmetico ab dei numeri naturali a,b ha complessità O(x2) (essendo i fattori di lunghezza x); sappiamo anche che L(ab)L(a)+L(b) 2x, e dunque il calcolo della riduzione (ab)modm (essendo ottenuta come resto della divisione di ab per m) ha complessità O((2x)2+x2)=O(x2). Complessità del calcolo dell’opposto in Zm: dato a in Zm (con 0 a<m) per calcolare l’opposto rispetto alla somma (escludendo il caso banale a=0) si deve effettuare la sottrazione m-a, con complessità lineare O(x) (dove x=L(m)). Per calcolare la complessità del calcolo dell’inverso in Zm, notiamo che non tutti gli elementi del monoide Zm sono invertibili rispetto al prodotto: per esempio [0] certamente non lo è, in quanto [0][x]=[0] per ogni [x] in Zm. Per quanto riguarda le classi non nulle sussiste il seguente risultato: Teorema. Una classe [a] Zm, con 1am-1, è invertibile rispetto al prodotto se e solo se a,m sono coprimi. Dimostrazione: Se [a] è invertibile, esiste [b] tale che [a][b]= [ab]= [1], da cui ab1 (mod m), ab-1=mk, con k intero relativo, 1=ab+m(-k)=combinazione lineare di a,m, da cui 1=mcd(a,m). Viceversa se 1=mcd(a,m), allora 1=ax+by con x,y interi, ax1 (mod m), [a][x]= [ax]= [1], ossia [x] è l’inverso di [a]. Dalla dimostrazione precedente si deduce che, se a,m sono coprimi, l’inverso di [a] in Zm è [x], dove x è il coefficiente di a nella rappresentazione di 1=mcd(a,m) come combinazione lineare di a,m. Nella rappresentazione digitale degli elementi di Zm, se identifichiamo le classi di congruenza modulo m con i valori numerici 0,1,….,m-1, fissato a con 1 a m-1 troviamo la complessità di calcolo dell’inverso di a in Zm (se a,m sono coprimi). Possiamo utilizzare l’algoritmo Euclideo esteso applicato ai numeri a, m : dopo avere eseguito n divisioni successive (per verificare che 1=mcd(m,a)), si costruiscono le successioni di interi non negativi si ,ti con i=0,1,….,n+1, e si ha 1=m(-1)nsn+a(-1)n+1tn . Per quanto osservato prima, la classe di congruenza [(-1)n+1tn] è l’inverso della classe [a] : dobbiamo solo riportare il rappresentante della classe nel “range” canonico dei numeri compresi fra 0 ed m. Ma ricordiamo che (come visto nell’esame della complessità dell’algoritmo Euclideo esteso), tutti i termini delle 2 successioni costruite sono non superiori al maggiore dei 2 numeri m, a quindi in particolare 0 tn m. Notiamo anche che 0< tn< m (nei casi tn=0,m si ottiene che l’inverso di [a] è [0] , contraddizione). Dunque vi sono 2 casi: - se il numero n delle divisioni effettuate è dispari, allora [(-1)n+1tn])= [tn] con 0< tn< m, e dunque (nella rappresentazione digitale) l’inverso di a è tn - se il numero n delle divisioni effettuate è pari, allora [(-1)n+1tn])= [-tn]=[m-tn] con 0<m - tn< m, e dunque (nella rappresentazione digitale) l’inverso di a è m - tn . In ogni caso per calcolare l’inverso di a, si è eseguito l’algoritmo Euclideo esteso (di complessità O(x3)) e (al più) la sottrazione m - tn (di complessità lineare O(x)). In totale l’inverso di aZm (se esiste) si può calcolare con un algoritmo di complessità O(x3). La funzione di Eulero. Abbiamo dimostrato che, fissato il modulo m>1, le classi invertibili di Zm (rispetto al prodotto) sono tante quanti gli interi a coprimi con m tali che 1 a m-1, o equivalentemente quanti gli interi a coprimi con m tali che 1am: tale numero, che esprime la cardinalità gruppo Zm* degli elementi invertibili del monoide Zm (rispetto al prodotto), è detto funzione di Eulero dell’intero m>1 ed è indicato con (m). Calcoliamo la funzione di Eulero di m nel caso particolare in cui m sia la potenza di un numero primo. Osserviamo che, se m=pk con p primo e k>0, un numero naturale a non è coprimo con m se e solo se a è multiplo di p: infatti se mcd(a,m)=d>1, essendo dpk si ha d=ph con 0<h k (per la fattorizzazione unica) da cui pd e per transitività pa; viceversa se pa allora, posto d=mcd(a,pk), si ha ppk , pa, dunque pd e si conclude che d>1 . Dunque, per calcolare (pk), dobbiamo sottrarre al numero pk (di tutti i naturali compresi fra 1 e pk) il numero di tutti quelli che sono multipli di p: poiché i multipli di p (compresi fra 1 e pk) sono in numero di m/p=pk-1, si ottiene la formula per il calcolo della funzione di Eulero per potenze di primi: (pk)=pk-pk-1=pk-1(p-1) In particolare se m=p primo, si ha: (p)=p-1.