fattorizzazione veloce come problema np

FATTORIZZAZIONE VELOCE COME PROBLEMA
NP (NON POLINOMIALE)
Gruppo “B.Riemann”*
Francesco Di Noto, Michele Nardelli
*Gruppo amatoriale per la ricerca matematica sui numeri primi, sulle loro congetture e sulle
loro connessioni con le teorie di stringa
Abstract
In this paper we show some connections between speed
factorization and NP = P Problem
Riassunto
In questo lavoro tratteremo la fattorizzazione veloce come
problema NP (non polinomiale)
1
Prima parte
LA FATTORIZZAZIONE VELOCE
E IL PROBLEMA P = NP (con accenno
alla RSA e al logaritmo discreto)
Sommario
In questo lavoro sulla fattorizzazione si ripropone il
polinomio N + d2 = s2 per una fattorizzazione veloce,
o almeno più veloce di quella tradizionale, nel caso la
semidifferenza d = (q – p)/2 sia piccola, con diversi esempi
pratici. Infine si accenna al logaritmo discreto, e ad una sia
pur lontana ma teoricamente possibile ricerca di un
algoritmo efficiente per il suo calcolo, possibilmente
ispirato dal nostro suddetto polinomio, così come alcuni
attuali algoritmi sono ispirati agli attuali algoritmi per la
2
fattorizzazione degli interi; mentre però questi ultimi
riguardano la crittografia RSA, gli algoritmi per il calcolo
del logaritmo discreto riguardano la crittografia basata sulle
curve ellittiche (EEC), usata nei piccoli dispositivi
elettronici (telefonini, palmari,ecc) che richiedono, com’è
noto, chiavi di cifratura minori rispetto alla crittografia
RSA. E’ una sfida difficile per connettere i due sistemi di
cifratura tramite algoritmi di fattorizzazione e di calcolo
del logaritmo discreto, ma non si sa mai; qualcuno alla fine
potrebbe riuscirci.
---------Su una fattorizzazione più veloce di quella tradizionale
(N/p = q) sono già noti diversi algoritmi e relativi software,
per esempio il PARI/GP in grado di trattare numeri enormi;
o anche l’algoritmo di Shor, che però richiede l’uso di
3
computer quantistici ancora in fase iniziale di
sperimentazione. In questo lavoro riproponiamo il nostro
polinomio:
N + d 2 = s2
(1)
con N = p * q, d = (q-p)/2 ed s = (p + q)/2, e quindi con
N possibile numero RSA = prodotto di p per q, d
semidifferenza ed s semisomma tra p e q. La
semisomma richiama la nota ex congettura di Goldbach
secondo la quale un numero pari N è somma di due numeri
primi p e q, ed è stata trattata nei nostri precedenti lavori;
qui essa interviene come semisomma dei due primi p e q
connessa al loro prodotto N tramite il suddetto polinomio
(1). Tale polinomio è, come vedremo, molto veloce ed
efficiente nel fattorizzare N quando p e q sono due numeri
primi molto vicini, e quindi con valori di d (semidifferenza)
molto bassi (tendenti a zero), e quindi con rapporto q/p
4
molto vicino ad 1. Per i numeri RSA il rapporto tra q e p è
di solito compreso tra 1 e 2, essendo i due numeri primi
comparabili per grandezza (numero delle cifre di cui sono
composti, per esempio di 600 cifre o anche più
attualmente usati per renderli più sicuri e difficili da
individuare, a causa dei lunghissimi tempi di
fattorizzazione classica). Per p e q molto distanti, invece,
conviene la fattorizzazione classica, che inizia con i numeri
primi più piccoli, che però non sono usati nel sistema RSA.
Per fattorizzare questi ultimi, è relativamente più
vantaggioso il nostro polinomio (ed eventuali futuri
miglioramenti dell’algoritmo di Fermat al quale si collega),
tanto più quanto i numeri primi p e q sono vicini tra loro, e
quindi con piccole semidifferenze.
Circa il problema del millennio P = NP (del quale la
fattorizzazione è uno tra i migliaia di casi simili), esso è
5
vero se la fattorizzazione risulta un problema di tipo NP –
completo (questo però non si sa ancora bene), e se anche
la RH fosse vera, poiché in questo caso esisterebbe un
polinomio per la fattorizzazione veramente veloce. Tale
polinomio potrebbe anche essere il nostro, oppure un suo
ancora più efficiente derivato, ancora però da scoprire
(ma il nostro potrebbe già spianare la strada) oppure ancora
un altro polinomio su basi diverse, ma anch’esso ancora
tutto da scoprire. Il vero problema della fattorizzazione dei
numeri RSA, rimane ancora la grandezza dei medesimi, di
centinaia di cifre decimali e almeno 2048 bit, considerati
sicuri. Con il nostro polinomio la difficoltà passa però dal
numero di cifre di N (chiave pubblica) e dei due numeri
primi p e q (chiave privata), al numero di cifre della
semidifferenza, molto più piccolo, e quindi con minore
6
tempo di calcolo.
Il caso limite (fattorizzazione istantanea) sono i numeri
primi gemelli (sconsigliabilissimi quindi per formare
numeri RSA N = p * q con p e q primi gemelli), poiché la
loro differenza è, com’è noto, D = q – p = 2 e quindi la loro
semidifferenza è 1. Quindi il nostro polinomio si riduce ora
a: N + d2 = N + 1 = s2 , da cui ricavare subito
s = √ (N +1) e quindi p = s – 1, e q = s + 1 :
la fattorizzazione è fatta con un solo tentativo,
d2 = 12 = 1. Per semidifferenze più grandi,
occorrono d tentativi, aggiungendo ad N tutti i quadrati
successivi di d:
1, 4, 9, 16, 25,… , finchè non si trova il valore esatto di d,
tale che N + d2 sia il quadrato perfetto di s.
Alcuni esempi pratici:
a) numeri gemelli, per es. p = 29
7
e
q = 31.
N = 29 * 31 = 899
899 +1 = 900;
s √900 = 30
p = s -1 = 30 – 1 = 29; q = s + 1 = 30 + 1 = 31.
b) Numeri primi con differenza 4, e quindi con d = 4/2 = 2
p = 97, q = 97 + 4 = 101
N = 97 * 101 = 9 797
primo tentativo:
N + 1 = 9 798, s = √9 798 = 98,98 non intero
secondo tentativo, con d = 2:
N + d2 = N + 4 = 9 797 +4 = 9 801, s = √9 801 = 99 intero
p = s - d = 99 – 2 = 97, q = s + d = 99 + 2 = 101.
c) numeri primi con differenza D = 30 e d = 15.
p = 97, q = 127
N = 97 * 127 = 12 319
dopo 14 tentativi con s non interi, otteniamo:
8
(con d = 15; d2 = 225)
N = 12 319 + 225 = 12 544 = s2
, s = √12 544 = 112
intero, e quindi questo è l’ultimo tentativo:
p = 112 - 15 = 97 ; q = 112 + 15 = 127.
(Notiamo che 112 è divisibile per 8, che corrisponde al
numero dei modi delle vibrazioni fisiche delle superstringhe
ed è uguale alla seguente relazione di Ramanujan:
∞ cos πtxw'


− πx 2 w '
∫0 cosh πx e dx  142

4 anti log
⋅ 2
πt 2
−
w'

 t w'
4
(
)
φ
'
e
itw
w'
1 

8=
.)
3
  10 + 11 2 

 10 + 7 2 

