Miller-Rabin teszt

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2020. szeptember 24-én felülvizsgált verziótól ; az ellenőrzések 7 szerkesztést igényelnek .

A Miller-Rabin teszt egy  valószínűségi polinomiális primalitásteszt . A Miller-Rabin teszt, valamint a Fermat teszt és a Solovay-Strassen teszt hatékonyan meghatározhatja, hogy egy adott szám összetett -e . Nem használható azonban annak szigorú bizonyítására , hogy egy szám prím . A Miller-Rabin tesztet azonban gyakran használják a kriptográfiában nagy véletlenszerű prímszámok generálására .

Történelem

A Miller-Rabin algoritmus a Gary Miller által 1976 -ban kifejlesztett Miller-algoritmus módosítása . Miller algoritmusa determinisztikus , de helyessége a nem bizonyított kiterjesztett Riemann-hipotézisen alapul [1] . Michael Rabin 1980 -ban módosította [2] . A Miller-Rabin algoritmus nem függ a hipotézis érvényességétől, hanem valószínűségi.

Alkalmazás

Mivel sok titkosítási algoritmus kriptográfiai erőssége titkos kulcsokon alapul, amelyek létrehozásához prímszámok szükségesek (például így működik az RSA -rejtjel ), az ilyen kulcsok létrehozásakor fontos, hogy gyorsan ellenőrizni lehessen a nagy számokat elsődlegessége. A valószínűségi primalitási tesztek, mint például a Miller-Rabin teszt és a Solovay-Strassen teszt a determinisztikus tesztekhez képest nagyobb hatékonyságot és könnyebb kifejezést mutatnak [3] . A Miller-Rabin algoritmus lehetővé teszi, hogy rövid időn belül ellenőrzést hajtson végre, és ugyanakkor meglehetősen kicsi a valószínűsége annak, hogy a szám valóban összetett. [négy]

Hogyan működik az algoritmus

A Fermat és Nightingale-Strassen tesztekhez hasonlóan a Miller-Rabin teszt is a prímszámokra érvényes egyenlőségsorozat ellenőrzésére támaszkodik. Ha legalább egy ilyen egyenlőség meghiúsul, az bizonyítja, hogy a szám összetett [5] .

A Miller-Rabin teszthez a következő állítást használjuk:

Legyen egy prímszám és , ahol páratlan. Ekkor az alábbi feltételek közül legalább egy teljesül:

  1. Van egy ilyen egész szám
Bizonyíték Lemma az egység négyzetgyökeiről egy véges mezőben :

A végső mezőben (prím esetén) nincs egység négyzetgyöke, kivéve az 1 , -1 számokat

Bizonyíték

Legyen:

Akkor:

Euklidész lemmája szerint :

 

Fermat kis tétele szerint :

Kivonjuk a szám négyzetgyökét . A fent bizonyított lemma szerint minden lépésnél 1 -es vagy -1 modulo számot kapunk . Ha valamelyik lépésnél -1 -et kapunk , akkor az egyenlőségek közül a második teljesül. Ellenkező esetben az utolsó lépésben (mert ), azaz az első egyenlőség teljesül.  

Ha ez az állítás (1. vagy 2. feltétel) bizonyos számokra és (nem feltétlenül prímre) teljesül , akkor a számot Miller prímtanújának , magát  a számot pedig valószínűségi prímnek nevezzük . (Véletlenszerűen 25% esély van arra, hogy egy összetett számot összetévesztünk prímszámmal, de ez csökkenthető, ha másokat keres .)

Abban az esetben, ha a bizonyított állítás ellentmondása teljesül, vagyis ha van olyan szám , amely:

és

akkor a szám nem prímszám. Ebben az esetben a számot annak tanújának nevezzük, hogy a szám összetett.

Páratlan összetett számok esetén Rabin tétele szerint nincs több tanúja az egyszerűségnek, hol  van az Euler-függvény , így annak a valószínűsége, hogy egy véletlenszerűen kiválasztott szám az egyszerűség tanúja lesz, kisebb, mint 1/4 [2] [6] .

A teszt célja, hogy ellenőrizze a véletlenszerűen kiválasztott számokat , vajon tanúi-e a szám elsődlegességének . Ha bizonyíték van arra, hogy a szám összetett, akkor a szám valóban összetett. Ha a számokat ellenőriztük , és mindegyik prímnek bizonyult, akkor a szám prímnek minősül. Egy ilyen algoritmus esetén kisebb lesz annak a valószínűsége, hogy egy prímszámra összetett számot veszünk [7] .

Nagy számok ellenőrzéséhez véletlenszerű számokat szokás választani , mivel az 1, 2, ..., n − 1 számok között nem ismert az elsődlegesség és az összetett szám tanúinak megoszlása. Arnolt [8] konkrétan egy 397 bites összetett számot ad meg, amelyre minden 307-nél kisebb szám az egyszerűség bizonyítéka.

Példa

