Bud Spencer és kínai harcosok a Nyomás utána című filmből

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 φ\varphi-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ó...

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.

A 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 pp prímszám. Fermat azt vizsgálta, hogy egy tetszőleges aa egész szám moduláris hatványai hogyan alakulnak ebben a modulo pp óraaritmetikában. Észrevette, hogy minden olyan esetben, amikor a kitevő megegyezik a pp modulussal, akkor az aa egész szám pp-edik moduláris hatványa is épp megegyezik aa-val.

Vizsgáljuk meg például, hogy az a=2a=2 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:

222(mod2)232(mod3)240(mod4)252(mod5)264(mod6)272(mod7)280(mod8)298(mod9)2104(mod10)2112(mod11)\begin{aligned}\to 2^2&\equiv 2\pmod 2 \\ \to 2^3&\equiv 2\pmod 3 \\ 2^4&\equiv 0\pmod 4 \\ \to 2^5&\equiv 2\pmod 5 \\ 2^6&\equiv 4\pmod 6 \\ \to 2^7&\equiv 2\pmod 7 \\ 2^8&\equiv 0\pmod 8 \\ 2^9&\equiv 8\pmod 9 \\ 2^{10}&\equiv 4\pmod{10} \\ \to 2^{11}&\equiv 2\pmod{11} \\ &\vdots \end{aligned}

Valóban úgy tűnik, hogy a prím kitevők esetében a 22 hatványai mindig kongruensek lesznek 22-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 22 –, továbbá bármilyen pozitív prím kitevő esetén így van. Amennyiben aa és pp relatív prímek, akkor érvényes az első állítás is, amely a kis Fermat-tétel gyakoribb alakja.

22.1. Tétel (A kis Fermat-tétel):

Legyen p>0p\gt 0 egy tetszőleges pozitív prímszám, továbbá aa egy tetszőleges egész szám, amely relatív prím pp-hez. Ekkor teljesül az alábbi kongruencia:

ap11(modp)a^{p-1}\equiv 1\pmod p

Az alábbi kongruencia tetszőleges aa egész számra – tehát nem csak a pp-hez relatív prímekre – teljesül:

apa(modp)a^p\equiv a\pmod p

Bizonyítás:

Amennyiben aa relatív prím a pp modulushoz, akkor alkalmazható az Euler-Fermat tétel, amely szerint ugye teljesül az alábbi kongruencia:

aφ(p)1(modp)a^{\varphi(p)}\equiv 1\pmod p

A 21.5. Tétel alapján az Euler-féle φ\varphi-függvény értéke ebben az esetben p1p-1. Ebből a tétel első állítása adódik:

ap11(modp)a^{p-1}\equiv 1\pmod p

Ám ebben az esetben a 20.2. Tétel 5. pontja szerint a kongruencia mindkét oldalát megszorozhatjuk aa-val. Így teljesül az alábbi kongruencia is, amely tehát a tétel második állítása azokra az esetekre, amikoris aa relatív prím pp-hez:

apa(modp)a^p\equiv a\pmod p

Már csak annyit kell megmutatni, hogy ez a második állítás abban az esetben is teljesül, ha aa és pp nem relatív prímek. A 21.4. Lemma alapján ebben az esetben teljesül a pap|a oszthatóság. Ez viszont a 20.1. Tétel 3. pontja alapján épp az alábbi kongruenciát jelenti:

a0(modp)a\equiv 0\pmod p

Ám ekkor a 20.2. Tétel 6. pontja alapján a kongruencia mindkét oldalát pp-edik hatványra emelhetjük. Így teljesül az alábbi kongruencia is:

ap0(modp)a^p\equiv 0\pmod p

Mivel tehát aa is és apa^p is 00-val kongruens modulo pp, ezért a 20.2. Tétel 3. pontja alapján ők egymással is kongruensek modulo pp, épp ahogyan a tétel állítja:

apa(modp)a^p\equiv a\pmod p

Megjegyzés:

Ez a tétel magától Fermat-tól származik 1636-ból. A bizonyításban felhasználtuk, hogy a kis Fermat-tétel az Euler-Fermat tétel egy speciális esete, amikoris a modulus egy pp prímszám, és így a φ(p)\varphi(p) kitevő p1p-1-gyel egyezik meg. Megemlítjük azonban, hogy az Euler-Fermat tételt Leonhard Euler mintegy 100 évvel a kis Fermat-tétel felfedezése után publikálta, méghozzá éppen annak tetszőleges – tehát nem csak prímkitevőkre történő általánosításaként. A kis Fermat-tétel közvetlenül – tehát az Euler-Fermat tétel felhasználása nélkül – is viszonylag könnyen bizonyítható.

Vigyázat! Attól még, hogy valamely aa és nn egész számokra teljesülnek a tételben szereplő kongruenciák, még nem biztos, hogy nn prímszám. Ez azonban elsőre nem látszik. Például a=2a=2 esetén a 2n2(modn)2^n\equiv 2\pmod n kongruenciák látszólag csak azokban az esetekben teljesülnek, amikor az nn kitevő prím. Az első ellenpéldára csak az n=341n=341 kitevőnél bukkanunk rá. Ekkor teljesül ugyan a 23412(mod341)2^{341}\equiv 2\pmod{341} kongruencia, a 341341 azonban nem prím, hiszen 341=1131341=11\cdot 31. A következő ellenpélda n=561=31117n=561=3\cdot 11\cdot 17-nél következik. Néhány továbbit találunk ebben a listában.

Ráadásul az n=561n=561 ellenpélda különleges abból a szempontból, hogy esetében nemcsak az a=2a=2, hanem tetszőleges aa alap esetén is teljesül az ana(modn)a^n\equiv a\pmod n kongruencia, ennek ellenére nn mégsem prím. Másként fogalmazva ez tehát azt jelenti, hogy a tétel megfordítása nem igaz!

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.

Kongruenciarendszerek

A 20. fejezetben megismerkedtünk az úgynevezett kongruenciaegyenletekkel. Ezek olyan kongruenciák, amelyekben valamilyen xx 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 xx 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 aa és bb tetszőleges, m>0m\gt 0 pedig valamilyen pozitív egész szám, és tekintsük az alábbi lineáris kongruenciát:

axb(modm)a\cdot x\equiv b\pmod m

A 20.8. Definíció utáni megjegyzés alapján egy ilyen kongruenciaegyenletnek a megoldásai teljes modulo mm 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:

3x2(mod5)6x4(mod8)\begin{aligned}3x&\equiv 2\pmod 5 \\ 6x&\equiv 4\pmod 8\end{aligned}

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 (3,5)1(3,5)\sim 1 és a (6,8)2(6,8)\sim 2 kitüntetett közös osztók osztói a megfelelő kongruenciák jobboldalainak, azaz rendre a 22 és a 44 egész számoknak.

A 20.14. Tétel 1. pontja alapján az első kongruenciának (3,5)1(3,5)\sim 1 darab modulo 55 maradékosztály, míg a másodiknak (6,8)2(6,8)\sim 2 darab modulo 88 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:

3x+5y=26x+8y=4\begin{aligned}3x+5y&=2 \\ 6x+8y&=4\end{aligned}

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 3x2(mod5)3x\equiv 2\pmod 5 kongruenciának a [4]5[4]_5 modulo 55 maradékosztály, míg a 6x4(mod8)6x\equiv 4\pmod 8 kongruenciának a [6]8[6]_8 modulo 88 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 [2]8[2]_8 modulo 88 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:

3x2(mod5)x[4]56x4(mod8)x[6]8[2]8\begin{aligned}3x\equiv 2\pmod 5 &\to x\in [4]_5 \\ 6x\equiv 4\pmod 8 &\to x\in [6]_8 \cup [2]_8\end{aligned}

Olyan egész számokat keresünk tehát, amelyek 55-tel osztva 44 maradékot, és 88-cal osztva 66 vagy 22 maradékot adnak. Azaz tulajdonképpen az alábbi két kongruenciarendszer megoldásait keressük:

x4(mod5)x6(mod8)x4(mod5)x2(mod8)\begin{array}{c} \boxed{\begin{aligned}x&\equiv 4\pmod 5 \\ x&\equiv 6\pmod 8\end{aligned}} \\ \\ \boxed{\begin{aligned}x&\equiv 4\pmod 5 \\ x&\equiv 2\pmod 8\end{aligned}} \end{array}

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.

A 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 55 és 88 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.

22.2. Tétel (Kínai maradéktétel):

Legyenek aa és bb tetszőleges, p>0p\gt 0 és q>0q\gt 0 pedig valamilyen egymáshoz relatív prím pozitív egész számok. Ekkor az alábbi kongruenciarendszer megoldható, és a megoldás egyetlen modulo pqpq maradékosztály lesz:

xa(modp)xb(modq)\begin{aligned}x&\equiv a\pmod p \\ x&\equiv b\pmod q\end{aligned}

Más megfogalmazásban minden, a fenti két kongruenciát egyszerre kielégítő egész szám ugyanabba az egyetlen modulo pqpq maradékosztályba esik, továbbá ennek a bizonyos maradékosztálynak minden eleme kielégíti a fenti két kongruenciát.

Bizonyítás:

Először a kongruenciarendszer megoldhatóságát igazoljuk. Az első kongruenciát pontosan az aa egész szám által reprezentált [a]p[a]_p maradékosztály elemei elégítik ki. Ezek a 20.4. Tétel alapján épp azok az xx egész számok lesznek, amelyek felírhatók az alábbi alakban valamilyen alkalmasan megválasztott kk paraméterrel:

x=kp+ax=kp+a

Ezt behelyettesítve a második kongruenciába:

kp+a=xb(modq)\underbrace{kp+a}_{=x}\equiv b \pmod q

Azt kell tehát igazolnunk, hogy létezik ilyen kk. Vegyük észre, hogy a kongruencia mindkét oldalából aa-t kivonva az alábbi lineáris kongruenciát kapjuk:

kpba(modq)kp\equiv b-a\pmod q

