Miller-Rabin test

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 24 september 2020; kontroller kräver 7 redigeringar .

Miller-Rabin-testet  är ett probabilistiskt polynom -primalitetstest . Miller-Rabin-testet, tillsammans med Fermat -testet och Solovay-Strassen-testet , kan effektivt avgöra om ett givet tal är sammansatt . Det kan dock inte användas för att noggrant bevisa att ett tal är primtal . Men Miller-Rabin-testet används ofta i kryptografi för att generera stora slumpmässiga primtal .

Historik

Miller-Rabin-algoritmen är en modifiering av Miller-algoritmen utvecklad av Gary Miller 1976 . Millers algoritm är deterministisk , men dess riktighet bygger på den obevisade utökade Riemann-hypotesen [1] . Michael Rabin modifierade den 1980 [2] . Miller-Rabin-algoritmen är inte beroende av hypotesens giltighet, utan är probabilistisk.

Applikation

Eftersom den kryptografiska styrkan hos många krypteringsalgoritmer är baserad på hemliga nycklar, som kräver primtal för att skapa (till exempel så här fungerar RSA- chifferet ), när man skapar sådana nycklar är det viktigt att snabbt kunna kontrollera stora tal för primalitet. Probabilistiska primalitetstester, såsom Miller-Rabin-testet och Solovay-Strassen-testet , visar större effektivitet i användningen och enklare uttryck jämfört med deterministiska tester [3] . Miller-Rabin-algoritmen låter dig utföra en kontroll på kort tid och samtidigt ge en ganska liten sannolikhet att siffran faktiskt är sammansatt. [fyra]

Hur algoritmen fungerar

Precis som Fermat- och Nightingale-Strassen- testerna bygger Miller-Rabin-testet på att kontrollera en serie likheter som gäller för primtal. Om åtminstone en sådan jämställdhet misslyckas, bevisar det att siffran är sammansatt [5] .

För Miller-Rabin-testet används följande påstående:

Låta vara ett primtal och , där är udda. Då är minst ett av följande villkor uppfyllt för något av följande:

  1. Det finns ett heltal sådant
Bevis Lemma om kvadratrötter av enhet i ett ändligt fält :

I det sista fältet (för primtal ) finns inga kvadratrötter av enhet, förutom talen 1 , -1

Bevis

Låta:

Sedan:

Enligt Euklids lemma :

 

Enligt Fermats lilla teorem :

Vi kommer att extrahera kvadratrötterna av talet . Enligt lemmat som bevisats ovan kommer vi vid varje steg att få talet 1 eller -1 modulo . Om vi ​​vid något steg får -1 så är den andra av likheterna uppfylld. Annars, vid det sista steget (eftersom ), d.v.s. den första jämställdheten kommer att uppfyllas.  

Om detta påstående (villkor 1 eller 2) är uppfyllt för vissa siffror och (inte nödvändigtvis primtal), kallas talet för Millers primvittne och själva talet  kallas troligt primtal . (Slumpmässigt finns det en 25 % chans att missförstå ett sammansatt tal för ett primtal, men detta kan minskas genom att kontrollera för andra .)

I det fall då motsatsen till det bevisade påståendet är uppfyllt, det vill säga om det finns ett antal så att:

och

då är talet inte primtal. I det här fallet kallas numret ett vittne om att numret är sammansatt.

För udda sammansatta tal , enligt Rabins teorem , finns det inga fler vittnen om enkelhet, där  är Euler-funktionen , så sannolikheten att ett slumpmässigt valt tal kommer att vara ett vittne om enkelhet är mindre än 1/4 [2] [6] .

Tanken med testet är att kontrollera efter slumpmässigt utvalda nummer , om de är vittnen till numrets primahet . Om det finns bevis för att numret är sammansatt, så är numret verkligen sammansatt. Om siffrorna kontrollerades och alla visade sig vara primtal, anses talet vara primtal. För en sådan algoritm kommer sannolikheten att ta ett sammansatt tal för ett primtal vara mindre [7] .

För att kontrollera stora siffror är det vanligt att välja slumpmässiga tal, eftersom fördelningen av primärvittnen och vittnen till ett sammansatt antal bland talen 1, 2, ..., n − 1 inte är känd i förväg. I synnerhet ger Arnolt [8] ett 397-bitars sammansatt nummer, för vilket alla tal mindre än 307 är bevis på enkelhet.

Exempel

Antag att vi vill bestämma om n  = 221 är primtal. Låt oss skriva n − 1 = 220 som 2 2 55, så s  = 2 och d  = 55. Vi väljer godtyckligt ett tal a så att 0 <  a  <  n , låt oss säga a = 174. Låt oss gå vidare till beräkningarna:

Eftersom 220 ≡ −1 mod n , är 221 antingen primtal, eller 174 är ett falskt vittne om att 221 är primtal. Ta en annan godtycklig a , denna gång genom att välja a = 137:

