1 / 26

Prímtesztelés

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.

gallia
Download Presentation

Prímtesztelés

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Nagy Gábor: Prímtesztelés Témavezető: Kátai Imre Komputeralgebra Tanszék

  2. 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.

  3. A kulcsválasztás • 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 • Aválaszt még egy φ(n)-nél kisebb véletlen e számot, amire (e,φ(n))=1 (sok ilyen van). • Akiszá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.

  4. A titkosítás • B címkézi az elküldendő üzenetet egy 1 és n közötti m számmal. • B kiszámolja c=me (mod n)-et, ez lesz a titkosított üzenet. (ez gyorsan számolható: 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)

  5. 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

  6. Példa: próbaosztás • Valamely n szám a<n-nel való osztása;ha a osztja n-et, akkor n nem prím • Ha minden a<n1/3-ra elvégezzük az osztástCsak kevés n szám éli túl: prímek, valamint az olyan összetett számok, amelyek két n1/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≤n1/2-nel osztva:ha bukik, akkor n biztosan összetett, ha nem, akkor biztosan prím. Ez determinisztikus tesztelés.

  7. Karakterizációk • Ha p prímszám, akkor (a,p)=1 eseténap-1≡1 (mod p) (kis Fermat-tétel) • Egy n szám pontosan akkor prím, ha:(n-1)!≡-1 (mod n) (Wilson-tétel) • Egy n szám pontosan akkor prím, ha (a,n)=1-re:(x+a)n≡xn+a (mod n)

  8. 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

  9. 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.

  10. Valószínűségi prímtesztek 3. • Legyen Ln={αZn+: αn-1=1}, ekkorTétel: Ha n prím, akkor Ln=Zn*. Ha n összetett, és LnZn*, de LnZn*, akkor |Ln|≤ (n-1)/2. • Sajnos vannak olyan páratlan összetett számok, amelyekre Ln =Zn*. Ezek a Carmichael-számok.

  11. Valószínűségi prímtesztek 4.A Miller-Rabin teszt • Legyen most n-1=2hm, ahol m páratlan Ln’={αZn+: αm2h=1, és αm2j+1=1  αm2j=1, ha j{1,…,h-1}} Tétel: Ha n prím, akkor Ln’=Zn*. Ha n összetett, akkor |Ln’|≤ (n-1)/4.

  12. 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 • Ennek az időigénye O((log n)3)

  13. Prímtesztek spec. alakú prímekre Def.: Egy prímet Mersenne-prímnek nevezünk és M(p)-vel jelölünk, ha 2p-1 alakú. Tétel: Legyen p prím, s1=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áltaDr. Martin Nowak.

  14. Prímtesztek spec. alakú prímekre Def: Egy prímet Fermat-prímnek nevezünk és F(k)-val jelölünk, ha 22k+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 Fermat-szá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.

  15. 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.

  16. 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.

  17. 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(modn,xr-1) kongruenciát

  18. 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.

  19. Az algoritmus lépései • Megvizsgáljuk, hogy n teljes hatvány-e. • Keresünk egy r egészet, amire n rendje mod r >(log n)2. • Megnézzük, hogy (a,n)>1 teljesül-e valamely a≤r-re • Ellenőrizzük, hogy fennáll-e az(x+a)n≡xn+a (mod n,xr-1) összefüggésa=1, 2,…, [r1/2·log n] esetén

  20. Az algoritmus időigénye • 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é: Õ(r3/2(log n)3) • Így az algoritmus időigénye: Õ(r3/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)))

  21. 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=r1/2 log n, akkor n prímszám.

  22. 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/rZ 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

  23. A megvalósíthatóság • A futásidő nagyon kedvezően alakul • 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.

  24. 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 • Lenstra és Pomerance más polinom választásával Õ((log n)6)-ra csökkentette a futásidőt

  25. Sejtés 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 n2≡1 (mod r). Ha a sejtés igaz, akkor az a teendőnk, hogy olyan r értéket keresünk, amely nem osztója n2-1-nek. Ilyen r biztosan található a [2,4log 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.

  26. Köszönöm a figyelmet!

More Related