+ 
log  



4
4
 




Se per esempio, 12 319 fosse un numero RSA, con la
fattorizzazione classica si devono fare 25 tentativi (poiché
97 è il 25° numero primo), mentre con il nostro polinomio
ne bastano solo 15, con risparmio di tempo pari a 25/15 =
1,66 volte minore, ovvero 15/25 = 0,57 cioè quasi la metà,
il che non è poco.
9
Tempo che naturalmente diminuisce ancora al
diminuire di d e quindi dei tentativi fatti per arrivare ad s
numero intero e radice quadrata di N + d2.
Così ora la difficoltà (tempo di calcolo) è minore
poiché si basa sul numero delle cifre di d anziché del
numero di cifre di N, e quindi con relativo risparmio di
tempo. Non è questo il nostro scopo principale (violare il
codice RSA), ma solo quello di conoscere sempre meglio i
maggiori misteri ancora rimasti sui numeri primi; come
appunto la fattorizzazione e la RH. Per quanto riguarda i
problemi minori, la congettura di Goldbach (connessa con il
nostro polinomio tramite la semisomma s) e la congettura
dei numeri primi gemelli (anch’essa connessa col nostro
polinomio tramite la semisomma s = √(N +1) ) abbiamo
raggiunto ottimi risultati, per esempio collegando le due
10
congetture con la scoperta che una coppia di numeri primi
gemelli è sempre l’ultima coppia di Goldbach per N pari di
forma N = 12n (tranne la coppia iniziale di gemelli 3 e 5,
poiché 3 + 5 = 8 che non è di forma 12n, e questo perché tre
non è, insieme a 2, un numero primo di forma 6n + 1); per
tutti gli altri infiniti numeri primi, la loro somma si può
scrivere come
p + q = 6m + 1 + 6n + 1 = 6(m + n), 6(m + n) + 2
(forme che contengono tutti i numeri pari).
I numeri primi gemelli, essendo di forma p = 6n - 1 e
q = 6n +1, si possono sommare come:
6n - 1 + 6n + 1 = 6n + 6n = 12n.
(Anche qui notiamo che 12 è uguale a 24/2, dove il numero
24 corrisponde ai modi di vibrazione delle stringhe
bosoniche, rappresentate dalla seguente equazione di
Ramanujan:
11
∞ cos πtxw'


− πx 2 w '
e
dx 
∫0 cosh πx

142
4 anti log
⋅ 2
πt 2
w'
−

 t w'
4
(
)
e
φ
itw
'
w
'

24 = 
.)
  10 + 11 2 

 10 + 7 2 