Eftersom 137 är ett vittne om att 221 är sammansatt, var siffran 174 faktiskt ett falskt vittne till enkelhet. Observera att algoritmen inte säger oss något om faktorerna 221 (som är 13 och 17). Men i vissa fall hjälper ytterligare beräkningar till att få fram faktorerna för antalet. [9]

Miller-Rabin algoritm

Implementering

Miller-Rabin-algoritmen parametriseras av antalet rundor r . Det rekommenderas att ta r i storleksordningen , där n  är talet som ska testas.

För ett givet n finns ett heltal s och ett udda heltal t så att . Ett slumpmässigt tal a väljs , 1 < a < n . Om a inte bevittnar primiteten av talet n , så ges svaret "n är sammansatt" och algoritmen slutar. Annars väljs ett nytt slumpmässigt nummer a och verifieringsproceduren upprepas. Efter att ha hittat r bevis på enkelhet ges svaret "n är förmodligen primtal" , och algoritmen avslutas [5] .

Algoritmen kan skrivas i pseudokod enligt följande:

Indata : n > 2, ett udda naturligt tal som ska testas för primalitet; k är antalet omgångar. Output : composite , betyder att n är ett sammansatt tal; troligen primtal betyder att n med stor sannolikhet är primtal. Att representera n − 1 som 2 s · t , där t är udda, kan göras genom att successivt dividera n - 1 med 2. slinga A: upprepa k gånger: Välj ett slumpmässigt heltal a i intervallet [2, n − 2] x ← a t mod n , beräknat med exponentieringsalgoritmen modulo om x = 1 eller x = n − 1, gå sedan till nästa iteration av loop A loop B : upprepa s − 1 gånger x ← x 2 mod n om x = 1, returnera sedan sammansättningen om x = n − 1, gå sedan till nästa iteration av slingan A returnerar sammansättningen returnerar förmodligen primtal

Det följer av Rabins teorem att om k slumpmässigt valda tal var vittnen till numrets n primitet, så överstiger inte sannolikheten att n är sammansatt .

Dessutom, för stora värden på n är sannolikheten för att deklarera ett sammansatt tal troligen primtal väsentligt mindre än 4 − k . Damgard, Landrock och Pomerands [10] beräknade några exakta felgränser och föreslog en metod för att välja värdet på k för att erhålla den önskade felgränsen. Sådana gränser kan till exempel användas för att generera troliga primtal. De bör dock inte användas för att testa för primtal av okänt ursprung, eftersom en cracker i kryptografiska system kan försöka ersätta en pseudoprime när en prime krävs. I sådana fall kan man bara lita på felet 4 − k .

Svårighet att arbeta

Om man antar att multiplikationstiden är logaritmisk, med hjälp av snabb modulo multiplikation , är algoritmens komplexitet , där  är antalet rundor. Sålunda är algoritmens gångtid polynom.

Men med hjälp av FFT är det möjligt att minska algoritmens körtid till . I det här fallet, om vi tar , där n är talet som ska kontrolleras, då är komplexiteten hos algoritmen lika med . [elva]

Starkt pseudoprimer

Om talet a är ett vittne till enkelheten hos det sammansatta udda talet n enligt Miller, så sägs talet n i sin tur vara starkt pseudoprimtal i basen a . Om ett tal n är starkt pseudoprime i bas a , då är det också Fermat pseudoprime i bas a och Euler-Jacobi Pseudoprime i bas a . [3]

Till exempel, starkt pseudoprimer i bas 2 bildar sekvensen:

2047, 3277, 4033, 4681, 8321, 15841, 29341, 42799, 49141, 52633, 65281, 74665, … ( OEIS - sekvens A001262 )

och i bas 3, sekvensen:

121, 703, 1891, 3281, 8401, 8911, 10585, 12403, 16531, 18721, 19345, 23521, 31621, … ( OEIS - sekvens A020229 )

Anteckningar

  1. Miller, 1975 .
  2. 12 Rabin , 1980 .
  3. 1 2 Menezes, Oorschot, Vanstone, 1996 , s. 141.
  4. Kormen, 2015 , sid. 147.
  5. 1 2 Thomas Cormen, Charles Leiserson, Ronald Rivest, Clifford Stein. Algoritmer: konstruktion och analys. - 3. - Moskva: Williams, 2013. - S. 1012-1015. — 1328 sid. - ISBN 978-5-8459-1794-2 .
  6. Schoof, 2008 .
  7. Monier, 1980 .
  8. Arnault, 1995 .
  9. Baillie, Wagstaff, 1980 .
  10. Damgård, Landrock, Pomerance, 1993 .
  11. Bruce Schneier. Tillämpad kryptografi. - Moskva: Triumf, 2013. - S. 298. - 816 sid.

Litteratur

Länkar