Primitetsintyg

Inom matematik och datavetenskap är ett primalitetsbevis eller primalitetsbevis ett kortfattat, formellt bevis på att ett tal är primtal. Primalitetscertifikat gör det möjligt att snabbt kontrollera ett nummers primatitet utan att behöva köra ett dyrt eller opålitligt primalitetstest . "Kunct" betyder vanligtvis att beviset bör vara högst polynomiskt större än antalet siffror i själva talet (till exempel, om talet har b bitar kan beviset innehålla ungefär b 2 bitar).

Primalitetscertifikat leder direkt till bevis på att problem som primalitetstestning och komplementet till heltalsfaktorisering ligger i NP , klassen av problem som kan verifieras i polynomtid givet en lösning. Dessa problem ligger redan trivialt i co-NP . Detta var det första starka beviset för att dessa problem inte är NP-kompletta , eftersom om de var det skulle det antyda att NP är en delmängd av co-NP, ett resultat som allmänt anses vara falskt; i själva verket var detta den första demonstrationen av ett problem i NP korsar co-NP som vid den tiden inte var känt för att vara i P.

Att ta fram certifikat för komplementproblemet, för att fastställa att ett tal är sammansatt, är enkelt: det räcker för att ge en icke-trivial divisor. Vanliga probabilistiska primalitetstester såsom Baillie–PSW primalitetstestet , Fermat primalitetstestet och Miller–Rabin primatitetstestet ger också sammansättningscertifikat i händelse av att insatsen är sammansatt, men producerar inte certifikat för primära indata.

Pratt-certifikat

Begreppet primalitetscertifikat introducerades historiskt av Pratt-certifikatet , tänkt 1975 av Vaughan Pratt , som beskrev dess struktur och bevisade att den har polynomstorlek och att den är verifierbar i polynomtid. Det är baserat på Lucas primatitetstestet , som i huvudsak är motsatsen till Fermats lilla teorem med ett tillagt villkor för att göra det sant:

Lucas sats : Antag att vi har ett heltal som är så:
  • a n − 1 ≡ 1 (mod n ),
  • för varje primfaktor q av n − 1 är det inte så att a ( n − 1)/ q ≡ 1 (mod n ).
Då är n primtal.

Med tanke på en sådan a (kallad vittne ) och primtalsfaktoriseringen av n − 1 är det enkelt att snabbt verifiera ovanstående villkor: vi behöver bara göra ett linjärt antal modulära exponentieringar, eftersom varje heltal har färre primtalsfaktorer än bitar, och var och en av dessa kan göras genom exponentiering genom att kvadrera i O(log n ) multiplikationer (se big-O notation ) . Även med heltalsmultiplikation i grundskolan är detta bara O((log n ) 4 ) tid; genom att använda multiplikationsalgoritmen med den mest kända asymptotiska körtiden, Schönhage–Strassen-algoritmen , kan vi sänka denna till O((log n ) 3 (log log n )(log log log n )) tid, eller använda soft-O notation Õ((log n ) 3 ).

Det är dock möjligt att lura en verifierare att acceptera ett sammansatt tal genom att ge det en "primtalsfaktorisering" på n − 1 som inkluderar sammansatta tal. Anta till exempel att vi hävdar att n = 85 är primtal, vilket ger a = 4 och n − 1 = 6 × 14 som "primtalsfaktorisering". Sedan (med q = 6 och q = 14):

  • 4 är coprime till 85,
  • 4 85−1 ≡ 1 (mod 85),
  • 4 (85−1)/6 ≡ 16 (mod 85), 4 (85−1)/14 ≡ 16 (mod 85).

Vi skulle felaktigt dra slutsatsen att 85 är prime. Vi vill inte bara tvinga verifieraren att faktorisera antalet, så ett bättre sätt att undvika detta problem är att ge primalitetscertifikat för var och en av primfaktorerna för n − 1, som bara är mindre instanser av det ursprungliga problemet . Vi fortsätter rekursivt på detta sätt tills vi når ett tal som är känt för att vara primtal, till exempel 2. Vi slutar med ett träd med primtal, vart och ett associerat med ett vittne a . Här är till exempel ett komplett Pratt-certifikat för nummer 229:

  • 229 ( a = 6, 229 − 1 = 2 2 × 3 × 19),
    • 2 (känd primtal),
    • 3 ( a = 2, 3 − 1 = 2),
      • 2 (känd primtal),
    • 19 ( a = 2, 19 − 1 = 2 × 3 2 ),
      • 2 (känd primtal),
      • 3 ( a = 2, 3 − 1 = 2),
        • 2 (känd primtal).