Ez viszont a 20.13. Tétel alapján megoldható kk-ra, hiszen a tétel szövege szerint ugye pp és qq egymáshoz relatív prímek, azaz (p,q)1(p,q)\sim 1, ami nyilván osztója a kongruencia jobboldalának, azaz bab-a-nak.

Másodszor azt mutatjuk meg, hogy minden, a kongruenciarendszert kielégítő egész szám ugyanabból a modulo pqpq maradékosztályból származik. Legyen ezért x1x_1 és x2x_2 két tetszőleges egész szám, amelyek mindkét kongruenciát kielégítik. Azaz egyrészt:

x1a(modp)x1b(modq)\begin{aligned}x_1&\equiv a\pmod p \\ x_1&\equiv b\pmod q\end{aligned}

Másrészt:

x2a(modp)x2b(modq)\begin{aligned}x_2&\equiv a\pmod p \\ x_2&\equiv b\pmod q\end{aligned}

Ez a 20.2. Tétel 3. pontja alapján azt jelenti, hogy az x1x_1 és x2x_2 egész számok kongruensek egymással mindkét modulus szerint, azaz:

x1x2(modp)x1x2(modq)\begin{aligned}x_1&\equiv x_2\pmod p \\ x_1&\equiv x_2\pmod q\end{aligned}

Ez a 20.1. Tétel 3. pontja alapján azt jelenti, hogy az x1x2x_1-x_2 különbség többszöröse pp-nek is és qq-nak is, azaz:

px1x2qx1x2\begin{aligned}p&|x_1-x_2 \\ q&|x_1-x_2\end{aligned}

Az első oszthatóság azt jelenti, hogy létezik olyan kk egész szám, hogy

pk=x1x2pk=x_1-x_2

Következésképp a második oszthatóság így írható fel:

qpk=x1x2q|\underbrace{pk}_{=x_1-x_2}

Mivel qq és pp egymáshoz relatív prímek, ezért az Euklidészi lemma alapján:

qkq|k

Azaz létezik olyan ll egész szám, hogy:

ql=kql=k

Ezt behelyettesítve a pk=x1x2pk=x_1-x_2 egyenletbe az alábbit kapjuk:

pql=k=pql=x1x2p\cdot\underbrace{ql}_{=k}=pq\cdot l=x_1-x_2

Azaz pqx1x2pq|x_1-x_2, ami a 20.1. Tétel 3. pontja alapján azt jelenti, hogy valóban teljesül az alábbi kongruencia:

x1x2(modpq)x_1\equiv x_2\pmod{pq}

Tehát valóban igaz, hogy bármely két, a tételben szereplő kongruenciarendszert kielégítő egész szám ugyanabba a modulo pqpq maradékosztályba esik.

Végül azt kell igazolni, hogy ennek a bizonyos modulo pqpq maradékosztálynak minden eleme kielégíti a kongruenciarendszert. Tegyük fel ezért, hogy ss egy olyan egész szám ebben a maradékosztályban, amelyre teljesül a kongruenciarendszer, azaz:

sa(modp)sb(modq)\begin{aligned}s&\equiv a\pmod p \\ s&\equiv b\pmod q\end{aligned}

Tegyük fel ezenkívül indirekt, hogy létezik olyan tt egész szám ugyanebben a maradékosztályban, amelyre viszont nem teljesül legalább az egyik a tételben szereplő kongruenciák közül. Mivel tt ugyanabban a modulo pqpq maradékosztályban van, mint ss, ezért igaz az alábbi:

st(modpq)s\equiv t\pmod{pq}

Minthogy a ppqp|pq valamint a qpqq|pq oszthatóságok a 16.2. Tétel 7. pontja alapján teljesülnek, ezért a 20.2. Tétel 7. pontja miatt teljesülnek az alábbi kongruenciák is:

st(modp)st(modq)\begin{aligned}s&\equiv t\pmod p \\ s&\equiv t\pmod q\end{aligned}

Azaz tt egyrészt ugyanabba a modulo pp maradékosztályba esik, mint ss, vagyis a 20.8. Definíció utáni megjegyzés alapján ő kielégíti az xa(modp)x\equiv a\pmod p kongruenciát. Másrészt ehhez hasonlóan tt ugyanabba a modulo qq maradékosztályba is esik, mint ss, ezért ő kielégíti az xb(modq)x\equiv b\pmod q kongruenciát is. Így tehát tt mégiscsak kielégíti a tételben szereplő kongruenciarendszert, ami ellentmond az indirekt feltételezésünknek. Az [s]pq[s]_{pq} maradékosztálynak tehát valóban minden eleme kielégíti a kongruenciarendszert, ahogyan a tétel állítja.

Az előző szakaszban szereplő példánál maradva keressük tehát az alábbi két kongruenciarendszer megoldásait:

x4(mod5)x6(mod8)x4(mod5)x2(mod8)\begin{array}{c} \boxed{\begin{aligned}x&\equiv 4\pmod 5 \\ x&\equiv 6\pmod 8\end{aligned}} \\ \\ \boxed{\begin{aligned}x&\equiv 4\pmod 5 \\ x&\equiv 2\pmod 8\end{aligned}} \end{array}

Az első kongruenciarendszer megoldásit az a halmaz fogja alkotni, amely a [4]5[4]_5 és a [6]8[6]_8 maradékosztályok közös része, azaz metszete. Mivel az 55 és a 88 modulusok egymáshoz relatív prímek, ezért alkalmazhatjuk a kínai maradéktételt. Eszerint a keresett halmaz épp egy modulo 58=405\cdot 8=40 maradékosztály lesz.

Ellenőrizzük is le, azaz írjuk fel egymás alá a [4]5[4]_5 és a [6]8[6]_8 maradékosztályokat, és keretezzük be a közös elemeiket:

[4]5={;4;9;14;19;24;29;34;39;44;49;54;59;}[6]8={;6;14;22;30;38;46;54;62;}\begin{aligned}[4]_5&=\{\ldots; 4;9;\boxed{14};19;24;29;34;39;44;49;\boxed{54};59;\ldots\} \\ [6]_8&=\{\ldots; 6;\boxed{14};22;30;38;46;\boxed{54};62;\ldots\} \end{aligned}

Látható, hogy a felső sorban az elemek – modulo 55 maradékosztályról lévén szó – 55-ösével követik egymást, és minden 88-adik elem lett bekeretezve. Ezzel szemben az alsó sorban az elemek – modulo 88 maradékosztályról lévén szó – 88-asával követik egymást, és minden 55-ödik elem lett bekeretezve.

Ha tehát kigyűjtjük a bekeretezett elemeket egy halmazba, akkor azok épp 4040-esével fogják egymást követni, tehát ők valóban egy modulo 4040 maradékosztályt alakotnak, méghozzá a következőt:

[14]40={;14;54;94;134;174;214;}[14]_{40}=\{\ldots; 14;54;94;134;174;214;\ldots\}

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 [4]5[4]_5 és a [2]8[2]_8 maradékosztályok metszetét keressük. Ezt az előzőhöz hasonló módszerrel kaphatjuk meg:

[4]5={;4;9;14;19;24;29;34;39;44;49;54;59;64;69;74;}[2]8={;2;10;18;26;34;42;50;58;66;74;}\begin{aligned}[4]_5&=\{\ldots; 4;9;14;19;24;29;\boxed{34};39;44;49;54;59;64;69;\boxed{74};\ldots\} \\ [2]_8&=\{\ldots; 2;10;18;26;\boxed{34};42;50;58;66;\boxed{74};\ldots\} \end{aligned}

Ha ismét kigyűjtjük a bekeretezett elemeket egy halmazba, akkor azok szintén 4040-esével fogják egymást követni, tehát ők ugyancsak egy modulo 4040 maradékosztályt alakotnak, méghozzá a következőt:

[34]40={;34;74;114;154;194;234;}[34]_{40}=\{\ldots; 34;74;114;154;194;234;\ldots\}

Az alábbiakban összefoglaltuk a két kongruenciarendszer megoldását, amely tehát egy-egy modulo 4040 maradékosztály:

x4(mod5)x6(mod8)[14]40x4(mod5)x2(mod8)[34]40\begin{array}{ccc} \boxed{\begin{aligned}x&\equiv 4\pmod 5 \\ x&\equiv 6\pmod 8\end{aligned}} & \to & [14]_{40} \\ \\ \boxed{\begin{aligned}x&\equiv 4\pmod 5 \\ x&\equiv 2\pmod 8\end{aligned}} & \to & [34]_{40} \end{array}

Kongruenciarendszerek 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 pp maradékosztályból – jelöljük ezt AA-val – és egy modulo qq maradékosztályból – jelöljük ezt BB-vel – álló rendezett pár, ahol pp és qq egymáshoz relatív prímek. A feladat megtalálni azt az XX-szel jelölt halmazt, amely épp a megadott két maradékosztály metszetével egyezik meg:

X=ABX=A\cap B

A kínai maradéktétel tehát azt állítja, hogy amennyiben pp és qq egymáshoz relatív prímek, akkor az XX-szel jelölt halmaz éppenséggel egy modulo pqpq 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 SS halmaz elemeiből alkotott párokhoz az SS halmaz elemeit rendelik hozzá. Például az egész számok Z\Z halmazán értelmezett szokásos összeadás művelet, mint függvény a (3;2)(3;2) rendezett párhoz az 55 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 SS halmazon értelmezett kétváltozós relációt a 12.9. Definícióban az SS elemeiből alkotott rendezett párok halmazának egy részhalmazaként definiáltuk. Azt mondtuk, hogy egy RR reláció akkor áll fenn két SS-beli aa és bb elem között, ha az (a;b)(a;b) rendezett pár eleme az RR halmaznak. Például a Z\Z halmazon értelmezett \leq relációnak, mint halmaznak eleme a (2;3)(2;3) rendezett pár – hiszen 232\leq 3 –, de nem eleme a (3;2)(3;2) rendezett pár – hiszen 323\nleq 2.

