Miller-Rabin-priemgetaltest

De Miller-Rabin-priemgetaltest of Rabin-Miller-priemgetaltest is een priemgetaltest, dus een algoritme dat bepaalt of een gegeven getal een priemgetal is of niet. Deze test kan met de priemtest van Fermat en de Solovay-Strassen-priemgetaltest worden vergeleken, die net als de Miller-Rabin-priemgetaltest vaak in de cryptografie worden gebruikt. De originele versie van deze test is door Gary Miller gemaakt en is deterministisch. Het deterministische deel van deze test is afhankelijk van de riemann-hypothese, maar die is nog niet bewezen. Michael Rabin heeft de test in een probabilistische test veranderd, die nergens van afhankelijk is en altijd werkt.

Theorie

Het principe van de Miller-Rabin-priemgetaltest is hetzelfde als dat van de priemtest van Fermat en de Solovay-Strassen-priemgetaltest: van een of meer eigenschappen van priemgetallen wordt nagegaan of het te controleren getal die heeft. Is dit niet het geval, dan is het getal geen priemgetal. Is het wel het geval, dan kan alleen worden geconcludeerd dat het getal waarschijnlijk een priemgetal is.

Hulpstelling

Hulpstelling: er zijn mod   p {\displaystyle {\text{mod}}\ p} , dus in Z / p Z {\displaystyle \mathbb {Z} /p\mathbb {Z} } , geen andere getallen dan 1 en −1 die in het kwadraat gelijk aan 1 zijn.

Bewijs 

Stel

x 2 1 mod p {\displaystyle x^{2}\equiv 1\mod {p}}

dan

( x 1 ) ( x + 1 ) = x 2 1 0 mod p {\displaystyle (x-1)(x+1)=x^{2}-1\equiv 0\mod {p}}

Dat houdt in dat x 1 {\displaystyle x-1} of van x + 1 {\displaystyle x+1} door p {\displaystyle p} kan worden gedeeld. Daaruit volgt dat

x 1 0 mod p {\displaystyle x-1\equiv 0\mod {p}} dus x 1 mod p {\displaystyle x\equiv 1\mod {p}}

of

x + 1 0 mod p {\displaystyle x+1\equiv 0\mod {p}} dus x 1 mod p {\displaystyle x\equiv -1\mod {p}}

Principe van de test

Zij n > 2 {\displaystyle n>2} een priemgetal. Dan is n 1 {\displaystyle n-1} even, zeg n 1 = 2 s d {\displaystyle n-1=2^{s}d} , met s {\displaystyle s} en d {\displaystyle d} positieve gehele getallen en d {\displaystyle d} oneven. Voor elke a Z / n Z {\displaystyle a\in \mathbb {Z} /n\mathbb {Z} } geldt ofwel dat

a d 1 mod n {\displaystyle a^{d}\equiv 1\mod {n}}

ofwel dat

a 2 r d 1 mod n {\displaystyle a^{2^{r}\cdot d}\equiv -1\mod {n}} voor een zekere 0 r s 1 {\displaystyle 0\leq r\leq s-1} .

Zij namelijk a { 2 , 3 , , n 2 } {\displaystyle a\in \{2,3,\ldots ,n-2\}} , dan geldt volgens de kleine stelling van Fermat als n {\displaystyle n} een priemgetal is:

a n a mod n {\displaystyle a^{n}\equiv a\mod {n}}

Hieruit volgt ook:

a n 1 = a 2 s d 1 mod n . {\displaystyle a^{n-1}=a^{2^{s}d}\equiv 1\mod {n}.}

Door herhaald worteltrekken uit a n 1 {\displaystyle a^{n-1}} is volgens de voorgaande hulpstelling de uitkomst 1 of -1. Is de uitkomst -1, dan geldt kennelijk de tweede equivalentie en is het bewijs geleverd. Is de uitkomst alle s {\displaystyle s} keren steeds 1, dan blijft de eerste equivalentie over.

Test

De Miller-Rabin-priemgetaltest is gebaseerd op de contrapositie van het bovenstaande: Als er een a { 2 , 3 , , n 2 } {\displaystyle a\in \{2,3,\ldots ,n-2\}} wordt gevonden, waarvoor

a d 1 mod n {\displaystyle a^{d}\not \equiv 1\mod {n}}

en

a 2 r d 1 mod n {\displaystyle a^{2^{r}\cdot d}\not \equiv -1\mod {n}} voor alle 0 r s 1 {\displaystyle 0\leq r\leq s-1} ,

dan betekent dat dat n {\displaystyle n} een samengesteld getal is. a {\displaystyle a} heet er een getuige van dat n {\displaystyle n} samengesteld is. Anders is n {\displaystyle n} zeer waarschijnlijk een priemgetal met basis a {\displaystyle a} . Is n {\displaystyle n} toch samengesteld, dan heet a {\displaystyle a} een leugenaar voor n {\displaystyle n} .

