Nagy Gbor Prmtesztels Tmavezet Ktai Imre Komputeralgebra Tanszk
Nagy Gábor: Prímtesztelés Témavezető: Kátai Imre Komputeralgebra Tanszék
Az RSA kriptorendszer Az RSA egy nyilvános kulcsú titkosítást megvalósító algoritmus. 1977 -ben alkotta meg Ron Rivest, Adi Shamir és Leonard Adleman. Az RSA a mai napig az egyik legfontosabb titkosító eljárás Az RSA működése: Tegyük fel, hogy B szeretne titkosítva üzenni A-nak.
A kulcsválasztás n n n A választ két nagy véletlen prímszámot (egy véletlen szám utáni első prím), legyenek ezek p és q, a szorzatuk n. A kiszámolja φ(n) értékét: φ(n)= φ(pq)=(p-1)(q-1)=pq-p-q-1=n-p-q+1 A választ még egy φ(n)-nél kisebb véletlen e számot, amire (e, φ(n))=1 (sok ilyen van). A kiszámolja e multiplikatív inverzét (mod φ(n)): d-t, amire: ed≡ 1 (mod φ(n)) Az (n, e) számpár lesz A nyilvános kulcsa, a (d, φ(n)) pedig a titkos kulcsa.
A titkosítás B címkézi az elküldendő üzenetet egy 1 és n közötti m számmal. n B kiszámolja c=me (mod n)-et, ez lesz a titkosított üzenet. (ez gyorsan számolható: n O((log n)3) A dekódolás A kiszámolja m=cd (mod n)-et Valóban: cd≡(me)d=med=mkφ(n)+1=(mφ(n))km≡m (mod n)
Az RSA-hoz el kell dönteni egy véletlen szám utáni számokról, hogy azok prímek-e. Ez a következő kérdésre vezet: hogyan lehet eldönteni egy számról, hogy prím-e? Def: Prímteszt: egy kritérium arra, hogy egy n szám ne legyen prím. Ha n átmegy a teszten, lehet hogy prím, ha nem megy át (bukik), akkor biztos, hogy összetett. Egy adott szám tesztelése prímségre több prímteszt egymás utáni alkalmazásából áll. A prímtesztelés lehet: a) valószínűségi - a tesztelést túlélő szám „nagy valószínűséggel” prím b) determinisztikus - a tesztelést túlélő szám biztosan prím
Példa: próbaosztás n n n Valamely n szám a<n-nel való osztása; ha a osztja n-et, akkor n nem prím Ha minden a<n 1/3 -ra elvégezzük az osztást Csak kevés n szám éli túl: prímek, valamint az olyan összetett számok, amelyek két n 1/3 -nál nagyobb prím szorzatai. A túlélők nagy valószínűséggel prímek, ezért ez egy elég jó valószínűségi prímtesztelést ad. Minden a≤n 1/2 -nel osztva: ha bukik, akkor n biztosan összetett, ha nem, akkor biztosan prím. Ez determinisztikus tesztelés.
Karakterizációk Ha p prímszám, akkor (a ( , p)=1 esetén ap-1≡ 1 (mod p) (kis Fermat-tétel) n Egy n szám pontosan akkor prím, ha: (n-1)!≡-1 (mod n) (Wilson-tétel) n Egy n szám pontosan akkor prím, ha (a ( , n)=1 re: (x+a)n≡xn+a (mod n) n
Valószínűségi prímtesztek 1. Néhány valószínűségi prímteszt, beleértve a Miller. Rabin tesztet is, a következő általános struktúrával rendelkezik. Jelöljük Zn+-szal Zn nemnulla elemeit; így: |Zn+|=n-1, és ha n prím, akkor Zn+=Zn*. Definiáljuk továbbá az Ln Zn+ halmazt a következőképpen: - Létezik egy hatékony algoritmus annak eldöntésére, hogy adott n, és α Zn+ esetén α Ln teljesül-e - Ha n prím, akkor Ln=Zn* - Ha n összetett, akkor |Ln|≤ c(n-1) valamilyen c<1 konstansra
Valószínűségi prímtesztek 2. n prímségének teszteléséhez beállítunk egy t „hibaparamétert”, és véletlenszerűen választunk α 1, …, αt Zn+-t. Ha αi Ln minden i=1, …, t-re, akkor az output "igaz", különben pedig "hamis". Könnyen látható, hogy ha n prím, akkor az algoritmus mindig „igaz” értékkel tér vissza, ha pedig összetett, akkor legfeljebb ct valószínűséggel. Ha c=1/2, és t-t elég nagynak választjuk, mondjuk t=100, akkor a tévedés valószínűsége elhanyagolhatóan kicsi.
Valószínűségi prímtesztek 3. Legyen Ln={α Zn+: αn-1=1}, ekkor Tétel: Ha n prím, akkor Ln=Zn*. Ha n összetett, és Ln Zn*, de Ln Zn*, akkor |Ln|≤ (n-1)/2. n Sajnos vannak olyan páratlan összetett számok, amelyekre Ln =Zn*. Ezek a Carmichaelszámok. n
Valószínűségi prímtesztek 4. A Miller-Rabin teszt Legyen most n-1=2 hm, ahol m páratlan h j+1 j ’ + m 2 m 2 Ln ={α Zn : α =1, és α =1 α = 1, ha j {1, …, h-1}} Tétel: Ha n prím, akkor Ln’=Zn*. Ha n összetett, akkor |Ln’|≤ (n-1)/4. n
Valószínűségi prímtesztek 5. A Miller-Rabin teszt 2. α Ln’ teljesülésének ellenőrzése gyors: meghatározzuk αm-t, majd ismételt négyzetreemelést végzünk n Ennek az időigénye O((log n)3) n
Prímtesztek spec. alakú prímekre Def. : Egy prímet Mersenne-prímnek nevezünk és M(p)-vel jelölünk, ha 2 p-1 alakú. Tétel: Legyen p prím, s 1=4, sk=sk-12 -2, k=1, 2, . . . Az M(p) szám akkor és csak akkor prím, ha M(p) az sp-1 osztója. A ma ismert legnagyobb prímek közül a legtöbb, köztük a legnagyobb is Mersenne-prím: 2^{25. 964. 951}-1 -nek 7. 816. 230 számjegye van, ez a 42. ismert Mersenne-prím, és 2005. február 18 -án találta Dr. Martin Nowak.
Prímtesztek spec. alakú prímekre Def: Egy prímet Fermat-prímnek nevezünk és F(k)k val jelölünk, ha 22 +1 alakú. Tétel: F(k) akkor és csak akkor prím, ha 5(F(k)-1)/2≡ -1 (mod F(k)) F(0)=3, F(1)=5, F(2)=17, F(3)=257, és F(4)=65537 prímek, ez alapján Fermat azt a sejtést állította fel, hogy az összes Fermatszám prím. Ez nem igaz, hiszen F(5)=4. 294. 967. 297=641 · 6. 700. 417, sőt az előzőeken kívül nem ismerünk Fermat-prímet.
Az AKS-algoritmus Agrawal, Kayal és Saxena 2002 -ben közöltek egy algoritmust, amely nagy áttörésnek számít a prímtesztek történetében. Mondhatjuk ezt azért, mert a szerzők bizonyítják, hogy a prímszámok halmaza a P nyelvosztályba tartozik. Ez azt jelenti, hogy egy n pozitív egész szám prím mivoltának eldöntése megoldható annyi idő alatt, amely [log n]-nek polinomiális függvénye. Ráadásul ez az algoritmus determinisztikus, vagyis a valószínűségi tesztekkel ellentétben itt a legkisebb esélye sincs annak, hogy valamely álprímet véletlenül prímnek nyilvánítsunk.
Az AKS-algoritmus Egy n szám pontosan akkor prím, ha (a, n)=1 -re: (x+a)n≡xn+a (mod n) A probléma az, hogy a kongruencia teljesülésének ellenőrzéséhez n-1 együtthatót kell megvizsgálnunk, így az eljárás nem hatékony. A továbbiakban szeretnénk a számolásokat egy megfelelően választott relatíve kevés elemből álló véges struktúra felett végezni, azt remélve, hogy így le tudjuk csökkenteni a vizsgálandó együtthatók számát.
Az AKS-algoritmus A továbbiakban alkalmazzuk a következő jelölést: ha f(x)≡g(x) teljesül Zn/ h(x) -ben, akkor azt írjuk, hogy f(x)≡g(x) (mod n, h(x)) Az AKS-algoritmusban h(x)=xr-1, ahol r egy „megfelelően kicsi” pozitív egész. A továbbiakban természetesen a „megfelelően kicsi” kifejezés értelmét pontosítjuk. Tehát a prímek azonosítására használjuk a (x+a)n≡xn+a (mod n, xr-1) kongruenciát
Az AKS-algoritmus Ha n prímszám, akkor kielégíti a kongruenciát minden a és r esetén. Látható továbbá, hogy ha r elég kicsi n-hez képest, akkor kevesebb együtthatót kell megvizsgálnunk. Sajnos cserébe azt az árat kell fizetnünk, hogy bizonyos a és r értékek esetén előfordulhat, hogy valamely n összetett szám is kielégíti a kongruenciát. Viszont bizonyítható, hogy megfelelően választott r esetén nem túl sok a értékre elvégezve a vizsgálatot, csak olyan összetett számok mehetnek át a teszten, amelyek prímhatványok.
Az algoritmus lépései Megvizsgáljuk, hogy n teljes hatvány-e. n Keresünk egy r egészet, amire n rendje mod r >(log n)2. n Megnézzük, hogy (a, n) > 1 teljesül-e valamely a≤r-re n Ellenőrizzük, hogy fennáll-e az (x+a)n≡xn+a (mod n, xr-1) összefüggés a=1, 2, …, [r 1/2·log n] esetén n
Az algoritmus időigénye n n n Az első lépés időigénye: Õ((log n)3) A második lépésé: Õ(r(log n)2) A harmadiké szintén: Õ(r(log n)2) A negyediké: Õ(r 3/2(log n)3) Így az algoritmus időigénye: Õ(r 3/2(log n)3) Belátható, hogy létezik megfelelő r≤ 2(log n)5, így az időigény Õ((log n)10, 5) ahol Õ(t(n))=O(t(n)poly(log t(n)))
Az AKS-algoritmus Tétel: Ha n>1 egész nem teljes hatvány, nincs r-nél kisebb prímosztója, a rendje: d>(log n)2 (mod r), és (x+a)n≡xn+a (mod n, xr-1) minden 1≤a≤A, ahol A=r 1/2 log n, akkor n prímszám.
Az AKS-algoritmus A bizonyítás: (vázlat) indirekt tfh. p prímosztója n-nek G legyen az x, x+1, …, x+[A] elemek által generált részcsoportja Z/(p, h(x))nek, ahol h(x) xr-1 irreducibilis faktora (mod p) G méretére adott alsó és felső becsléssel jutunk ellentmondásra Legyen R Z/r. Z n és p által generált részcsoportja. Ekkor bebizonyítható, hogy: - |G|≤n|R|1/2 -1, valamint -|G|>n|R|1/2 -1 Ha n>5, akkor létezik r [(log n)5, 2(log n)5] prím, amire n rendje (mod r) >(log n)2
A megvalósíthatóság A futásidő nagyon kedvezően alakul n Sajnos a tárigény olyan mértékű, amely viszonylag kicsi számoknál is óriásí operatív memóriát feltételez: egy ezerjegyű szám tesztelésénél a tárigény túllépheti a 3·1014 gigabájtot. n
Javítások A szerzők bebizonyították, hogy létezik (log n)3 nagyságrendű r, így a műveletigényt Õ((log n)7, 5)-re javították n Lenstra és Pomerance más polinom választásával Õ((log n)6)-ra csökkentette a futásidőt n
Sejtés: Legyen r olyan prím, amely nem osztója n-nek. Ha fennáll az (x-1)n≡xn-1 (mod n, xr-1) kongruencia, akkor n prím, vagy n 2≡ 1 (mod r). Ha a sejtés igaz, akkor az a teendőnk, hogy olyan r értéket keresünk, amely nem osztója n 2 -1 -nek. Ilyen r biztosan található a [2, 4 log n] intervallumban. Ez abból következik, hogy az x-nél kisebb prímek szorzata legalább ex. Ezután már csak a fenti kongruencia teljesülését kell ellenőrizni, amelynek az időigénye Õ((log n)2), vagyis az AKS-prímteszt futási ideje Õ((log n)3). Ha igaz a sejtés, a tárigény 5, 27 gigabájt alá csökken.
Köszönöm a figyelmet!
- Slides: 26