Végül a 13. fejezetben magukat az egész számokat is a természetes számok N\N 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 nn-es alatt.

Egy kézenfekvő példa nn darab halmaz direkt szorzatára az nn dimenziós tér pontjainak halmaza. Az egyszerűség kedvéért szorítkozzunk most a sík pontjaira, amikoris n=2n=2. Ezeket általában egy derékszögű koordinátarendszerben szoktuk ábrázolni. Ilyenkor felrajzolunk két egymásra merőleges számegyenest, amelyek a 00-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.

Derékszögű koordinátarendszer
22.1. ábra: Derékszögű koordinátarendszer

A számegyenes pontjainak halmazát R\R-rel szoktuk jelölni, a sík pontjainak halmaza pedig ennek megfelelően az R×R\R\times \R, vagy másként az R2\R^2 direkt szorzat lesz. Ehhez hasonlóan a 33, 44, ..., nn dimenziós tér pontjainak halmazát R3\R^3, R4\R^4, ..., Rn\R^n jelöli, amelynek elemei 33, 44, ..., nn 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 SS-sel, a lehetséges értékek halmazát pedig RR-rel:

S={;;;}R={2;3;4;5;6;7;8;9;10;J;Q;K;A}\begin{aligned}S&=\{\clubs;\diamonds;\spades;\hearts\} \\ R&=\{2;3;4;5;6;7;8;9;10;\text{J};\text{Q};\text{K};\text{A}\}\end{aligned}

Mivel a kártyapakliban lévő lapok minden lehetséges színt és értéket felvehetnek, ezért e lapok halmaza tulajdonképpen az S×RS\times R direkt szorzat lesz. Ekkor egy kártyalapot egy olyan rendezett pár reprezentál, amelynek első komponense az SS, a második komponense pedig az RR halmaz eleme. Például a "treff hetest" reprezentáló rendezett pár a (;7)(\clubs;7) lesz.

Most vonatkoztassuk a direkt szorzat fogalmát a kínai maradéktétel állítására. A szakasz elején szereplő AA-ból és BB-ből álló rendezett pár első komponense tehát a modulo pp maradékosztálygyűrű, míg a második komponense a modulo qq maradékosztálygyűrű eleme. Maga az (A;B)(A;B) 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:

AZ/pZBZ/qZ(A;B)Z/pZ×Z/qZ\begin{aligned}A &\in \Z/p\Z \\ B &\in \Z/q\Z \\ (A;B) &\in \Z/p\Z \times \Z/q\Z\end{aligned}

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ő ABA\cap B halmaz előllítására:

22.3. Tétel (A kínai maradéktétel alternatív megfogalmazása):

Legyenek p>0p\gt 0 és q>0q\gt 0 valamilyen pozitív egész számok, továbbá tegyük fel, hogy pp és qq egymáshoz relatív prímek. Ekkor minden (A;B)Z/pZ×Z/qZ(A;B)\in \Z/p\Z \times \Z/q\Z rendezett pár esetén ABZ/pqZA\cap B\in \Z/pq\Z.

Tegyük fel, hogy az x1x_1 és x2x_2 egész számok kielégítik az alábbi kongruenciákat:

px11(modq)qx21(modp)\begin{aligned}px_1&\equiv 1\pmod q \\ qx_2&\equiv 1\pmod p\end{aligned}

Amennyiben az AA és BB maradékosztályokat rendre valamilyen aa és bb egész számokkal reprezentáljuk – azaz A=[a]pA=[a]_p és B=[b]qB=[b]_q –, akkor az alábbi képlet az ABA\cap B maradékosztály egy reprezentánselemét szolgáltatja:

AB=[aqx2+bpx1]pqA\cap B=[aqx_2 + bpx_1]_{pq}

Bizonyítás:

Az A=[a]pA=[a]_p és B=[b]qB=[b]_q maradékosztályok metszete pontosan azokat az egész számokat fogja tartalmazni, amelyek mindkét maradékosztályban benne vannak. Ezek ugye az alábbi kongruenciarendszert kielégítő egész számok lesznek:

xa(modp)xb(modq)\begin{aligned}x&\equiv a\pmod p \\ x&\equiv b\pmod q\end{aligned}

A kínai maradéktétel alapján ezek az egész számok pontosan egy modulo pqpq maradékosztályt alkotnak, azaz valóban ABZ/pqZA\cap B\in \Z/pq\Z.

Most igazoljuk, hogy a tételben megadott képlet valóban az ABA\cap B maradékosztály egy reprezentánselemét adja. Ehhez azt kell megmutatni, hogy az aqx2+bpx1aqx_2 + bpx_1 egész szám benne van ebben a halmazban. A halmazok közötti metszetképzésről szóló 19.3. Definíció alapján ez pontosan akkor teljesül, ha teljesül az alábbi mindkét feltétel:

aqx2+bpx1Aaqx2+bpx1B\begin{aligned}aqx_2 + bpx_1 &\in A \\ aqx_2 + bpx_1 &\in B\end{aligned}

Nézzük először az első feltételt: Mivel az AA halmaz egy modulo pp maradékosztály, amelynek az aa egész szám egy reprezentánseleme, ezért ez a feltétel pontosan akkor teljesül, ha fennáll az alábbi kongruencia:

aqx2+bpx1a(modp)aqx_2 + bpx_1 \equiv a\pmod p

A kongruencia baloldalán szereplő összeg második, bpx1bpx_1 tagja ugye pp-nek többszöröse, így ő 00-val kongruens modulo pp. Az összeg első, aqx2aqx_2 tagjában viszont a qx2qx_2 tényező a tétel szövege alapján 11-gyel, és így ez a tag aa-val kongruens modulo pp. Összefoglalva tehát valóban teljesül a fenti kongruencia, mivel:

aqx21+bpx10a(modp)a\cdot \underbrace{qx_2}_{\equiv 1} + \underbrace{bpx_1}_{\equiv 0} \equiv a\pmod p

Most nézzük a második feltételt: Mivel a BB halmaz egy modulo qq maradékosztály, amelynek a bb egész szám egy reprezentánseleme, ezért ez a feltétel pontosan akkor teljesül, ha fennáll az alábbi kongruencia:

aqx2+bpx1b(modq)aqx_2 + bpx_1 \equiv b\pmod q

A kongruencia baloldalán szereplő összeg első, aqx2aqx_2 tagja ugye qq-nak többszöröse, így ő 00-val kongruens modulo qq. Az összeg második, bpx1bpx_1 tagjában viszont a px1px_1 tényező a tétel szövege alapján 11-gyel, és így ez a tag bb-vel kongruens modulo qq. Összefoglalva tehát valóban teljesül a fenti kongruencia, mivel:

aqx20+bpx11b(modq)\underbrace{aqx_2}_{\equiv 0} + b\cdot \underbrace{px_1}_{\equiv 1} \equiv b\pmod q

A aqx2+bpx1aqx_2 + bpx_1 összeg tehát benne van az ABA\cap B metszethalmazban, amely – mint láttuk – egy modulo pqpq maradékosztály, és így valóban annak egy reprezentánselemét adja.

Megjegyzés:

A tételben szereplő px11(modq)px_1\equiv 1\pmod q és qx21(modp)qx_2\equiv 1\pmod p kongruenciáknak a 20.13. Tétel alapján létezik megoldása, hiszen pp és qq a tétel szövege alapján relatív prímek. Ugyanezen okból a 20.14. Tétel 1. pontja miatt a megoldás mindkét kongruencia esetén egy-egy maradékosztály lesz. Ezek megtalálásához a 20.13. Tétel alapján az alábbi lineáris diofantoszi egyenleteket kell megoldani:

px1+qy1=1qx2+py2=1\begin{aligned}px_1+qy_1&=1 \\ qx_2+py_2&=1\end{aligned}

Ezeket a 21.2. Tétel 1. pontja alapján a 21.1. Tétel bizonyításában ismertetett kibővített euklidészi algoritmus segítségével tehetjük meg. Azaz valóban egy eljárást kaptunk az ABA\cap B maradékosztály egy reprezentánselemének meghatározásához.

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:

x4(mod5)x6(mod8)[14]40x4(mod5)x2(mod8)[34]40\begin{array}{ccc} \boxed{\begin{aligned}x&\equiv 4\pmod 5 \\ x&\equiv 6\pmod 8\end{aligned}} & \to & [14]_{40} \\ \\ \boxed{\begin{aligned}x&\equiv 4\pmod 5 \\ x&\equiv 2\pmod 8\end{aligned}} & \to & [34]_{40} \end{array}

Az első rendszernek tehát a [14]40[14]_{40}, a másodiknak pedig a [34]40[34]_{40} 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 A=[4]5A=[4]_5 és a B=[6]8B=[6]_8 maradékosztályok metszetét. Ehhez a tétel szerint kell keresnünk olyan x1x_1 és x2x_2 egész számokat, amelyek kielégítik az alábbi kongruenciákat:

5x11(mod8)8x21(mod5)\begin{aligned}5x_1&\equiv 1\pmod 8 \\ 8x_2&\equiv 1\pmod 5\end{aligned}

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 x1x_1-nek és x2x_2-nek:

x1=5x2=2\begin{aligned}x_1&=5 \\ x_2&=2\end{aligned}

Ezután a tételben szereplő képletet alkalmazva az ABA\cap B maradékosztály alábbi reprezentánselemét kapjuk:

482+655=64+150=2144\cdot 8\cdot 2 + 6\cdot 5\cdot 5=64+150=214

Valóban, az eredményül kapott 214214 egész szám benne van a [14]40[14]_{40} 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 A=[4]5A=[4]_5 és a B=[2]8B=[2]_8 maradékosztályok metszetét keressük. Az előző példánál már megkaptuk az 5x11(mod8)5x_1\equiv 1\pmod 8 és a 8x21(mod5)8x_2\equiv 1\pmod 5 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 ABA\cap B halmaznak:

482+255=64+50=1144\cdot 8\cdot 2 + 2\cdot 5\cdot 5=64+50=114

