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