Utente:Francesco.morerio/Test
I Test di primalità con curve ellittiche sono tra le tecniche attualmente più utilizzate per determinare se un numero è primo.[1] L’idea originale è contenuta in un articolo di Shafi Goldwasser e Joe Kilian del 1986.[2] L’algoritmo è stato poi migliorato da Atkin e Morain nel 1992, aggirando il problema di determinare la cardinalità della curva ellittica utilizzata. A differenza di molti test probabilistici, quelli su curve ellittiche dimostrano l’effettiva primalità o compositezza di un dato numero. Rappresentano inoltre una valida alternativa al test di primalità di Pocklington, che ha il difetto di essere difficilmente implementabile in pratica. In effetti i test si basano su un criterio analogo al test di Pocklington, con la differenza che il gruppo è sostituito da , dove E è un’opportuna curva ellittica.
Test di Pocklington
[modifica | modifica wikitesto]Sia N un intero positivo. Sia q un primo che divide N - 1 tale che . Se esiste un intero a tale che:
Allora N è primo.
Dimostrazione
[modifica | modifica wikitesto]Se per assurdo N non fosse primo, esisterebbe un primo p che divide N tale da risultare .
Dato che segue che q e p-1 sono coprimi e quindi dall’Identità di Bézout deduciamo l'esistenza di un intero u tale che .
Segue che
per la condizione 1. Questo però contraddice la 2. Assurdo.
La prossima proposizione è l’analogo del criterio di Pocklington per le curve ellittiche e costituisce la base per l'algoritmo nella forma di Goldwasser-Kilian.
Proposizione
[modifica | modifica wikitesto]Sia N un intero positivo, ed E l'insieme dei punti definito dall’equazione: tale che la cubica a destra non abbia radici multiple.
Si consideri poi E modulo N, cioè su , in cui definiamo l'operazione di gruppo (in notazione additiva) nel modo usuale.
Sia inoltre l’elemento neutro (o punto all’infinito) di E.
Sia m un intero.
Se esiste un primo q che divide m, e tale che ed esiste un punto P su E tale che:
- (oltre che definito).
Allora N è primo.
Dimostrazione
[modifica | modifica wikitesto]Se per assurdo N non fosse primo, allora esisterebbe un primo
- che divide N.
Sia la curva ellittica definita tramite la stessa equazione di E ma considerata modulo p invece che modulo N. Sia l’ordine del gruppo . Dal teorema di Hasse sappiamo che:
e quindi
- .
Dall’Identità di Bézout deduciamo l’invertibilità di q modulo ovvero l’esistenza di un u tale che:
- .
Sia il punto P preso modulo p. Allora su si ha:
- .
per la (1), dato che è ottenuto nello stesso modo di , solo modulo p al posto che modulo N (e per l’ipotesi d’assurdo p divide N).
Ma questo è assurdo perchè deve valere (2): se (m/q)P è definito e diverso da O (mod N), allora lo stesso procedimento ma modulo p invece che modulo N dovrebbe dare come risultato .[3]
Algoritmo Goldwasser–Kilian
[modifica | modifica wikitesto]Dall'ultima proposizione segue un algoritmo per determinare se un numero N è primo.
- Per prima cosa si scelgono tre interi casuali, a, x, y e si pone
- P = (x,y) è un punto su E, dove E è definita da .
- Abbiamo bisogno di un algoritmo per determinare il numero di punti di E. Applicato ad E, questo algoritmo (ad esempio l'algoritmo di Schoof) produce un numero m che corrisponde effettivamente al numero di punti di E, a patto che N sia primo.
- Successivamente si applica un criterio per decidere se la curva ellittica che abbiamo scelto è accettabile. Se si può scrivere m nella forma dove è un intero piccolo e q è probabilmente primo (nel senso che ha superato con successo qualche altro test di primalità), allora teniamo la curva E. Se invece non fosse possibile scrivere m in questa particolare forma, allora dovremmo scegliere (a, x, y) casuali e ricominciare dall’inizio l’algoritmo.
- Posto che siamo in grado di scegliere una curva che soddisfa il criterio appena esposto, si procede calcolando mP and kP. Se a un certo punto del calcolo si incontra un espressione non definita (nella formula per i multipli di P o durante l’algoritmo di Schoof per contare i punti di E), allora immediatamente avremmo un fattore non banale di N (cioè avremmo risposta negativa al test di primalità).
- Se allora è chiaro che N non è primo, perché se N fosse primo allora E avrebbe ordine m e quindi ogni elemento di E darebbe O se moltiplicato per m. Se kP = O, cosa molto improbabile, dobbiamo cominciare da capo con un’altra tripla (a, x, y).
- Ora se e la proposizione ci dice che N è primo, ammesso che q lo sia. La primalità di q si può verificare con lo stesso algoritmo: si innesta così una procedura ricorsiva dove la primalità di N può essere provata tramite la primalità di q e probabili primi sempre più piccoli finché non si raggiungono dei primi certi.[4][3]
Problemi nell’implementazione
[modifica | modifica wikitesto]Secondo Atkine Morain il problema Goldwasser–Kilian è che l’algoritmo di Schoof sembra quasi impossibile da implementare[5] . In effetti l’algoritmo originale di Schoof non è abbastanza efficiente per fornire il numero di punti in un tempo breve. Una variante di questo metodo è stata sviluppata da A. O. L. Atkin e sfrutta il fatto che su opportune curve ellittiche con moltiplicazione complessa è molto più facile calcolare il numero di punti[6][3].
Un secondo problema, più teorico, è la difficoltà di trovare E il cui numero di punti è della forma kq, come prescritto dall'algoritmo. Non c’è nessun teorema noto che garantisca di trovare una tale E in un tempo polinomiale. Per esserne certi, bisognerebbe conoscere qualcosa in più sulla distribuzione dei primi nell'intervallo:
- ,
che sappiamo contenere m per il teorema di Hasse. L'analisi dei tempi di esecuzione dell'algoritmo si basa proprio su congetture (per la verità altamente probabili) su questa distribuzione.[3]
Tempo di esecuzione
[modifica | modifica wikitesto]L'algoritmo Goldwasser-Kilian termina in un tempo polinomiale con probabilità
Prima Congettura
[modifica | modifica wikitesto]Sia il numero di primi più piccoli di x
per x sufficientemente grande.
Dando per dimostrata questa congettura, allora l'algoritmo Goldwasser–Kilian ha un tempo di esecuzione atteso polinomiale per ogni input. Inoltre, se N è di lunghezza k, allora l'algoritmo crea un certificato di dimensione O che può essere verificato in O.[2]
La seguente congettura invece dà un limite superiore al tempo di esecuzione totale dell'algoritmo.
Seconda congettura
[modifica | modifica wikitesto]Supponiamo esistano due costanti positive and tali che il numeri di primi nell'intervallo
sia maggiore di
Allora l'algoritmo Goldwasser-Kilian dimostra la primalità di N in un tempo
Bibliografia e collegamenti esterni
[modifica | modifica wikitesto]- ^ Handbook of Elliptic and Hyperelliptic Curve Cryptography, Boca Raton, Henri Cohen, Gerhard Frey, 2006.
- ^ a b c Goldwasser, Shafi, Kilian, Joe, Almost All Primes Can Be Quickly Certified, http://www.iai.uni-bonn.de/~adrian/ecpp/p316-goldwasser.pdf
- ^ a b c d Koblitz, Neal, A course in Number Theory and Cryptography, 2nd Ed, Springer, 1994
- ^ http://www.mast.queensu.ca/~math418/m418oh/m418oh27.pdf
- ^ Atkin, A.O.L., Morain, F., Elliptic Curves and Primality Proving, http://www.iai.uni-bonn.de/~adrian/ecpp/1992-atkin-morain-elliptic.pdf
- ^ Lenstra, Hendrik W., Efficient Algorithms in Number Theory, https://openaccess.leidenuniv.nl/bitstream/1887/2141/1/346_081.pdf
- ^ Morain, Francois, "Implementation of the Atkin-Goldwasser-Kilian primality testing algorithm", http://www.iai.uni-bonn.de/~adrian/ecpp/1988-morain-implementation.pdf