Episode I
Alice és Bob
22. fejezet
Alice, Bob és a kínaiak
Az előző fejezetben megismerkedtünk napjaink egyik legfontosabb aszimmetrikus kulcsú rejtjelezési eljárásával, az RSA algoritmussal. Ehhez alapvetően három összetevőre volt szükség. Először is hatékonyan kell tudni megoldani lineáris kongruenciákat, amelyhez bemutattuk az euklidészi algoritmus kibővített változatát. Másodszor hatékonyan kell tudni kiszámítani az Euler-féle -függvény értékét. Láttuk, hogy a bemeneti szám prímtényezőinek ismeretében ez gyerekjáték. Megemlítettük ugyanakkor, hogy a prímtényezők ismerete nélkül jelenlegi tudásunk szerint ez gyakorlatilag kivitelezhetetlen, amennyiben ezek a prímtényezők kellően nagyok. Ez adja az RSA eljárás biztonságát. Harmadszor a kódoló és dekódoló műveletek elvégzéséhez hatékonyan kell tudni moduláris hatványozást végezni, amelyhez az ismételt négyzetreemelések módszerével ismerkedtünk meg. Végül egy konkrét példán ki is próbáltuk az eljárást, és megmutattuk, hogy a kulcspár egyik tagjával kódolt üzenetet varázslatos módon a kulcspár másik tagjával lehet dekódolni.
De vajon varázslat helyett valójában mi áll az RSA algoritmus helyes működésének hátterében? Mit állít a kis Fermat-tétel és a kínai maradéktétel, és mi közük van ehhez az egészhez? Mit értünk egy maradékosztálygyűrű dekompozíciója alatt? Hogyan lehet ennek segítségével lényegesen felgyorsítani az RSA dekódolási algoritmust? Ebben a fejezetben erről lesz szó...
Figyelem! Ez a fejezet erőteljesen épít a 20. és a 21. fejezetben felépített alábbi definíciókra, valamint a hozzájuk kapcsolódó tételekre:
Ezek kontextusba helyezése miatt erőteljesen ajánlott elolvasni a 20. és a 21. fejezetet, mivel gyakran hivatkozni fogunk rájuk.
Az RSA algoritmus lépéseit tehát már ismerjük, és az előző fejezetben mutattunk is egy konkrét példát az alkalmazására. Ebben a példában először Bob generált magának egy RSA kulcspárt, amelynek publikus részét elérhetővé tette Alice – illetve bárki más – számára, a titkos részét viszont nem adta ki a kezéből. Alice ezután a sziabobmiahelyzet# üzenetet kódolta Bob publikus kulcsával, a titkosított üzetetet pedig átküldte a nembiztonságos csatornán. Ezt az üzenetet egy támadó, de még maga Alice sem tudja dekódolni. Arra ugyanis csak Bob képes, mivel nála van az ehhez szükséges titkos kulcs.
Úgy tűnik tehát, hogyha egy üzenetet egy kulcspár valamelyik tagjával – legyen az akár a publikus, akár a titkos kulcs – kódolunk, majd az így kapott eredményt dekódoljuk a kulcspár másik tagjával, akkor varázslatos módon az eredeti üzenetet kapjuk vissza. Most azt fogjuk megmutatni, hogy ez az összefüggés bármilyen, az ismertetett kritériumoknak megfelelő kulcspár, továbbá bármilyen üzenet esetén valóban fennáll. Ehhez azonban szükségünk lesz két nagyon fontos tételre. Ismerkedjünk is meg az elsővel.
22.1A kis Fermat-tétel
A kis Fermat-tétel egy fontos számelméleti tétel, amelyet Pierre de Fermat fedezett fel 1636-ban. Fermat-nak bosszantó szokása volt, hogy bizonyítás nélkül közölte felfedezéseit kortársaival, mintegy kihívást intézve hozzájuk: jöjjenek rá ők is a bizonyításra. Fermat szokásához híven a kis Fermat-tételre sem adott bizonyítást. Ezt bizonyíthatóan elsőként Gottfried Wilhelm Leibniz német matematikus írta le egy dátumozatlan kéziratban, ahol azt is állította, hogy már 1683 előtt is ismert bizonyítást e tételre. A tétel nevében szereplő "kis" jelzőt a híres nagy Fermat-tételtől való megkülönböztetés miatt szokás használni. Ez utóbbi egészen 1995-ig "nagy Fermat-sejtés" néven volt ismeretes, mivel csak ekkor – mintegy 350 évvel később – sikerült bizonyítást adni rá.
Visszatérve a kis Fermat-tételre, az egy viszonylag egyszerű számelméleti tétel, amely moduláris hatványokról szól, méghozzá azokban az esetekben, amikoris a modulus egy valamilyen pozitív prímszám. Fermat azt vizsgálta, hogy egy tetszőleges egész szám moduláris hatványai hogyan alakulnak ebben a modulo óraaritmetikában. Észrevette, hogy minden olyan esetben, amikor a kitevő megegyezik a modulussal, akkor az egész szám -edik moduláris hatványa is épp megegyezik -val.
Vizsgáljuk meg például, hogy az egész szám moduláris hatványai hogyan alakulnak a kitevőknek megfelelő óraaritmetikákban. Nyilakkal jelöltük meg azokat a sorokat, amelyekben a kitevő és a modulus prímszám:
Valóban úgy tűnik, hogy a prím kitevők esetében a hatványai mindig kongruensek lesznek -vel a kitevőnek megfelelő óraaritmetikában.
Az alábbi tétel második állítása éppen azt fogalmazza meg, hogy ez bármilyen alap – tehát nem csak a –, továbbá bármilyen pozitív prím kitevő esetén így van. Amennyiben és relatív prímek, akkor érvényes az első állítás is, amely a kis Fermat-tétel gyakoribb alakja.
Azon túlmenően, hogy a most ismertetett kis Fermat-tétel fontos szerepet játszik az RSA algoritmus helyességének igazolásában, Alice-nak és Bob-nak is nagy hasznára lesz a kulcsgeneráláshoz szükséges óriási – a gyakorlatban többszázjegyű – prímszámok kereséséhez. Erről a következő fejezetben lesz szó, most azonban ismerkedjünk meg egy másik, az RSA működése szempontjából fontos kérdéssel.
22.2Kongruenciarendszerek
A 20. fejezetben megismerkedtünk az úgynevezett kongruenciaegyenletekkel. Ezek olyan kongruenciák, amelyekben valamilyen ismeretlen is szerepel, a feladatunk pedig az egész számok egy olyan részhalmazának – vagy részhalmazainak – meghatározása, amelynek – vagy amelyeknek – elemeit behelyettesítve az ismeretlen helyére a kongruencia teljesül. E kongruenciaegyenletek legegyszerűbb képviselői az úgynevezett lineáris kongruenciák voltak, így a továbbiakban elsősorban ezeket fogjuk példaként felhozni.
Legyen például és tetszőleges, pedig valamilyen pozitív egész szám, és tekintsük az alábbi lineáris kongruenciát:
A 20.8. Definíció utáni megjegyzés alapján egy ilyen kongruenciaegyenletnek a megoldásai teljes modulo maradékosztályok lesznek – amennyiben persze létezik megoldás.
Most bonyolítsuk meg a dolgot egy kicsit. A hagyományos egyenletekhez hasonlóan a kongruenciaegyenletek esetén is előfordulhat, hogy ugyanarra az ismeretlenre egyidejűleg több, különböző modulus szerinti kongruenciafeltételt is előírunk. Ezeket kongruenciarendszereknek nevezzük.
A példa kedvéért továbbra is a lineáris kongruenciáknál maradva tegyük fel, hogy most az egész számoknak azon részhalmazát – vagy részhalmazait – keressük, amelynek – vagy amelyeknek – elemei egyszerre elégítik ki az alábbi mindkét kongruenciát:
Nyilvánvalóan egy ilyen rendszer megoldhatóságának szükséges feltétele, hogy a benne szereplő kongruenciák külön-külön megolhatók legyenek. Ez ebben a példában természetesen a 20.13. Tétel alapján teljesül, mivel a és a kitüntetett közös osztók osztói a megfelelő kongruenciák jobboldalainak, azaz rendre a és a egész számoknak.
A 20.14. Tétel 1. pontja alapján az első kongruenciának darab modulo maradékosztály, míg a másodiknak darab modulo maradékosztály lesz a megoldása.
Ezek megtalálásához előszöris a 20.13. Tétel alapján az alábbi két lineáris diofantoszi egyenletet kell megoldani:
Ezt a 21.2. Tétel 1. pontja alapján a kibővített euklidészi algoritmussal tudjuk megtenni. Az így kapott megoldásokat a 20.13. Tételben leírtaknak megfelelően visszafordítva a kongruenciák nyelvére azt kapjuk, hogy a kongruenciának a modulo maradékosztály, míg a kongruenciának a modulo maradékosztály egy-egy megoldása lesz. Előbbinek ugye nincs más megoldása, míg utóbbinak a 20.14. Tétel 2. pontja alapján egy további megoldása lesz a modulo maradékosztály.
A fenti kongruenciarendszerben szereplő két lineáris kongruencia megoldásait az alábbiakban foglaltuk össze a 19.1. és a 19.3. Definícióban tanult halmazelméleti jelölésekkel:
Olyan egész számokat keresünk tehát, amelyek -tel osztva maradékot, és -cal osztva vagy maradékot adnak. Azaz tulajdonképpen az alábbi két kongruenciarendszer megoldásait keressük:
Az ilyen jellegű kérdések megválaszolására siet segítségünkre a most bemutatásra kerülő nagyon fontos összefüggés.
22.3A kínai maradéktétel
Azt a kérdést szeretnénk tehát megválaszolni, hogy melyek azok az egész számok, amelyek adott modulusokkal osztva adott maradékokat adnak. Itt most csak azzal a számunkra fontos esettel foglalkozunk, amikor ezek a modulusok páronként relatív prímek egymáshoz – azaz bármely két modulus egymáshoz relatív prím. Ilyen például az előző szakaszban szereplő példa, hiszen az és modulusok egymáshoz relatív prímek.
Az írásos emlékek alapján az alábbi tételt már mintegy 2000 évvel ezelőtt is ismerte egy bizonyos Szun Cu nevű kínai matematikus, ezért ezt kínai maradéktétel néven szoktuk emlegetni.
Az előző szakaszban szereplő példánál maradva keressük tehát az alábbi két kongruenciarendszer megoldásait:
Az első kongruenciarendszer megoldásit az a halmaz fogja alkotni, amely a és a maradékosztályok közös része, azaz metszete. Mivel az és a modulusok egymáshoz relatív prímek, ezért alkalmazhatjuk a kínai maradéktételt. Eszerint a keresett halmaz épp egy modulo maradékosztály lesz.
Ellenőrizzük is le, azaz írjuk fel egymás alá a és a maradékosztályokat, és keretezzük be a közös elemeiket:
Látható, hogy a felső sorban az elemek – modulo maradékosztályról lévén szó – -ösével követik egymást, és minden -adik elem lett bekeretezve. Ezzel szemben az alsó sorban az elemek – modulo maradékosztályról lévén szó – -asával követik egymást, és minden -ödik elem lett bekeretezve.
Ha tehát kigyűjtjük a bekeretezett elemeket egy halmazba, akkor azok épp -esével fogják egymást követni, tehát ők valóban egy modulo maradékosztályt alakotnak, méghozzá a következőt:
Ezek – és a kínai maradéktétel alapján csak ezek – az egész számok elégítik ki tehát az első kongruenciarendszert.
A második kongruenciarendszer esetén a és a maradékosztályok metszetét keressük. Ezt az előzőhöz hasonló módszerrel kaphatjuk meg:
Ha ismét kigyűjtjük a bekeretezett elemeket egy halmazba, akkor azok szintén -esével fogják egymást követni, tehát ők ugyancsak egy modulo maradékosztályt alakotnak, méghozzá a következőt:
Az alábbiakban összefoglaltuk a két kongruenciarendszer megoldását, amely tehát egy-egy modulo maradékosztály:
22.4Kongruenciarendszerek megoldása
Most megmutatjuk, hogy ez a "bekeretezős" módszer mindig működik, és eljárást is adunk a keresett maradékosztály kiszámítására. Tulajdonképpen az a feladat, hogy adva van egy modulo maradékosztályból – jelöljük ezt -val – és egy modulo maradékosztályból – jelöljük ezt -vel – álló rendezett pár, ahol és egymáshoz relatív prímek. A feladat megtalálni azt az -szel jelölt halmazt, amely épp a megadott két maradékosztály metszetével egyezik meg:
A kínai maradéktétel tehát azt állítja, hogy amennyiben és egymáshoz relatív prímek, akkor az -szel jelölt halmaz éppenséggel egy modulo maradékosztály lesz. Hamarosan látni fogjuk, hogy ennél jóval több is igaz.
Ehhez először röviden átismételjük a rendezett pár fogalmát, amelyről korábban már volt szó. Elsőként a kétváltozós művelet fogalmának bevezetésekor találkoztunk vele a 11.5. szakaszban. A kétváltozós műveleteket a 11.3. Definícióban olyan függvényekként definiáltuk, amelyek egy valamilyen halmaz elemeiből alkotott párokhoz az halmaz elemeit rendelik hozzá. Például az egész számok halmazán értelmezett szokásos összeadás művelet, mint függvény a rendezett párhoz az egész számot rendeli hozzá.
Másodszor a 12.5. szakaszban definiált kétváltozós reláció kapcsán került elő ez a fogalom. Egy szintén valamilyen halmazon értelmezett kétváltozós relációt a 12.9. Definícióban az elemeiből alkotott rendezett párok halmazának egy részhalmazaként definiáltuk. Azt mondtuk, hogy egy reláció akkor áll fenn két -beli és elem között, ha az rendezett pár eleme az halmaznak. Például a halmazon értelmezett relációnak, mint halmaznak eleme a rendezett pár – hiszen –, de nem eleme a rendezett pár – hiszen .
Végül a 13. fejezetben magukat az egész számokat is a természetes számok halmazának elemeiből alkotott rendezett párok segítségével definiáltuk.
Az eddig felsorolt példákban egyrészt "párokról", azaz kétkomponensű objektumokról volt szó, másrészt pedig a "pár" két komponense ugyanabból a halmazból került ki. A 12.8. Definícióban ennél általánosabban fogalmazva határoztuk meg, hogy pontosan mit értünk kettő vagy több halmaz direkt szorzata, valamint rendezett pár vagy rendezett -es alatt.
Egy kézenfekvő példa darab halmaz direkt szorzatára az dimenziós tér pontjainak halmaza. Az egyszerűség kedvéért szorítkozzunk most a sík pontjaira, amikoris . Ezeket általában egy derékszögű koordinátarendszerben szoktuk ábrázolni. Ilyenkor felrajzolunk két egymásra merőleges számegyenest, amelyek a -nál metszik egymást. Ezek után egy síkbeli pontot egy számpárral írhatunk le, amelynek komponenseit a pont koordinátáinak nevezzük.
Az első koordináta azt adja meg, hogy a két számegyenes metszéspontjából kiindulva mennyit kell haladni az első – általában vízszintes – számegyenes mentén, míg a második koordináta azt adja meg, hogy innen mennyit kell továbbhaladni a másik – általában függőleges számegyenes irányával párhuzamosan. Ezt mutatja a 22.1. ábra.
A számegyenes pontjainak halmazát -rel szoktuk jelölni, a sík pontjainak halmaza pedig ennek megfelelően az , vagy másként az direkt szorzat lesz. Ehhez hasonlóan a , , ..., dimenziós tér pontjainak halmazát , , ..., jelöli, amelynek elemei , , ..., komponensből fognak állni.
Egy másik kézenfekvő példa direkt szorzatra az 52 lapos franciakártya. Egy ilyen pakliban minden kártyalapnak van valamilyen "színe" (angolul "suit") és "értéke" (angolul "rank"). Jelöljük a lehetséges színek halmazát -sel, a lehetséges értékek halmazát pedig -rel:
Mivel a kártyapakliban lévő lapok minden lehetséges színt és értéket felvehetnek, ezért e lapok halmaza tulajdonképpen az direkt szorzat lesz. Ekkor egy kártyalapot egy olyan rendezett pár reprezentál, amelynek első komponense az , a második komponense pedig az halmaz eleme. Például a "treff hetest" reprezentáló rendezett pár a lesz.
Most vonatkoztassuk a direkt szorzat fogalmát a kínai maradéktétel állítására. A szakasz elején szereplő -ból és -ből álló rendezett pár első komponense tehát a modulo maradékosztálygyűrű, míg a második komponense a modulo maradékosztálygyűrű eleme. Maga az rendezett pár tehát eleme e két maradékosztálygyűrű direkt szorzatának. Azaz a 20.5. Tételben szereplő és a most bevezetett jelölésekkel:
Ezek után az alábbi tételben megadjuk a kínai maradéktétel egy alternatív megfogalmazását, valamint egy eljárást is mutatunk a tételben szereplő halmaz előllítására:
Most térjünk vissza az előző szakaszban szereplő példára, amelynek során a "bekeretezős" módszerrel az alábbi két kongruenciarendszer megoldását kerestük meg:
Az első rendszernek tehát a , a másodiknak pedig a maradékosztály volt a megoldása. Ez a módszer azonban a gyakorlatban nem használható, így most próbáljuk meg megtalálni a megoldásokat a 22.3. Tételben ismertetett eljárás segítségével.
Az első kongruenciarendszer esetén keressük tehát az és a maradékosztályok metszetét. Ehhez a tétel szerint kell keresnünk olyan és egész számokat, amelyek kielégítik az alábbi kongruenciákat:
Ezeket a 21.1. Tétel bizonyításában ismertetett kibővített euklidészi algoritmussal megoldva például az alábbi számokat választhatjuk -nek és -nek:
Ezután a tételben szereplő képletet alkalmazva az maradékosztály alábbi reprezentánselemét kapjuk:
Valóban, az eredményül kapott egész szám benne van a maradékosztályban, amelyet a "bekeretezős" módszerrel kaptunk az első kongruenciarendszerre az előző szakaszban.
Most nézzük meg a második kongruenciarendszert. Ebben az esetben az és a maradékosztályok metszetét keressük. Az előző példánál már megkaptuk az és a kongruenciák megoldásait, így azokat most is használhatjuk. A tételben szereplő képletet alkalmazva most az alábbi reprezentánselemét kapjuk meg az halmaznak:
Valóban, az eredményül kapott egész szám benne van a maradékosztályban, amelyet a "bekeretezős" módszerrel kaptunk a második kongruenciarendszerre az előző szakaszban.
A most tanult eljárás tehát tulajdonképpen egy függvényt valósít meg, amely a halmazt képezi le a halmazra. Méghozzá minden maradékosztálypárt e párban szereplő maradékosztályok metszetére.
Kérdés, hogy vajon ez a leképezés bijektív-e, azaz vajon minden modulo maradékosztály pontosan egy -beli maradékosztálypárnak a metszete-e? A 22.2. ábra mutatja, hogy mi lenne a helyzet nemleges és igenlő válasz esetén.
Most igazoljuk, hogy az utóbbi a helyzet. Hamarosan kiderül, hogy ez miért olyan fontos.
Ez azt bizonyítja, hogy a és a halmazok közötti függvény egy kölcsönösen egyértelmű leképezés. Ha úgy tetszik egy kétirányú híd képezhető a két halmaz között. Ez azt jelenti, hogy az egyik halmazban lévő bármely elemnek egyértelműen megvan a párja a másik halmazban és viszont. A halmazból a halmazba a 22.3. Tétel, visszafelé pedig a 22.4. Tétel biztosítja ezt a fajta átjárást.
A fentebbi példánkhoz visszatérve tehát egyrészt a halmazban lévő maradékosztálypárnak a maradékosztály, míg a maradékosztálypárnak a maradékosztály a megfelelője a halmazban. Másrészt pedig biztosak lehetünk benne, hogy a és a maradékosztályok csakis ezekhez a párokhoz vannak ilymódon hozzárendelve.
22.5Az RSA algoritmus helyes működésének bizonyítása
Az előző fejezetben megismertük napjaink egyik legfontosabb felfedezését, az RSA nevű aszimmetrikus kulcsú rejtjelezési eljárást. Ebben a szakaszban törlesztjük végre az adósságunkat, és igazolni fogjuk, hogy az RSA valóban mindig helyesen működik. Ezért most ismételjük át röviden, hogyan is történik a kulcsok generálása, majd az üzenetek titkosítása és dekódolása.
Az RSA biztonsága a nagy számok prímtényezős felbontásának algoritmikus nehézségén alapul. Egy kulcspár generálásához ezért először is választani kell két egymástól különböző, óriási prímszámot – jelöljük ezeket -vel és -val –, majd képezni kell ezek szorzatából az modulust, és ki kell számítani az Euler-féle -függvény értékét erre a modulusra. Ezután választunk egy tetszőleges -hez relatív prím számot a 18.3. Definíció szerinti gyűrűből, amely a kulcspár publikus része lesz, és kiszámítjuk multiplikatív inverzét ebben a gyűrűben. Az így kapott szám lesz a kulcspár titkos része. A publikus és titkos kulcsok közötti számelméleti kapcsolatot tehát a gyűrű jelenti, amely gyűrű ismeretlen marad a támadó számára. Ennek oka, hogy értéke jelenlegi számelméleti ismereteink szerint csak prímtényezőinek ismeretében számítható ki hatékonyan.
Ezután részletesen leírtuk, és egy példával szemléltettük, hogyan történik egy üzenet titkosítása az adó, és dekódolása a vételi oldalon. Ehhez az elküldeni kívánt üzenetet valamilyen szabványos módon a gyűrű elemeinek sorozatává kell alakítani, majd a sorozat tagjaira külön-külön kell alkalmazni a kódoló és dekódoló függvényeket. Legyen az üzenetet leíró számsorozat következő tagja . Ennek titkosítása az alábbi -beli moduláris hatványozás elvégzését jelenti:
Az így képzett szám nyugodtan átküldhető a kommunikációs csatornán. Ebből ugyanis csak a titkos kulcs ismeretében állítható vissza "varázslatos módon" az eredeti üzenet. Ehhez az alábbi, szintén -beli moduláris hatványozást kell elvégezni:
Most igazolni fogjuk, hogy ez a "varázslat" tényleg mindig teljesül. Az helyére behelyettesíthetjük az őt képző, kódolófüggvény szerinti kifejezést. Ekkor az alábbit kapjuk:
A 20.4. szakaszban láthattuk, hogy a gyűrű izomorf a maradékosztálygyűrűvel. Így tehát a fenti kifejezést tulajdonképpen úgy is értelmezhetjük, hogy az egész számnak ugyanabba a modulo maradékosztályba kell esnie, mint az egész számnak. Ez az alábbi kongruencia teljesülését jelenti:
Most igazolni fogjuk, hogy ez a kongruencia valóban teljesül tetszőleges, a megadott kritériumoknak megfelelő , , és egész számokra.
22.6Maradékosztálygyűrűk dekompozíciója
Az RSA algoritmussal főként az a probléma, hogy szimmetrikus kulcsú társaihoz képest relatíve lassú. Ezt elsősorban a moduláris hatványozás okozza. Ez némileg ellentmond annak, amit a 21.4. szakaszban állapítottunk meg erről a műveletről. Akkor ugyanis azt mondtuk, hogy az ismételt négyzetreemelések módszerével rendkívül gyorsan elvégezhető a moduláris hatványozás. Ez algoritmuselméleti értelemben valóban így van, hiszen láttuk, hogy az elvégzendő moduláris szorzások száma legfeljebb a kitevő bináris számjegyei számának a kétszerese lehet. Márpedig egy ilyen jellegű skálázódás a 7. fejezetben leírtak fényében bőven hatékony algoritmusnak tekinthető.
Igenám, csakhogy hiába a megfelelő skálázódás, amennyiben eleve nagyméretű bemenetekről van szó. A gyakorlatban ugyanis több ezer bites számokon kell több ezer moduláris szorzást elvégezni. Az ismételt négyzetreemelések módszerét vizsgálva megállapítottuk, hogy a szükséges moduláris szorzások száma attól függ, hogy a kitevő bináris számábrázolásában hány -es bit szerepel. Az RSA esetén a publikus kulcsban szereplő, kódoláshoz használt kitevő megválasztásától nem függ az eljárás biztonsága. Emiatt általában olyan publikus kitevőt választanak a kulcsgeneráláskor, amelyben minimális számú -es számjegy van. Célszerű például valamilyen -hatványnál -gyel nagyobb számot választani, hiszen ebben az esetben csak az első és az utolsó számjegy nem . Következésképp a kódoláskor elvégzendő moduláris hatványozás mindössze egy-két moduláris szorzásból megúszható.
A probléma érezhetően a dekódoláskor, vagy digitális aláírások képzésekor jön elő, amikor is a titkos kitevőt kell használni. Ez ugyanis az publikus kitevő multiplikatív inverze a 18.3. Definíció szerinti gyűrűben. Itt ugye a kulcsgeneráláskor véletlenszerűen választott és prímszámok szorzata. Mivel emiatt a is gyakorlatilag véletlenszerű lesz, ezért nemigazán lehet szabályozni, hogy a gyűrűben az multiplikatív inverzének éppenséggel milyen számjegyei lesznek. Emiatt pedig a fogadó oldal által elvégzendő RSA dekódolás általában sokkal lassabb művelet, mint a küldő által elvégzett kódolás.
Ezért most a kínai maradéktétel egy nagyon praktikus alkalmazását mutatjuk be, amelynek a segítségével Alice és Bob a nekik küldött üzenetek dekódolását a 21.9. szakaszban leírtakhoz képest sokkal gyorsabban is el tudja végezni. Ehhez a kulcspár generálásakor választott titkos és prímszámokat is fel kell használni, így ezt a módszert csak a titkos kulcs birtokában lehet alkalmazni. Az eljárásban kulcsszerepe lesz a már sokat emlegetett halmaznak.
Most e halmaz elemei között fogunk két műveletet értelmezni. Az egyiket "összeadásnak", a másikat pedig "szorzásnak" fogjuk nevezni, és rendre a és a szimbólumokkal fogjuk őket jelölni. A halmaz elemei ugye olyan maradékosztálypárok, amelyeknek első komponense egy modulo maradékosztály, második komponense pedig egy modulo maradékosztály. Adja magát a kérdés, hogy vajon mi legyen két ilyen maradékosztálypár "összege" és "szorzata":
Az ötletet a 22.4. szakaszban már említett síkbeli pontok derékszögű koordinátáit leíró számpárok adhatják. Amennyiben a koordinátarendszer kezdőpontjából egy számpárral megadott pontba képzeletben egy "nyilacskát" rajzolunk, akkor mondhatjuk azt is, hogy az számpár tulajdonképpen ezt a "nyilacskát", vagy tudományosabb nevén vektort reprezentálja. E vektorok között az alábbi kézenfekvő módon értelmezhető az "összeadás" művelete: két vektor "összege" legyen az a vektor, amelynek koordinátáit úgy kapjuk, hogy az eredeti két vektor megfelelő koordinátáit egymással összeadjuk a szokásos értelemben. Azaz:
Itt a vektorok közötti "összeadást" a , míg az egyes koordináták közötti szokásos összeadást a szimbólummal jelöltük. Ezzel azt próbáljuk kihangsúlyozni, hogy ez a két művelet nagyon nem ugyanaz. Nyilván, hiszen teljesen más halmazokon vannak értelmezve: a művelet az , míg a művelet az halmazon. A 22.3. ábrán az imént definiált vektorok közötti "összeadás" intuitív értelmezése látható.
Eszerint tehát a két vektor "összege" épp abba a pontba mutat, amelybe úgy juthatunk el, hogy az egyik vektor végpontjába toljuk a másik vektor kezdőpontját, majd a koordinátarendszer kezdőpontjából végigmegyünk az így kijelölt útvonalon.
Visszatérve a halmazhoz adja magát az ötlet, hogy ezen a halmazon is hasonlóképpen, azaz "koordinátánkénti" műveletvégzésként definiáljuk a két kérdéses műveletet. Nevezetesen:
A vektorok között definiált "összeadáshoz" képest itt mindössze annyi a különbség, hogy az egyes "koordináták" nem feltétlenül azonos gyűrűkből származnak. Például jelen esetben az eredmény első "koordinátáját" adó összeadást a modulo maradékosztálygyűrűben, míg a második "koordinátát" adó összeadást a modulo maradékosztálygyűrűben kell elvégezni. A "szorzásra" természetesen ugyanez vonatkozik.
Ezután minden bizonnyal nem lesz túl meglepő, hogy a halmaz az imént értelmezett és műveletekkel egy gyűrűt alkot. Az alábbi tételben ezt ennél általánosabban igazoljuk.
E tételből következően a halmaz a komponensenkénti moduláris összeadásra és moduláris szorzásra nézve valóban egy gyűrűt alkot. Például a 22.4. szakaszban szereplő és maradékosztálypárok ilyen értelemben vett "összegét" és "szorzatát" az alábbiak szerint kapjuk meg:
A szakasz elején említett RSA dekódolást gyorsító eljárás működésének a kulcsa az a tény, hogy szoros kapcsolat áll fenn a és a gyűrűk között. Olyannyira szoros, hogy az alábbi tétel szerint lényegében ugyanannak a gyűrűnek csupán két megjelenési formájáról van szó.
Tekintsük ismét példaként a már sokat emlegetett és maradékosztálypárokat a gyűrűben. Ezek összege és szorzata ebben a gyűrűben az alábbiak voltak:
A 22.4. szakaszban már láttuk, hogy az imént tanult gyűrűizomorfizmusok – és persze az ezek hátterében lévő kínai maradéktétel – alapján az ő párjaik a gyűrűben rendre a és a maradékosztályok. Most nézzük meg ezek összegét és szorzatát a gyűrűben:
Valóban, a 22.7. Tételben szereplő gyűrűizomorfizmus a maradékosztályhoz a , míg a maradékosztályhoz a maradékosztálypárt rendeli hozzá. Azaz tényleg egy művelettartó leképezésről van szó a és a gyűrűk között.
Tulajdonképpen az történt, hogy a gyűrűt felbontottuk két kisebb gyűrű direkt szorzatára. A két algebrai struktúra izomorfiája miatt bármelyikben elvégezhetjük a szükséges számításokat, és az egyikben kapott eredményt könnyedén áttranszformálhatjuk a másik struktúrába a gyűrűizomorfizmusok segítségével. Most megvizsgáljuk, hogy mégis miért jó ez Alice és Bob számára.
22.7Az RSA dekódolás gyorsítása
Térjünk most vissza a 21. fejezetben bemutatott példára, amikoris Alice az RSA algoritmussal rejtjelezett sziabobmiahelyzet# üzenetet küldte el Bob-nak. Bob a kulcsgenerálás során a és prímszámokat választotta, és ezek segítségével előállította az modulust, az publikus, valamint a titkos kitevőt.
Alice a példában leírt módon a 18.3. Definíció szerinti gyűrű elemeinek sorozatává alakította az elküldendő üzenetet, melyek közül az első az volt. Ebből a rejtjelezett számsorozat első tagja a gyűrűben végrehajtott alábbi moduláris hatványozás eredményeként állt elő:
Bob ebből a kitevő segítségével az alábbi, szintén a gyűrű végrehajtott moduláris hatványozással kaphatja vissza az eredeti számot:
A 20.4. szakaszban az egész számok maradékosztályai kapcsán szó volt róla, hogy a gyűrűk homomorfizmustétele miatt tetszőleges pozitív egész szám esetén a gyűrű izomorf a maradékosztálygyűrűvel. Következésképp a maradékosztálygyűrűk dekompozíciójáról szóló 22.7. Tétel miatt a szorzatgyűrű is izomorf a gyűrűvel.
Emiatt Bob a és prímszámok ismeretében megteheti, hogy a dekódoláskor elvégzendő moduláris hatványozást a gyűrű helyett a szorzatgyűrűben végzi el, majd az eredményt visszatranszformálja a gyűrűbe. Kérdezhetnénk, hogy ez miért jó neki, amikor így egy helyett gyakorlatilag két moduláris hatványozást kell elvégeznie? Igenám, csakhogy ezeknél már nem , hanem a nagyságrendileg feleannyi számjegyből álló és lesz a modulus. A moduláris hatványozás sebessége pedig a kitevő méretén kívül erőteljesen függ a modulus méretétől is. Ráadásul a modulus méretét megfelezve a moduláris hatványozás futásideje kevesebb mint a felére csökken. Így két feleakkora modulussal elvégzett hatványozás összességében hatékonyabb, mintha csak egyet végeznénk el ugyan, de az eredeti modulussal.
A fenti példában ez azt jelenti, hogy megérkezik Bob-hoz az rejtjelezett szám, amely ugye a gyűrű egy eleme. Ezt Bob a 22.7. Tételben megadott gyűrűizomorfizmus segítségével áttranszformálja a szorzatgyűrűbe, azaz veszi a két prímmel való osztási maradékát:
Ezután elvégzi a dekódolást ebben a szorzatgyűrűben, azaz kiszámítja az alábbi két moduláris hatványt:
Itt tehát az első moduláris hatványozást a , míg a másodikat a gyűrűben kell végrehajtani. Ez hatékonyabban végrehajtható, mintha csak a moduláris hatványozást hajtanánk végre ugyan, viszont a jóval nagyobb modulusú gyűrűben. A 21.4. szakaszban megismert ismételt négyzetreemelések módszerével Bob az alábbi eredményt kapja:
A kapott rendezett pár tehát a . Ahhoz, hogy Bob ebből megkapja az Alice által küldött eredeti üzenetet, vissza kell transzformálja ezt a -beli elemet a gyűrűbe. Ezt a 22.7. Tételben megadott gyűrűizomorfizmussal teheti meg:
A kapott eredmény helyességét könnyen leellenőrizhetjük. Ha ugyanis alkalmazzuk rá az említett tételben szereplő függvényt, akkor vissza kell kapnunk a rendezett párt, hiszen a függvény épp az függvény megfordítása. Valóban: a egész számnak a -gyel való osztási maradéka , míg a -cel való osztási maradéka . Vagyis a valóban az üzenet párja a két gyűrű közötti gyűrűizomorfizmus szerint.
Végezetül a kis Fermat-tétel egy egyszerű következményét ismertetjük, aminek a segítségével Alice és Bob nemcsak a dekódolás során használt modulus, hanem a titkos kitevő méretét is jelentősen képes lecsökkenteni.
A fenti példánál maradva Bob-nak tehát a dekódoláshoz végre kéne hajtania az alábbi moduláris hatványozásokat a és a gyűrűben:
Az imént bizonyított 22.8. Következmény alapján ezen a ponton megteheti, hogy veszi a kitevő -zel és -cal való osztási maradékait, és helyett ezeket az osztási maradékokat használja kitevőként. Jelöljük az így kapott új kitevőket -vel és -val. Jelen esetben ezek az alábbiak lesznek:
A moduláris hatványozásokat ezekkel az eredeti -nél jóval kisebb kitevőkkel elvégezve valóban ugyanazt az eredményt kapjuk:
Ráadásul a és kitevők csak a választott és prímszámoktól függenek, azaz Alice és Bob megteheti, hogy már a kulcsgenerálás során előállítják ezeket.
Összességében a szorzatgyűrű, valamint a redukált és titkos kitevők használatával az RSA dekódolást nagyjából négyszer hatékonyabban el tudják végezni, mintha az eredeti gyűrűt és az eredeti titkos kitevőt használnák. Megtehetik továbbá, hogy az RSA eljárást alapvetően csak arra használják, hogy egy közös titokban állapodjanak meg, amelyet aztán egy valamilyen sokkal hatékonyabb, szimmetrikus kulcsú rejtjelező kulcsaként használhatnak a kommunikáció további részéhez.
Ebben a fejezetben tehát megismerkedtünk a kis Fermat-tétellel és a több kongruenciából álló kongruenciarendszerek egyértelmű megoldhatóságát biztosító kínai maradéktétellel. Ezek segítségével igazoltuk, hogy az RSA algoritmus valóban mindig helyesen működik. Ezután megismerkedtünk egy olyan konstrukcióval, amelynek a segítségével kettő vagy több gyűrűből egy újabb gyűrűt tudunk létrehozni azok direkt szorzataként. A kínai maradéktétel következményeként megmutattuk, hogy ezen a módon bármely összetett modulusú maradékosztálygyűrű felbontható egymáshoz relatív prím modulusú maradékosztálygyűrűk direkt szorzatára, amely ráadásul izomorf lesz az eredeti gyűrűvel. Ezt és a kis Fermat-tétel egy következményét kihasználva Alice és Bob jelentősen gyorsítani tudja az RSA dekódolási eljárást.
A következő fejezetben megtudjuk, hogy hogyan lehet az RSA kulcsokhoz szükséges óriási prímszámokat találni anélkül, hogy az idők végezetéig osztáspróbákat kelljen végezni. Ezenkívül megismerkedünk néhány olyan módszerrel, amellyel a gonosz Eve képes feltörni az RSA algoritmust, amennyiben Alice és Bob nem kellő körültekintéssel jár el a kulcsgenerálás során.