Tegyük fel, hogy meg akarjuk határozni, hogy n  = 221 prím-e. Írjuk fel n − 1 = 220 -at 2 2 55-nek, tehát s  = 2 és d  = 55. Tetszőlegesen kiválasztunk egy olyan a számot , amelyre 0 <  a  <  n , mondjuk a = 174. Folytassa a számításokkal:

Mivel 220 ≡ −1 mod n , 221 vagy prím, vagy 174 hamis tanúja, hogy 221 prím. Vegyünk egy másik tetszőleges a -t , ezúttal a = 137-et választva:

Mivel a 137 annak tanúja, hogy a 221 összetett, a 174 valójában az egyszerűség hamis tanúja volt. Vegyük észre, hogy az algoritmus nem mond semmit a 221 tényezőiről (amelyek 13 és 17). Bizonyos esetekben azonban további számítások segítenek a számtényezők meghatározásában. [9]

Miller-Rabin algoritmus

Megvalósítás

A Miller-Rabin algoritmust az r körök számával paraméterezzük . Javasoljuk, hogy r nagyságrendű legyen , ahol n  a vizsgálandó szám.

Adott n esetén van egy s egész és egy páratlan t egész szám , hogy . Egy a véletlenszámot választunk , 1 < a < n . Ha a nem mutatja az n szám elsődlegességét, akkor az "n összetett" választ kapjuk , és az algoritmus véget ér. Ellenkező esetben a rendszer egy új véletlenszámot a kiválaszt , és az ellenőrzési eljárás megismétlődik. Miután r bizonyítékot találtunk az egyszerűségre, az "n valószínűleg prím" választ adjuk , és az algoritmus befejeződik [5] .

Az algoritmus a következőképpen írható pszeudokódban :

Bemenet : n > 2, egy páratlan természetes szám, amelyet az elsődlegesség szempontjából ellenőrizni kell; k a körök száma. Kimenet : összetett , azt jelenti, hogy n egy összetett szám; valószínűleg prím azt jelenti, hogy n nagy valószínűséggel prím. Az n − 1 ábrázolása 2 s · t -ként , ahol t páratlan, megtehető úgy, hogy n - 1- et elosztjuk 2-vel. A hurok : ismételje meg k - szer: Válasszon egy véletlenszerű egész számot a [2, n − 2] x ← a t mod n intervallumban, a modulo hatványozási algoritmussal kiszámítva, ha x = 1 vagy x = n − 1, majd menjen az A hurok következő iterációjához . : ismételje meg az s − 1-szer x ← x 2 mod n ha x = 1, majd adja vissza az vegyületet , ha x = n − 1, majd lépjen az A ciklus következő iterációjához .

Rabin tételéből következik, hogy ha k véletlenszerűen kiválasztott szám tanúja lenne az n szám prímságának , akkor annak a valószínűsége, hogy n összetett, nem haladja meg a -t .

Ezenkívül n nagy értékei esetén annak a valószínűsége, hogy egy összetett szám valószínűleg prímként deklaráljon, lényegesen kisebb, mint 4 − k . Damgard, Landrock és Pomerands [10] kiszámított néhány pontos hibahatárt, és egy módszert javasolt k értékének kiválasztására a kívánt hibahatár eléréséhez. Ilyen korlátok használhatók például valószínű prímszámok generálására. Mindazonáltal nem használhatók ismeretlen eredetű prímszámok tesztelésére, mivel a kriptográfiai rendszerekben a cracker megpróbálhat helyettesíteni egy pszeudoprímet, amikor prímszámra van szükség. Ilyen esetekben csak a 4 − k hibára hagyatkozhatunk .

Munka nehézségei

Feltételezve, hogy a szorzási idő logaritmikus, gyors modulo szorzást használva az algoritmus bonyolultsága , ahol  a körök száma. Így az algoritmus futási ideje polinomiális.

Az FFT használatával azonban lehetséges az algoritmus futási idejét -ra csökkenteni . Ebben az esetben, ha vesszük , ahol n az ellenőrizendő szám, akkor az algoritmus összetettsége egyenlő -val . [tizenegy]

Erősen pszeudoprímek

Ha az a szám az n összetett páratlan szám egyszerűségének tanúja Miller szerint, akkor az n számot viszont erősen pszeudo -prímnek mondjuk az a bázisban . Ha egy n szám erősen pszeudoprím az a bázisban , akkor Fermat pszeudoprím az a bázisban és Euler-Jacobi pszeudoprím az a bázisban is . [3]

Például az erősen pszeudoprímek a 2. bázisban alkotják a következő sorozatot:

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

a 3. bázisban pedig a következő sorrend:

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

Jegyzetek

  1. Miller, 1975 .
  2. 12 Rabin , 1980 .
  3. 1 2 Menezes, Oorschot, Vanstone, 1996 , pp. 141.
  4. Kormen, 2015 , p. 147.
  5. 1 2 Thomas Cormen, Charles Leiserson, Ronald Rivest, Clifford Stein. Algoritmusok: konstrukció és elemzés. - 3. - Moszkva: Williams, 2013. - S. 1012-1015. — 1328 p. - 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. Alkalmazott kriptográfia. - Moszkva: Triumph, 2013. - S. 298. - 816 p.

Irodalom

Linkek