Detta bevisträd kan visas innehålla högst andra värden än 2 genom ett enkelt induktivt bevis (baserat på sats 2 i Pratt). Resultatet håller för 3; i allmänhet, ta p > 3 och låt dess barn i trädet vara p 1 , ..., p k . Enligt den induktiva hypotesen innehåller trädet med rötter vid p i högst värden, så hela trädet innehåller högst

eftersom k ≥ 2, och p 1 ... p k = p − 1. Eftersom varje värde har högst log n bitar, visar detta också att certifikatet har en storlek på O((log n ) 2 ) bitar.

Eftersom det finns andra O(log n )-värden än 2, och varje kräver högst en exponentiering för att verifiera (och exponentieringar dominerar körtiden), är den totala tiden O((log n ) 3 (log log n ) ( log log log n )), eller Õ((log n ) 3 ), vilket är ganska genomförbart för tal i det intervall som beräkningstalteoretiker vanligtvis arbetar med.

Men även om det är användbart i teorin och lätt att verifiera, kräver det att faktiskt generera ett Pratt-certifikat för n faktorisering n − 1 och andra potentiellt stora tal. Detta är enkelt för vissa speciella tal som Fermat-primtal , men för närvarande mycket svårare än enkla primalitetstestning för stora primtal av allmän form.

Atkin–Goldwasser–Kilian–Morain-certifikat

För att ta itu med problemet med effektiv certifikatgenerering för större antal beskrev Shafi Goldwasser och Joe Kilian 1986 en ny typ av certifikat baserad på teorin om elliptiska kurvor . Detta användes i sin tur av AOL Atkin och François Morain som grund för Atkin-Goldwasser-Kilian-Morain-certifikat, som är den typ av certifikat som genereras och verifieras av elliptiska kurvor som bevisar primalitetssystem . Precis som Pratt-certifikat är baserade på Lucas sats, är Atkin-Goldwasser-Kilian-Morain-certifikat baserade på följande sats av Goldwasser och Kilian (lemma 2 av "Nästan alla primtal kan snabbt certifieras"):

Sats : Antag att vi får:
  • ett positivt heltal n som inte är delbart med 2 eller 3;
  • M x , M y , A, B i (heltalen mod n ) som uppfyller M y 2 = M x 3 + AM x + B och med 4A 3 + 27B 2 coprime till n ;
  • a primtal .
Då är M = (M x , M y ) en icke-identitetspunkt på den elliptiska kurvan y 2 = x 3 + Ax + B. Låt k M vara M adderad till sig själv k gånger med hjälp av standard elliptisk kurvaddition. Sedan, om q M är identitetselementet I, så är n primtal.

Tekniskt sett kan en elliptisk kurva bara konstrueras över ett fält, och är bara ett fält om n är primtal, så vi verkar anta resultatet vi försöker att bevisa. Svårigheten uppstår i den elliptiska kurvadditionsalgoritmen, som tar inverser i fältet som kanske inte finns i . Det kan dock visas (lemma 1 av "Nästan alla primtal kan snabbt certifieras") att om vi bara utför beräkningar som om kurvan var väldefinierad och inte vid något tillfälle försöker invertera ett element utan invers, resultatet är fortfarande giltigt; om vi stöter på ett element utan invers, fastställer detta att n är sammansatt.

För att härleda ett certifikat från denna sats kodar vi först M x , M y , A, B och q , kodar sedan rekursivt beviset på primaliteten för q < n , och fortsätter tills vi når ett känt primtal. Detta certifikat har storlek O((log n ) 2 ) och kan verifieras i O((log n ) 4 ) tid. Dessutom kan algoritmen som genererar dessa certifikat visas vara förväntad polynomtid för alla utom en liten del av primtal, och denna bråkdel minskar exponentiellt med storleken på primtal. Följaktligen är den väl lämpad för att generera certifierade stora slumpmässiga primtal, en applikation som är viktig i kryptografiapplikationer som att generera bevisligen giltiga RSA -nycklar.