Valóban, az eredményül kapott 114114 egész szám benne van a [34]40[34]_{40} 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 Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z halmazt képezi le a Z/pqZ\Z/pq\Z 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 pqpq maradékosztály pontosan egy Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z-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.

Példa nem bijektív és bijektív leképezésre
22.2. ábra: Példa nem bijektív és bijektív leképezésre

Most igazoljuk, hogy az utóbbi a helyzet. Hamarosan kiderül, hogy ez miért olyan fontos.

22.4. Tétel (A kínai maradéktétel megfordítása):

Legyenek p>0p\gt 0 és q>0q\gt 0 valamilyen pozitív egész számok, továbbá tegyük fel, hogy pp és qq egymáshoz relatív prímek. Ekkor minden XZ/pqZX\in \Z/pq\Z maradékosztályhoz pontosan egy olyan (A;B)Z/pZ×Z/qZ(A;B)\in \Z/p\Z\times \Z/q\Z maradékosztálypár létezik, amely pár komponenseinek XX a metszete, azaz amelyre teljesül az alábbi:

X=ABX=A\cap B

Amennyiben az XX maradékosztályt egy valamilyen ss egész számmal reprezentáljuk – azaz X=[s]pqX=[s]_{pq} –, akkor ss egyúttal a keresett AA és BB maradékosztályok reprezentánseleme is:

A=[s]pB=[s]q\begin{aligned}A&=[s]_p \\ B&=[s]_q\end{aligned}

Bizonyítás:

A tétel bizonyításához az alábbi két állítást kell igazolni:

  1. Az XX maradékosztály valóban az (A;B)Z/pZ×Z/qZ(A;B)\in \Z/p\Z\times \Z/q\Z maradékosztálypár metszete, azaz X=ABX=A\cap B.
  2. Nincs másik olyan maradékosztálypár a Z/pZ×Z/qZ\Z/p\Z\times \Z/q\Z halmazban, amelynek XX a metszete lenne.

Az 1. állítás: a 19.2. Definíció utáni megjegyzés 5. pontja alapján XX és ABA\cap B akkor és csak akkor egyezik meg, ha egymásnak részhalmazai, azaz teljesülnek az alábbiak:

XABXAB\begin{aligned} X&\sube A\cap B \\ X&\supe A\cap B \end{aligned}

Az XABX\sube A\cap B tartalmazási reláció a 19.2. Definíció alapján azt jelenti, hogy az X=[s]pqX=[s]_{pq} maradékosztály minden eleme egyúttal az A=[s]pA=[s]_p-nek is és B=[s]qB=[s]_q-nak is eleme. Legyen például tXt\in X egy tetszőleges elem az X=[s]pqX=[s]_{pq} maradékosztályban. Ezt úgy is megfogalmazhatjuk, hogy tt ugyanúgy az XX maradékosztályt reprezentálja, mint ss. Azaz [s]pq=[t]pq[s]_{pq}=[t]_{pq}, ami ugye az alábbi kongruenciát jelenti:

st(modpq)s\equiv t\pmod{pq}

Mivel azonban a ppqp|pq és qpqq|pq oszthatóságok nyilvánvalóan teljesülnek, ezért a 20.2. Tétel 7. pontja miatt teljesülnek az alábbi kongruenciák is:

st(modp)st(modq)\begin{aligned}s&\equiv t\pmod p \\ s&\equiv t\pmod q\end{aligned}

Tehát tt benne van az A=[s]pA=[s]_p és B=[s]qB=[s]_q maradékosztályokban, azaz valóban teljesül az XABX\sube A\cap B tartalmazási reláció.

Most az ABXA\cap B\sube X tartalmazási relációt igazoljuk. Ez a 19.2. Definíció alapján azt jelenti, hogy az A=[s]pA=[s]_p és B=[s]qB=[s]_q maradékosztályok közös elemei egyúttal az X=[s]pqX=[s]_{pq} maradékosztálynak is elemei. Legyen például tABt\in A\cap B egy tetszőleges elem az A=[s]pA=[s]_p és B=[s]qB=[s]_q maradékosztályok metszetében. Ezt úgy is megfogalmazhatjuk, hogy tt ugyanúgy benne van mind az AA, mind pedig a BB maradékosztályokban, mint ss.

Az A=[s]pA=[s]_p maradékosztályba pontosan azok az egész számok tartoznak bele, amelyeket az alábbi kongruenciába az xx ismeretlen helyére behelyettesítve a kongruencia teljesül:

xs(modp)x\equiv s\pmod p

Ehhez hasonlóan a B=[s]qB=[s]_q maradékosztályba pontosan azok az egész számok tartoznak bele, amelyeket az alábbi kongruenciába az xx ismeretlen helyére behelyettesítve a kongruencia teljesül:

xs(modq)x\equiv s\pmod q

A fentebb említett tt tehát ss-sel karöltve kielégíti az iménti két kongruenciából álló rendszert. Ám a kínai maradéktétel állítása szerint minden ilyen tulajdonságú egész szám ugyanabba az egyetlen modulo pqpq maradékosztályba esik. Az nyilvánvaló, hogy sXs\in X, hiszen a tétel szövege alapján ő épp az XX maradékosztály reprezentánseleme. Következésképp tt is szükségképpen XX-ben van, azaz valóban teljesül az ABXA\cap B\sube X tartalmazási reláció.

Mivel mindkét irányú tartalmazási reláció teljesül XX és ABA\cap B között, ezért a két halmaz valóban megegyezik.

A 2. állítás: Tegyük fel indirekt, hogy létezik egy (A;B)(A;B)-től különböző (C;D)(C;D) maradékosztálypár a Z/pZ×Z/qZ\Z/p\Z\times \Z/q\Z halmazban, amelynek XX a metszete, azaz:

CD=XC\cap D=X

Tegyük fel továbbá, hogy a CC maradékosztályt a cc egész számmal, míg a DD maradékosztályt a dd egész számmal reprezentáljuk, azaz:

C=[c]pD=[d]q\begin{aligned}C&=[c]_p \\ D&=[d]_q\end{aligned}

Legyen tt egy tetszőleges elem az X=[s]pqX=[s]_{pq} maradékosztályban. Egyrészt a fentebb egyszer már leírt gondolatmenetet megismételve ez az alábbi kongruenciákat jelenti:

st(modp)st(modq)\begin{aligned}s&\equiv t\pmod p \\ s&\equiv t\pmod q\end{aligned}

Másrészt viszont az indirekt feltételezésünk miatt XX a C=[c]pC=[c]_p és D=[d]qD=[d]_q maradékosztályok metszete. Emiatt tt ugyanúgy benne van a C=[c]pC=[c]_p maradékosztályban, mint cc, valamint ugyanúgy benne van a D=[d]qD=[d]_q maradékosztályban, mint dd. Teljesülnek tehát az alábbi kongruenciák:

tc(modp)td(modq)\begin{aligned}t&\equiv c\pmod p \\ t&\equiv d\pmod q\end{aligned}

A 20.2. Tétel 3. pontja miatt teljesülnek tehát az alábbi kongruenciák is:

sc(modp)sd(modq)\begin{aligned}s&\equiv c\pmod p \\ s&\equiv d\pmod q\end{aligned}

Azaz egyrészt az ss által reprezentált modulo pp maradékosztály – ez ugye az AA halmaz – megegyezik a cc által reprezentált modulo pp maradékosztállyal – ez pedig ugye a CC halmaz. Másrészt az ss által reprezentált modulo qq maradékosztály – ez ugye a BB halmaz – megegyezik a dd által reprezentált modulo qq maradékosztállyal – ez pedig ugye a DD halmaz.

Minthogy A=CA=C és B=DB=D, ezért indirekt feltételezésünkkel ellentétben az (A;B)(A;B) maradékosztálypár mégiscsak megegyezik a (C;D)(C;D) maradékosztálypárral. Azaz a 2. állításnak megfelelően az (A;B)(A;B) páron kívül nincs másik olyan maradékosztálypár a Z/pZ×Z/qZ\Z/p\Z\times \Z/q\Z halmazban, amelynek XX a metszete lenne.

Ez azt bizonyítja, hogy a Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z és a Z/pqZ\Z/pq\Z 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 Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z halmazból a Z/pqZ\Z/pq\Z 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 Z/5Z×Z/8Z\Z/5\Z\times \Z/8\Z halmazban lévő ([4]5;[6]8)([4]_5;[6]_8) maradékosztálypárnak a [14]40[14]_{40} maradékosztály, míg a ([4]5;[2]8)([4]_5;[2]_8) maradékosztálypárnak a [34]40[34]_{40} maradékosztály a megfelelője a Z/40Z\Z/40\Z halmazban. Másrészt pedig biztosak lehetünk benne, hogy a [14]40[14]_{40} és a [34]40[34]_{40} maradékosztályok csakis ezekhez a párokhoz vannak ilymódon hozzárendelve.

Az 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 pp-vel és qq-val –, majd képezni kell ezek szorzatából az m=pqm=pq modulust, és ki kell számítani az Euler-féle φ\varphi-függvény értékét erre a modulusra. Ezután választunk egy tetszőleges φ(m)\varphi(m)-hez relatív prím ee számot a 18.3. Definíció szerinti Zφ(m)Z_{\varphi(m)} gyűrűből, amely a kulcspár publikus része lesz, és kiszámítjuk ee multiplikatív inverzét ebben a gyűrűben. Az így kapott dd szám lesz a kulcspár titkos része. A publikus és titkos kulcsok közötti számelméleti kapcsolatot tehát a Zφ(m)Z_{\varphi(m)} gyűrű jelenti, amely gyűrű ismeretlen marad a támadó számára. Ennek oka, hogy φ(m)\varphi(m) értéke jelenlegi számelméleti ismereteink szerint csak mm 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 ZmZ_m 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 xx. Ennek titkosítása az alábbi ZmZ_m-beli moduláris hatványozás elvégzését jelenti:

y=xey=x^e