+ 

log  



4
4
 




Vediamo ora l’accenno al logaritmo discreto, alle curve
ellittiche e al relativo sistema crittografico (alternativo al
sistema RSA) e usato di solito per telefonini e palmari.
Tale sistema crittografico è basato, invece che sulla difficile
fattorizzazione classica, sull’altrettanto difficile calcolo del
logaritmo discreto, vedasi omonima voce su Wikipedia, che
qui citeremo brevemente:
“… Definiamo perciò il “logaritmo discreto” di un numero x in base
a” quel numero b tale che
ab mod p = x
…“
Il calcolo dei logaritmi discreti sembra un problema
difficile (non sono noti algoritmi efficienti) mentre il
12
problema inverso dell’esponenziazione discreta non lo è.
Questa asimmetria è analoga a quella tra la fattorizzazione
di interi e la moltiplicazione degli interi. Entrambe queste
asimmetrie sono state utilizzate per la costruzione di sistemi
crittografici. Poiché
“ Esistono algoritmi più sofisticati, generalmente ispirati dai simili
algoritmi per la fattorizzazione degli interi”
Si potrebbe cercare ed eventualmente anche trovare un
algoritmo più efficiente anche per il calcolo del logaritmo
discreto, ispirandosi al nostro polinomio di fattorizzazione
più veloce, oggetto di questo lavoro, molto efficiente per
piccoli valori di d. E tale maggiore efficienza potrebbe
presentarsi poi nell’eventuale algoritmo di calcolo più
veloce del logaritmo discreto. E quindi poi più
efficientemente applicabile nella crittografia a curve
ellittiche, così come il nostro lo è per la crittografia RSA.
13
Seconda parte
FATTORIZZAZIONE VELOCE (POLINOMIALE),
PROBLEMA P = NP, RH E (IN)SICUREZZA DELLA
CRITTOGRAFIA RSA
Abstract
In this work we show as speed factorization, RH and RSA are
connected with P = NP millennium problem.
Riassunto
In questo secondo ma breve lavoro sulla fattorizzazione veloce
riprenderemo la relazione tra fattorizzazione veloce come
possibile problema in P, poiché riteniamo vera la RH e la
estendiamo anche alla crittografia RSA, poichè se la RH è vera la
fattorizzazione veloce è un problema in P e quindi la
crittografia RSA non è più sicura.
14
Occorre quindi complicare un po’o rinnovare la crittografia
RSA, per allungare enormemente i tempi di calcolo.
Qui riportiamo l’articolo di del Prof. Luigi Salemi:
sul sito http://www.visainformatica.it/3sat
•
•
•
•
•
•
Lo Spirito della
Prova 24.09.10
Dimostrazione
11.09.10
Spirit of the Proof
24.09.10
Proof 13.09.10
Eseguibile15.09.10
Sorgenti Pascal
Source15.09.10
•
15
•
In figura il confronto tra 2 algoritmi che lavorano in tempo O(2n) e O(n9)
rispetto al n. delle Variabili ipotizzando che entrambi siano capaci di esaminare
1.000.000 di casi al secondo. Per motivi evidenti i tempi sono riportati in scala
logaritmica.
Se siete arrivati qui probabilmente sapete già la differenza tra la classe dei
problemi "P"e "NP", se vi siete persi e mi avete raggiunto per errore vi dico che
nella classe P sono contenuti i problemi per i quali si conosce un algoritmo che li
risolve in tempo Polinomiale, mentre nella classe NP sono contenuti i problemi
per i quali si conosce solo un algoritmo di risoluzione in tempo Esponenziale (ma
beffardamente l'algoritmo di verifica lavora in tempo Polinomiale). Il grafico
chiarisce in modo immediato quanto grande sia la differenza, in relazione ai
tempi, tra le 2 tipologie di algoritmi.
Ciò che il grafico non dice è che i problemi più interessanti (es.: quello del
16
commesso viaggiatore o dei percorsi minimi, quello dello zaino o sub somma, la
scomposizione in fattori primi [su cui si basa quasi tutta la crittografia esistente])
sono nella classe NP. La buona notizia e che ogni tanto un problema da NP si
trasferisce in P perché si trova un algoritmo più efficiente che lavora in tempo
Polinomiale, e questo il caso della "verifica di primarità" che nel 2002 si è
trasferito in P per merito di 3 matematici indiani Manindra Agrawal, Neeraj
Kayal e Nitin Saxena.
Da un bel po' di anni si cerca di provare se le classi P e NP siano effettivamente
distinte (ovvero esiste almeno un problema in NP che mai si potrà trasferire in P)
o se viceversa le 2 classi in realtà coincidono, ma noi non siamo stati ancora capaci
di trovare l'algoritmo unificatore, quello per cui ogni problema di NP si possa
risolvere in tempo Polinomiale
Leonid Levin e Stephen Cook hanno scoperto separatamente, all'inizio
degli anni '70, che tutti i problemi della classe NP si possono ricondurre ad un
unico problema denominato "SAT" in cui occorre risolvere una espressione
booleana trovando, se esiste, una n-upla di valori True/False che soddisfi la
espressione. Come dire risolto SAT risolti tutti, peccato che anche SAT sia un
problema della classe NP.
Subito dopo si è visto che SAT si può ricondurre a "3SAT", un problema in cui
Bisogna trovare, se esiste, la soluzione di una espressione booleana che è formata
dalla congiunzione di Clausole; ogni Clausola essendo composta dalla disgiunzione
di esattamente 3 (da cui il nome 3SAT) Variabili booleane eventualmente negate.
Es: (A1 or ~A2 or A3) and (~A1 or ~A3 or A4) and ..
Penso di avere trovato un Metodo che risolve in tempo Polinomiale ogni
problema 3SAT. Se ho ragione allora P=NP e questo comporta qualche
17
conseguenza negativa (la crittografia tradizionale diventa non sicura), ma
soprattutto tante positive in svariati campi della scienza e della tecnica. Penso che
i risultati della ricerca vanno condivisi in tempo reale, da qui l'idea di realizzare
questa pagina di segnalazione. Ogni commento è ben accetto.
Luigi Salemi
Commento
Pensiamo che il prof. Luigi Salemi abbia ragione, anche per
un altro motivo: poiché pensiamo proprio che la RH sia vera
e se la RH è vera la fattorizzazione sta in P, la crittografia
RSA non è più sicura, e ancora per la nostra congettura sui
numeri RSA, già verificata per il numero RSA – 190 già
fattorizzato con p = 31 seguito da 83 cifre, mentre noi avevamo
previsto p = 29 seguito da 83 cifre, e un risparmio di tempo di
calcolo del 98 % sul totale.
Quindi i gestori del sistema RSA farebbero bene e presto a
migliorarlo o meglio ancora a sostituirlo con un altro ancora
più efficiente, e possibilmente inattaccabile anche dai futuri
computer quantistici (10 000 volte più veloci rispetto ai computer
18
attuali); una soluzione tampone sarebbe quella di usare
numeri primi p e q con qualche milione di cifre anziché poche
centinaia come si è fatto finora.
Riferimenti
Lavori vari sulla fattorizzazione e sui numeri RSA su questo
sito
19