Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "Prímtesztelés Témavezető: Kátai Imre Komputeralgebra Tanszék Nagy Gábor:"— Előadás másolata:

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

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

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

7 Karakterizációk Ha p prímszám, akkor (a,p) = 1 esetén a p-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 ≡ x n +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 Z n + -szal Z n nemnulla elemeit; így: |Z n + |=n-1, és ha n prím, akkor Z n + =Z n *. Definiáljuk továbbá az L n  Z n + halmazt a következőképpen: - Létezik egy hatékony algoritmus annak eldöntésére, hogy adott n, és α  Z n + esetén α  L n teljesül-e - Ha n prím, akkor L n =Z n * - Ha n összetett, akkor |L n |≤ 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  Z n + -t. Ha α i  L n 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 c t 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 L n ={α  Z n + : α n-1 =1}, ekkor Tétel: Ha n prím, akkor L n =Z n *. Ha n összetett, és L n  Z n *, de L n  Z n *, akkor |L n |≤ (n-1)/2. Legyen L n ={α  Z n + : α n-1 =1}, ekkor Tétel: Ha n prím, akkor L n =Z n *. Ha n összetett, és L n  Z n *, de L n  Z n *, akkor |L n |≤ (n-1)/2. Sajnos vannak olyan páratlan összetett számok, amelyekre L n =Z n *. Ezek a Carmichael-számok. Sajnos vannak olyan páratlan összetett számok, amelyekre L n =Z n *. Ezek a Carmichael-számok.

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

12 Valószínűségi prímtesztek 5. A Miller-Rabin teszt 2. α  L n ’ teljesülésének ellenőrzése gyors: meghatározzuk α m -t, majd ismételt négyzetreemelést végzünk α  L n ’ 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 ) Ennek az időigénye O((log n) 3 )

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

14 Prímtesztek spec. alakú prímekre Def: Egy prímet Fermat-prímnek nevezünk és F(k)-val jelölünk, ha 2 2 k +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 ≡x n +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 Z n /  h(x)  -ben, akkor azt írjuk, hogy f(x)≡g(x) (mod n,h(x)) Az AKS-algoritmusban h(x)=x r -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 ≡x n +a (mod n,x r -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. Megvizsgáljuk, hogy n teljes hatvány-e. Keresünk egy r egészet, amire n rendje mod r > (log n) 2. 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 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 ≡ x n +a (mod n,x r -1) összefüggés a=1, 2,…, [r 1/2 ·log n] esetén Ellenőrizzük, hogy fennáll-e az (x+a) n ≡ x n +a (mod n,x r -1) összefüggés a=1, 2,…, [r 1/2 ·log n] esetén

20 Az algoritmus időigénye Az első lépés időigénye: Õ((log n) 3 ) Az első lépés időigénye: Õ((log n) 3 ) A második lépésé: Õ(r(log n) 2 ) A második lépésé: Õ(r(log n) 2 ) A harmadiké szintén: Õ(r(log n) 2 ) A harmadiké szintén: Õ(r(log n) 2 ) A negyediké: Õ(r 3/2 (log n) 3 ) A negyediké: Õ(r 3/2 (log n) 3 ) Így az algoritmus időigénye: Õ(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 ) 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 ≡x n +a (mod n,x r -1) minden 1≤a≤A, ahol A=r 1/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) x r -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 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·10 14 gigabájtot.  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·10 14 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 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 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 ≡x n -1 (mod n,x r -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,4log n] intervallumban. Ez abból következik, hogy az x-nél kisebb prímek szorzata legalább e x. 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!


Letölteni ppt "Prímtesztelés Témavezető: Kátai Imre Komputeralgebra Tanszék Nagy Gábor:"

Hasonló előadás


Google Hirdetések