Miller-Rabin-testen er en probabilistisk polynomiel primalitetstest . Miller-Rabin-testen kan sammen med Fermat -testen og Solovay-Strassen-testen effektivt afgøre, om et givet tal er sammensat . Det kan dog ikke bruges til strengt at bevise , at et tal er primtal . Miller-Rabin-testen bruges dog ofte i kryptografi til at generere store tilfældige primtal .
Miller-Rabin-algoritmen er en modifikation af Miller-algoritmen udviklet af Gary Miller i 1976 . Millers algoritme er deterministisk , men dens korrekthed er afhængig af den ubeviste udvidede Riemann-hypotese [1] . Michael Rabin modificerede det i 1980 [2] . Miller-Rabin-algoritmen afhænger ikke af hypotesens gyldighed, men er sandsynlig.
Da den kryptografiske styrke af mange krypteringsalgoritmer er baseret på hemmelige nøgler, som kræver primtal for at skabe (f.eks. er det sådan RSA -krypteringen fungerer ), når man opretter sådanne nøgler, er det vigtigt hurtigt at kunne tjekke store tal for primalitet. Probabilistiske primalitetstests, såsom Miller-Rabin-testen og Solovay-Strassen-testen , viser større effektivitet i brugen og nem udtryk sammenlignet med deterministiske tests [3] . Miller-Rabin-algoritmen giver dig mulighed for at udføre et tjek på kort tid og samtidig give en ret lille sandsynlighed for, at tallet faktisk er sammensat. [fire]
Ligesom Fermat- og Nightingale-Strassen- testene er Miller-Rabin-testen afhængig af at kontrollere en række ligheder, der gælder for primtal. Hvis mindst en sådan lighed fejler, beviser det, at tallet er sammensat [5] .
Til Miller-Rabin-testen bruges følgende udsagn:
Lade være et primtal og , hvor er ulige. Derefter er mindst én af følgende betingelser opfyldt :
|
I det sidste felt (for primtal ) er der ingen kvadratrødder af enhed, bortset fra tallene 1 , -1 |
Lade:
Derefter:
Efter Euklids lemma :
Ved Fermats lille sætning :
Vi vil udtrække kvadratrødderne af tallet . Ifølge lemmaet, der er bevist ovenfor, vil vi ved hvert trin få tallet 1 eller -1 modulo . Hvis vi på et eller andet trin får -1 , så er den anden af lighederne opfyldt. Ellers vil den første ligestilling være opfyldt på det sidste trin (fordi ), dvs.
Hvis denne erklæring (betingelse 1 eller 2) er opfyldt for nogle tal og (ikke nødvendigvis primtal), så kaldes tallet Millers prime vidne , og selve tallet kaldes sandsynligt primtal . (Tilfældigt er der 25 % chance for at forveksle et sammensat tal for et primtal, men dette kan reduceres ved at kontrollere for andre .)
I det tilfælde, hvor modsætningen af den beviste erklæring er opfyldt, det vil sige, hvis der er et tal , således at:
og
så er tallet ikke primtal. I dette tilfælde kaldes nummeret et vidne om, at nummeret er sammensat.
For ulige sammensatte tal er der ifølge Rabins sætning ikke flere vidner om enkelhed, hvor er Euler-funktionen , så sandsynligheden for at et tilfældigt valgt tal vil være et vidne om enkelhed er mindre end 1/4 [2] [6] .
Ideen med testen er at tjekke for tilfældigt udvalgte tal , om de er vidner til tallets primeness . Hvis der er bevis for, at tallet er sammensat, så er tallet faktisk sammensat. Hvis tallene blev kontrolleret, og alle viste sig at være primtal, betragtes tallet som primtal. For en sådan algoritme vil sandsynligheden for at tage et sammensat tal for et primtal være mindre [7] .
For at kontrollere store tal er det sædvanligt at vælge tilfældige tal, da fordelingen af vidner om primalitet og vidner om et sammensat tal blandt tallene 1, 2, ..., n − 1 ikke er kendt på forhånd. Især giver Arnolt [8] et 397-bit sammensat tal, for hvilket alle tal mindre end 307 er bevis på enkelhed.
Antag, at vi ønsker at bestemme, om n = 221 er primtal. Lad os skrive n − 1 = 220 som 2 2 55, så s = 2 og d = 55. Vi vælger vilkårligt et tal a , således at 0 < a < n , lad os sige a = 174. Lad os gå videre til beregningerne:
Da 220 ≡ −1 mod n , er 221 enten primtal, eller 174 er et falsk vidne om, at 221 er primtal. Tag en anden vilkårlig a , denne gang ved at vælge a = 137:
Da 137 er et vidne om, at 221 er sammensat, var tallet 174 faktisk et falsk vidne om enkelhed. Bemærk, at algoritmen ikke fortæller os noget om faktorerne 221 (som er 13 og 17). Men i nogle tilfælde hjælper yderligere beregninger med at få talets faktorer. [9]
Miller-Rabin-algoritmen parametreres af antallet af runder r . Det anbefales at tage r af størrelsesordenen , hvor n er det tal, der skal testes.
For et givet n er der et heltal s og et ulige heltal t , således at . Der vælges et tilfældigt tal a , 1 < a < n . Hvis a ikke er vidne til primiteten af tallet n , så er svaret "n er sammensat" givet , og algoritmen slutter. Ellers vælges et nyt tilfældigt tal a , og verifikationsproceduren gentages. Efter at have fundet r bevis på enkelhed, gives svaret "n er sandsynligvis prime" , og algoritmen afsluttes [5] .
Algoritmen kan skrives i pseudokode som følger:
Input : n > 2, et ulige naturligt tal, der skal testes for primalitet; k er antallet af runder. Output : composite , betyder at n er et sammensat tal; sandsynligvis prime betyder, at n med stor sandsynlighed er prime. At repræsentere n − 1 som 2 s · t , hvor t er ulige, kan gøres ved successivt at dividere n - 1 med 2. sløjfe A: gentag k gange: Vælg et tilfældigt heltal a i intervallet [2, n − 2] x ← a t mod n , beregnet ved hjælp af eksponentieringsalgoritmen modulo hvis x = 1 eller x = n − 1, og gå derefter til næste iteration af sløjfe A sløjfe B : gentag s − 1 gange x ← x 2 mod n hvis x = 1, returner derefter forbindelsen hvis x = n − 1, og gå derefter til næste iteration af sløjfen A returnerer den sammensatte returnering sandsynligvis primeDet følger af Rabins sætning, at hvis k tilfældigt udvalgte tal var vidner til primiteten af tallet n , så overstiger sandsynligheden for, at n er sammensat ikke .
For store værdier af n er sandsynligheden for at erklære et sammensat tal sandsynligvis primtal væsentligt mindre end 4 − k . Damgard, Landrock og Pomerands [10] beregnede nogle præcise fejlgrænser og foreslog en metode til at vælge værdien af k for at opnå den ønskede fejlgrænse. Sådanne grænser kan for eksempel bruges til at generere sandsynlige primtal. De bør dog ikke bruges til at teste for primtal af ukendt oprindelse, da en cracker i kryptografiske systemer kan forsøge at erstatte en pseudoprime, når en prime er påkrævet. I sådanne tilfælde kan man kun stole på fejlen 4 − k .
Forudsat at multiplikationstiden er logaritmisk, ved hjælp af hurtig modulo multiplikation , er kompleksiteten af algoritmen , hvor er antallet af runder. Algoritmens køretid er således polynomiel.
Ved at bruge FFT er det dog muligt at reducere algoritmens køretid til . I dette tilfælde, hvis vi tager , hvor n er det tal, der skal kontrolleres, så er kompleksiteten af algoritmen lig med . [elleve]
Hvis tallet a er et vidnesbyrd om enkeltheden af det sammensatte ulige tal n ifølge Miller, så siges tallet n til gengæld at være stærkt pseudo -primtal i basis a . Hvis et tal n er stærkt pseudoprime i base a , så er det også Fermat pseudoprime i base a og Euler-Jacobi Pseudoprime i base a . [3]
For eksempel danner stærkt pseudoprimer i base 2 sekvensen:
2047, 3277, 4033, 4681, 8321, 15841, 29341, 42799, 49141, 52633, 65281, 74665, … ( OEIS -sekvens A001262 )og i base 3, sekvensen:
121, 703, 1891, 3281, 8401, 8911, 10585, 12403, 16531, 18721, 19345, 23521, 31621, … ( OEIS -sekvens A020229 )Ordbøger og encyklopædier |
---|
Talteoretiske algoritmer | |
---|---|
Enkelthedstest | |
At finde primtal | |
Faktorisering |
|
Diskret logaritme | |
Finder GCD | |
Modulo aritmetik | |
Multiplikation og division af tal | |
Beregning af kvadratroden |