Az így képzett yy szám nyugodtan átküldhető a kommunikációs csatornán. Ebből ugyanis csak a dd titkos kulcs ismeretében állítható vissza "varázslatos módon" az eredeti xx üzenet. Ehhez az alábbi, szintén ZmZ_m-beli moduláris hatványozást kell elvégezni:

x=ydx=y^d

Most igazolni fogjuk, hogy ez a "varázslat" tényleg mindig teljesül. Az yy helyére behelyettesíthetjük az őt képző, kódolófüggvény szerinti kifejezést. Ekkor az alábbit kapjuk:

x=(xe=y)d=xedx=({\underbrace{x^e}_{=y}})^d=x^{ed}

A 20.4. szakaszban láthattuk, hogy a ZmZ_m gyűrű izomorf a Z/mZ\Z/m\Z maradékosztálygyűrűvel. Így tehát a fenti kifejezést tulajdonképpen úgy is értelmezhetjük, hogy az xx egész számnak ugyanabba a modulo mm maradékosztályba kell esnie, mint az xedx^{ed} egész számnak. Ez az alábbi kongruencia teljesülését jelenti:

xxed(modm)x\equiv x^{ed}\pmod m

Most igazolni fogjuk, hogy ez a kongruencia valóban teljesül tetszőleges, a megadott kritériumoknak megfelelő ee, dd, mm és xx egész számokra.

22.5. Tétel (Az RSA algoritmus helyes működése):

Tegyük fel, hogy teljesülnek az alábbi feltételek:

  1. Választunk két tetszőleges, egymástól különböző pozitív pp és qq prímszámot.
  2. Képezzük ezekből az m=pqm=pq modulust.
  3. Képezzük az Euler-féle φ\varphi-függvény értékét az mm modulusra, azaz a 21.3. és a 21.5. Tételek alapján kiszámítjuk a φ(m)=(p1)(q1)\varphi(m)=(p-1)(q-1) egész számot.
  4. Választunk egy tetszőleges ee egész számot, amely relatív prím φ(m)\varphi(m)-hez.
  5. Keresünk egy olyan dd egész számot, amelyre teljesül az ed1(modφ(m))ed\equiv 1\pmod{\varphi(m)} kongruencia.

Ekkor tetszőleges xx egész szám esetén teljesül az alábbi kongruencia is:

xedx(modm)x^{ed}\equiv x\pmod m

Bizonyítás:

Mivel teljesül az ed1(modφ(m))ed\equiv 1\pmod{\varphi(m)} kongruencia, ezért a 20.1. Tétel 3. pontja alapján teljesül az alábbi oszthatóság:

φ(m)ed1\varphi(m)|ed-1

Az oszthatóság 16.1. Definíciója alapján ekkor létezik olyan kk egész szám, amelyre teljesül az alábbi egyenlet:

kφ(m)=ed1k\varphi(m)=ed-1

Mindkét oldalhoz 11-et adva:

kφ(m)+1=edk\varphi(m) + 1=ed

Azt kell tehát bizonyítani, hogy tetszőleges xx esetén teljesül az alábbi kongruencia:

xkφ(m)+1=edx(modm)x^{\overbrace{k\varphi(m)+1}^{=ed}}\equiv x\pmod m

Itt két eset lehetséges. Az első – és legvalószínűbb – esetben xx relatív prím mm-hez. Ekkor közvetlenül alkalmazható az Euler-Fermat tétel. Ehhez alakítsuk át a kongruencia baloldalán álló kifejezést a 18.8. Tétel 2. és 3. pontjainak megfelelően:

(xφ(m))kxx(modm)(x^{\varphi(m)})^k\cdot x\equiv x\pmod m

Az Euler-Fermat tétel miatt az xφ(m)x^{\varphi(m)} kifejezés 11-gyel kongruens modulo mm. Így a 20.2. Tétel 6. és 5. pontjai alapján a fenti kongruencia egyszerűsíthető:

1kx=xx(modm)\underbrace{1^k\cdot x}_{=x}\equiv x\pmod m

Ez a kongruencia viszont nyilvánvalóan teljesül a 20.2. Tétel 1. pontja alapján.

Most nézzük meg, hogy mi a helyzet abban a nem túl gyakori esetben, ha xx nem relatív prím az m=pqm=pq modulushoz, azaz xx-nek és mm-nek van egységtől különböző közös osztója. Ekkor a pxp|x és a qxq|x oszthatóságok közül legalább az egyik teljesül. Ha ugyanis egyik sem teljesülne, akkor a 21.4. Lemma alapján xx relatív prím lenne pp-hez is és qq-hoz is, és a 20.12. Következmény miatt az m=pqm=pq modulushoz is, ami ellentmondás. A pxp|x és qxq|x oszthatóságok tekintetében tehát az alábbi három eset lehetséges:

1. eset: pxp|x és qxq|x

Ez a 20.1. Tétel 3. pontja alapján azt jelenti, hogy teljesülnek az alábbi kongruenciák:

x0(modp)x0(modq)\begin{aligned} x&\equiv 0\pmod p \\ x&\equiv 0\pmod q \end{aligned}

Ekkor a 20.2. Tétel 6. pontja alapján e kongruenciák mindkét oldalát a kφ(m)+1k\varphi(m)+1-edik hatványra emelve teljesülnek az alábbi kongruenciák is:

xkφ(m)+10(modp)xkφ(m)+10(modq)\begin{aligned} x^{k\varphi(m)+1}&\equiv 0\pmod p \\ x^{k\varphi(m)+1}&\equiv 0\pmod q \end{aligned}

A két-két kongruenciát összevetve a 20.2. Tétel 2. és 3. pontja alapján az alábbi kongruenciákat kapjuk:

xkφ(m)+1x(modp)xkφ(m)+1x(modq)\begin{aligned} x^{k\varphi(m)+1}&\equiv x\pmod p \\ x^{k\varphi(m)+1}&\equiv x\pmod q \end{aligned}
2. eset: pxp|x és qxq\nmid x

Nyilván teljesül az alábbi kongruencia, mivel xx többszöröse pp-nek, és így mindkét oldal 00-val kongruens modulo pp:

xkφ(m)+1x(modp)x^{k\varphi(m) +1}\equiv x\pmod p

Továbbá mivel φ(m)=(p1)(q1)\varphi(m)=(p-1)(q-1), ezért teljesül az alábbi – itt a második lépésben felhasználtuk a hatványozás azonosságairól szóló a 18.8. Tételt:

xkφ(m)+1=xk(p1)(q1)=φ(m)+1=(xq1)k(p1)xx^{k\varphi(m)+1}=x^{k\overbrace{(p-1)(q-1)}^{=\varphi(m)} + 1}=(x^{q-1})^{k(p-1)}\cdot x

Mivel qxq\nmid x, ezért a 21.4. Lemma alapján xx relatív prím qq-hoz, és így alkalmazható a kis Fermat-tétel, amely szerint tehát teljesül az alábbi kongruencia:

xq11(modq)x^{q-1}\equiv 1\pmod q

A 20.2. Tétel 6. pontja alapján mindkét oldalt a k(p1)k(p-1)-edik hatványra emelve, valamint a 20.2. Tétel 5. pontja alapján mindkét oldalt xx-szel megszorozva továbbra is érvényes kongruenciát kapunk:

(xq1)k(p1)xx(modq)(x^{q-1})^{k(p-1)}\cdot x\equiv x\pmod q

De mivel xkφ(m)+1=(xq1)k(p1)xx^{k\varphi(m)+1} = (x^{q-1})^{k(p-1)}\cdot x, ezért teljesül az alábbi kongruencia:

xkφ(m)+1x(modq)x^{k\varphi(m)+1}\equiv x\pmod q
3. eset: pxp\nmid x és qxq|x

Ebben az esetben az xx egész szám qq helyett pp-hez lesz relatív prím, tehát az előző gondolatmenetet szinte szóról szóra meg lehet ismételni, csak pp és qq szerepét fel kell cserélni. Ekkor is azt fogjuk kapni, hogy teljesülnek az alábbi kongruenciák:

xkφ(m)+1x(modp)xkφ(m)+1x(modq)\begin{aligned} x^{k\varphi(m)+1}&\equiv x\pmod p \\ x^{k\varphi(m)+1}&\equiv x\pmod q \end{aligned}

Mivel ugye ed=kφ(m)+1ed=k\varphi(m)+1, ezért mindhárom esetben végülis azt kaptuk, hogy teljesül az alábbi két kongruencia:

xedx(modp)xedx(modq)\begin{aligned} x^{ed}&\equiv x\pmod p \\ x^{ed}&\equiv x\pmod q \end{aligned}

Ez a Z/pZ\Z/p\Z és a Z/qZ\Z/q\Z maradékosztálygyűrűkben az alábbiakat jelenti:

[xed]p=[x]p[xed]q=[x]q\begin{aligned} [x^{ed}]_p &= [x]_p \\ [x^{ed}]_q &= [x]_q \end{aligned}

Ennek megfelelően ezt így írhatjuk fel a Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z direkt szorzat egy elemeként:

([xed]p;[xed]q)=([x]p;[x]q)([x^{ed}]_p; [x^{ed}]_q) = ([x]_p; [x]_q)

A 22.3. és a 22.4. Tétel alapján azonban tudjuk, hogy a Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z direkt szorzat elemei kölcsönösen egyértelműen megfeleltethetők a Z/pqZ\Z/pq\Z maradékosztálygyűrű elemeivel. Ez a leképezés az iménti egyenlet bal és jobboldalához a 22.4. Tételben szereplő képlet alapján az alábbi modulo pqpq maradékosztályokat rendeli hozzá:

([xed]p;[xed]q)[xed]pq([x]p;[x]q)[x]pq\begin{aligned}([x^{ed}]_p; [x^{ed}]_q) &\to [x^{ed}]_{pq} \\ ([x]_p; [x]_q) &\to [x]_{pq}\end{aligned}

Mármost ha itt a nyilak baloldalán álló objektumok megegyeznek, akkor a leképezés kölcsönösen egyértelműsége miatt a nyilak jobboldalán álló objektumok is meg kell egyezzenek, azaz:

