La fattorizzazione e la phi di Eulero Di Cristiano Armellini, cristiano.armellini@alice.it Supponiamo di voler trovare i fattori p, q del numero intero n (anche molto grande). Dalla Teoria dei numeri sappiamo che 11 è la phi di Eulero che rappresenta il numero interi minori di n e primi con n. Essendo p, q numeri primi saranno sicuramente dispari quindi p-1, q-1 sono numeri pari e ovviamente il loro prodotto (p-1)(q-1) sarà divisibile per 4 in quanto è il prodotto di due numeri pari. Ora osserviamo che 1111, dove s = p+q. Allora 1. Tuttavia è noto che se 0,,, deve essere 2 e quindi avremo che 12 e questo implica che 412. In realtà secondo una importante proprietà deve essere ma data la particolarità di n = pq abbiamo potuto ridurre questo limite inferiore. Tra le numerose proprietà dimostrate della funzione phi di Eulero è noto che (detta la costante di Eulero- Mascheroni ):,6,2 3 log log
Dunque se pongo max, 3 loglog loglog Allora abbiamo trovato che 12. Ora ci rimane solo da verificare quali numeri divisibili per 4 contenuti in questo intervallo sono tali,che posto 1 l equazione 0, ci dà soluzioni intere che sono proprio i fattori di n. Infatti,. E ovvio che più è piccolo l intervallo più è veloce la ricerca dei fattori. L obiettivo futuro è quello di trovare delle relazioni per la phi di Eulero che restringano ulteriormente questo range. In effetti dato che non è altro che il numero dei primi con n e minori di n sicuramente in questo insieme ci saranno tutti i numeri primi minori di n ovvero, per il teorema dei numeri primi, o anche. Ovviamente sarà. Tale approssimazione vale comunque per n sufficientemente grande. Quindi possiamo supporre di considerare il nuovo intervallo 2 1 dove,. Nel casi specifico dei problemi RSA, la chiave pubblica è determinata da una coppia di valori (e,n) dove n è il numero da fattorizzare n = pq ed e è un numero intero positivo tale che,1. Quindi in questo caso possiamo escludere dal range di possibili valori di tutti i numeri multipli di 4 e tali che il loro massimo comun divisore con e sia diverso da 1 ovvero tutti i numeri
del range della forma 4 ove m è un intero e è un divisore di e (che per forza di cose deve essere un numero dispari). Questa considerazione (crivello) ci aiuta ad affinare ulteriormente la nostra ricerca. Un altra importante proprietà della funzione phi è la seguente:! ovvero nel caso dei numeri RSA n = pq, p q numeri primi abbiamo 11111 cioè in latri termini 1. Questo vuol dire che 1. Chiamando con allora possiamo considerare l equazione di II grado per trovare,, ovvero p, q: 10, cioè e imponendo il delta maggiore di zero ho 4440 ovvero, dopo semplici passaggi sapendo che Q > 0, 2 1. Allo stesso risultato si poteva facilmente pervenire così: 11 2 cioè 22 quindi 2 1. Facendo variare Q (Q è sempre un numero pari perché è la somma di due numeri pari) si arriverà a quel valore che fornisce valori interi dell equazione di II grado che altro non sono che 1,1, quindi troviamo p, q. Osserviamo che, a titolo di curiosità, dalle relazione 111 discende 12 ovvero otteniamo la relazione già nota 12. Infine ricordiamo che vale dove la funzione sigma è proprio! e in generale ma nel caso degli RSA è vero che 12.
Ricordiamo anche che nei numeri RSA tipicamente, k è un numero razionale compreso tra 1 e 3 (nel 95% dei casi). Allora 1111 ma dato che q essendo il più piccolo dei fattori deve essere 2 allora quindi dopo semplici passaggi algebrici 11. Avere una stima anche di tipo statistico di k, ovvero del rapporto tra il fattore maggiore e il minore può ridurre io range per. Ai risultati precedenti si poteva anche giungere partendo dalla relazione 111 11 ovvero 1 quindi / e ponendo, allora la relazione diventa 1 ovvero 10 e imponendo il delta maggiore di zero abbiamo 211 0 soddisfatta per 12 12 (il primo vincolo è quello che utilizziamo per i problemi RSA come estremo superiore della funzione ). Come pure se 1;1 allora 2 e n=pq porta a 20 dove. Ma ponendo sempre il delta maggiore di zero troviamo che 2 2 in accordo con quanto avevamo già scoperto. Se ci poniamo nel caso del problemi RSA allora possiamo scrivere 111 1 e questo ci porta a pensare che ed n sono in realtà molto vicini. Facendo esempi anche con numero molto piccoli già stimiamo che 0,9. Se in
generale calcoliamo una buona stima di k sapendo che 2 1 quindi. Allora basterà prendere e considerare un numero di cifre di k pari alla parte intera b/2 ove b è il numero di cifre del numero intero n da fattorizzare. Quindi 2 1. Con questo procedimento, specifico per i problemi RSA dove i fattori p, q sono molto grandi ma hanno all incirca le stesse dimensioni (lo stesso numero di cifre intere) l algoritmo di fattorizzazione descritto sopra è molto veloce perché si giunge subito alla stima almeno della prima metà delle cifre di. Basterà poi selezionare gli multipli di 4 e compresi nell intervallo 2 1: quello che 2 1 (teorema di Eulero) sarà il valore cercato di. Una volta fatto ciò si ricava la somma di p+q quindi con l equazione di II grado associata i valori di p, q sapendo il valore di n. Osserviamo inoltre che 3,, allora, ovvero 1 1 1,, ovvero 1 1 1 quindi moltiplicandi per n otteniamo 1 1 1 11 1 cioè 1 1 1 1. In generale se, / allora 1 1 1 1 dove ovviamente R > 3. Resta sempre il problema di capire che valore dare ad R. Se p, q hanno le stesse dimensioni allora R potrebbe essere una potenza di 10 delle stesse dimensioni di p e di q (se n ha 100 cifre p, q avranno 50 cifre quindi R10. Dal momento che abbiamo provato 2 1
possiamo porre il limite superiore 1 1 2 1 per cercare di trovare un R ottimale che limiti il range delle soluzioni nel caso dei numeri RSA. Sviluppando in R si ha 2 1 quindi possiamo pensare di adottare 1 2 11 Un altro modo per calcolare la phi di Eulero consiste nell applicare proprio il teorema di Eulero: se a è intero coprimo con n, MCD(a,n)=1 allora 1. Questo vuol dire che deve esistere un k intero positivo tale che 1 ovvero log 1. Quindi senza perdere di generalità volendo trovare il minimo valore di k che soddisfa tale relazione potremmo pensare di prendere a = 2. Dalle considerazioni precedentemente fatte sul range della funzione phi sappiamo che dovrà essere: log 1 Quindi 2 1/ per n > 6. Ma è anche vero che nel nostro caso log 12 1 quindi 2 1/.Per questioni abbastanza semplici k deve essere dispari. Per finire qualche programma in C++ che sintetizza gli algoritmi descritti
#include <stdio.h> #include <iostream.h> #include <math.h> void main(void) { double n; double x, y; double s; cout << "inserisci il numero n "; cin >> n; s= 2*floor(sqrt(n)-1)+2; x = (s+2-sqrt(pow(s+2,2)-4*n))/2.0; while (floor(x)!= x){ s = s+2; x = (s+2-sqrt(pow(s+2,2)-4*n))/2.0; y = (s+2+sqrt(pow(s+2,2)-4*n))/2.0; cout << "primo fattore " << x; cout << " "; cout << "secondo fattore " <<y ;
#include <stdio.h> #include <iostream.h> #include <math.h> void main(void) { double n; double x, y; double s; double phi; cout << "inserisci il numero n "; cin >> n; phi = floor(n-2*sqrt(n)+1); while (phi/4.!= floor(phi/4)){ phi = phi-1; s = n-phi+1; x = (s-sqrt(pow(s,2)-4*n))/2.; while (x!= floor(x)){ phi = phi -4; s = n-phi+1; x = (s-sqrt(pow(s,2)-4*n))/2.; y = (s+sqrt(pow(s,2)-4*n))/2.; cout << "primo fattore " << x; cout << " "; cout << "secondo fattore " << y; #include <stdio.h> #include <iostream.h> #include <math.h> void main(void) { double n; double x, y; double s; double phi; cout << "inserisci il numero n "; cin >> n; phi = floor(n/(1.7*log(log(n)+3/log(log(n))))); while (phi/4.!= floor(phi/4)){ phi = phi-1; s = n-phi+1; x = (s-sqrt(pow(s,2)-4*n))/2.; while (x!= floor(x)){ phi = phi +4; s = n-phi+1; x = (s-sqrt(pow(s,2)-4*n))/2.; y = (s+sqrt(pow(s,2)-4*n))/2.; cout << "primo fattore " << x; cout << " "; cout << "secondo fattore " << y;