În matematică , metodele de testare a primalității care folosesc curbe eliptice (ing. - Elliptic Curve Primality Proving , prescurtare ECPP ) sunt una dintre cele mai rapide și mai utilizate metode de testare a primalității [1] . Această idee a fost prezentată de Shafi Goldwasser și Joe Kilian în 1986; a fost transformat în algoritmul A.O.L. Atkin în același an. Ulterior, algoritmul a fost modificat și îmbunătățit de mai multe ori, mai ales de către Atkin și François Morain în 1993 [2] . Conceptul de utilizare a factorizării cu curbe eliptice a fost dezvoltat de Hendrik Lenstraîn 1985 și a fost în curând urmată de utilizarea sa pentru testarea și demonstrarea numerelor prime.
Testul de primalitate a existat încă de pe vremea lui Fermat , când majoritatea algoritmilor se bazau pe factorizare , care devine greoaie atunci când intrarea este mare. Algoritmii moderni rezolvă individual problemele de a determina dacă un număr este prim și care sunt factorii săi . Odată cu apariția perioadei moderne de dezvoltare a criptografiei, aceasta a început să aibă o semnificație practică semnificativă. Deși multe teste moderne dau doar un rezultat probabilist (sau arată că N este compus, sau probabil prim , ca de exemplu în cazul testului Miller-Rabin ), testul curbei eliptice arată că un număr este prim (sau compus) folosind o verificare rapidă. certificat [3] ( engleză ).
Testul de primalitate al curbei eliptice oferă o alternativă (printre altele) la testul Pocklington, care poate fi dificil de implementat în practică. Testul curbei eliptice se bazează pe criterii similare testului Pocklington , pe care se bazează testul corespunzător [4] . Formulăm acum o propunere pe baza căreia testul nostru, care este similar cu criteriul Pocklington, și dă naștere testului Goldwasser-Kilian-Atkin al testului curbei de primalitate eliptică.
Este un algoritm general , ceea ce înseamnă că nu depinde de numere de formă speciale. În prezent, ECPP este, în practică, cel mai rapid algoritm cunoscut pentru verificarea primarității numerelor, dar timpul de execuție în cel mai rău caz (timpul maxim în care o sarcină poate fi finalizată pe o anumită platformă hardware) nu este cunoscut. ESRR funcționează în timp: [5]
pentru unii . Din motive euristice, acest indicator poate fi redus la pentru unele cazuri. ECPP funcționează la fel ca majoritatea celorlalte teste de primalitate , găsește un grup și arată că dimensiunea acestuia este de așa natură încât este primă. Pentru ECPP, un grup este o curbă eliptică peste un set finit de forme pătratice, astfel încât este trivială în raport cu factorul de grup*(?).
ECPP generează un certificat de primalitate Atkin-Goldwaser-Kilian-Morain folosind recursiunea și apoi încearcă să verifice certificatul. Pasul care durează cel mai mult timp CPU este generarea certificatului, deoarece factorizarea trebuie efectuată în câmpul clasei . Certificatul poate fi validat rapid, ceea ce face ca întârzierea acestei operațiuni să fie foarte scurtă.
Din septembrie 2015, cel mai mare număr prim [6] care a fost găsit prin metoda ECPP este valoarea de 30950 de cifre, care este notat în termeni de secvența Lucas ca:
Paul Underwood i-a luat 9 luni pentru a-l obține certificat cu Primo (software-ul lui Marcel Martin).
Fie N un întreg pozitiv, iar E o mulțime, care este determinată de formula . Luați în considerare E peste , folosind legea obișnuită de adunare pe E și scrieți 0 ca element neutru pe E .
Fie m un număr întreg. Dacă există un număr prim q care este un divizor al lui m și mai mare decât și există un punct P pe E astfel încât
(1) mP = 0
2) ( m / q ) P este definit și nu este egal cu 0
Atunci N este un număr prim.
Dacă N este compus, atunci există un număr prim care împarte N. O definim ca o curbă eliptică definită de aceeași ecuație ca E , dar o definim modulo p , nu modulo N. Să definim ca ordinea grupului . După teorema lui Hasse asupra curbelor eliptice, știm
și astfel gcd și există un întreg u cu proprietatea
Fie un punct P estimat modulo p. Astfel, pe avem
folosind (1), deoarece calculat folosind aceleași metode ca mP , cu excepția modulului lui p , mai degrabă decât a modulului lui N (și ).
Acest lucru contrazice (2), deoarece dacă ( m/q ) P este definit și nu este egal cu 0 (mod N ), atunci aceeași metodă modulo p mai degrabă decât mod N va da
Din această afirmație, se poate construi un algoritm pentru a demonstra că întregul N este prim. Acest lucru se face în felul următor:
Alegem trei numere întregi aleatorii a, x, y și mulțimea
Fie acum P = ( x , y ) un punct aparținând lui E , unde E este definit ca . În continuare, avem nevoie de un algoritm pentru a număra numărul de puncte pe E. Aplicat lui E , acest algoritm (Koblitz și alții propun algoritmul lui Schuf [un algoritm pentru numărarea punctelor unei curbe eliptice peste un câmp finit]) va da un număr m care exprimă numărul de puncte de pe curba E peste F N , cu condiția ca N este prim. În continuare, avem un criteriu pentru a decide dacă curba noastră E este acceptabilă.
Dacă putem scrie m unde este un număr întreg mic și q este probabil prim (de exemplu, a trecut unele teste de primalitate probabilistică anterioare) , atunci nu aruncăm E. Dacă nu este posibil să scriem m în această formă, atunci ne aruncăm curba și alegem aleatoriu un alt triplu ( a, x, y ) pentru a începe de la capăt.
Să presupunem că am găsit o curbă care trece sub criteriu, apoi procedăm la calcularea mP și kP . Dacă în orice stadiu al calculului întâlnim o expresie nedefinită (din calculul lui P sau în algoritmul de numărare a numărului de puncte), aceasta ne oferă un factor netrivial N.
Dacă , atunci devine clar că N nu este prim, deoarece dacă N ar fi prim, atunci E ar avea ordinul m , iar orice element al lui E ar deveni 0 atunci când este înmulțit cu m . Dacă Kp = 0, atunci ajungem într-o fundătură și trebuie să începem din nou cu un alt triplu.
Acum, dacă și , atunci afirmația noastră anterioară ne spune că N este prim. Cu toate acestea, există o problemă posibilă, care este simplitatea lui q . Acest lucru trebuie verificat folosind același algoritm. Astfel, am descris o procedură pas cu pas în care primătatea lui N poate fi dovedită folosind primătatea lui q și numerele prime mici probabile, repetând până ajungem la anumite prime și terminăm. [8] [9]
Atkin și Moraine au spus că „problema cu algoritmul Goldwasser-Kilian este că algoritmul Schouf este aproape imposibil de implementat”. [10] Este foarte lent și greoi să se calculeze toate punctele de pe E folosind algoritmul Schuf, care este algoritmul preferat pentru algoritmul Goldwasser-Kilian. Cu toate acestea, algoritmul original al lui Schoof nu este suficient de eficient pentru a oferi calculul numărului de puncte într-o perioadă scurtă de timp. [11] Aceste comentarii trebuie privite într-un context istoric, înainte de îmbunătățirea de către Elkis și Atkin a metodei Schuf.
Într-o lucrare din 1993, Atkin și Moraine au descris un algoritm ECPP care evită dificultățile de utilizare a unui algoritm care se bazează pe un calcul greoi a numărului de puncte (algoritmul lui Schoof). Algoritmul se bazează în continuare pe afirmațiile de mai sus, dar în loc să genereze curbe eliptice la întâmplare și apoi să găsească m corect , ideea lor este să construiască o curbă E pe care să fie ușor de calculat numărul de puncte. Înmulțirea complexă este cheia în construcția curbei.
Acum, dat un anumit N , a cărui simplitate trebuie demonstrată, trebuie să găsim m și q potrivite , la fel ca în algoritmul Goldwasser-Kilian, care vor satisface teorema și vor demonstra simplitatea lui N . (desigur , trebuie găsite și punctul P și curba în sine, E )
ECPP folosește înmulțirea complexă pentru a construi curba E , această metodă ușurează calcularea m (numărul de puncte pe E ). Acum să descriem această metodă:
Utilizarea înmulțirii complexe necesită un discriminant negativ , D, astfel încât D poate fi scris ca produs a două elemente , sau, complet echivalent, putem scrie ecuația:
Pentru unii a, b . Dacă putem descrie N în termenii oricăreia dintre aceste forme, putem crea o curbă eliptică E pe cu înmulțire complexă (detaliată mai jos), iar numărul de puncte este dat de:
Pentru a împărți N în două elemente, trebuie să (unde denotă simbolul Legendre ). Aceasta este o condiție necesară și vom atinge suficiența dacă ordinea grupului h (D) în este 1. Acest lucru se întâmplă numai pentru cele 13 valori ale lui D, care sunt elementele {-3, -4, -7 , -8, -11, -12 , -16, -19, -27, -28, -43, -67, -163}