[xed]pq=[x]pq[x^{ed}]_{pq}=[x]_{pq}

Ugyanezt kongruenciával megfogalmazva megkapjuk a tétel állítását:

xedx(modpq=m)x^{ed}\equiv x\pmod{\underbrace{pq}_{=m}}

Maradé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 11-es bit szerepel. Az RSA esetén a publikus kulcsban szereplő, kódoláshoz használt ee kitevő megválasztásától nem függ az eljárás biztonsága. Emiatt általában olyan publikus ee kitevőt választanak a kulcsgeneráláskor, amelyben minimális számú 11-es számjegy van. Célszerű például valamilyen 22-hatványnál 11-gyel nagyobb számot választani, hiszen ebben az esetben csak az első és az utolsó számjegy nem 00. 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 dd kitevőt kell használni. Ez ugyanis az ee publikus kitevő multiplikatív inverze a 18.3. Definíció szerinti Zφ(m)Z_{\varphi(m)} gyűrűben. Itt mm ugye a kulcsgeneráláskor véletlenszerűen választott pp és qq prímszámok szorzata. Mivel emiatt a φ(m)\varphi(m) is gyakorlatilag véletlenszerű lesz, ezért nemigazán lehet szabályozni, hogy a Zφ(m)Z_{\varphi(m)} gyűrűben az ee 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 pp és qq 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 Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z 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 \oplus és a \odot szimbólumokkal fogjuk őket jelölni. A Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z halmaz elemei ugye olyan maradékosztálypárok, amelyeknek első komponense egy modulo pp maradékosztály, második komponense pedig egy modulo qq maradékosztály. Adja magát a kérdés, hogy vajon mi legyen két ilyen maradékosztálypár "összege" és "szorzata":

(A;B)(C;D)=???(A;B)(C;D)=???\begin{aligned}(A;B)\oplus (C;D)&=\text{???} \\ (A;B)\odot (C;D)&=\text{???}\end{aligned}

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 (a;b)(a;b) számpárral megadott pontba képzeletben egy "nyilacskát" rajzolunk, akkor mondhatjuk azt is, hogy az (a;b)(a;b) 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:

(a;b)(c;d)=(a+c;b+d)(a;b)\oplus (c;d)=(a+c;b+d)

Itt a vektorok közötti "összeadást" a \oplus, 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 \oplus művelet az R2\R^2, míg a ++ művelet az R\R halmazon. A 22.3. ábrán az imént definiált vektorok közötti "összeadás" intuitív értelmezése látható.

Vektorok összeadása
22.3. ábra: Vektorok összeadása

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 Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z 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;B)(C;D)=(A+C;B+D)(A;B)(C;D)=(AC;BD)\begin{aligned}(A;B)\oplus (C;D)&=(A+C;B+D) \\ (A;B)\odot (C;D)&=(A\cdot C;B\cdot D)\end{aligned}

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ó A+CA+C összeadást a modulo pp maradékosztálygyűrűben, míg a második "koordinátát" adó B+DB+D összeadást a modulo qq 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 Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z halmaz az imént értelmezett \oplus és \odot műveletekkel egy gyűrűt alkot. Az alábbi tételben ezt ennél általánosabban igazoljuk.

22.6. Tétel (Gyűrűk direkt szorzata):

Legyenek R1R_1, R2R_2, ..., RnR_n tetszőleges gyűrűk, és értelmezzünk két műveletet az R1×R2××RnR_1\times R_2\times \ldots \times R_n halmaz tetszőleges (a1;a2;;an)(a_1;a_2;\ldots;a_n) és (b1;b2;;bn)(b_1;b_2;\ldots;b_n) elemei között az alábbi módon:

(a1;a2;;an)(b1;b2;;bn)=(a1+b1;a2+b2;;an+bn)(a1;a2;;an)(b1;b2;;bn)=(a1b1;a2b2;;anbn)\begin{aligned} (a_1;a_2;\ldots;a_n)\oplus (b_1;b_2;\ldots;b_n)&=(a_1+b_1;a_2+b_2;\ldots;a_n+b_n) \\ (a_1;a_2;\ldots;a_n)\odot (b_1;b_2;\ldots;b_n)&=(a_1\cdot b_1;a_2\cdot b_2;\ldots;a_n\cdot b_n) \end{aligned}

A \oplus illetve a \odot műveleteket tehát úgy kell elvégezni, hogy az azonos pozícióban lévő komponensek összegeit illetve szorzatait képezzük a megfelelő gyűrűkben.

Ekkor az R1×R2××RnR_1\times R_2\times \ldots \times R_n halmaz szintén egy gyűrűt alkot ezzel a két művelettel. Ezt a gyűrűt az R1R_1, R2R_2, ..., RnR_n gyűrűk direkt szorzatának, vagy szorzatgyűrűjének nevezzük. E szorzatgyűrű nulleleme egy olyan rendezett nn-es, amelynek minden komponensében a megfelelő gyűrű nulleleme áll. Azaz:

0R1×R2××Rn=(0R1;0R2;;0Rn)0_{R_1\times R_2\times \ldots \times R_n}=(0_{R_1};0_{R_2};\ldots;0_{R_n})

A szorzatgyűrű egy tetszőleges (a1;a2;;an)(a_1;a_2;\ldots;a_n) elemének (a1;a2;;an)\ominus (a_1;a_2;\ldots;a_n)-nel jelölt ellentettjét úgy kapjuk meg, hogy vesszük minden komponens ellentettjét a megfelelő gyűrűben. Azaz:

(a1;a2;;an)=(a1;a2;;an)\ominus (a_1;a_2;\ldots;a_n)=(-a_1;-a_2;\ldots;-a_n)

Bizonyítás:

A 14.12. Definícióban felsorolt gyűrűaxiómákat kell ellenőrizni. A \oplus művelet kommutativitása könnyedén adódik az R1R_1, R2R_2, ..., RnR_n gyűrűkön értelmezett összeadások ugyanezen tulajdonságából:

(a1;;an)(b1;;bn)==(a1+b1;;an+bn)==(b1+a1;;bn+an)==(b1;;bn)(a1;;an)\begin{aligned} (&a_1;\ldots;a_n)\oplus(b_1;\ldots;b_n)= \\ &= (a_1+b_1;\ldots;a_n+b_n)= \\ &=(b_1+a_1;\ldots;b_n+a_n)= \\ &= (b_1;\ldots;b_n) \oplus (a_1;\ldots;a_n) \end{aligned}

Hasonlóképpen adódik a \oplus művelet asszociativitása:

((a1;;an)(b1;;bn))(c1;;cn)==(a1+b1;;an+bn)(c1;;cn)==((a1+b1)+c1;;(an+bn)+cn)==(a1+(b1+c1);;an+(bn+cn))==(a1;;an)(b1+c1;;bn+cn)==(a1;;an)((b1;;bn)(c1;;cn))\begin{aligned}((&a_1;\ldots;a_n)\oplus(b_1;\ldots;b_n))\oplus(c_1;\ldots;c_n) =\\&= (a_1+b_1;\ldots;a_n+b_n)\oplus(c_1;\ldots;c_n) =\\&=((a_1+b_1)+c_1;\ldots;(a_n+b_n)+c_n) =\\&= (a_1+(b_1+c_1);\ldots;a_n+(b_n+c_n)) =\\&=(a_1;\ldots;a_n)\oplus(b_1+c_1;\ldots;b_n+c_n)=\\&=(a_1;\ldots;a_n)\oplus((b_1;\ldots;b_n)\oplus(c_1;\ldots;c_n))\end{aligned}

És a \odot művelet asszociativitása is:

((a1;;an)(b1;;bn))(c1;;cn)==(a1b1;;anbn)(c1;;cn)==((a1b1)c1;;(anbn)cn)==(a1(b1c1);;an(bncn))==(a1;;an)(b1c1;;bncn)==(a1;;an)((b1;;bn)(c1;;cn))\begin{aligned}((&a_1;\ldots;a_n)\odot(b_1;\ldots;b_n))\odot(c_1;\ldots;c_n) =\\&= (a_1\cdot b_1;\ldots;a_n\cdot b_n)\odot(c_1;\ldots;c_n) =\\&=((a_1\cdot b_1)\cdot c_1;\ldots;(a_n\cdot b_n)\cdot c_n) =\\&= (a_1\cdot (b_1\cdot c_1);\ldots;a_n\cdot (b_n\cdot c_n)) =\\&=(a_1;\ldots;a_n)\odot(b_1\cdot c_1;\ldots;b_n\cdot c_n)=\\&=(a_1;\ldots;a_n)\odot((b_1;\ldots;b_n)\odot(c_1;\ldots;c_n))\end{aligned}

Továbbá a két művelet közötti mindkét oldali disztributivitás is könnyen látszik. Nézzük először a baloldali disztributivitást, a jobboldali disztributivitás ugyanígy igazolható:

(a1;;an)((b1;;bn)(c1;;cn))==(a1;;an)(b1+c1;;bn+cn)==(a1(b1+c1);;an(bn+cn))==(a1b1+a1c1;;anbn+ancn)==(a1b1;;anbn)(a1c1;;ancn)==((a1;;an)(b1;;bn))((a1;;an)(c1;;cn))\begin{aligned}(&a_1;\ldots;a_n)\odot((b_1;\ldots;b_n)\oplus(c_1;\ldots;c_n))=\\&=(a_1;\ldots;a_n)\odot (b_1+c_1;\ldots;b_n+c_n)=\\&=(a_1\cdot(b_1+c_1);\ldots;a_n\cdot (b_n+c_n))=\\&=(a_1b_1+a_1c_1;\ldots;a_nb_n+a_nc_n)=\\&=(a_1b_1;\ldots;a_nb_n)\oplus (a_1c_1;\ldots;a_nc_n)=\\&=((a_1;\ldots;a_n)\odot (b_1;\ldots;b_n))\oplus ((a_1;\ldots;a_n)\odot (c_1;\ldots;c_n))\end{aligned}