Pocklington-baserade certifikat

Bevisbar primtalsgenerering baserad på varianter av Pocklingtons teorem (se Pocklingtons primalitetstest ) kan vara effektiva tekniker för att generera primtal (kostnaden är i allmänhet mindre än probabilistisk generering) med den extra fördelen av inbyggda primalitetscertifikat. Även om dessa kan tyckas vara speciella primtal, lägg märke till att varje primtal heltal kan genereras med en Pocklington-baserad bevisbar genereringsalgoritm.

Pocklington Primality Tests

Låt där där är distinkta primtal med ett heltal större än noll och ett vittne så att:

1.

 

 

 

 

()

2. för alla .

 

 

 

 

()

Då är P primtal om något av följande gäller:

a) (se ) eller motsvarande

 

 

 

 

()

b) (se ) R och
  • med ,
  • så att och det finns ett litet primtal så att .

 

 

 

 

()

Pocklington Primality Certificate

Ett Pocklington primtal certifikat består av primtal P, en uppsättning primtal dividerande , var och en med sitt eget Pocklington primtal certifikat eller tillräckligt liten för att vara ett känt primtal och ett vittne .

Bitarna som behövs för detta certifikat (och beräkningskostnadens ordning) bör variera från ungefär version ( b ) till för version ( a )

Ett litet exempel

Låt . Observera att … , .

  • Med 'vittnet' 2 är ekvation 1 uppfylld och 2 med och .
  • För version a behöver certifikatet endast .
  • för version b behöver certifikatet bara men det finns lite mer arbete att göra:
    • och
    • Att använda misslyckas:
    • Att använda lyckas: P är prime.

Effekten av "PRIMES är i P"

"PRIMES is in P" var ett genombrott inom teoretisk datavetenskap. Denna artikel, publicerad av Manindra Agrawal , Nitin Saxena och Neeraj Kayal i augusti 2002, bevisar att det berömda problemet med att kontrollera primaliteten hos ett tal kan lösas deterministiskt i polynomtid. Författarna fick 2006 års Gödelpris och 2006 Fulkersonpris för detta arbete.

Eftersom primalitetstestning nu kan göras deterministiskt i polynomtid med AKS-primalitetstestet , kan ett primtal i sig betraktas som ett certifikat för sin egen primalitet. Detta test körs i Õ((log n ) 6 ) tid. I praktiken är denna metod för verifiering dyrare än verifiering av Pratt-certifikat, men kräver ingen beräkning för att fastställa själva certifikatet.

  1. ^ Vaughan Pratt. "Varje primtal har ett kortfattat intyg". SIAM Journal on Computing , vol. 4, s. 214–220. 1975. Citations , Full-text .
  2. ^ Goldwasser, S. och Kilian, J. "Nästan alla primer kan snabbt certifieras". Proc. 18:e STOC. s. 316–329, 1986. Fulltext .
  3. ^    Atkin A OL ; Morain, F. (1993). "Elliptiska kurvor och primalitet som bevisar" (PDF) . Beräkningsmatematik . 61 (203): 29–68. doi : 10.1090/s0025-5718-1993-1199989-x . JSTOR 2152935 . MR 1199989 .
  4. ^ Pocklington, Henry C. (1914–1916). "Bestämning av primtal eller sammansatt natur av stora tal genom Fermats sats". Proceedings of the Cambridge Philosophical Society . 18 : 29–30.
  5. ^ Crandall, Richard; Pomerance, Carl. "Prime Numbers: A computational perspective" (2 uppl.). "Springer-Verlag, 175 Fifth Ave, New York, New York 10010, USA, 2005".
  6. ^   Brillhart, John ; Lehmer, DH ; Selfridge, JL (april 1975). "Nya primäritetskriterier och faktoriseringar på 2 m ± 1" (PDF) . Beräkningsmatematik . 29 (130): 620–647. doi : 10.1090/S0025-5718-1975-0384673-1 . JSTOR 2005583 .
  7. ^    Agrawal, Manindra ; Kayal, Neeraj ; Saxena, Nitin (september 2004). "PRIMES är i P" (PDF) . Annals of Mathematics . 160 (2): 781–793. doi : 10.4007/annals.2004.160.781 . JSTOR 3597229 . MR 2123939 .

externa länkar