Salausmenetelmät Veikko Keränen, Jouko Teeriaho (RAMK, 2006) LUKUTEORIAA JA ALGORITMEJA 4. Eulerin a Fermat'n lauseet à 4.1 Alkuluokka a Eulerin -funktio Yleensä olemme kiinnostuneita vain niistä äännösluokista modulo m, oiden alkiot ovat suhteellisia alkulukua luvun m kanssa. Näiden luokkien lukumäärä esitetään Eulerin -funktion arvona. Määritelmä 4.1 Jäännösluokka [a] (mod m) on alkuluokka (mod m), os syt(a, m) = 1. Kaikkien alkuluokkien (mod m) oukolle käytetään merkintää m *. Siis m * = [a] œ m syt(a, m) = 1}. Määritelmä 4.2 Eulerin -funktio (Euler's Totient Function) antaa arvonaan kokonaisluvun HmL = cardh8 0 i < m» sythi, ml = 1 <L. Siis HmL ilmaisee, montako luvuista 0, 1,..., m - 1 on suhteellisia alkulukua luvun m suhteen, ts. (m) on oukon m * alkioiden lukumäärä. Itse asiassa, aina kun m 2, luvun 0 voi ättää pois (syt(0, m) = m) a tarkastella vain lukua 1,..., m - 1. Huomaa, että (1) = card( 0 i < 1 syt(i, 1) = 1 } ) = 1, koska syt(0,1) = 1. Vastaavasti (0) = card( } ) = 0. Mathematicalla HmL voidaan laskea EulerPhi@mD -funktion avulla. Esimerkiksi EulerPhi@mD 8 Vastaavat suhteelliset alkuluvut luvun m = 15 kanssa ovat: 1, 2, 4, 7, 8, 11, 13 a 14. Myöhemmin näemme, kuinka funktio (m) voidaan efektiivisesti laskea.
Salakiroitus 2 Lause 4.1 Kaikille positiivisille kokonaisluvuille m on voimassa: d»m HdL = m. Merkintä d»m HdL tarkoittaa yllä sitä, että muodostetaan okaiselle luvun m akaalle, ts. m:n tekiälle, arvo (d) a lasketaan kaikkien näin saatuen arvoen (d) summa. Tarkastellaan vielä esimerkin avulla, mitkä kokonaisluvuista välillä [1, m] ovat niitä, otka tuottavat Lauseen 4.1 summaan ko. termin HdL, missä d» m. Olkoon m = 15. Tällöin akaat ovat 1, 3, 5 a 15. Ne kahdeksan lukua (huom. H15L = 8), oiden suurin yhteinen tekiä luvun 15 kanssa on 1, ovat 1, 2, 4, 7, 8, 11, 13 a 14. Nelällä ( =H5L) luvulla (3, 6, 9, 12) on syt = 3 (luvun 15 kanssa), kahdella ( =H3L) luvulla (5, 10) on syt = 5 a yhdellä ( = H1L) luvulla (0) on syt = 15. Siis tässä d»m HdL = (15) + (5) + (3) + (1) = (1) + (3) + (5) + (15) = 1 + 2 + 4 + 8 = 15. Lauseen 4.1 Todistus (1. tapa lyhyt, mutta varsin vaativa tarkastelu): On siis osoitettava, että d»m HdL = m aina kun m œ +. Oletetaan, että d m. Kiroittamalla r = id näemme, että niiden kokonaislukuen r, 0 r < m, missä sythr, ml = d, lukumäärä on sama kuin lukuen i, missä 0 i < ÅÅÅÅÅ m m a sythi, ÅÅÅÅÅ L = 1, lukumäärä. Tämä luku on d d Määritelmän 4.2 mukaan H ÅÅÅÅÅ m d L. Toisaalta, d = sythr, ml m kaikilla kokonaisluvuilla r, 0 r < m. Siis d»m H ÅÅÅÅÅ m L = m. Tämä on ekvivalenttia d sen kanssa, mikä oli todistettavana. Ñ Todistus (2. tapa pitempi, mutta tarkka a ehkä valaiseva perustelu): Olkoon S = (d, f) d m, 1 f d, syt(f, d) = 1 }. Esimerkiksi tapauksessa m = 12 oukkoa S esittää seuraava taulukko, ossa viimeiset numerot rivissä d tarkoittavat niiden lukuen f lukumäärää väliltä 1 f d, oille syt(f, d) = 1, ts. kyseessä ovat arvot (d). d \ f» 1 2 3 4 5 6 7 8 9 10 11 12 HdL ---» - - - - - - - - - - - -» ---- 1» 12» 1 2» 6» 1 3» 4 8» 2 4» 3 9» 2 6» 2 10» 2 12» 1 5 7 11» 4 --- - - - - - - - - - - - - - - ----» 12 Tapauksessa m = 15 oukkoa S esittää taulukko:
Salakiroitus 3 d \ f» 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 HdL ---» - - - - - - - - - - - - - - -» ---- 1» 15» 1 3» 5 10» 2 5» 3 6 9 12» 4 15» 1 2 4 7 8 11 13 14» 8 --- - - - - - - - - - - - - - - - - - ----» 15 Joukon S määrittelyn noalla S = d»m HdL. Lauseen 4.1 todistamiseksi tulee osoittaa, että S = m. (Huom. S ª card(s)) Konstruoidaan biektio b: S Ø m, missä m = 1, 2,..., m}. Olkoon pari (d, f) œ S annettu. Määritellään b(d, f) = f m / d. Yllä olevassa taulukossa rivin d a sarakkeen f risteyksessä oleva luku on nimenomaan tämä b(d, f). Koska d m, niin arvot b(d, f) ovat kokonaislukua. Lisäksi b(d, f) œ m, koska 1 f d. Osoitetaan, että b: S Ø m on inektio. Olkoon b(d, f) = b( d', f' ). Tällöin f m / d = f' m / d', osta saadaan f d' = f' d. Koska f a d ovat suhteellisia alkulukua, samoin kuin f' a d', nähdään, että d = d' a f = f'. Siten b on inektio. Osoitetaan, että b: S Ø m on surektio. Olkoon x œ m annettu. Olkoon g x = syt(x, m) a olkoon d x = m/g x, f x = x/g x. Selvästi d x a f x ovat suhteellisia alkulukua, muutoin on olemassa kokonaisluku k 2, olle k d x a k f x, ts. m x ÅÅÅÅÅÅÅÅ kÿg x a ÅÅÅÅÅÅÅÅ kÿg x œ +, ts. (k ÿ g x ) m a (k ÿ g x ) x, mikä on ristiriita sen kanssa, että k g x > g x = syt(x, m). Siis b(d x, f x ) = f x ÿm ÅÅÅÅÅÅÅÅÅ d x = f x ÿ m ÅÅÅÅÅÅÅÅÅÅÅÅÅ Hmêg x L = f x ÿ g x = x. Näin ollen b on surektio. Kaiken kaikkiaan b: S Ø m on biektio, oten S = m. Näin ollen Lause 4.1 on tosi. Ñ Haroituksia 24 Määritä alkuluokat modulo m, ts. oukon * m alkiot sekä (m) tapauksissa m = 7 a m = 12. Laske myös (46), (55), (81) a (144).
Salakiroitus 4 Lauseen 4.1 todistuksen (2. tapa) taulukkoihin liittyviä laskelmia Mathematicalla (tämän loppuosan voi halutessaan myös ohittaa) Clear@myBeta, mybetawithgcdtestd; mybeta@f_, d_, m_d := f m ê d; mybetawithgcdtest@f_, d_, m_d := If@GCD@f, dd 1 fl f d, mybeta@f, d, md, " "D d = 1; Table@8f, mybetawithgcdtest@f, d, md<, 8f, 1, d<d d = 1 H 1 15L d = 3; Table@8f, mybetawithgcdtest@f, d, md<, 8f, 1, m<d êê Transpose d = 3 i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 y z k 5 10
Salakiroitus 5 d = 5; Table@8f, mybetawithgcdtest@f, d, md<, 8f, 1, m<d êê Transpose d = 5 i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 y z k 3 6 9 12 d = 15; Table@8f, mybetawithgcdtest@f, d, md<, 8f, 1, m<d êê Transpose d = 15 i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 y z k 1 2 4 7 8 11 13 14 m = 12; Clear@hD; Join @88"d\\f", ":", Range@mD< êê Flatten<, 8Table@, 8m + 2<D<, Table@If@Mod@m, dd 0, 8d, ":", Table@8myBetaWithGCDTest@f, d, md<, 8f, 1, m<d<, h@dd êê Flatten, 8d, 1, m<d êê DeleteCases@#, _hd &D i d\f : 1 2 3 4 5 6 7 8 9 10 11 12 y 1 : 12 2 : 6 3 : 4 8 4 : 3 9 6 : 2 10 k 12 : 1 5 7 11 z
Salakiroitus 6 Clear@myTableForPhiD; mytableforphi@m_d := H Clear@hD; Join @88"d\\f", ":", Range@mD< êê Flatten<, 8Table@, 8m + 2<D<, Table@If@Mod@m, dd 0, 8d, ":", Table@ 8myBetaWithGCDTest@f, d, md<, 8f, 1, m<d<, h@dd êê Flatten, 8d, 1, m<d êê DeleteCases@#, _hd &DL mytableforphi@15d i d\f : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15y 1 : 15 3 : 5 10 5 : 3 6 9 12 k 15 : 1 2 4 7 8 11 13 14 z mytableforphi@25d i d\f : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2 1 : 25 5 : 5 10 15 20 k 25 : 1 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 2 mytableforphi@13d i d\f : 1 2 3 4 5 6 7 8 9 10 11 12 13 y 1 : 13 k 13 : 1 2 3 4 5 6 7 8 9 10 11 12 z Seuraava Mathematican perusfunktioista rakennettu funktio laskee yhteen funktion f arvot f @dd, missä d käy läpi kaikki ne arvot, otka akavat annetun luvun m. (@@ on lyhennysmerkintä funktiosta Apply a funktiosta Map (multiply apply)) DivisorSum@f_, m_d := Plus @@ Hf ê@ Divisors@mDL Testataan tämän funktion avulla Lausetta 4.1. DivisorSum@EulerPhi, md
Salakiroitus 7 15