Végül igazoljuk a nullelemre és az ellentettképzésre vonatkozó állításokat. Legyen (a1;;an)(a_1;\ldots;a_n) az R1××RnR_1\times \ldots \times R_n halmaz egy tetszőleges eleme. Ezt a (0R1;;0Rn)(0_{R_1};\ldots;0_{R_n}) elemmel összeadva az eredmény valóban nem változik, hiszen minden komponensben a megfelelő gyűrű nullelemével való összeadás fog szerepelni:

(a1;;an)(0R1;;0Rn)==(a1+0R1;;an+0Rn)==(a1;;an)\begin{aligned}(&a_1;\ldots;a_n)\oplus(0_{R_1};\ldots;0_{R_n})=\\&=(a_1+0_{R_1};\ldots;a_n+0_{R_n})=\\&=(a_1;\ldots;a_n)\end{aligned}

Ehhez hasonlóan az (a1;;an)(a_1;\ldots;a_n) elemet a (a1;;an)(-a_1;\ldots;-a_n) elemmel összeadva az eredmény valóban a (0R1;;0Rn)(0_{R_1};\ldots;0_{R_n}) elem lesz, hiszen minden komponensben az adott komponens és annak a megfelelő gyűrűben vett ellentettjének összege fog szerepelni:

(a1;;an)(a1;;an)==(a1a1;;anan)==(0R1;;0Rn)\begin{aligned}(&a_1;\ldots;a_n)\oplus(-a_1;\ldots;-a_n)=\\&=(a_1-a_1;\ldots;a_n-a_n)=\\&=(0_{R_1};\ldots;0_{R_n})\end{aligned}

E tételből következően a Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z 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ő ([4]5;[6]8)([4]_5;[6]_8) és ([4]5;[2]8)([4]_5;[2]_8) maradékosztálypárok ilyen értelemben vett "összegét" és "szorzatát" az alábbiak szerint kapjuk meg:

([4]5;[6]8)([4]5;[2]8)=([4]5+[4]5;[6]8+[2]8)=([3]5;[0]8)([4]5;[6]8)([4]5;[2]8)=([4]5[4]5;[6]8[2]8)=([1]5;[4]8)\begin{aligned}([4]_5;[6]_8)\oplus ([4]_5;[2]_8) &= ([4]_5+[4]_5; [6]_8+[2]_8) = ([3]_5; [0]_8) \\ ([4]_5;[6]_8)\odot ([4]_5;[2]_8) &= ([4]_5\cdot [4]_5; [6]_8\cdot [2]_8) = ([1]_5; [4]_8) \end{aligned}

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 Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z és a Z/pqZ\Z/pq\Z 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ó.

22.7. Tétel (Maradékosztálygyűrűk dekompozíciója):

Legyenek p>0p\gt 0 és q>0q\gt 0 valamilyen egymáshoz relatív prím pozitív egész számok. Ekkor a 22.6. Tétel szerint értelmezett Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z szorzatgyűrű izomorf a Z/pqZ\Z/pq\Z maradékosztálygyűrűvel, azaz:

Z/pZ×Z/qZZ/pqZ\Z/p\Z \times \Z/q\Z\simeq \Z/pq\Z

Legyenek aa, bb és cc tetszőleges egész számok, továbbá tegyük fel, hogy az x1x_1 és x2x_2 egész számok kielégítik az alábbi kongruenciákat:

px11(modq)qx21(modp)\begin{aligned} px_1&\equiv 1\pmod q \\ qx_2&\equiv 1\pmod p \end{aligned}

Ekkor az alábbi f:Z/pZ×Z/qZZ/pqZf:\Z/p\Z \times \Z/q\Z \to \Z/pq\Z és g:Z/pqZZ/pZ×Z/qZg:\Z/pq\Z \to \Z/p\Z \times \Z/q\Z leképezések épp egymás megfordításai, továbbá mindketten gyűrűizomorfizmusok a két gyűrű között:

f(([a]p;[b]q))=[aqx2+bpx1]pqg([c]pq)=([c]p;[c]q)\begin{aligned} f(([a]_p;[b]_q))&=[aqx_2 + bpx_1]_{pq} \\ g([c]_{pq})&=([c]_p;[c]_q) \end{aligned}

Bizonyítás:

Az ff függvényről a 22.3. Tételben igazoltuk, hogy minden Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z-beli rendezett párhoz pontosan egy Z/pqZ\Z/pq\Z-beli maradékosztályt rendel hozzá. Méghozzá azt a maradékosztályt, amely a rendezett pár két komponensének a metszete. A 22.4. Tételben pedig azt mutattuk meg, hogy ilymódon minden Z/pqZ\Z/pq\Z-beli maradékosztály pontosan egy Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z-beli rendezett párhoz lehet hozzárendelve, amelyet ráadásul épp a gg függvény segítségével kaphatunk meg.

Ez egyrészt azt jelenti, hogy a Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z halmaz elemei kölcsönösen egyértelmű megfeleltetésben állnak a Z/pqZ\Z/pq\Z halmaz elemeivel. Másrészt pedig azt jelenti, hogy e kölcsönösen egyértelmű megfeleltetést az ff függvény segítségével az egyik, míg a gg függvény segítségével a másik irányban kaphatjuk meg. Más szavakkal az ff és gg függvények valóban épp egymás megfordításai. Ezt a szituációt mutatja a 22.4. ábra.

Az f és g függvények egymáshoz való viszonya
22.4. ábra: Az ff és gg függvények egymáshoz való viszonya

Így már csak azt kell igazolni, hogy az ff és gg függvények rendelkeznek-e a 18.6. Definíció szerinti művelettartó tulajdonsággal. Annak érdekében, hogy világos legyen, melyik műveletet melyik gyűrűben kell elvégezni, a Z/pqZ\Z/pq\Z maradékosztálygyűrű összeadását és szorzását a \boxplus és \boxdot, míg a Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z gyűrű összeadását és szorzását a \oplus és \odot szimbólumokkal fogjuk jelölni.

Ezeket a jelöléseket bevezetve tehát azt kell igazolni, hogy tetszőleges aa, bb, cc és dd egész számokra teljesülnek az alábbiak:

f(([a]p;[b]q)([c]p;[d]q))=f(([a]p;[b]q))f(([c]p;[d]q))f(([a]p;[b]q)([c]p;[d]q))=f(([a]p;[b]q))f(([c]p;[d]q))g([a]pq[b]pq)=g([a]pq)g([b]pq)g([a]pq[b]pq)=g([a]pq)g([b]pq)\begin{aligned} f(([a]_p;[b]_q) \oplus ([c]_p;[d]_q)) &= f(([a]_p;[b]_q))\boxplus f(([c]_p;[d]_q)) \\ f(([a]_p;[b]_q) \odot ([c]_p;[d]_q)) &= f(([a]_p;[b]_q))\boxdot f(([c]_p;[d]_q)) \\ g([a]_{pq} \boxplus [b]_{pq}) &= g([a]_{pq})\oplus g([b]_{pq}) \\ g([a]_{pq} \boxdot [b]_{pq}) &= g([a]_{pq})\odot g([b]_{pq}) \end{aligned}

Kezdjük a gg függvénnyel. Az erre vonatkozó két állítás baloldalait a 20.5. Tétel és a gg függvény képletének felhasználásával az alábbi módon lehet kifejteni – itt a ++ és \cdot szimbólumok a szokásos egészek közötti összeadást és szorzást jelölik:

g([a]pq[b]pq)=g([a+b]pq)=([a+b]p;[a+b]q)g([a]pq[b]pq)=g([ab]pq)=([ab]p;[ab]q)\begin{aligned} g([a]_{pq} \boxplus [b]_{pq}) &= g([a+b]_{pq})=([a+b]_p;[a+b]_q) \\ g([a]_{pq} \boxdot [b]_{pq}) &= g([a\cdot b]_{pq})=([a\cdot b]_p;[a\cdot b]_q) \end{aligned}

Míg a jobboldalakból ezt kapjuk:

g([a]pq)g([b]pq)=([a]p;[a]q)([b]p;[b]q)g([a]pq)g([b]pq)=([a]p;[a]q)([b]p;[b]q)\begin{aligned} g([a]_{pq})\oplus g([b]_{pq}) &= ([a]_p;[a]_q)\oplus ([b]_p;[b]_q) \\ g([a]_{pq})\odot g([b]_{pq}) &= ([a]_p;[a]_q)\odot ([b]_p;[b]_q) \end{aligned}

A 22.6. Tétel alapján a kapott rendezett párokat komponensenként kell összeadni illetve összeszorozni. Az első komponenshez szükséges műveleteket a modulo pp maradékosztálygyűrűben, míg a második komponenshez szükséges műveleteket a modulo qq maradékosztálygyűrűben kell elvégezni. Ismételten a 20.5. Tétel felhasználásával így az alábbit kapjuk:

g([a]pq)g([b]pq)=([a+b]p;[a+b]q)g([a]pq)g([b]pq)=([ab]p;[ab]q)\begin{aligned}g([a]_{pq})\oplus g([b]_{pq}) &= ([a+b]_p;[a+b]_q) \\ g([a]_{pq})\odot g([b]_{pq}) &= ([a\cdot b]_p;[a\cdot b]_q)\end{aligned}

A gg-re vonatkozó két állítás bal- és jobboldalai tehát megegyeznek, azaz a gg függvény tartja mindkét műveletet, így ő egy gyűrűizomorfizmus Z/pqZ\Z/pq\Z és Z/pZ×Z/qZ\Z/p\Z \times \Z/q\Z között.

Mivel az ff függvény a gg függvény megfordítása, ezért a 18.6. Definíció utáni megjegyzés 2. pontja alapján ő is egy gyűrűizomorfizmus a két gyűrű között, csak épp a másik irányba képez.

