Utente:Francesco.morerio/Test

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

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.

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:

  1. (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à

[2]

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

[7]


Bibliografia e collegamenti esterni

[modifica | modifica wikitesto]
  1. ^ Handbook of Elliptic and Hyperelliptic Curve Cryptography, Boca Raton, Henri Cohen, Gerhard Frey, 2006.
  2. ^ 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
  3. ^ a b c d Koblitz, Neal, A course in Number Theory and Cryptography, 2nd Ed, Springer, 1994
  4. ^ http://www.mast.queensu.ca/~math418/m418oh/m418oh27.pdf
  5. ^ Atkin, A.O.L., Morain, F., Elliptic Curves and Primality Proving, http://www.iai.uni-bonn.de/~adrian/ecpp/1992-atkin-morain-elliptic.pdf
  6. ^ Lenstra, Hendrik W., Efficient Algorithms in Number Theory, https://openaccess.leidenuniv.nl/bitstream/1887/2141/1/346_081.pdf
  7. ^ Morain, Francois, "Implementation of the Atkin-Goldwasser-Kilian primality testing algorithm", http://www.iai.uni-bonn.de/~adrian/ecpp/1988-morain-implementation.pdf