Az RSA módszer Az RSA módszer titkossága a prímtényezős felbontás nehézségén, a prímtényezők megtalálásának hihetetlen nehéz voltán alapszik. Az eljárás matematikai alapja a kis FERMAT-tétel egy következménye: 2.1. Tétel. Legyenek p és q különböző prímszámok, e pozitív egész, ln.k.o.(e, (p 1)(q 1)) = 1, és d legyen e modulo (p 1)(q 1) inverze, azaz ed 1 (mod (p 1)(q 1)). Ekkor bármely s nemnegatív egészre s ed s (mod pq). Bizonyítás. Mivel ed 1 (mod (p 1)(q 1)) így (1) (p 1)(q 1) (ed 1). Ha ln.k.o.(s, pq) = 1, akkor a kis FERMAT-tétel szerint s p 1 1 (mod p) és s q 1 1 (mod q). Így (1) miatt sed 1 1 (mod p) és s ed 1 1 (mod q), ahonnan pq (s ed 1 1) (s ed s), azaz valóban s ed s (mod pq). Ha ln.k.o.(s, pq) = p, akkor p s és ln.k.o.(s, q) = 1, így s q 1 1 (mod q), ahonnan (1) miatt s ed 1 1 (mod q) következik. Ekkor tehát p s és s ed 1 1 (mod q), ezért pq s(s ed 1 1) = s ed s, azaz valóban s ed s (mod pq). Az előző esethez teljesen hasonló bizonyítás adható ln.k.o.(s, pq) = q esetén, végül az ln.k.o.(s, pq) = pq eset nyilvánvaló. Nézzük meg, hogyan is működik az RSA módszer! Először is választunk két igen nagy prímszámot, p-t és q-t, majd kiszámoljuk ezek n = pq szorzatát. Ezután az üzenetet olyan k-betűs blokkokra bontjuk, hogy az üzenetelemek numerikus megfelelőinek maximuma legfeljebb n 1 legyen. (Azaz, ha például N betűs ábécét használunk k betűs blokkokkal, akkor N k n teljesüljön.) Ez biztosítja a kódolás egyértelműségét. Majd kiszámoljuk ϕ(n)-t, amit a p, q tényezők ismeretében könnyen megtehetünk: ϕ(n) = (p 1)(q 1) = n + 1 p q. Ezután kiválasztunk egy 1 és ϕ(n) közötti egész számot, amely relatív prím ϕ(n) = (p 1)(q 1)-hez, majd meghatározzuk d e 1 (mod ϕ(n))-t. Nyilvánosságra hozzuk az (n, e) kódoló kulcsot, a p, q, d számokat pedig titokban tartjuk. A kódoló transzformáció f(s) s e (mod n), amit bárki el tud végezni a kódkulcs ismeretében. A dekódoló transzformáció f 1 (t) t d (mod n), amelyet azonban csak a titokban tartott d segítségével lehet kiszámolni. A 2.1. Tétel szerint a két transzformáció egymásnak inverze, nevezetesen f után f 1 -et, vagy f 1 után f-et végrehajtva, az adott szövegelem ed-edik hatványát kapjuk. Mivel ed 1 (mod ϕ(n)), ez a hatvány a tétel szerint éppen magával a szövegelemmel, pontosabban annak numerikus megfelelőjével kongruens modulo n.
A fentiek alapján úgy tűnhet, mintha a sima s szövegelemek S halmaza és a t titkos szövegelemek T halmaza megegyezne. Mint fentebb már említettük, a kódolás egyértelműségéhez szükséges, ha a sima szövegelemek egy N betűs ábécé k betűs blokkjai, hogy az N k n egyenlőtlenség fennálljon. Azaz n értéke legalább annyi, mint ahány kódolandó sima szövegelem van. Mi a helyzet a titkos ábécével? Ezt úgy kell megválaszolnunk, hogy minden sima szövegelem kódjának legyen megfelelő betűkódja. Mivel a kódolásnál modulo n számolunk, ezt úgy érhetjük el, ha valamilyen módon kibővítjük a sima ábécét. Például úgy, hogy hosszabb l(> k) betűs blokkokat, vagy nagyobb N (> N) betűszámú ábécét választunk, hogy az N l n illetve az (N ) k n egyenlőtlenség teljesüljön. Összefoglalva tehát fenn kell állnia az N k n N l vagy az N k n (N ) k egyenlőtlenségnek. Példa. Álljon a sima szöveg a 26 betűs ábécé digráfjaiból, a titkos szöveg pedig ugyanezen ábécé trigráfjaiból. A kódoló kulcs legyen (n, e) = (2047, 179). (Példánkban és a feladatokban a könnyebb kiszámolhatóság kedvéért a gyakorlatban használt akár több száz jegyű számoknál jóval kisebbekkel dolgozunk.) A N E üzenet elküldéséhez a feladónak először meg kell határoznia az üzenet numerikus megfelelőjét: NE = 13 26 + 4 = 342. Ezután ki kell számolnia s e 342 179 (mod 2047) értékét, (hogy ezt hogyan lehet megtenni, arra később visszatérünk) ami 1261 = 1 26 2 + 22 26 + 13. A titkos trigráf tehát BWN. A címzett ismeri n = 2047 = 23 89 prímfelbontását, így ő meghatározhatja (például euklideszi algoritmus segítségével) e = 179 inverzét modulo ϕ(n) = 22 88 = 1936, ami 441. Tehát a dekódoló kulcs (n, d) = (2047, 441). Ennek ismeretében kiszámíthatja t d 1261 411 (mod 2047) értékét, és így megtudhatja az üzenetet: 342 = 13 26 + 4 = NE. Térjünk most rá arra, hogyan lehet a kódolás és dekódolás során fellépő nagy moduláris hatványokat kiszámolni. Ha nekilátnánk, és mechanikusan elvégeznénk először a hatványozást, akkor például s e = 342 179 esetében egy 537 jegyű számot kapnánk, melynek még meg kellene határozni a 2047-tel való osztási maradékát. Ez igen sok számolást igényelne. Kevesebb számolással is célt érhetünk, ha alkalmazzuk az úgynevezett ismételt négyzetre emelés módszerét. Kövessük végig ezt 342 179 (mod 2047) példáján! Az első lépésben felírjuk a kitevő kettes számrendszerbeli alakját: 179 10 = 10110011 2, azaz 179 = 2 7 + 2 5 + 2 4 + 2 + 1 = 128 + 32 + 16 + 2 + 1. Ez alapján ( ) 342 179 = 342 128 342 32 342 16 342 2 342. A második lépésben újra és újra négyzetre emelve meghatározzuk 342 kettőhatvány kitevőjű hatványait, természetesen modulo 2047 számolva, és közben a ( ) felbontásban szereplőket mindig összeszorozzuk.
342 2 285 342 342 2 342 285 1261 342 4 285 2 1392 342 8 1392 2 1202 342 16 1202 2 1669 1261 342 16 1261 1669 293 342 32 1669 2 1641 293 342 32 293 1641 1815 342 64 1641 2 1076 342 128 1076 2 1221 1815 342 128 1815 1221 1261 (A kongruenciák modulusa mindenütt 2047.) Végeredményül kapjuk tehát, hogy 342 179 1261 (mod 2047). Vajon csakugyan feltörhetetlen ez a kód? Az üzenet megfejtéséhez d-t kellene ismernie a feltöréssel próbálkozónak. Azonban csak e és n értékét ismeri, és tudja, hogy ed 1 (mod ϕ(n)) és n = pq alakú, de nem ismeri n tényleges felbontását, e nélkül pedig szinte reménytelen kiszámolnia ϕ(n) = (p 1)(q 1) = n + 1 p q értékét. A p és q prímek értékét tehát olyan nagyra kell választani, hogy az illetéktelen megfejtő számára reménytelen legyen n prímtényezős felbontásának meghatározása. Természetesen 2, 3,..., [ n] között biztosan meg lehet találni az n kisebbik prímosztóját, de ez rendkívül sok osztás elvégzését igényelné. A legkorszerűbb prímtényező meghatározási módszerekkel a számolás mennyisége ugyan lényegesen csökkenthető, de ha n több száz jegyből áll és még egyéb feltételek is fennállnak (p és q nincs egymáshoz túl közel, stb.) a legmodernebb szuperszámítógéppel is reménytelen a tényezők meghatározása.
Feladatok 1. Kódold a KÜLDJPÉNZT üzenetet RSA módszerrel, ha a sima szövegelemek a 30 betűs, a titkos szövegelemek a 35 betűs magyar ábécé digráfjai és p = 29, q = 37, e = 187! 2. A PWABSIVQ XRDQÜGFPÜ üzenetet kaptuk. Az üzenetegységek trigráfok, a sima ábécé 30, a titkos ábécé 31 betűs (30 betűs + szóköz = 31). A kódoló kulcs n = 27383, e = 14411. Dekódold az üzenetet, ha 27383 prímtényezői p = 139, q = 197! 3. Tegyük fel, hogy ellenfelünk a 30 betűs magyar ábécét használja, a sima szövegelemek trigráfok, a titkos szövegelemek négyes blokkok (tetragráfok). A nyilvános kódoló kulcs n = 36019, e = 25073. (a) Keresd meg n prímtényezőit és határozd meg a dekódoló kulcsot! (b) Fejtsd meg az AUGLAOQJÁGEÖAXAEABPE üzenetet!
A feladatok megoldásai 1. Mivel n = pq = 29 37 = 1073, így a kódoló transzformáció t s 187 (mod 1073). A sima szövegelemek numerikus megfelelői 384 394 348 195 892. Az e kulcs kettes számrendszerbeli alakjának (187 10 = 10111011 2 ) segítségével, az ismételt négyzetre emelés módszerével a titkos szövegelemek numerikus megfelelőire a következőket kapjuk: 393 708 812 491 622. Mivel 393 = 11 35+8, 708 = 20 35+8, 812 = 23 35+7, 491 = 14 35+1, 622 = 17 35+27, a tikos szöveg ÍGŐGRFLÁOÚ. 2. Mivel n = 27383 = 139 197, így ϕ(n) = 138 196 = 27048. A d dekódoló kulcs meghatározásához tehát e 1 14411 1 (mod 27 048)-at kell kiszámolnunk. Az euklideszi algoritmust alkalmazva kapjuk, hogy d = 1235, így a dekódoló transzformáció s t 1235 (mod 27383). Ezzel PWABSIVQ XRDQÜGFPÜ = 18104 2583 24644 26571 19011 7309 18201 26856 14345 10972 4890 4060 = RÉSZVÉNYEKETELADNI. 3.(a) Az n = 36 019 prímtényezői p = 181 és q = 199. Tehát ϕ(n) = 180 198 = 35640. Ismerve a nyilvános e értéket, euklideszi algoritmus alkalmazásával d = 2 639. (b) Az (a) rész alapján a dekódoló transzformáció s t 2639 (mod 36019). A titkos üzenetegységek numerikus megfelelői (négyes blokkok!) 20953 14981 34367 24305 2345. Az ismételt négyzetre emelés módszerével számolva a sima szövegelemek numerikus megfelelői 3762 14536 19963 12198 19842. Az üzenet tehát DEKODOTELLOPTÁK. (Lehet, hogy feleslegesen számoltunk ennyit?)