Tekintsük ismét példaként a már sokat emlegetett ([4]5;[6]8)([4]_5;[6]_8) és ([4]5;[2]8)([4]_5;[2]_8) maradékosztálypárokat a Z/5Z×Z/8Z\Z/5\Z\times \Z/8\Z gyűrűben. Ezek összege és szorzata ebben a gyűrűben az alábbiak voltak:

([4]5;[6]8)([4]5;[2]8)=([3]5;[0]8)([4]5;[6]8)([4]5;[2]8)=([1]5;[4]8)\begin{aligned} ([4]_5;[6]_8)\oplus ([4]_5;[2]_8) &= ([3]_5; [0]_8) \\ ([4]_5;[6]_8)\odot ([4]_5;[2]_8) &= ([1]_5; [4]_8) \end{aligned}

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 Z/40Z\Z/40\Z gyűrűben rendre a [14]40[14]_{40} és a [34]40[34]_{40} maradékosztályok. Most nézzük meg ezek összegét és szorzatát a Z/40Z\Z/40\Z gyűrűben:

[14]40[34]40=[48]40=[8]40[14]40[34]40=[476]40=[36]40\begin{aligned}[14]_{40}\boxplus [34]_{40} &= [48]_{40}=[8]_{40} \\ [14]_{40}\boxdot [34]_{40} &= [476]_{40}=[36]_{40}\end{aligned}

Valóban, a 22.7. Tételben szereplő gg gyűrűizomorfizmus a [8]40[8]_{40} maradékosztályhoz a ([8]5;[8]8)=([3]5;[0]8)([8]_5;[8]_8)=([3]_5;[0]_8), míg a [36]40[36]_{40} maradékosztályhoz a ([36]5;[36]8)=([1]5;[4]8)([36]_5;[36]_8)=([1]_5;[4]_8) maradékosztálypárt rendeli hozzá. Azaz tényleg egy művelettartó leképezésről van szó a Z/40Z\Z/40\Z és a Z/5Z×Z/8Z\Z/5\Z \times \Z/8\Z gyűrűk között.

Tulajdonképpen az történt, hogy a Z/40Z\Z/40\Z 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.

Az 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 p=211p=211 és q=139q=139 prímszámokat választotta, és ezek segítségével előállította az m=29329m=29329 modulust, az e=187e=187 publikus, valamint a d=11623d=11623 titkos kitevőt.

Alice a példában leírt módon a 18.3. Definíció szerinti Z29329Z_{29329} gyűrű elemeinek sorozatává alakította az elküldendő üzenetet, melyek közül az első az x1=9620x_1=9620 volt. Ebből a rejtjelezett számsorozat első tagja a Z29329Z_{29329} gyűrűben végrehajtott alábbi moduláris hatványozás eredményeként állt elő:

Z293299620187=7812=y1Z_{29329} \text{: } 9620^{187}=7812=y_1

Bob ebből a d=11623d=11623 kitevő segítségével az alábbi, szintén a Z29329Z_{29329} gyűrű végrehajtott moduláris hatványozással kaphatja vissza az eredeti x1x_1 számot:

Z29329781211623=9620=x1Z_{29329} \text{: } 7812^{11623}=9620=x_1

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 m>0m\gt 0 pozitív egész szám esetén a ZmZ_m gyűrű izomorf a Z/mZ\Z/m\Z 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 Zp×ZqZ_p \times Z_q szorzatgyűrű is izomorf a Zpq=ZmZ_{pq}=Z_m gyűrűvel.

Emiatt Bob a pp és qq prímszámok ismeretében megteheti, hogy a dekódoláskor elvégzendő moduláris hatványozást a ZmZ_m gyűrű helyett a Zp×ZqZ_p \times Z_q szorzatgyűrűben végzi el, majd az eredményt visszatranszformálja a ZmZ_m 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 mm, hanem a nagyságrendileg feleannyi számjegyből álló pp és qq 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 y1=7812y_1=7812 rejtjelezett szám, amely ugye a Z29329Z_{29329} gyűrű egy eleme. Ezt Bob a 22.7. Tételben megadott gg gyűrűizomorfizmus segítségével áttranszformálja a Z211×Z139Z_{211}\times Z_{139} szorzatgyűrűbe, azaz veszi a két prímmel való osztási maradékát:

g(7812)=(5;28)g(7812)=(5; 28)

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:

Z211511623Z1392811623\begin{aligned}Z_{211} &\text{: } 5^{11623} \\ Z_{139} &\text{: } 28^{11623}\end{aligned}

Itt tehát az első moduláris hatványozást a Z211Z_{211}, míg a másodikat a Z139Z_{139} gyűrűben kell végrehajtani. Ez hatékonyabban végrehajtható, mintha csak a 7812116237812^{11623} moduláris hatványozást hajtanánk végre ugyan, viszont a jóval nagyobb modulusú Z29329Z_{29329} gyűrűben. A 21.4. szakaszban megismert ismételt négyzetreemelések módszerével Bob az alábbi eredményt kapja:

Z211511623=125Z1392811623=29\begin{aligned}Z_{211} &\text{: } 5^{11623}=125 \\ Z_{139} &\text{: } 28^{11623}=29\end{aligned}

A kapott rendezett pár tehát a (125;29)(125;29). Ahhoz, hogy Bob ebből megkapja az Alice által küldött eredeti x1x_1 üzenetet, vissza kell transzformálja ezt a Z211×Z139Z_{211}\times Z_{139}-beli elemet a Z29329Z_{29329} gyűrűbe. Ezt a 22.7. Tételben megadott ff gyűrűizomorfizmussal teheti meg:

f((125;29))=9620=x1f((125;29))=9620=x_1

A kapott x1=9620x_1=9620 eredmény helyességét könnyen leellenőrizhetjük. Ha ugyanis alkalmazzuk rá az említett tételben szereplő gg függvényt, akkor vissza kell kapnunk a (125;29)(125;29) rendezett párt, hiszen a gg függvény épp az ff függvény megfordítása. Valóban: a 96209620 egész számnak a p=211p=211-gyel való osztási maradéka 125125, míg a q=139q=139-cel való osztási maradéka 2929. Vagyis a (125;29)(125;29) valóban az x1=9620x_1=9620 ü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 dd titkos kitevő méretét is jelentősen képes lecsökkenteni.

22.8. Következmény:

Legyen d>0d\gt 0 egy tetszőleges pozitív egész szám, p>0p\gt 0 pedig egy tetszőleges pozitív prímszám. Tegyük fel továbbá, hogy dpd_p egy olyan egész szám, amelyre teljesül az alábbi kongruencia:

dpd(modp1)d_p\equiv d\pmod{p-1}

Ekkor minden yy egész szám esetén teljesül az alábbi kongruencia is:

ydydp(modp)y^d\equiv y^{d_p}\pmod{p}

Bizonyítás:

A dpd(modp1)d_p\equiv d\pmod{p-1} kongruencia a 20.1. Tétel 3. pontja alapján az alábbi oszthatóság teljesülését jelenti:

p1dpdp-1|d_p-d

Ez az oszthatóság a 16.1. Definíció alapján azt jelenti, hogy létezik olyan kk egész szám, amelyre teljesül az alábbi egyenlet:

k(p1)=dpdk(p-1)=d_p-d

Az egyenlet mindkét oldalához dd-t adva az alábbi kifejezést kapjuk dpd_p-re:

dp=k(p1)+dd_p=k(p-1)+d

Ez alapján az ydydp(modp)y^d\equiv y^{d_p}\pmod p kongruencia így írható fel:

ydyk(p1)+d=dp(modp)y^d\equiv y^{\overbrace{k(p-1)+d}^{=d_p}}\pmod p

Ez a hatványozás azonosságairól szóló 18.8. Tétel 2. és 3. pontjai alapján az alábbi alakra hozható:

yd(yp1)kyd(modp)y^d\equiv (y^{p-1})^k \cdot y^d\pmod p

Amennyiben yy relatív prím pp-hez, akkor alkalmazható a kis Fermat-tétel, amely alapján a fenti kongruencia jobboldalán szereplő yp1y^{p-1} tényező 11-gyel kongruens modulo pp:

yd1kyd(modp)y^d\equiv 1^k \cdot y^d\pmod p

Így tehát a kongruencia jobboldala a 20.2. Tétel 4. és 6. pontja alapján valóban ydy^d-vel kongruens modulo pp.

Amennyiben yy nem relatív prím pp-hez, akkor a 21.4. Lemma alapján teljesül a pyp|y oszthatóság. Ilyenkor tehát ugyancsak teljesül a fenti kongruencia, hiszen mindkét oldal 00-val kongruens modulo pp.

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 Z211Z_{211} és a Z139Z_{139} gyűrűben:

Z211511623=125Z1392811623=29\begin{aligned}Z_{211} &\text{: } 5^{11623}=125 \\ Z_{139} &\text{: } 28^{11623}=29\end{aligned}

Az imént bizonyított 22.8. Következmény alapján ezen a ponton megteheti, hogy veszi a d=11623d=11623 kitevő p1=210p-1=210-zel és q1=138q-1=138-cal való osztási maradékait, és dd helyett ezeket az osztási maradékokat használja kitevőként. Jelöljük az így kapott új kitevőket dpd_p-vel és dqd_q-val. Jelen esetben ezek az alábbiak lesznek:

dp=mod210(11623)=73dq=mod138(11623)=31\begin{aligned}d_p&=\bmod_{210}(11623)=73 \\ d_q&=\bmod_{138}(11623)=31\end{aligned}

A moduláris hatványozásokat ezekkel az eredeti dd-nél jóval kisebb kitevőkkel elvégezve valóban ugyanazt az eredményt kapjuk:

Z211573=125Z1392831=29\begin{aligned}Z_{211} &\text{: } 5^{73}=125 \\ Z_{139} &\text{: } 28^{31}=29\end{aligned}

Ráadásul a dpd_p és dqd_q kitevők csak a választott pp és qq 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 Zp×ZqZ_p \times Z_q szorzatgyűrű, valamint a redukált dpd_p és dqd_q 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 ZmZ_m gyűrűt és az eredeti dd 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.