2. Számelméleti algoritmuso 2. Alapfogalma Definíció: Az oszthatóság Azt mondju, hogy a d egész szám osztja az a egész számot, ha az osztásna zérus a maradéa, azaz, ha létezi olyan egész szám, hogy a d. Jelölésben: d a. A d számot az a osztójána nevezzü. Az a szám a d többszöröse. Definíció: Prímszám Prímszámna nevezzü azt az -nél nagyobb egész számot, amelyne csa az és saját maga az osztója. A maradéos osztás tétele Ha a egész szám, n pedig pozitív egész szám, aor egyértelműen létezi olyan q és r egész szám, hogy a q n + r, ahol 0 r < n. () A q szám neve hányados, r neve maradé. A hányados és a maradé felírható: q a / n, r a q n a modn. (2) A bizonyítást az olvasóra bízzu. Definíció: Közös osztó Azt mondju, hogy a d egész szám az a és b egésze özös osztója, ha d mindét számot osztja. d a és d b. Definíció: Lineáris ombináció Az s egész számot az a és b egésze (egész) lineáris ombinációjána nevezzü, ha létezi olyan x és y egész szám, hogy s x a + y b. Az x és y számoat a lineáris ombináció együtthatóina nevezzü. Az a és b számo összes lineáris L a, b -vel jelöljü. ombinációjána halmazát ( ) Speciálisan lineáris ombináció az a+b és az a-b számo is.. Példa: Legyen ét szám a36, b60. Határozzu meg az s x a + y b értéeet az x 3, K,3, y 3, K, 3 együtthatóra! sxa+yb tábla x y -3-2 - 0 2 3-3 -288-228 -68-08 -48 2 72-2 -252-92 -32-72 -2 48 08 - -26-56 -94-36 24 84 44 0-80 -20-60 0 60 20 80-44 -84-24 36 96 56 26 2-08 -48 2 72 32 92 252 3-72 -2 48 08 68 228 288
Adatstrutúrá, algoritmuso - 2 - A özös osztó tulajdonságai Legyen a d egész az a és b egésze özös osztója. Aor fennállna az alábbi állításo:. d a vagy a 0 2. Ha d a és a d, aor d ± a 3. A özös osztó osztója az a és b szám minden lineáris ombinációjána is. s L a, b -re d s. ( ) A bizonyítást az olvasóra bízzu. 2.2 A legnagyobb özös osztó Definíció: Legnagyobb özös osztó 0 ha a 0 és b 0 d def lno( a, max d egyébént d a d b () Definíció: Relatív príme Az a és b egész számoat relatív prímene nevezzü, ha lno a, b. ( ) A legnagyobb özös osztó elemi tulajdonságai Legyen a d egész az a és b egésze legnagyobb özös osztója. Aor fennállna az alábbi állításo: (2). d min ( a, b ) 2. l no ( a, l no ( b, a) no ( a, 3. no ( a,0) a 4. no ( a, a) a, Z l l no( a, b ) l (4) l (5) 5. Ha d özös osztó, aor d d 6. A legnagyobb özös osztó minden lineáris ombinációna osztója, azaz s L a, b -re d s. ( ) A bizonyítást az olvasóra bízzu. (3) A legnagyobb özös osztó reprezentációs tétele Ha az a és b egész számo nem mindegyie zérus, aor a legnagyobb özös osztó megegyezi a ét szám pozitív lineáris ombinációina minimumával. d lno ( a, min s a x + b y s s s> 0 L( a, (6) Bizonyítás A bizonyítás menete az lesz, hogy megmutatju, hogy s d és d s, amiből övetezi az állítás. s d megmutatása úgy történi, hogy belátju, hogy s özös osztó, ami nem lehet nagyobb, mint a legnagyobb özös osztó. Azt, hogy s özös osztó azáltal látju be, hogy az osztási maradéa zérus. Csa az a számra végezzü el, b-re
Adatstrutúrá, algoritmuso - 3 - ugyanígy megy a bizonyítás. Osszu el tehát a-t s -gal és számítsu i a maradéot! Legyen q a hányados. Az r maradéra igaz, hogy 0 r < s. Aor 0 r < s 0 a q s < s a q ( a x + b y ) < ( q x ) a ( q y ) b < 0 s 0 + s (7) A tétel övetezményei: Az egyenlőtlenség özepén álló maradé az a és a b lineáris ombinációja. A baloldali egyenlőtlenség miatt nem lehet negatív, a jobboldali egyenlőtlenség miatt pedig isebb, mint a pozitív lineáris ombináció özül a legisebb. Emiatt csa zérus lehet. Tehát az s osztja az a számot. d s abból övetezi, hogy a legnagyobb özös osztó osztja az összes lineáris ombinációt, így s -ot is. Eor azonban nem lehet nagyobb, mint s, hiszen anna osztója.. A özös osztó osztja a legnagyobb özös osztót, ugyanis a legnagyobb özös osztó az a és b egésze lineáris ombinációja a tétel szerint, amit a özös osztó oszt. 2. Tetszőleges n nemnegatív egészre ( n a, n n lno( a l no,. (8) Ugyanis n 0 -ra az állítás triviális, n > 0 -ra pedig lno n a, n b n a x + n b y n a x + b y ( ) ( ) n lno( a, (Lássu be, hogy az utolsó egyenlőségjel valóban igaz, azaz a lineáris ombinációban mindét számpár esetén ugyanaz az x,y megfelelő választás!) A lineáris ombináció halmazána jellemzése d lno a, b egész többszöröseine a halmaza. Állítás: Legyen M a ( ) L ( a, M. (9) Bővebben: az L ( a, minden eleme d egész többszöröse és ha egy s szám egész többszöröse, aor az az s szám az a és b lineáris ombinációja is. d Bizonyítás Megmutatju, hogy L M és M L, amiből övetezi az állítás. L M esete: d a és d b van olyan, Z, hogy a d, b b d. Ha s L, aor s d M, mert Z a a x + b y a d x + b d y d a x + b y 44243 4 b a ( )
Adatstrutúrá, algoritmuso - 4 - M L esete: d lno( a, a x + b y Ha s M, aor van olyan s Z, hogy s d ( a x + b y ) x a + y b L s s s s A legnagyobb özös osztó reduciós tétele ( a, lno( a b l no,. (0) Bizonyítás Legyen d lno( a, és d 2 lno( a b,. Azt fogju bizonyítani, hogy d és d, amiből övetezi a tétel állítása. d 2 d 2 Világos, hogy fennállna az alábbi tulajdonságo d -ra: d L( a,, d L( a, d -ra: L( a b,, L( a b, 2 d 2 d 2 (0) () Megmutatju, hogy d L( a b, és d L( a, ölcsönös oszthatóság már övetezi. 2 is fennáll. amiből a ( a b ( a d L, megmutatása: d L, d d L, ( a ( a b 2 2 L megmutatása: d, d 2 x a + y b x ( a b + + y b y L ( a b, x ( a + ( x + ) b x2 ( a + y2 b x2 a + ( y2 x2 ) b L ( a, 2.3. A bináris legnagyobb özös osztó algoritmus Az eddigie alapján algoritmus onstruálható a legnagyobb özös osztó meghatározására. Az algoritmus neve: Bináris lno algoritmus. Az algoritmus a ét nemnegatív egész bináris felírásána alajából indul i. Az utolsó bit alapján a iinduló problémát foozatosan egyszerűbbé reduálja, amíg csa az egyi szám zérussá nem váli. Eor a legnagyobb özös osztó a mási reduált szám egy szorzóval orrigált értée lesz. Muna özben az algoritmus csa egyszerű, hatéony gépi műveleteet - egész ivonás és jobbra eltolás (shift) használ. Legyen a ét szám a és b és legyen b. L no a, b iszámításána feladata eor az alábbia szerint reduálódi az utolsó bit szerint egyszerűbb feladattá: a ( ) Utolsó bit b a 0
Adatstrutúrá, algoritmuso - 5-0 2 lno( a / 2, b / 2) l no( a / 2, l no( a,b / 2) l no( ( a / 2, (Bizonyítsu be a táblázatbeli egyszerűsítése helyességét!) A bináris lno algoritmus pszeudoódja: 2.3. algoritmus Bináris legnagyobb özös osztó // Bináris_lno (a, b, d ) 2 // Input paraméter: a Z, a 0 3 // b Z, b 0, a b 4 // Output paraméter: d Z, d 0 5 c 6 WHILE a 0 és b 0 DO 7 // a és b paritásértéei p a és p b. 0 páros, páratlan 8 p a a mod 2 9 p b b mod 2 0 CASE p a 0, p b 0: c 2c a a/2 2 b b/2 3 p a 0, p b : a a/2 4 p a, p b 0: b b/2 5 p a, p b : a (a-/2 6 IF a < b THEN a b csere 7 IF a 0 8 THEN d c b 9 ELSE d c a 20 RETURN (d ). Példa: példa az algoritmusra: Lno(3604,3332)2 2 768 Lépésszám a b Korreciós szorzó 0 3604 3332 2 802 666 2 2 90 833 3 34 833 4 833 34 5 833 7 6 408 7 7 204 7 8 02 7 9 5 7 0 7 7 0 7
Adatstrutúrá, algoritmuso - 6-2.4. Az eulideszi és a ibővített eulideszi algoritmus A legnagyobb özös osztó reurziós tétele lno ( a lno( b, a mod,. () Bizonyítás Az a mod b az a-ból b ismételt ivonásaival megapható és így a reduciós tétel értelmében az állításun igaz. A reurziós tétel révén észíthető el az eulideszi algoritmus a legnagyobb özös osztó meghatározására. Az algoritmus pszeudoódja: 2.4.. algoritmus Eulideszi algoritmus // // reurzív változat Eulidesz (a, b, d ) 2 // Input paraméter : a Z, a 0 3 // b Z, b 0 4 // Output paraméter: d Z, d 0 5 d a 6 IF b 0 7 THEN Eulidesz (b, a mod b, d ) 8 RETURN (d ) 2.4.2. algoritmus Eulideszi algoritmus // // iteratív változat Eulidesz (a, b, d ) 2 // Input paraméter : a Z, a 0 3 // b Z, b 0 4 // Output paraméter: d Z, d 0 5 WHILE b 0 DO 6 r a mod b 7 a b 8 b r 9 d a 0 RETURN (d ). Példa: Lno(3604,3332)68, q a / n, r a q n a modn Lépésszám a b q r 0 3604 3332 272 3332 272 2 68 2 272 68 4 0 3 68 0-68 Lamé tétele Ha az eulideszi algoritmusban > b 0 és reurziós híváso száma evesebb, mint. a < F + b valamely > 0 -ra, aor a A tételt nem bizonyítju. Követezmény a tételből: Ha F b < F +, aor a reurziós híváso száma evesebb, mint, valamint becslést tudun adni erre a -ra özvetlenül a b-ből. A értéére jól memorizálható becslés az, hogy vehető a b tizes számrendszerbeli jegyei ötszöröséne. (Valójában megmutatható, hogy itt a isebb reláció is igaz.[ ]) A meggondolás az alábbi:
Adatstrutúrá, algoritmuso - 7 - F 5 Φ, Φ,68, log 0 Φ 0, 2089, 4,78 5 log Φ log0 log0 Φ log0 F log0 5 log0 F + 5 log0 F 5 log0 b (4) log Φ log Φ 0 0 Bizonyítható, hogy az eulideszi algoritmusna a legrosszabb bemenő adatai a szomszédos Fibonacci számo. (Bizonyítsu be!) Az eulideszi algoritmus időigénye O( log azon feltételezés mellett, hogy az aritmetiai művelete onstans ideig tartana függetlenül a benne szereplő számértée nagyságától. Ha a számo nagyságát is figyelembe vesszü, aor az időigény O log a log. Az eulideszi algoritmus némi bővítéssel alalmassá tehető arra, ( hogy a legnagyobb özös osztó lineáris ombinációént történő előállításában szereplő y együtthatóat is meghatározza. Teintsü az eulideszi táblát. Lépésszám a b q r 0 a 0 b 0 q 0 r 0 a b q r a b q r + a + b + q + r + n d 0 - d n) A tábla. sorában ( 0,, K, a reurziós tétel alapján érvényes a összefüggés, ahol továbbá a b, indexű soro özött a apcsolat: 5 0 d x a + y b b r + d x a + y b +, q a / b x (2) (3), r a q b. A és + és ( q b + r ) + y b x x q b + x r + y b ( ) ( x q + y ) b + x r x + a+ + y+ b + (5) Kaptun egy összefüggést az x, y és az x, sorora, ha fentről lefelé haladun a táblában. x y x + y + + + x q + y együttható özött az egymást övető (6) aladjun most lentről fölfelé! Aor (6)-ból és H x ifejezve: y x y y + x q y + + (7)
Adatstrutúrá, algoritmuso - 8 - Az utolsó sor esetén viszont d d + 0 0, azaz x és 0. Az utolsó sorból indulva így visszafelé sorról-sorra haladva az x és y értée iszámítható. Végül az x 0 és y 0 is iadódi. Ez a módosítás vezet az eulideszi algoritmus ibővítésére, melyne pszeudoódját alább özöljü. 2.4.3. algoritmus Kibővített eulideszi algoritmus // reurzív változat Kibővített_Eulidesz ( a, b, d, x, y ) 2 // Input paramétere : a,b Z, a,b 0 3 // Output paramétere: d, x, y Z, d 0 4 IF b 0 5 THEN d a 6 x 7 y 0 8 ELSE Kibővített_Eulidesz (b, a mod b, d, x, y ) 9 x y y x a / b y d, x, y 0 RETURN ( ) n y n 2.4.3. algoritmus Kibővített eulideszi algoritmus // iteratív változat Kibővített_Eulidesz (a, b, d, x, y ) 2 // Input paramétere : a,b Z, a,b 0 3 // Output paramétere: d, x, y Z, d 0 4 x 0, x 0, y 0 0, y, s 5 WHILE b 0 6 r a mod b, q a div b 7 a b, b r 8 x x, y y 9 x q x +x 0, y q y +y 0 0 x 0 x, y 0 y s - s 2 x s x 0, y - y 0, x, y a, x, y 3 ( ) 4 RETURN ( d, x, y ) d ( ) 2. Példa: példa a ibővített eulideszi algoritmusra: Lépésszám A b q r d x y 0 3604 3332 272 68-2 - (-2)3 3332 272 2 68 68 0-2 -2 2 272 68 4 0 68 0-4 0 3 68 0-68 68 0 Az algoritmus eredményeéppen x 2 és y 0 3 adódott. 0
Adatstrutúrá, algoritmuso - 9 - Ellenőrzéséppen 68(-2) 3604+3 3332-43248+4336, ami valóban megfelel az elvárásona. 2.5. A lineáris ongruencia egyenlet. Definíció: Kongruencia Az a és b egész számoat ongruensne mondju az n modulus szerint, ha az n szerinti osztás utáni maradéai megegyezne, vagy ami ugyanaz: ha n ( a. Jelölésben: a b mod n. A ongruenciáon végezhető művelete tétele Legyen a b mod n és c d mod n! Aor igaza az alábbi állításo:. a ± c b ± d modn, 2. a c b d modn, 3. b mod n, ha a, b és l no, n 4. a b modm, ha m n a ( ) () (2) (3) (4) A tétel bizonyítását az olvasóra bízzu. Definíció: A lineáris ongruencia egyenlet Az + a x b mod n, a, b Z, n Z (5) egyenletet, melyben nevezzü. x Z az ismeretlen, lineáris ongruencia egyenletne A lineáris ongruencia egyenlet megoldhatósági tétele d lno a, n a x + n y Legyen az (5) egyenletre ( ) ongruencia egyenletne aor és csa aor van megoldása, ha. Az (5) lineáris d b. Ha van megoldás, aor végtelen so van, de ezeet egy d számú megoldást tartalmazó úgynevezett megoldás alaprendszerből megaphatju az n egész számú többszöröseine a hozzáadásával. Az alaprendszer elemeit a 0 x < n intervallumból választju i. Az alaprendszer megoldásai az alábbi módon írható fel: x 0 x ( b / d ) mod n, x x + i ( n / d ) mod n, i,2, K, d i 0 (6) (7) Bizonyítás ax b Legyen q n, q 2 n, q q 2 q. Aor a lineáris ongruencia egyenlet ax qn b q2n alara írható át, amiből az ax + qn b egyenlet adódi, vagyis hogy a b az a és az n lineáris ombinációja. Ha azt aarju,
Adatstrutúrá, algoritmuso - 0 - hogy legyen megoldás, aor b L( a, n) fenn ell álljon, ahol L ( a, n) az a és n lineáris ombinációina a halmaza. Ha ez nem áll fenn, aor nincs megoldás. A lineáris ombinációban lévő elemeet viszont a d lno( a, n) legnagyobb özös osztó osztja, és csa azoat osztja a lineáris ombináció halmazána jellemzési tétele szerint. Legyen most b olyan, hogy d b. Aor van olyan egész szám, hogy b d. A legnagyobb özös osztó viszont az a és az n lineáris ombinációja, azaz van olyan x és y egész, hogy d a x + n y. Ez a formula viszont egyenértéű az a x d mod n lineáris ongruencia egyenlettel, ha az n szerinti maradéoat nézzü. Beszorozva itt -val a x d mod n adódi, amiből azonnal látható, hogy az x x x 0 ( b / d ) mod n megoldás. További megoldásoat apun, hogyha épezzü az x i x0 + i ( n / d ) mod n, i,2, K, d számoat, ugyanis a lineáris ongruencia egyenletbe történő behelyettesítés után az ax0 + a i ( n / d ), i,2, K, d jeleni meg a baloldalon, ahol a másodi tag osztható n -nel, mert a d az a -t osztja, így az n megmarad, tehát ez a tag nem módosítja az első tag általi maradéot. Ezeet a megoldásoat alapmegoldásona nevezzü. Nyílvánvaló, hogy ha n egész többszörösét hozzáadom az alapmegoldásohoz, aor újra megoldást apo, csa az már nem lesz alapmegoldás (nem viseledi maradéént.) A lineáris ongruencia egyenlet megoldására algoritmus onstruálható, ugyanis a ívánt ibővített eulideszi algoritmusból megapható. x a 2.5.. algoritmus Lineáris ongruencia megoldó Lineáris_ongruencia_megoldó (a, b, n, X) 2 // Input paramétere: a,b,n Z, n>0 3 // Output paraméter : X egyindexes tömb 4 // indexelés 0-tól 5 Kibővített_Eulidesz (a, n, d, x, y ) 6 Hossz[X] 0 7 IF d b 8 THEN x x ( b / d ) mod n 0 9 Hossz[X] d 0 FOR i TO d DO x i x + i n / d mod n ( ) 0 2 RETURN (X) 3 // Hossz[X]0 jelenti, hogy nincs megoldás. Példa: 3604 x 36 mod 3332 Láttu, hogy l no( 3604,3332) 68 2 3604 + 3 3332. 36 osztható 68-cal, így az egyenletne van megoldása. Az alaprendszer 68 ülönböző elemet tartalmaz.
Adatstrutúrá, algoritmuso - - Most b / d 36/ 68 2, n / d 3332/ 68 49, x 2 + 68 56. A megoldáso: x 56 2 2, x 2 + 49 6, x 2 + 2 49 20,, 0 x 2 + 67 49 3395 63 mod 3332. 67 Definíció: A multipliatív inverz Legyen a lineáris ongruencia egyenlet 2 + ax mod n, a Z, n Z, l no( a, n) (8) alaú (azaz a és n legyene relatív príme). Az egyenlet egyetlen alapmegoldását az a szám n szerinti multipliatív inverzéne nevezzü. Jelölése: x a mod n. (9) A multipliatív inverz meghatározása történhet a lineáris ongruencia megoldó 2.5.. algoritmus segítségével. Természetesen a FOR cilus alalmazására az eljárásban nem lesz szüség. 2. Példa: 5? mod 8 5x mod 8 megoldását eressü. Lépésszám n a q r d x y 0 8 5 3 2 -- 2-3 5 3 2 - - (-) 2 2 3 2 0- - 3 2 2 0 0-2 0 4 0-0 Láthatóan lno(5,8), tehát van multipliatív inverz. 2 8+(-3) 56-5. Az a együtthatója 3, amine a 8 szerinti maradéa 3+85. Tehát az 5 multipliatív inverze 8-ra nézve éppen saját maga. Ellenőrzés: 5 5253 8+. 2.6. RSA So esetben többe özött a majd ismertetésre erülő RSA algoritmusban szüség van egésze hatványa valamely modulus szerinti maradéána meghatározására. Legyen + a, b, n Z. A feladat c a mod n meghatározása lehetőleg elfogadható idő alatt. Ilyenne bizonyul a moduláris hatványozás algoritmusa. Ötlete a b szám bináris felírásából jön. Legyene a b bitjei: b, b, K, b, b0. A legmagasabb helyiértéű bit -es. Ha b -ne i aarju számítani az értéét, aor ezt megtehetjü a 2 hatványaival történő számítással, 0 b b 2 + b 2 + K + b 2 + b0 2. Ugyanezt az eredményt megaphatju a gazdaságosabb Horner séma szerint: ( (( b ) 2 + b ) 2 + + b ) 2 + b0 b K K. () Itt láthatóan csa ettővel való szorzást és egy nulla vagy egy hozzáadását ell végezni, melye számítástechniailag hatéony művelete. Ez annál inább hasznos, mivel még a b értéét sem ell iszámítani az algoritmusban, hiszen az adott, hanem csa az egyes bitjeit
Adatstrutúrá, algoritmuso - 2 - ell elérni, ami eltolásoal hatéonyan megvalósítható. A b szám a itevőben van, ezért a hatványozás során a ettővel való szorzásna a négyzetreemelés az egy hozzáadásána pedig az alappal történő szorzás felel meg. Minden lépés után vehető a modulo n szerinti maradé, így a használt számtartomány mérete mérséelt marad. (Meora?) A megfelelő algoritmus pszeudoódja: 2.6.. algoritmus Moduláris hatványozó Moduláris_hatványozó (a, b, n, c) 2 // Input paramétere: a,b,n Z, a,b,n>0 3 // Output paraméter: c Z, c 0 4 p 0 5 c 6 FOR i DOWNTO 0 DO 7 p 2 p 8 2 c c modn 9 IF b i 0 THEN p p + c ( c a) modn 2 RETURN ( c ) Az algoritmusban ténylegesen a p értéét nem ell iszámítani, mert az végül a b értéét adja majd.. Példa: 8 2005 mod 37 b 2005 0 ( 0 00 2 ), a8, n37. b c modn ( c a ) mod n 0 2 8 8 8 9 8 2 3924 87 87 8 0266 28 8 28 2 6384 8 8 8 9558 05 7 05 2 025 65 65 8 7670 35 6 35 2 8225 4 4 8 472 6 5 0 6 2 372 22 4 22 2 484 73 73 8 864 20 3 0 20 2 4400 5 2 5 2 225 88 88 8 0384 09 0 09 2 88 99 0 99 2 980 74 74 8 8732 0 Az RSA algoritmus fel fogja tételezni, hogy nagy prímszámain vanna. Ilyene eresésére egy eszöz lehet (nem a leghatéonyabb és nem abszolút biztos) az alábbi tételen alapuló algoritmus. A Fermat tétel Ha p prím, aor a p mod p, a,2, K, p. (2)
Adatstrutúrá, algoritmuso - 3 - A tételt nem bizonyítju.. A tételre épülő prímszám ellenőrzési algoritmus egy egyszerű, de nem teljesen megbízható változatána a pszeudoódja: 2.6.2. algoritmus Fermat féle álprímteszt Fermat_teszt (n, p) 2 // Input paraméter: n Z, n> 3 // Output paraméter: p logiai érté 4 // igaz lehet prím 5 // hamis nem prím 6 7 Moduláris_hatványozó (2, n-, n, c) 3 p ( c ) 4 RETURN (p) Ha ez az algoritmus azt mondja, hogy a szám összetett, aor az biztosan nem lesz prím. Ha azt mondja, hogy lehet, hogy prím, aor nagy eséllyel valóban prímet vizsgált, ugyanis 0000-ig terjedően a számo özött csa 22 olyan van, amely nem prím és a teszt esetlegesen prímne minősíti. Ilyene a 34, 56, 645, 05,. Ötven bites számo esetén már csa a számo egy milliomod része lehet ilyen, 00 bitesenél pedig ez az arány :0 3. Ezen hibá egy része iszűrhető azzal, hogy a 2 helyett más alapot is beveszün a moduláris hatványozásba, például a 3-at, stb. Sajnos azonban vanna olyan számo, amelye mindegyi alap esetén prímne maszírozzá maguat ennél az algoritmusnál. Eze az úgynevezett Carmichael számo. Eze relatíve nagyon evesen vanna. (Valójában végtelen so ilyen szám van. Ilyene: 56, 05, 729,. Az első egy milliárd szám özött csa 255 ilyen van.) Példa: Döntsü el, hogy a és a 2 príme-e? 2 0? mod, 0 (00) 2? mod 2, (0) 3 2 2 2 2 0 2 2 4 4 2 6 5 5 2 0 0 0 0 2 00 3 2 2 2 2 0 2 2 4 4 2 6 4 4 2 8 0 8 2 64 4 4 2 8 2 0 mod Tehát a nagy eséllyel prím. 2 8 mod 2 Tehát a 2 nem prím. Ezen előészülete után térjün rá a fejezet céljára a nyilvános ulcsú titosításra A titosítás alapja az eredeti szöveg átalaítása, ódolása. A nyílvános ulcso használata azt jelenti, hogy minden résztvevőne van egy nyílvános, mindeni számára hozzáférhető ulcsa (P) és egy titos, más által nem ismert ulcsa (S). Legyen M az üzenet. Legyen a ét résztvevő A és B. A üldi B-ne az M üzenetet titosítva. Az elüldött titosított szöveg CP B (M), B megapja a C üzenetet és a titos ulcsával deódolja MS B (C). A ulcso egymás inverzei, és úgy vanna ialaítva, hogy a P ulcs révén önnyű legyen titosítani, de a ulcs
Adatstrutúrá, algoritmuso - 4 - ismeretében nagyon nehezen lehessen - pratiusan lehetetlen legyen - az S ulcsot meghatározni. A digitális aláírás ilyenor történhet úgy, hogy a üldő a titosított C szöveg mellé aár nyíltan odaírja a saját Q azonosítóját (aláírását), majd anna az RS A (Q) titosítottját. Ezután B a Q alapján tudva, hogy it nevez meg az aláírás, anna privát ulcsával deódolja R-et. Q P A (R). Ha Q Q, aor nem történt átviteli hiba, vagy hamisítás, egyébént igen. Persze Q az M-mel együtt is ódolható. Ez anna felel meg, mintha az első esetben nyílt levelezőlapon lenne az aláírásun, a másodiban pedig mintha borítéba tettü volna. Alább özöljü az RSA (Rivest Shamir - Adleman) nyílvános ulcsú titosítás algoritmusát. Az algoritmus feltételez ét nagy prímszámot. (A gyaorlatban legalább 00-200 jegyűere van szüség, hogy a titosítás pratiusan feltörhetetlen legyen.) A P ulcs felépítése P ( e, n, ahol a ét prím szorzata, pedig egy is páratlan szám. Az ulcs S d, n. ) n e S ( ) A szöveg titosítása a ( ) n 2.6.3. algoritmus RSA ulcso meghatározása RSA_ulcso_meghatározása (p, q, e, P, S) 2 // Input paramétere: p, q, e 3 // Output paramétere: P, S 4 IF p vagy q nem prím vagy e<3 vagy e páros 5 THEN RETURN ( Nincs ulcs ) 6 n p q f p q 7 ( ) ( ) 8 IF l no( e, f ) 9 THEN RETURN ( Nincs ulcs ) 0 d e mod f RETURN ( P ( e, n), S ( d, n) ) C P ( M ) M e mod n alapján történi. Deódolása pedig az M S C C d mod alapján. A szöveg darabolásána bitméretét az n szabja meg. Az eljárás helyességét nem bizonyítju. 2. Példa: Számpélda RSA algoritmusra (nem életszerű, mivel a príme icsi) Legyen a titos választás: p, q 29, n p q 29 39, 3 f A ibővített eulideszi algoritmust alalmazzu. ( ) f e f / e e, ( p ) ( q ) 0 28 280 f mod e d x y 280 3 93-93 3 3 0 0-0 Láthatóan Lno f, e és e multipliatív inverze d e 93. Ez utóbbi helyett 280-at hozzáadva vesszü a 87-et. Eze után aor P ( 3; 39 ) özölhető ulcs ( M ) 3 P M mod 39
Adatstrutúrá, algoritmuso - 5 - S ( 87; 39 ) titos ulcs ( C) 87 S C mod 39 Legyen az üzenetün 00. Egy darabban titosítható, mivel ez isebb, mint 39. Titosítsu, majd fejtsü meg az üzenetet. Titosítás: C 00 3 mod 39 3 0 2 2 00 00 00 0 00 2 0000 00 00 254 Tehát a titosított érté: C P( M ) 254 Megfejtés: M 254 87 mod 39 87 0 00 2 Tehát a megfejtés: M S( C) 00 7 2 254 254 254 6 0 254 2 6456 78 5 78 2 6084 23 23 254 5842 00 4 00 2 0000 254 2894 22 3 22 2 4884 20 20 254 53340 67 2 0 67 2 4489 23 23 2 529 20 20 254 53340 67 0 67 2 4489 23 23 254 5842 00 FELADATOK. Határozzu meg az összes 000-nél isebb prímszámot! 2. Bizonyítsu be a maradéos osztás tételét! 3. Adju meg az összes olyan b pozitív egész számot, amely 00-nál nem nagyobb és teljesül rá, hogy 7 bmod! 4. Adjun olyan pozitív számpároat (ét ülönböző szám), amelye 00-nál nem nagyobba és az ilyen tulajdonságú páro özött a legtöbb özös osztóval rendelezne! 5. Sorolju fel a 30 és a 05 számo összes pozitív, 00-nál nem nagyobb lineáris ombinációját. Adjun megfelelő együtthatóat is mindegyi lineáris ombinációhoz! 6. Bizonyítsu be a özös osztó tulajdonságaina tételét! 7. Sorolju fel az összes pozitív, 00-nál isebb számot, amely relatv prím a 30-as számmal! 8. Bizonyítsu be a legnagyobb özös osztó elemi tulajdonságaina tételét! 9. Határozzu meg a 28560 és a 38640 legnagyobb özös osztóját a bináris legnagyobb özös osztó algoritmusával! Végezzü el a számításoat bináris számrendszerben is! 0. Kiadju az Eulidesz(38640 ; 28560, d ) pszeudoód utasítást, melyben a 2.4.. algoritmust használju. Szemléltessü a parancs végrehajtásána a menetét, a verem alaulását!. Adjun fölső becslést a reurzív híváso számára a 0. feladathoz a Lamé tétel övetezménye alapján! 2. Bizonyítsu be, hogy ha a bmodn és özös osztója a és b-ne, aor
Adatstrutúrá, algoritmuso - 6 - a b n mod! l no(, n) 3. Oldju meg az alábbi lineáris ongruencia egyenleteet! Adju meg a megoldáso alaprendszerét! Írju fel a teljes megoldásrendszert! a. 2x 6 ( mod8) b. 4x 4 ( mod4) c. 8x 24 ( mod60) d. 63x 8 ( mod72) e. 2006x 2005 ( mod 2007) 4. Határozzu meg az alábbi számoat, ha értelmezve vanna! Az alapértelmezett megoldást adju meg! x 5 mod 9 a. ( ) b. x 2006 ( mod 2007) c. x 5 ( mod 023) 5. Számítsu i az alábbi számoat! 00 00 mod 0 a. ( ) b. 23 2006 ( mod 2007) c. 2 65536 ( mod 255) 6. Mit mond a Fermat féle álprímteszt az alábbi számo esetén? 23, 234,345,5,023,05,2047,65535 7. RSA ódolással ódolju, majd deódolju az alábbi üzeneteet és a hozzátartozó aláírást! Maximum hány bites egységere lehet tördelni az üzenetet? a. p29, q3, e7, M x, Q A b. p97, q0, e, M x, Q A