Voor alle oneven samengestelde n {\displaystyle n} zijn er veel getuigen, maar er is geen eenvoudige manier bekend zo'n getuige te vinden. De oplossing is de test probabilistisch te maken: kies willekeurig een a Z / n Z {\displaystyle a\in \mathbb {Z} /n\mathbb {Z} } en ga na of het een getuige is van de samengesteldheid van n {\displaystyle n} . Als n {\displaystyle n} samengesteld is, zullen de meeste keuzes daar getuige van zijn en ontdekt de test dat met grote waarschijnlijkheid. Er blijft een kleine kans dat de gekozen n {\displaystyle n} een sterke leugenaar is voor n {\displaystyle n} . De kans op zulke fouten kan worden verminderd door de test te herhalen voor verschillende onafhankelijk gekozen a {\displaystyle a} .

Voorbeeld

Stel dat het getal n = 221 {\displaystyle n=221} getest wordt op primaliteit. Schrijf n 1 = 220 = 2 2 × 55 {\displaystyle n-1=220=2^{2}\times 55} , dus s = 2 {\displaystyle s=2} en d = 55 {\displaystyle d=55} . Kies een willekeurige a < n {\displaystyle a<n} , bijvoorbeeld a = 174 {\displaystyle a=174} en bekijk de equivalenties:

a d = 174 55 47 1 mod 221 {\displaystyle a^{d}=174^{55}\equiv 47\not \equiv 1\mod {221}}
a s 0 d = 174 55 47 1 mod 221 {\displaystyle a^{s^{0}\cdot d}=174^{55}\equiv 47\not \equiv -1\mod {221}}
a s 1 d = 174 110 220 1 mod 221 {\displaystyle a^{s^{1}\cdot d}=174^{110}\equiv 220\equiv -1\mod {221}}

Dus is voor een r {\displaystyle r} waarvoor geldt 0 r < s = 2 {\displaystyle 0\leq r<s=2} niet voldaan aan de gewenste equivalenties, zodat 174 er geen getuige van is dat 221 samengesteld is. Dus is ofwel 221 priem, ofwel is 174 een leugenaar voor 221. Kies nog een andere a {\displaystyle a} , bijvoorbeeld a = 137 {\displaystyle a=137} . Bekijk weer de equivalenties:

a d = 137 55 188 1 mod 221 {\displaystyle a^{d}=137^{55}\equiv 188\not \equiv 1\mod {221}}
a s 0 d = 137 55 188 1 mod 221 {\displaystyle a^{s^{0}\cdot d}=137^{55}\equiv 188\not \equiv -1\mod {221}}
a s 1 d = 137 110 205 1 mod 221 {\displaystyle a^{s^{1}\cdot d}=137^{110}\equiv 205\not \equiv -1\mod {221}}

Dus is 137 getuige voor het feit dat 221 samengesteld is, en 174 was inderdaad een leugenaar. Merk op dat we nog niets weten over de factoren van 221, namelijk 13 en 17.

Algoritme

Het algoritme kan in pseudocode als volgt worden beschreven:

Invoer:
    n > 2, een oneven geheel getal dat wordt gecontroleerd dat het een priemgetal is
    k, een geheel getal dat de nauwkeurigheid van de test bepaalt
Uitvoer: samengesteld als n samengesteld is, anders waarschijnlijk priem
   schrijf n−1 als 2s·d met d oneven door machten van 2 uit n−1 weg te delen
   LOOP: herhaal k keer:
      kies 2 ≤ a ≤ n−2 willekeurig
      x ← ad mod n
      x = 1 of x = n−1 dan doe de volgende LOOP
      voor r = 1,...,s−1
         x ← x2 mod n
         x = 1 dan uitvoer samengesteld
         x = n−1 dan doe de volgende LOOP
   uitvoer samengesteld
uitvoer waarschijnlijk priem

Nauwkeurigheid

Zoals gezegd: voor hoe meer getallen a {\displaystyle a} de test wordt uitgevoerd, hoe nauwkeuriger de test is. Het is bewezen[1] dat voor ieder oneven samengestelde getal n {\displaystyle n} ten minste 3/4 van de bases a {\displaystyle a} getuigen zijn van het feit dat n {\displaystyle n} samengesteld is. Dus als n {\displaystyle n} samengesteld is noemt de Miller-Rabin-priemgetaltest n {\displaystyle n} waarschijnlijk een priemgetal met een kans van hoogstens 4 k {\displaystyle 4^{-k}} . In dit opzicht doet deze test het beter dan de Solovay-Strassen priemgetaltest, want die noemt een samengesteld getal als waarschijnlijk een priemgetal met een kans van hoogstens 2 k {\displaystyle 2^{-k}} .

voetnoten
  1. Bornemann. PRIMES Is in P: A Breakthrough for “Everyman”. Pdf-document
websites
  • F Arnault. Rabin-Miller Primality test: Composite Numbers Which Pass It, 1995. in Mathematics of Computation 64, 209, blz 355-361
  • J Hurd. Verification of the Miller-Rabin probabilistic primality test, 2003. The Journal of Logic and Algebraic Programming 56, blz 3-21