RSA felirat mozgáselmosódott háttéren

Episode I

Alice és Bob

21. fejezet

Alice és Bob titkosít

Az előző fejezetben azt vizsgáltuk meg, hogy a 18. fejezetben bevezetett kongruencia, maradékosztály és maradékosztálygyűrű fogalmai mit jelentenek az egész számok esetében. Láthattuk, hogy a kongruenciákkal nagyjából ugyanúgy kell számolni, mint a hagyományos egyenletekkel, de azért bizonyos esetekben vigyázni kell. Ezután megismerkedtünk az Euler-féle φ\varphi-függvénnyel, amely a modulo mm redukált maradékosztályok számát adja meg. Végül az úgynevezett lineáris kongruenciák megoldhatóságának feltételeit, valamint az Euler-Fermat tételt ismertük meg. Ugyanis az ebben a fejezetben ismertetett RSA eljárás esetén ezek teremtik meg a nyilvános és titkos kulcsok közötti számelméleti kapcsolatot.

De vajon hogyan lehet a kitüntetett közös osztó kiszámítására szolgáló, a 17.4. szakaszban ismertetett euklidészi algoritmust lineáris kongruenciák megoldásához is használni? Hogyan kell kiszámítani az Euler-féle φ\varphi-függvény értékét egy adott számra, és milyen információra van ehhez szükség? Hogyan működik az RSA nevű aszimmetrikus kulcsú rejtjelező eljárás? Ebben a fejezetben erről lesz szó...

Ezek kontextusba helyezése miatt erőteljesen ajánlott elolvasni a 17., 19. és 20. fejezeteket, mivel gyakran hivatkozni fogunk rájuk.

Kezdjük tehát a lineáris kongruenciák megoldásával. Rögzítsünk egy m>0m\gt 0 pozitív modulust. A 20.8. Definíció és az utána lévő megjegyzés alapján egy axb(modm)ax\equiv b\pmod m lineáris kongruencia egy megoldása alatt egy olyan modulo mm maradékosztályt értünk, amelynek bármely elemét behelyettesítve xx helyére a kongruencia fennáll.

A 20.13. Tétel alapján a fenti lineáris kongruencia akkor és csak akkor oldható meg – azaz létezik ilyen maradékosztály –, ha megoldható az alábbi úgynevezett lineáris diofantoszi egyenlet:

ax+my=bax+my=b

Ebben az esetben tehát megoldás alatt olyan egész számpárt értünk, amelyet a fenti egyenletbe xx és yy helyére behelyettesítve fennáll az egyenlet. Ha tehát egy ilyen egyenletet meg tudunk oldani, akkor bármilyen lineáris kongruenciát is meg tudunk oldani. Azok mindegyike ugyanis egy-egy ilyen egyenletre vezethető vissza. Nézzünk is egy gyors példát egy lineáris diofantoszi egyenlethez vezető egyszerű problémára.

A 7., 10. és 13. fejezetekben szó volt már a messzi-messzi Kompánia országáról. Tegyük fel, hogy ebben az országban az emberek aranytallérokon kívül bankjegyeket is használnak fizetőeszközként. Igenám, csakhogy ebben a furcsa országban mindössze kétféle címlet létezik: 7979 és 4747 aranytallér névértékű bankjegy. Tegyük fel, hogy Alice kinézett valamilyen ajándékot Bob-nak, amely 1000010000 aranytallérba kerül, viszont csak bankjegyek vannak nála.

Kérdés, hogy Alice ki tudja-e fizetni pontosan az összeget ezen bankjegyek segítségével, és ha igen, akkor hányféleképpen? Keressük tehát az alábbi lineáris diofantoszi egyenlet megoldásait:

79=ax+47=my=10000=b\underbrace{79}_{=a}\cdot x+\underbrace{47}_{=m}\cdot y=\underbrace{10000}_{=b}

Ne feledjük, hogy xx-nek és yy-nak is egész számnak kell lennie, ráadásul ebben a példában nemnegatív egésznek, mivel a kifizetendő bankjegyek számáról van szó. A 20.13. Tétel alapján a fenti egyenlet akkor és csak akkor oldható meg, ha az (a,m)=(79,47)(a,m)=(79,47) kitüntetett közös osztó osztója az egyenlet jobboldalának, azaz b=10000b=10000-nek. Előszöris tehát ki kell számítanunk a (79,47)(79,47) kitüntetett közös osztót annak érdekében, hogy eldöntsük, egyáltalán létezik-e megoldás.

A 17.4. szakaszban ismertettük az euklidészi algoritmus alapgondolatát, amely pontosan erre való. Azt is megmutattuk, hogy ez az eljárás minden olyan gyűrűn végrehajtható, amelynek elemei között valamilyen absztrakt értelemben elvégezhető a maradékos osztás. Ezeket a 17.17. Definícióban euklidészi gyűrűknek neveztük el, és a 17.18. Tétel bizonyításában általánosságban is ismertettük az euklidészi algoritmus menetét.

Eszerint a gyűrű bármely aa és bb elemének kitüntetett közös osztóját megkapjuk az alábbi maradékos osztások során kapott utolsó nemnulla maradékként:

a=k1b+r1b=k2r1+r21=k3r2+r32=k4r3+r4n2=knrn1+rnn1=kn+1rn+0\begin{aligned}a&=k_1b+r_1\\b&=k_2r_1+r_2\\ _1&=k_3r_2+r_3\\ _2&=k_4r_3+r_4\\&\vdots\\ _{n-2}&=k_nr_{n-1}+r_n\\ _{n-1}&=k_{n+1}r_n+0\end{aligned}

Ez jelen esetben tehát rnr_n lesz:

(a,b)(b,r1)(r1,r2)(rn1,rn)(rn,0)rn\begin{aligned}(a,b)&\sim (b,r_1)\sim (r_1,r_2)\sim \ldots\\\ldots&\sim (r_{n-1},r_n)\sim (r_n,0)\sim r_n\end{aligned}

Itt a \sim szimbólum a 16.6. Definíció szerinti asszociáltság relációt jelöli.

Azt is megmutattuk, hogy az eljárás garantáltan végetér véges számú lépés után, mivel az euklidészi függvénynek a kapott maradékoknál felvett értékei egy szigorúan monoton csökkenő sorozatot alkotnak a természetes számok halmazán, és így a 17.15. Tétel értelmében előbb-utóbb biztosan elérik a 00-t.

Az egész számok Z\Z gyűrűjében a 17.19. Definíció szerinti abszolútérték-függvény a 17.20. Tétel értelmében egy euklidészi függvény – azaz Z\Z euklidészi gyűrű –, és így ezen a gyűrűn alkalmazható az euklidészi algoritmus. Végrehajtva az algoritmus lépéseit a 7979 és 4747 bemeneti számokon, az alábbi maradékos osztásokat kapjuk:

79=147+3247=132+1532=215+215=72+12=21+0\begin{aligned}79&=1\cdot 47+32 \\ 47&=1\cdot 32+15 \\ 32&=2\cdot 15+2 \\ 15&=7\cdot 2+1 \\ 2&=2\cdot 1+0\end{aligned}

Az utolsó nemnulla maradék lesz a két bemeneti szám kitüntetett közös osztója, azaz jelen esetben (79,47)1(79,47)\sim 1. Ez a szám természetesen osztója a 79x+47y=1000079x+47y=10000 lineáris diofantoszi egyenlet jobboldalának, következésképp ennek az egyenletnek a 20.13. Tétel értelmében létezik megoldása. A 21.1. és a 21.2. szakaszban megmutatjuk, hogy egyrészt hogyan található meg az egyik megoldás az euklidészi algoritmus segítségével, másrészt, hogy ebből hogyan számítható ki az összes többi.

A kibővített euklidészi algoritmus

A 20.13. Tételben igazoltuk, hogy az ax+my=bax+my=b lineáris diofantoszi egyenlet megolhatóságának szükséges és elégséges feltétele, hogy az egyenlet jobboldala – azaz bbosztható legyen az (a,m)(a,m) kitüntetett közös osztóval. Az elégségesség bizonyításához a 20.5. szakaszban bemutatott Bézout-lemma volt a kulcs, amely kimondja, hogy ez a kitüntetett közös osztó minden főideálgyűrűben kifejezhető (a,m)=au+mv(a,m)=au+mv alakban alkalmasan választott uu és vv elemek segítségével.

Amennyiben tehát fennáll az (a,m)b(a,m)|b oszthatóság, az azt jelenti, hogy létezik olyan tt elem, hogy teljesül az alábbi:

(a,m)t=b(a,m)\cdot t=b

Ezt összevetve a Bézout-lemmával a következőt kapjuk:

(au+mv=(a,m))t=b(\underbrace{au+mv}_{=(a,m)})\cdot t=b

Felbontva a zárójelet végsősoron megkapjuk az ax+my=bax+my=b lineáris diofantoszi egyenlet egy megoldását:

aut=x+mvt=y=ba\cdot \underbrace{ut}_{=x}+m\cdot \underbrace{vt}_{=y}=b

Először tehát meg kell határoznunk az uu és vv együtthatókat. A Bézout-lemma főideálgyűrűk esetén ugyan garantálja ezek létezését, azonban a korábban ismertetett bizonyítás nem konstruktív abban az értelemben, hogy nem ad eljárást ezek kiszámítására. Szerencsére euklidészi gyűrűk esetén – amelyek ugye a 19.15. Tétel értelmében mindannyian főideálgyűrűk – egy ilyen eljárást is kapunk a kezünkbe, amennyiben a 17.4. szakaszban ismertetett euklidészi algoritmust egy kicsit kibővítjük.

Ezért most egy konstruktív bizonyítást mutatunk a Bézout-lemma euklidészi gyűrűkre vonatkoztatott változatára. Az eredeti bizonyítás nyilván automatikusan érvényes lenne ebben az esetben is, hiszen a 19.15. Tétel alapján minden euklidészi gyűrű főideálgyűrű. Ez azonban csak a keresett uu és vv együtthatók létezését garantálja, de nem ad eljárást a kiszámításukra. Ezzel szemben az alábbiakban bemutatott bizonyítás konstruktív, mivel ismerteti a kibővített euklidészi algoritmust, amelynek segítségével ezeket az együtthatókat meg is határozhatjuk. Cserébe viszont nem minden főideálgyűrűn, hanem speciálisan csak euklidészi gyűrűkön működik.

21.1. Tétel (Bézout-lemma euklidészi gyűrűkben):

Legyen RR euklidészi gyűrű, továbbá legyenek aa és bb az RR tetszőleges elemei. Ekkor az aa és bb elemek kitüntetett közös osztója kifejezhető a kettejük lineáris kombinációjaként

ua+vbua+vb

alakban az RR alkalmasan választott uu és vv elemeinek a segítségével.

Bizonyítás:

Legyen aa és bb az RR két tetszőleges eleme, és jelöljük 0R0_R-rel a nullelemet, 1R1_R-rel pedig az egységelemet – amely ugye létezik, hiszen a 17.17. Definíció alapján minden euklidészi gyűrű integritástartomány, tehát egységelemes.

Ha aa és bb közül mindkettő 0R0_R, akkor a 17.6. Tétel 5. pontja miatt a kitüntetett közös osztójuk 0R0_R, amely nyilvánvalóan kifejezhető a kívánt alakban, méghozzá tetszőleges uu és vv elemekkel:

0R=au+0R=bv=0R=(a,b)\underbrace{0_R}_{=a}\cdot u+\underbrace{0_R}_{=b}\cdot v=\underbrace{0_R}_{=(a,b)}

Ha aa és bb közül csak az egyikük 0R0_R, akkor viszont ugyanezen tétel 4. pontja miatt a kitüntetett közös osztójuk a másik elem lesz. Ha például a0Ra\neq 0_R és b=0Rb=0_R, akkor (a,b)=(a,0R)a(a,b)=(a,0_R)\sim a. Ez nyilván kifejezhető a kívánt alakban u=1Ru=1_R és tetszőleges vv elemekkel:

a1R=u+0R=bv=(a,b)aa\cdot \underbrace{1_R}_{=u}+\underbrace{0_R}_{=b}\cdot v=\underbrace{(a,b)}_{\sim a}

Értelemszerűen ha a=0Ra=0_R és b0Rb\neq 0_R, akkor pedig v=1Rv=1_R és uu tetszőleges.

Az általánosság megsértése nélkül feltételezhetjük tehát, hogy a0Ra\neq 0_R és b0Rb\neq 0_R. Ekkor lefuttathatjuk erre a két elemre, mint bemenetre a 17.18. Tétel bizonyításában ismertetett euklidészi algoritmust, amely az ott ismertetett gondolatmenet alapján garantáltan befejeződik véges számú lépés után.

Tegyük fel, hogy az algoritmus futtatásakor az nn-edik maradékos osztás során kapjuk meg az utolsó nemnulla maradékot, amely ugye az (a,b)(a,b) kitüntetett közös osztó lesz. Ez tehát az alábbi nn darab maradékos osztást jelenti:

a=k1b+r1b=k2r1+r2r1=k3r2+r3r2=k4r3+r4rn2=knrn1+rn=(a,b)\begin{aligned} a&=k_1b+r_1 \\ b&=k_2r_1+r_2 \\ r_1&=k_3r_2+r_3 \\ r_2&=k_4r_3+r_4 \\ &\vdots \\ r_{n-2}&=k_nr_{n-1}+\underbrace{r_n}_{=(a,b)} \end{aligned}

Az utolsó maradékos osztást itt nem tüntettük fel, amelynek során végül a 0R0_R maradékot megkapjuk és amely terminálja az algoritmust.

Célunk tehát, hogy az nn-edik lépésben megkapott rnr_n maradékot kifejezzük rn=au+bvr_n=au+bv alakban valamilyen uu és vv elemek segítségével. Vegyük észre, hogy az első maradékos osztást leíró egyenlet mindkét oldalából k1bk_1b-t kivonva kapunk egy ehhez hasonló kifejezést az r1r_1 maradékra. Jelöljük az így kapott együtthatókat u1u_1-gyel és v1v_1-gyel:

r1=ak1b=a1=u1+b(k1)=v1r_1=a-k_1b=a\cdot \underbrace{1}_{=u_1}+b\cdot \underbrace{(-k_1)}_{=v_1}

Az első lépésben kapott r1r_1 maradékot tehát ilymódon kifejeztük az aa és bb lineáris kombinációjaként az u1=1u_1=1 és a v1=k1v_1=-k_1 együtthatók segítségével. Most tegyük meg ugyanezt a második lépésben kapott r2r_2 maradékkal is. Ehhez semmi mást nem kell tennünk, mint a második maradékos osztást leíró egyenlet mindkét oldalából levonnunk k2r1k_2r_1-et, majd r1r_1 helyére behelyettesíteni az előző lépésben kapott kifejezést. Jelöljük az így kapott együtthatókat u2u_2-vel és v2v_2-vel:

r2=bk2r1=bk2(ak1b=r1)==a(k2)=u2+b(1+k1k2)=v2\begin{aligned}r_2&=b-k_2r_1=b-k_2(\overbrace{a-k_1b}^{=r_1})=\\&=a\cdot \underbrace{(-k_2)}_{=u_2} + b\cdot \underbrace{(1+k_1k_2)}_{=v_2}\end{aligned}

A második lépésben kapott r2r_2 maradékot tehát szintén kifejeztük az aa és bb lineáris kombinációjaként az u2=k2u_2=-k_2 és a v2=1+k1k2v_2=1+k_1k_2 együtthatók segítségével.

Ezt az eljárást persze folytathatnánk egészen az nn-edik lépésig, amikor végül az rnr_n kitüntetett közös osztót is megkapnánk aa és bb lineáris kombinációjaként. Mi azonban lusták vagyunk, ezért adunk egy általános képletet, amely megadja, hogy a soron következő rir_i maradékot hogyan lehet előállítani aa és bb lineáris kombinációjaként, ha egyébként az ri2r_{i-2} és ri1r_{i-1} maradékokra ez az előállítás már ismert.

Tegyük fel tehát, hogy az alábbi lineáris kombinációs előállításokat már ismerjük, azaz az alábbi kifejezésekben szereplő ui2u_{i-2} és vi2v_{i-2} valamint ui1u_{i-1} és vi1v_{i-1} együtthatókat már kiszámítottuk:

ri2=aui2+bvi2ri1=aui1+bvi1\begin{aligned}r_{i-2}&=a\cdot u_{i-2} + b\cdot v_{i-2} \\ r_{i-1}&=a\cdot u_{i-1} + b\cdot v_{i-1}\end{aligned}

Feladatunk előállítani az rir_i maradékot az aa és bb elemek lineáris kombinációjaként. Ehhez először is tekintsük az euklidészi algoritmus futtatása során kapott ii-edik maradékos osztást leíró egyenletet:

ri2=kiri1+rir_{i-2}=k_ir_{i-1}+r_i

Mindkét oldalából vonjunk le kiri1k_ir_{i-1}-et:

ri2kiri1=rir_{i-2}-k_ir_{i-1}=r_i

Az ii-edik lépésben kapott rir_i maradékot tehát kifejeztük az ri2r_{i-2} és ri1r_{i-1} lineáris kombinációjaként. Ez utóbbi kettőről viszont azt mondtuk, hogy már előállítottuk őket aa és bb lineáris kombinációjaként. Helyettesítsük is be a fenti egyenletbe ezeket az előállításokat:

ri=(aui2+bvi2=ri2)ki(aui1+bvi1=ri1)r_i=(\underbrace{au_{i-2} + bv_{i-2}}_{=r_{i-2}})-k_i\cdot (\underbrace{au_{i-1} + bv_{i-1}}_{=r_{i-1}})

Ezt a 14.12. Definícióban szereplő gyűrűaxiómáknak megfelelően átrendezve megkapjuk rir_i-t is aa és bb lineáris kombinációjaként. Jelöljük az így kapott együtthatókat uiu_i-vel és viv_i-vel:

ri=a(ui2kiui1=ui)+b(vi2kivi1=vi)r_i=a\cdot (\underbrace{u_{i-2}-k_iu_{i-1}}_{=u_i}) + b\cdot (\underbrace{v_{i-2}-k_iv_{i-1}}_{=v_i})

Ezzel a bizonyításunk teljes, mivel az első két lépésben kapott r1r_1 és r2r_2 maradékokat előállítottuk aa és bb lineáris kombinációjaként, az imént konstruált képlet alapján pedig elő tudjuk állítani a további maradékokat is. Ezek közül ugye az nn-edik lépés során kapott rn=aun+bvnr_n=au_n+bv_n előállítás épp az (a,b)(a,b) kitüntetett közös osztó előállítása az aa és bb lineáris kombinációjaként.

Az iménti bizonyításban látott kibővitett euklidészi algoritmus tehát abban különbözik a 17.4. szakaszban ismertetett eredeti algoritmustól, hogy itt nem csak a futás során kapott r1r_1, r2r_2, ..., rnr_n maradékokat számítjuk ki, hanem a k1k_1, k2k_2, ..., knk_n hányadosokat is felhasználjuk e maradékok lineáris kombinációs előállításához.

Hogy ne csak a levegőbe beszéljünk, térjünk most vissza a 17.4. szakaszban bemutatott példához, és futtassuk le ezúttal a kibővített euklidészi algoritmust a 12 439 705 04912\space 439\space 705\space 049 és a 15 828 713 00315\space 828\space 713\space 003 egész számokra. A feladat ismét e két szám kitüntetett közös osztójának kiszámítása – jelöljük ezt most dd-vel –, ezúttal azonban ki is szeretnénk őt fejezni e két szám lineáris kombinációjaként. Azaz keressük az alábbi egyenletben szereplő uu és vv együtthatókat:

d=15 828 713 003u+12 439 705 049vd=15\space 828\space 713\space 003\cdot u + 12\space 439\space 705\space 049\cdot v

Ehhez megint használhatunk bármilyen kalkulátort, csak most az osztási maradékokon kívül a hányadosokat is ki kell számolnunk. Ez elvégezhető egy közönséges osztással, aminek az eredményéből a tizedesjegyeket levágva kapjuk meg a keresett hányadost. Ez az egész osztásnak nevezett művelet – itt nem részletezett digitális áramköri okok miatt – az osztási maradék kiszámításához hasonlóan egy számítógép számára rendkívül gyorsan elvégezhető. Ezek után az uiu_i és viv_i együtthatókat az iménti bizonyításban szereplő módon számíthatjuk ki. Az első két lépés együtthatóit tehát az alábbi képletekkel:

u1=1u2=k2v1=k1v2=1+k1k2\begin{array}{ll}u_1=1 & u_2=-k_2 \\ v_1=-k_1 & v_2=1+k_1k_2\end{array}

A további lépések együtthatóit pedig a megelőző két lépés együtthatóiból az alábbi képletekkel:

ui=ui2kiui1vi=vi2kivi1\begin{aligned}u_i&=u_{i-2}-k_iu_{i-1} \\ v_i&=v_{i-2}-k_iv_{i-1}\end{aligned}

Ezek alapján az alábbi táblázat mutatja az algoritmus futását:

iri2ri1rikiuivi115828713003124397050493389007954111212439705049338900795422726811873343338900795422726811871116326767145422726811871116326767400276532111451116326767400276533558013627301383640027653355801364447517131239773558013644475170\begin{array}{c|c|c|c|c|c|c}i & r_{i-2} & r_{i-1} & r_i & k_i & u_i & v_i \\ \hline 1 & 15828713003 & 12439705049 & 3389007954 & 1 & 1 & -1 \\ \hline 2 & 12439705049 & 3389007954 & 2272681187 & 3 & -3 & 4 \\ \hline 3 & 3389007954 & 2272681187 & 1116326767 & 1 & 4 & -5 \\ \hline 4 & 2272681187 & 1116326767 & 40027653 & 2 & -11 & 14 \\ \hline 5 & 1116326767 & 40027653 & 35580136 & 27 & 301 & -383 \\ \hline 6 & 40027653 & 35580136 & 4447517 & 1 & -312 & 397 \\ \hline 7 & 35580136 & 4447517 & 0 & - & - & -\end{array}

A kitüntetett közös osztó az utolsó nemnulla maradék lett, azaz 4 447 5174\space 447\space 517. Ennek lineáris kombinációs együtthatói pedig ugyanebben a sorban találhatók:

4 447 517=(312)=u15 828 713 003+397=v12 439 705 0494\space 447\space 517 = \overbrace{(-312)}^{=u}\cdot 15\space 828\space 713\space 003 + \overbrace{397}^{=v}\cdot 12\space 439\space 705\space 049

Lineáris diofantoszi egyenlet megoldásai

Most vizsgáljuk meg, hogy a kibővített euklidészi algoritmus segítségével hogyan kapható meg egy lineáris diofantoszi egyenlet összes megoldása. Az alábbi tételben ezt a kérdést válaszoljuk meg.

21.2. Tétel:

Legyenek aa, bb és mm tetszőleges egész számok úgy, hogy aa és mm közül legalább az egyik nemnulla. Tegyük fel továbbá, hogy az alábbi lineáris diofantoszi egyenlet megoldható:

ax+my=bax+my=b

Jelöljük m(a,m)\frac{m}{(a,m)}-mel illetve a(a,m)\frac{a}{(a,m)}-mel azokat az egész számokat, amelyeket az (a,m)(a,m) kitüntetett közös osztóval megszorozva rendre az mm illetve az aa egész számot kapjuk eredményül. Ekkor igazak az alábbiak:

1.
Az egyenlet egyik megoldását magkaphatjuk a 21.1. Tétel bizonyításában ismertetett kibővített euklidészi algoritmus segítségével.
2.
Ha az x=sx=s, y=ty=t számpár egy megoldás, akkor tetszőleges kk egész szám esetén az alábbi számpár is egy megoldás:
x=s+km(a,m)y=tka(a,m)\begin{aligned}x&=s+k\cdot \frac{m}{(a,m)} \\ y&=t-k\cdot \frac{a}{(a,m)}\end{aligned}
3.
Ha az x=s1x=s_1, y=t1y=t_1 számpár valamint az x=s2x=s_2, y=t2y=t_2 számpár két tetszőleges megoldás, akkor létezik olyan kk egész szám, amelyre igaz az alábbi:
s2=s1+km(a,m)t2=t1ka(a,m)\begin{aligned}s_2&=s_1+k\cdot \frac{m}{(a,m)} \\ t_2&=t_1-k\cdot \frac{a}{(a,m)}\end{aligned}

Megjegyzés:

A tételben szereplő 2. és 3. állítást összevonva tulajdonképpen azt is mondhatjuk, hogy amennyiben az ax+my=bax+my=b lineáris diofantoszi egyenlet valamelyik x=sx=s, y=ty=t megoldását már ismerjük, akkor az alábbi képlet segítségével megkaphatjuk az összes megoldást, amennyiben a kk paraméterrel végigszaladunk az összes létező egész számon:

x=s+km(a,m)y=tka(a,m)\begin{aligned}x&=s+k\cdot \frac{m}{(a,m)} \\ y&=t-k\cdot \frac{a}{(a,m)}\end{aligned}

Bizonyítás:

Az általánosság megsértése nélkül feltehetjük, hogy az m0m\neq 0 feltétel teljesül. Ha ugyanis mégsem így lenne, akkor a tétel szövege alapján szükségképpen teljesül az a0a\neq 0 feltétel, és az alábbi gondolatmenet az aa és mm együtthatók szerepének felcserélésével ugyanígy végigjátszható. Először az m>0m\gt 0 esetet igazoljuk.

Az 1. állítás az m>0m\gt 0 esetben: Mivel az egyenlet megoldható, ezért a 20.13. Tétel alapján teljesül az (a,m)b(a,m)|b oszthatóság. Vagyis létezik olyan egész szám, amellyel az (a,m)(a,m) kitüntetett közös osztót megszorozva bb-t kapunk. Jelöljük ezt az egész számot b(a,m)\frac{b}{(a,m)}-mel, azaz:

(a,m)b(a,m)=b(a,m)\cdot \frac{b}{(a,m)} = b

A 21.1. Tétel alapján az (a,m)(a,m) kitüntetett közös osztó felírható az aa és mm egész számok lineáris kombinációjaként. Azaz léteznek olyan uu és vv egész számok, hogy teljesül az alábbi:

(a,m)=au+mv(a,m)=au+mv

Ezt összevetve az előző egyenlettel:

(au+mv=(a,m))b(a,m)=a(ub(a,m)=x)+m(vb(a,m)=y)=b(\underbrace{au+mv}_{=(a,m)})\cdot \frac{b}{(a,m)} = a\cdot (\underbrace{u\cdot \frac{b}{(a,m)}}_{=x}) + m\cdot (\underbrace{v\cdot \frac{b}{(a,m)}}_{=y}) = b

Azaz lényegében megkaptuk az ax+my=bax+my=b lineáris diofantoszi egyenlet egy megoldását:

x=ub(a,m)y=vb(a,m)\begin{aligned}x&=u\frac{b}{(a,m)} \\ y&=v\frac{b}{(a,m)}\end{aligned}

Az uu és vv együtthatók a 21.1. Tétel bizonyításában szereplő kibővített euklidészi algoritmussal hatékonyan kiszámíthatók.

A 2. állítás az m>0m\gt 0 esetben: Tegyük fel, hogy az x=sx=s, y=ty=t számpár egy megoldása az ax+my=bax+my=b egyenletnek, és helyettesítsük be ugyanebbe az egyenletbe az állításban szereplő számpárt:

a(s+km(a,m)=x)+m(tka(a,m)=y)=ba\cdot(\underbrace{s+k\cdot \frac{m}{(a,m)}}_{=x})+m\cdot (\underbrace{t-k\cdot \frac{a}{(a,m)}}_{=y})=b

A zárójeleket felbontva az alábbit kapjuk:

as+kam(a,m)+mtkma(a,m)=bas+ka\cdot \frac{m}{(a,m)}+mt-km\cdot \frac{a}{(a,m)}=b

Szorozzuk meg mindkét oldalt az (a,m)(a,m) kitüntetett közös osztóval:

as(a,m)+kam(a,m)(a,m)+mt(a,m)kma(a,m)(a,m)=b(a,m)as\cdot (a,m)+ka\cdot \frac{m}{(a,m)}\cdot (a,m)+mt\cdot (a,m)-km\cdot \frac{a}{(a,m)}\cdot (a,m)=b\cdot (a,m)

A tétel szövege alapján m(a,m)(a,m)=m\frac{m}{(a,m)}\cdot (a,m)=m és a(a,m)(a,m)=a\frac{a}{(a,m)}\cdot (a,m)=a, ezért az alábbit kapjuk:

as(a,m)+kam+mt(a,m)kma=b(a,m)as\cdot (a,m)+\cancel{kam}+mt\cdot (a,m)-\cancel{kma}=b\cdot (a,m)

Mivel m0m\neq 0, és teljesül az (a,m)m(a,m)|m oszthatóság – hiszen (a,m)(a,m) közös osztó –, ezért az oszthatóság tulajdonságairól szóló 16.2. Tétel 4. pontja miatt (a,m)0(a,m)\neq 0, és így a 15.4. Tétel alapján az egyenlet mindkét oldalát lehet egyszerűsíteni vele:

as+mt=bas+mt=b

Ez viszont teljesül, mivel az x=sx=s, y=ty=t számpárról tudjuk, hogy megoldása az ax+my=bax+my=b egyenletnek.

A 3. állítás az m>0m\gt 0 esetben: Tegyük fel, hogy az x=s1x=s_1, y=t1y=t_1 számpár, valamint az x=s2x=s_2, y=t2y=t_2 számpár is megoldása az ax+my=bax+my=b egyenletnek.

Ez a 20.13. Tétel alapján azt jelenti, hogy az [s1]m[s_1]_m és az [s2]m[s_2]_m maradékosztályok egyaránt megoldásai az axb(modm)ax\equiv b\pmod m lineáris kongruenciának, azaz tejesülnek az alábbiak:

as1b(modm)as2b(modm)\begin{aligned}as_1&\equiv b\pmod m \\ as_2&\equiv b\pmod m\end{aligned}

A 20.2. Tétel 4. pontja miatt ez a két kongruencia kivonható egymásból. A másodikat az elsőből kivonva ezt kapjuk:

a(s2s1)0(modm)a\cdot (s_2-s_1)\equiv 0\pmod m

A kongruenciák egyszerűsítéséről szóló 20.3. Tétel alapján mindkét oldalt egyszerűsíthetjük aa-val, amennyiben az mm modulust is egyszerűsítjük az (a,m)(a,m) kitüntetett közös osztóval. Ezt végrehajtva a következőt kapjuk:

s2s10(modm(a,m))s_2-s_1\equiv 0\pmod{\frac{m}{(a,m)}}

Ez a kongruencia a 20.1. Tétel 3. pontja alapján épp azt jelenti, hogy teljesül az alábbi oszthatóság:

m(a,m)s2s1\frac{m}{(a,m)}|s_2-s_1

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

km(a,m)=s2s1k\cdot \frac{m}{(a,m)}=s_2-s_1

Mindkét oldalhoz s1s_1-et adva megkapjuk a tételben szereplő képletet s2s_2-re:

s2=s1+km(a,m)s_2=s_1+k\cdot \frac{m}{(a,m)}

Mostmár csak a t2t_2-t kellene valahogy kifejezni t1t_1-ből. Azt ugye tudjuk, hogy az x=s1x=s_1, y=t1y=t_1 számpár, valamint az x=s2x=s_2, y=t2y=t_2 számpár is megoldása az ax+my=bax+my=b egyenletnek, azaz:

as1+mt1=bas2+mt2=b\begin{aligned}as_1+mt_1&=b \\ as_2+mt_2&=b\end{aligned}

A második egyenletből az elsőt kivonva az alábbit kapjuk:

a(s2s1)+m(t2t1)=0a(s_2-s_1)+m(t_2-t_1)=0

Az s2s_2 helyére a fentebb megkapott képletet behelyettesíthetjük:

a(s1+km(a,m)=s2s1)+m(t2t1)=0a(\underbrace{s_1+k\cdot \frac{m}{(a,m)}}_{=s_2}-s_1)+m(t_2-t_1)=0

Azaz:

as1+akm(a,m)as1+m(t2t1)=0\cancel{as_1}+ak\cdot \frac{m}{(a,m)}-\cancel{as_1}+m(t_2-t_1)=0

A tétel szövege alapján m(a,m)(a,m)=m\frac{m}{(a,m)}\cdot (a,m)=m, ezért mindkét oldalt az (a,m)(a,m) kitüntetett közös osztóval megszorozva ezt kapjuk:

akm+m(a,m)(t2t1)=0akm+m\cdot (a,m)\cdot (t_2-t_1)=0

Mivel m0m\neq 0, ezért a 15.4. Tétel alapján az egyenlet mindkét oldalát lehet egyszerűsíteni vele:

ak+(a,m)(t2t1)=0ak+(a,m)\cdot (t_2-t_1)=0

Mindkét oldalból akak-t levonva ezt kapjuk:

(a,m)(t2t1)=ak(a,m)\cdot (t_2-t_1)=-ak

A tétel szövege alapján a(a,m)(a,m)=a\frac{a}{(a,m)}\cdot (a,m)=a, így:

(a,m)(t2t1)=ka(a,m)(a,m)=a(a,m)\cdot (t_2-t_1)=-k\cdot \underbrace{\frac{a}{(a,m)}\cdot (a,m)}_{=a}

Mivel m0m\neq 0, és teljesül az (a,m)m(a,m)|m oszthatóság – hiszen (a,m)(a,m) közös osztó –, ezért az oszthatóság tulajdonságairól szóló 16.2. Tétel 4. pontja miatt (a,m)0(a,m)\neq 0, és így a 15.4. Tétel alapján az egyenlet mindkét oldalát lehet egyszerűsíteni vele:

t2t1=ka(a,m)t_2-t_1=-k\cdot \frac{a}{(a,m)}

Mindkét oldalhoz t1t_1-et adva megkapjuk a tételben szereplő képletet t2t_2-re:

t2=t1ka(a,m)t_2=t_1-k\cdot \frac{a}{(a,m)}

Ezzel a tétel mindhárom állítását igazoltuk az m>0m\gt 0 esetben. Erre viszonylag könnyen visszavezethetjük az m<0m\lt 0 esetet, amennyiben kihasználjuk azt a tényt, hogy a 15.12. Definíció utáni megjegyzés alapján ekkor m>0-m\gt 0. Ennek technikai részleteit az alábbiakban ismertetjük:

Az m<0m\lt 0 eset

Az 1. állítás az m<0m\lt 0 esetben: Mivel ekkor tehát m>0-m\gt 0, ezért az ax+(m)y=bax+(-m)y=b egyenlet egy megoldását az 1. állítás eddigi bizonyítása alapján kiszámíthatjuk a kibővített euklidészi algoritmus segítségével. Tegyük fel, hogy eredményként az x=sx=s, y=ty=t számpárt kapjuk, azaz teljesül az alábbi:

as+(m)t=bas+(-m)t=b

A 15.1. Tétel 3. pontja alapján az egyenlet baloldala átírható a következőképpen:

as+m(t)=bas+m(-t)=b

Azaz lényegében megkaptuk az eredeti ax+my=bax+my=b egyenlet egy megoldását:

x=sy=t\begin{aligned} x&=s \\ y&=-t \end{aligned}

A 2. állítás az m<0m\lt 0 esetben: Tegyük fel, hogy az x=sx=s, y=ty=t számpár megoldása az ax+my=bax+my=b egyenletnek. Ekkor az előbbivel megegyező gondolatmenet alapján az x=sx=s, y=ty=-t számpár viszont megoldása az ax+(m)y=bax+(-m)y=b egyenletnek.

Mivel m>0-m\gt 0, ezért a 2. állítás eddigi bizonyítása alapján tetszőleges kk egész szám esetén az alábbi számpár is megoldása az ax+(m)y=bax+(-m)y=b egyenletnek:

x=s+km(a,m)=skm(a,m)y=tka(a,m)\begin{aligned} x&=s+k\cdot \frac{-m}{(a,-m)}=s-k\cdot \frac{m}{(a,-m)} \\ y&=-t-k\cdot \frac{a}{(a,-m)} \end{aligned}

A 16.8. Tétel 1. pontja alapján mm és az ellentettje egymás asszociáltjai – azaz pontosan ugyanazok az osztóik és a többszöröseik –, emiatt teljesül az (a,m)=(a,m)(a,-m)=(a,m) egyenlőség, vagyis az ax+(m)y=bax+(-m)y=b egyenlet iménti megoldása átírható így:

x=skm(a,m)y=tka(a,m)\begin{aligned}x&=s-k\cdot \frac{m}{(a,m)} \\ y&=-t-k\cdot \frac{a}{(a,m)}\end{aligned}

Ekkor azonban az 1. állítás m<0m\lt 0 esetre adott bizonyítása alapján az alábbi számpár megoldása az eredeti ax+my=bax+my=b egyenletnek:

x=skm(a,m)y=(tka(a,m))=t+ka(a,m)\begin{aligned} x&=s-k\cdot \frac{m}{(a,m)} \\ y&=-(-t-k\cdot \frac{a}{(a,m)})=t+k\cdot \frac{a}{(a,m)} \end{aligned}

Ha tehát kiválasztunk egy tetszőleges ll egész számot, akkor az iménti gondolatmenetet a k=lk=-l helyettesítéssel végigjátszva az eredeti ax+my=bax+my=b egyenlet egy x=sx=s, y=ty=t megoldásából valóban egy újabb megoldást kapunk a tételben szereplő képlettel:

x=s+lm(a,m)y=tla(a,m)\begin{aligned} x&=s+l\cdot \frac{m}{(a,m)} \\ y&=t-l\cdot \frac{a}{(a,m)} \end{aligned}

Végül a 3. állítás az m<0m\lt 0 esetben: Tegyük fel, hogy az x=s1x=s_1, y=t1y=t_1 számpár és az x=s2x=s_2, y=t2y=t_2 számpár két tetszőleges megoldása az ax+my=bax+my=b egyenletnek. Ekkor az 1. állítás m<0m\lt 0 esetre adott bizonyítása alapján az x=s1x=s_1, y=t1y=-t_1 és az x=s2x=s_2, y=t2y=-t_2 számpárok megoldásai az ax+(m)y=bax+(-m)y=b egyenletnek.

Mivel m>0-m\gt 0, ezért a 3. állítás eddigi bizonyítása alapján létezik olyan kk egész szám, amelyre teljesülnek az alábbiak:

s2=s1+km(a,m)=s1km(a,m)t2=t1ka(a,m)\begin{aligned}s_2&=s_1+k\cdot \frac{-m}{(a,-m)}=s_1-k\cdot \frac{m}{(a,-m)} \\ -t_2&=-t_1-k\cdot \frac{a}{(a,-m)}\end{aligned}

A második egyenlet mindkét oldalának ellentettjét véve, továbbá ismét alkalmazva a 16.8. Tétel 1. pontja alapján fennálló (a,m)=(a,m)(a,-m)=(a,m) egyenlőséget ezt kapjuk:

s2=s1km(a,m)t2=t1+ka(a,m)\begin{aligned} s_2&=s_1-k\cdot \frac{m}{(a,m)} \\ t_2&=t_1+k\cdot \frac{a}{(a,m)} \end{aligned}

Az l=kl=-k választással élve tehát valóban találtunk olyan egész számot, amely esetén az eredeti ax+my=bax+my=b egyenlet bármely két x=s1x=s_1, y=t1y=t_1 és x=s2x=s_2, y=t2y=t_2 megoldásai között fennáll a tételben szereplő alábbi összefüggés:

s2=s1+lm(a,m)t2=t1la(a,m)\begin{aligned} s_2&=s_1+l\cdot \frac{m}{(a,m)} \\ t_2&=t_1-l\cdot \frac{a}{(a,m)} \end{aligned}

Most térjünk vissza a fejezet elején felvetett kompániai példánkhoz, és az iménti tétel alapján határozzuk meg, hogy hányféleképpen tudja Alice kifizetni a Bob-nak szánt 1000010000 aranytalléros ajándékot, amennyiben csak 7979 és 4747 aranytallér névértékű bankjegyek állnak rendelkezésére. Keressük tehát a nemnegatív egész megoldásait az alábbi lineáris diofantoszi egyenletnek:

79=ax+47=my=10000=b\underbrace{79}_{=a}\cdot x + \underbrace{47}_{=m}\cdot y=\underbrace{10000}_{=b}

Azt már az euklidészi algoritmus segítségével kiszámítottuk, hogy a (79,47)(79,47) kitüntetett közös osztó 11, aminek nyilván többszöröse az egyenlet jobboldalán szereplő 1000010000. Így tehát ennek az egyenletnek létezik egész megoldása. Kérdés, hogy vajon nemnegatív egész megoldás is létezik-e, és ha igen, akkor mennyi? Ehhez először meg kell határoznunk az összes megoldást.

Az imént bizonyított a 21.2. Tétel 1. pontja alapján az egyik megoldást a kibővített euklidészi algoritmus segítségével határozhatjuk meg, amelyből aztán a 2. és 3. állítás értelmében könnyedén előállíthatjuk az összes megoldást. Ezekből már látni fogjuk, hogy van-e közöttük olyan, amely esetén xx is és yy is nemnegatív.

Futtassuk hát le a két együtthatón a kibővített euklidészi algoritmust, és állítsuk elő a kitüntetett közös osztójukat a lineáris kombinációjukként:

iri2ri1rikiuivi1794732111247321511233215223541521722375210\begin{array}{c|c|c|c|c|c|c}i & r_{i-2} & r_{i-1} & r_i & k_i & u_i & v_i \\ \hline 1 & 79 & 47 & 32 & 1 & 1 & -1 \\ \hline 2 & 47 & 32 & 15 & 1 & -1 & 2 \\ \hline 3 & 32 & 15 & 2 & 2 & 3 & -5 \\ \hline 4 & 15 & 2 & 1 & 7 & -22 & 37 \\ \hline 5 & 2 & 1 & 0 & - & - & -\end{array}

A megkapott lineáris kombináció tehát az alábbi:

(79,47)=(22)=u79+37=v47=1(79,47) = \underbrace{(-22)}_{=u}\cdot 79 + \underbrace{37}_{=v}\cdot 47=1

Minthogy fennáll az oszthatóság a (79,47)(79,47) kitüntetett közös osztó és az egyenlet jobboldalán szereplő 1000010000 között, ezért létezik az ő hányadosuk, amelyet jelöljünk most 10000(79,47)\frac{10000}{(79,47)}-tel. Ez tehát egy egész szám, amelyre teljesül az alábbi:

(79,47)10000(79,47)=10000(79,47)\cdot \frac{10000}{(79,47)}=10000

A hányadost egy egész osztással kiszámítva – ami jelen esetben nyilván 1000010000 lesz, mivel a "nevezőben" szereplő kitüntetett közös osztó 11 –, valamint felhasználva az imént előállított lineáris kombinációt az alábbit kapjuk:

(79(22)+4737=(79,47))10000=10000(79,47)=10000(\underbrace{79\cdot (-22)+47\cdot 37}_{=(79,47)})\cdot \underbrace{10000}_{=\frac{10000}{(79,47)}}=10000

A baloldalon lévő zárójelet felbontva tulajdonképpen megkaptuk a 79x+47y=1000079x+47y=10000 egyenlet egyik megoldását:

79=a(220000)=x+47=m370000=y=10000=b\underbrace{79}_{=a}\cdot \underbrace{(-220000)}_{=x} + \underbrace{47}_{=m}\cdot \underbrace{370000}_{=y}=\underbrace{10000}_{=b}

Ebben a megoldásban az xx sajnos negatív, így ez nem egy jó megoldás számunkra. A 21.2. Tétel 2. és 3. állításai alapján azonban az alábbi képlet segítségével megkapjuk az összes megoldást, amennyiben a kk paraméterrel végigszaladunk az összes létező egész számon:

x=220000+47ky=37000079k\begin{aligned}x&=-220000+47k \\ y&=370000-79k\end{aligned}

Mi alapvetően lusták vagyunk, így nem szeretnénk a kk paraméter végtelen sok lehetséges értékét végigvizsgálni azért, hogy megtudjuk, mikor kapunk nemnegatív számot xx-re és yy-ra egyaránt.

Ehelyett az alábbi egyenlőtlenségeket írjuk fel:

0220000+47k=x037000079k=y\begin{aligned}0\leq \overbrace{-220000+47k}^{=x} \\ 0\leq \underbrace{370000-79k}_{=y}\end{aligned}

Mivel a 15.11. Definíció szerinti 1. rendezési axióma alapján az összeadás kompatibilis a rendezési relációval, ezért e két egyenlőtlenség átalakítható:

22000047k79k370000\begin{aligned} 220000\leq 47k \\ 79k\leq 370000 \end{aligned}

A 22000047\frac{220000}{47} és a 37000079\frac{370000}{79} egész osztásokat elvégezve azt kapjuk, hogy mindössze a k=4681k=4681, k=4682k=4682 és a k=4683k=4683 esetekben lesz a megoldás nemnegatív. Alice tehát háromféleképpen tudja kifizetni a 1000010000 aranytallért a Bobnak szánt ajándékra, amennyiben csak 7979 és 4747 aranytallér névértékű bankjegyek vannak nála:

10000=779+20147==5479+12247==10179+4347\begin{aligned}10000&=7\cdot 79+201\cdot 47=\\&=54\cdot 79+122\cdot 47=\\&=101\cdot 79+43\cdot 47\end{aligned}

Félretéve a szöveges feladatot, most próbáljuk meg a 79x+47y=1000079x+47y=10000 lineáris diofantoszi egyenlet összes megoldását – amelyekbe tehát mostmár a negatívakat is beleértjük – egy kétdimenziós koordináta-rendszerben ábrázolni, ahol a két tengely a megoldásokhoz tartozó xx és yy értékeket jelenti.

A megoldásokat szolgáltató képletből látható, hogy ha egy adott megoldásból kiindulva a kk értékét 11-gyel megnöveljük, akkor az így kapott új megoldáshoz tartozó xx értéke 4747-tel nő, míg az yy értéke 7979-cel csökken. Így tehát a megoldások mindannyian egy ferdén lefelé tartó egyenes mentén fognak elhelyezkedni – innen ered a "lineáris" elnevezés. A 21.1. ábrán a kk paraméternek az adott megoldásokhoz tartozó értékeit is feltüntettük.

Lineáris diofantoszi egyenlet megoldásai
21.1. ábra: Lineáris diofantoszi egyenlet megoldásai

Ebből szépen látható, hogy valóban csak a k=4681k=4681, k=4682k=4682 és a k=4683k=4683 értékekhez tartozó megoldások esnek a jobb-felső síknegyedbe – amikoris mindkét koordináta pozitív.

Az ebben a szakaszban ismertetett módszerrel tehát bármilyen lineáris diofantoszi egyenletet, és így a 20.13. Tétel alapján bármilyen lineáris kongruenciát meg tudunk oldani. Ezzel az RSA rejtjelező eljárás egyik fontos összetevője már a kezünkben van. Most ismerkedjünk meg egy másik fontos összetevővel.

Az Euler-féle φ\varphi-függvény kiszámítása

Ebben a szakaszban megtanuljuk, hogy hogyan lehet kiszámítani a 20.7. Definícióban ismertetett Euler-féle φ\varphi-függvény értékét bármilyen tetszőleges pozitív egész számra. A definíció szerint egy mm pozitív egész szám esetén ez a függvény a modulo mm redukált maradékosztályok számát adja meg. A 20.6. Definíció alapján ezek épp a 20.5. Tételben definiált Z/mZ\Z/m\Z maradékosztálygyűrű azon elemei, amelyek invertálhatók a maradékosztályok közötti szorzásra nézve.

A 20.18. Következményben megmutattuk, hogy ez a szám éppenséggel megegyezik a 00 és mm közötti, mm-hez relatív prímek számával, amely tehát az Euler-féle φ\varphi-függvénynek egy alternatív definícióját adja. Például a 00 és 1818 közötti, 1818-hoz relatív prímek halmaza az alábbi számhalmaz:

{1;5;7;11;13;17}\{1; 5; 7; 11; 13; 17\}

Ezek száma 66, így tehát φ(18)=6\varphi(18)=6. Az alábbi tételben a φ\varphi-függvény egy fontos tulajdonságát igazoljuk.

21.3. Tétel:

Legyen aa és bb két tetszőleges, egymáshoz relatív prím pozitív egész szám. Ekkor teljesül az alábbi:

φ(ab)=φ(a)φ(b)\varphi(ab)=\varphi(a) \cdot \varphi(b)

Bizonyítás:

A φ(ab)\varphi(ab) azon abab-nél nemnagyobb pozitív egészeknek a számával egyezik meg, amelyek abab-hez relatív prímek. A 20.12. Következmény alapján bármilyen tetszőleges egész szám akkor és csak akkor relatív prím abab-hez, ha relatív prím aa-hoz is és bb-hez is.

A φ(ab)\varphi(ab) érték kiszámításához tehát azokat az abab-nél nemnagyobb pozitív egészeket kell megszámlálnunk, amelyek relatív prímek aa-hoz is és bb-hez is. Ezt a következő lépésekben fogjuk megtenni:

  1. Összegyűjtjük az összes aa-hoz relatív prím egész számot.
  2. Ezek közül kiválasztjuk azokat, amelyek 00 és abab közé esnek.
  3. Végül a maradékból kiválogatjuk azokat, amelyek bb-hez is relatív prímek.
1. lépés

A 20.15. Tétel alapján az aa-hoz relatív prímek pontosan a modulo aa redukált maradékosztályok elemei lesznek. Ilyenből a 20.7. Definíció alapján épp φ(a)\varphi(a) darab van. E φ(a)\varphi(a) darab modulo aa redukált maradékosztály mindegyikéből válasszuk ki a legkisebb pozitív elemet. Az így kapott r1r_1, r2r_2, ..., rφ(a)r_{\varphi(a)} számok tehát reprezentálják az összes modulo aa redukált maradékosztályt.

A 20.4. Tétel alapján e maradékosztályok elemei – és csak azok – kifejezhetők az r1r_1, r2r_2, ..., rφ(a)r_{\varphi(a)} reprezentánselemek segítségével az alábbi táblázat szerint, ahol minden oszlop egy-egy redukált maradékosztálynak felel meg:

[r1]a[r2]a[rφ(a)]ar12ar22arφ(a)2ar11ar21arφ(a)1ar1+0ar2+0arφ(a)+0ar1+1ar2+1arφ(a)+1ar1+2ar2+2arφ(a)+2ar1+3ar2+3arφ(a)+3a\begin{array}{c|c|c|c}[r_1]_a & [r_2]_a & \cdots & [r_{\varphi(a)}]_a \\ \hline \vdots & \vdots & & \vdots \\ r_1-2a & r_2-2a & \cdots & r_{\varphi(a)}-2a \\ r_1-1a & r_2-1a & \cdots & r_{\varphi(a)}-1a \\ r_1+0a & r_2+0a & \cdots & r_{\varphi(a)}+0a \\ r_1+1a & r_2+1a & \cdots & r_{\varphi(a)}+1a \\ r_1+2a & r_2+2a & \cdots & r_{\varphi(a)}+2a \\ r_1+3a & r_2+3a & \cdots & r_{\varphi(a)}+3a \\ \vdots & \vdots & & \vdots \end{array}
2. lépés

Most minden olyan számot kidobálunk ebből a táblázatból, amely nem 00 és abab közé esik. Mivel az r1r_1, r2r_2, ..., rφ(a)r_{\varphi(a)} reprezentánselemeket úgy választottuk ki, hogy minden oszlopban ők legyenek a legkisebb pozitív egészek, ezért a táblázat ezek fölötti sorait ki is hajíthatjuk, hiszen ott már csupa negatív szám szerepel. Kérdés, hogy a táblázatban lefelé meddig mehetünk el a kk paraméterrel úgy, hogy bármely ii-edik oszlopban az ri+ka<abr_i+ka\lt ab egyenlőtlenség még éppen teljesüljön? A határvonal épp a k=b1k=b-1 érték lesz.

Ezt ugyanis behelyettesítve az egyenlőtlenségbe, valamint kihasználva a 15.11. Definíció szerinti 1. rendezési axiómát, az alábbi adódik:

ri+(b1)=ka<abri+baa<abri<a\begin{aligned} r_i+\overbrace{(b-1)}^{=k}a&\lt ab \\ r_i+\cancel{ba}-a&\lt \cancel{ab} \\ r_i\lt a \end{aligned}

Ez viszont nyilvánvalóan teljesül, hiszen rir_i-t úgy választottuk ki, hogy ő az egyik maradékosztály legkisebb pozitív eleme legyen. Minthogy a 00, 11, 22, ..., a1a-1 számok az összes létező modulo aa maradékosztályt reprezentálják, ezért rir_i is szükségképpen közöttük van.

Másrészt viszont a k=bk=b érték már nem megfelelő, ha ugyanis ezt helyettesítjük be az egyenlőtlenségbe, akkor az alábbit kapjuk:

ri+b=ka<abri<0\begin{aligned}r_i+\overbrace{b}^{=k}\cdot a&\lt ab \\ r_i&\lt 0\end{aligned}

Ez az egyenlőtlenség már nem teljesül, hiszen az rir_i-t pozitívnak választottuk. Az 1. lépésben keletkezett táblázatból tehát az alábbi rész maradt meg, a többit kidobáltuk:

[r1]a[r2]a[rφ(a)]ar1+0ar2+0arφ(a)+0ar1+1ar2+1arφ(a)+1ar1+2ar2+2arφ(a)+2ar1+(b1)ar2+(b1)arφ(a)+(b1)a\begin{array}{c|c|c|c}[r_1]_a & [r_2]_a & \cdots & [r_{\varphi(a)}]_a \\ \hline r_1+0a & r_2+0a & \cdots & r_{\varphi(a)}+0a \\ r_1+1a & r_2+1a & \cdots & r_{\varphi(a)}+1a \\ r_1+2a & r_2+2a & \cdots & r_{\varphi(a)}+2a \\ \vdots & \vdots & & \vdots \\ r_1+(b-1)a & r_2+(b-1)a & \cdots & r_{\varphi(a)}+(b-1)a \end{array}

Ez a táblázat tehát tartalmazza az összes olyan 00 és abab közé eső egész számot, amely relatív prím aa-hoz.

3. lépés

Ez tehát egy φ(a)\varphi(a) oszlopból álló táblázat, és minden oszlopban bb darab szám van. Tekintsük például az ii-edik oszlopot. Ennek elemei a következők:

ri+0ari+1ari+2ari+(b1)a\begin{aligned} r_i&+0a \\ r_i&+1a \\ r_i&+2a \\ &\vdots \\ r_i&+(b-1)a \end{aligned}

Vegyük észre, hogy ezt a számhalmazt úgy kaptuk, hogy a {0;1;2;;b1}\{0;1;2;\ldots;b-1\} számhalmaz minden elemét megszoroztuk aa-val – ami ugye a tétel szövege alapján relatív prím bb-hez –, majd az így kapott számokhoz hozzáadtunk rir_i-t. Mivel azonban a {0;1;2;;b1}\{0;1;2;\ldots;b-1\} számhalmaz nem más, mint egy modulo bb teljes maradékrendszer, ezért a 20.19. Tétel alapján az újonnan kapott számhalmaz is az.

Mivel a táblázat minden oszlopa ugyanígy képződött, ezért a táblázat minden oszlopában tulajdonképpen egy-egy modulo bb teljes maradékrendszer áll. Minden oszlopban képviselve van tehát az összes modulo bb maradékosztály. Mivel ezek közül a redukált maradékosztályok száma az Euler-féle φ\varphi-függvény a 20.7. Definíciója alapján φ(b)\varphi(b), ezért ez egyben azt is jelenti a 20.18. Következmény alapján, hogy minden oszlopban φ(b)\varphi(b) darab olyan elem van, amely relatív prím bb-hez. Minthogy a táblázatban az oszlopok száma φ(a)\varphi(a), így a táblázatnak összesen φ(a)φ(b)\varphi(a)\cdot \varphi(b) eleme relatív prím bb-hez is.

Összefoglalva: Összesen tehát φ(a)φ(b)\varphi(a)\cdot \varphi(b) darab olyan 00 és abab közötti egész szám létezik, amely relatív prím aa-hoz is és bb-hez is. Ezek száma a bizonyítás elején közölt észrevétel alapján megegyezik azon 00 és abab közötti egészek számával, amelyek relatív prímek abab-hez. Ezek száma viszont a 20.18. Következmény alapján φ(ab)\varphi(ab), így tehát valóban teljesül a tétel állítása:

φ(ab)=φ(a)φ(b)\varphi(ab)=\varphi(a)\cdot \varphi(b)

Például próbáljuk ez alapján meghatározni a φ(77)\varphi(77) értékét. Ehhez a 7777 prímtényezős felbontását, valamint az iménti tételt használva az alábbi adódik:

φ(77)=φ(711)=φ(7)φ(11)\varphi(77)=\varphi(7\cdot 11)=\varphi(7)\cdot \varphi(11)

Ha feltételezzük, hogy a φ(7)=6\varphi(7)=6 és a φ(11)=10\varphi(11)=10 értékeket valahogyan kiszámítottuk, akkor a φ(77)=60\varphi(77)=60 végeredmény már könnyen adódik. Az alábbiakban ezt a "valahogyant" vizsgáljuk meg. Ehhez azonban szükségünk lesz az alábbi segédtételre.

21.4. Lemma:

Legyen aa tetszőleges, k>0k\gt 0 pedig valamilyen pozitív egész szám. Ekkor tetszőleges pp prímszám esetén az aa egész szám akkor és csak akkor relatív prím a pkp^k hatványhoz, ha nem osztható pp-vel, azaz

pap\nmid a

Bizonyítás:

Tegyük fel ugyanis, hogy teljesül a pap|a oszthatóság. Ekkor – mivel a ppkp|p^k oszthatóság nyilvánvalóan teljesül – pp egy közös osztója lesz aa-nak és pkp^k-nak. Mivel a tétel szövege szerint pp prím – és így a 16.13. Definíció szerint nem egység –, ezért aa és pkp^k valóban nem lehetnek relatív prímek egymáshoz. Másként fogalmazva ha aa és pkp^k relatív prímek egymáshoz, akkor valóban nem teljesülhet a pap|a oszthatóság.

Visszafelé: Tegyük most fel, hogy aa nem osztható pp-vel, azaz pap\nmid a. Azt kell igazolnunk, hogy ekkor aa és pkp^k bármely közös osztója egység, mivel ez a 17.10. Definíció alapján épp azt jelenti, hogy ők relatív prímek egymáshoz. Legyen tehát dd egy tetszőleges közös osztó, azaz dad|a és dpkd|p^k.

Vegyük észre, hogy ha valahogy igazolni tudnánk, hogy dd és pp relatív prímek, akkor dpkd|p^k-ból az Euklidészi lemma ismételt alkalmazásával következnének az alábbi oszthatóságok:

dppk1=pk    dpk1dppk2=pk1    dpk2dppk3=pk2    dpk3dpp=p2    dpdp1=p    d1\begin{aligned} d|\overbrace{p\cdot p^{k-1}}^{=p^k} &\implies d|p^{k-1} \\ d|\overbrace{p\cdot p^{k-2}}^{=p^{k-1}} &\implies d|p^{k-2} \\ d|\overbrace{p\cdot p^{k-3}}^{=p^{k-2}} &\implies d|p^{k-3} \\ &\vdots \\ d|\overbrace{p\cdot p}^{=p^2} &\implies d|p \\ d|\overbrace{p\cdot 1}^{=p} &\implies d|1 \end{aligned}

Vagyis végsősoron dd és pp relatív prímségéből megkapnánk, hogy a tetszőlegesen választott dd közös osztó valóban egység. A dd és pp relatív prímségének igazolását alább részletezzük.

Miért relatív prím dd és pp?

Mivel nyilván dad|a – hiszen dd az aa és pkp^k közös osztója –, ezért pdp\nmid d, máskülönben pdp|d-ből dad|a mellett a 16.2. Tétel 5. pontja miatt pap|a következne, amiről feltettük, hogy nem igaz. Jegyezzük meg tehát, hogy pdp\nmid d, mert hamarosan szükségünk lesz erre.

Most vizsgáljuk meg dd és pp valamely tetszőleges cc közös osztóját, amiről tehát meg kell mutatnunk, hogy szükségképpen egység. Mivel cc közös osztó, ezért teljesülnek a cdc|d és a cpc|p oszthatóságok. A cpc|p oszthatóság a 16.1. Definíció alapján azt jelenti, hogy létezik olyan qq egész szám, amelyre teljesül az alábbi egyenlet:

p=cqp=cq

Ám ekkor a 16.2. Tétel 1. pontja miatt nyilván teljesül a pcqp|cq oszthatóság, és így pp prímtulajdonsága miatt teljesül az alábbi oszthatóságok közül legalább az egyik:

pcpq\begin{aligned} p&|c \\ p&|q \end{aligned}

Igenám, de pcp|c nem teljesülhet, mivel ekkor cdc|d mellett a 16.2. Tétel 5. pontja miatt pdp|d következne, amiről már igazoltuk, hogy lehetetlen. Így tehát szükségképpen teljesül pqp|q, ami a 16.1. Definíció alapján azt jelenti, hogy létezik olyan rr egész szám, amelyre teljesül az alábbi egyenlet:

q=prq=pr

A qq-ra kapott kifejezést behelyettesítve az első egyenletbe ezt kapjuk:

p=cpr=qp=c\underbrace{pr}_{=q}

Minthogy pp prím, ezért nem 00, és így a 15.4. Tétel alapján lehet egyszerűsíteni vele:

1=cr1=cr

Ez a 16.1. Definíció alapján azt jelenti, hogy c1c|1, tehát cc a 16.5. Tétel szerint valóban egység.

Ennek segítségével mostmár tetszőleges prímszámra – vagy még általánosabban tetszőleges prímhatványra – könnyedén ki tudjuk számítani az Euler-féle φ\varphi-függvény értékét.

21.5. Tétel:

Legyen p>0p\gt 0 valamilyen pozitív prímszám, k>1k\gt 1 pedig tetszőleges, 11-nél nagyobb pozitív egész szám. Ekkor teljesül az alábbi:

φ(pk)=pkpk1\varphi(p^k)=p^k-p^{k-1}

Speciálisan prímszámok esetén:

φ(p)=p1\varphi(p)=p-1

Bizonyítás:

A φ(pk)\varphi(p^k) a 20.18. Következmény alapján a 00, 11, 22, ..., pk1p^k-1 közül a pkp^k-hoz relatív prímek számát adja meg. Nincs más dolgunk tehát, mint ezeket megszámlálni. A 21.4. Lemma szerint egy tetszőleges aa egész szám akkor és csak akkor relatív prím pkp^k-hoz, ha nem osztható pp-vel.

Ahhoz tehát, hogy megkapjuk φ(pk)\varphi(p^k) értékét, meg kell számolnunk, hogy összesen hány pp-vel osztható egész szám van az első pkp^k darab pozitív egész szám között. A 21.4. Lemma alapján ugyanis épp az ezeken kívüli számok lesznek relatív prímek pkp^k-hoz. A pp-vel osztható számok ebben a tartományban az alábbiak lesznek:

1p2p3ppk1p\begin{aligned}1&\cdot p \\ 2&\cdot p \\ 3&\cdot p \\ &\vdots \\ p^{k-1}&\cdot p\end{aligned}

Ezek száma tehát összesen pk1p^{k-1}. Ezt levonva pkp^k-ból valóban φ(pk)\varphi(p^k) értékét kapjuk, ahogyan a tétel állítja:

φ(pk)=pkpk1\varphi(p^k)=p^k-p^{k-1}

Végül a speciális eset: A φ(p)\varphi(p) a 20.18. Következmény alapján a 00, 11, 22, ..., p1p-1 számok közül a pp-hez relatív prímek számát adja meg. Ezt ugyanúgy a 21.4. Lemma alapján tudjuk megszámlálni: megszámláljuk, hogy hány pp-vel osztható van ezek között, majd ezt levonjuk a darabszámukból, ami ugye pp.

A 00 biztosan osztható pp-vel a 16.2. Tétel 3. pontja miatt. A felsorolt további számok közül viszont egyik sem osztható pp-vel. Tegyük fel ugyanis indirekt, hogy nem ez a helyzet, vagyis létezik olyan rr közöttük, hogy prp|r. Ebből a 17.2. Lemma alapján prp\leq r következne, ami ellentmondás.

Mivel tehát a 00, 11, 22, ..., p1p-1 számok közül csak a 00 volt osztható pp-vel, így a 21.4. Lemma alapján valóban a maradék p1p-1 darab szám lesz relatív prím pp-hez, azaz:

φ(p)=p1\varphi(p)=p-1

Ennek és a 21.3. Tételnek a segítségével mostmár bármilyen m>0m\gt 0 pozitív egész szám esetén könnyedén ki tudjuk számítani a φ(m)\varphi(m) értéket. Ehhez "mindössze" az mm egész szám prímtényezős felbontására van szükségünk.

Tegyük fel például, hogy szeretnénk kiszámítani a φ(93 372 871)\varphi(93\ 372\ 871) értéket a 93 372 87193\ 372\ 871 prímtényezős felbontásának ismeretében, amely a következő:

93 372 871=53871733393\ 372\ 871=5387\cdot 17333

Ehhez alkalmazhatjuk a 21.3. és a 21.5. Tételt:

φ(93 372 871)=φ(5387)φ(17333)==538617332=93 350 152\begin{aligned}\varphi(93\ 372\ 871)&=\varphi(5387)\cdot \varphi(17333)=\\&=5386\cdot 17332=93\ 350\ 152\end{aligned}

Ha tehát ismerjük a bemeneti mm egész szám prímtényezős felbontását, akkor könnyedén ki tudjuk számítani a φ(m)\varphi(m) értéket. Ami viszont kriptográfiai szempontból hasonlóan fontos: Ha nem ismerjük mm prímtényezős felbontását, akkor nem ismeretes hatékony algoritmus φ(m)\varphi(m) kiszámításához. Ez lényeges szerepet játszik az RSA rejtjelező eljárás esetén. Mielőtt azonban ezt ismertetnénk, szükségünk van egy harmadik összetevőre is.

Az ismételt négyzetreemelések módszere

A 18. fejezetben többek között a Diffie-Hellman kulcscsere protokoll kapcsán merült fel – ebben a fejezetben pedig az RSA eljárás kapcsán fog felmerülni – az igény arra, hogy hatékonyan tudjunk hatványozni az úgynevezett "óraaritmetikában". Egy ott szereplő példában annak meghatározása volt a feladat, hogy a 23282^{328} hatvány mennyi maradékot ad 1111-gyel osztva. Megmutattuk, hogy ez tulajdonképpen a 18.3. Definíció szerinti Z11Z_{11} gyűrűben elvégzett hatványozásnak felel meg, méghozzá a mod11\bmod_{11} maradékképző függvény művelettartó tulajdonságai miatt.

Eszerint tehát ahelyett, hogy először a Z\Z gyűrűben számítanánk ki a 23282^{328} hatványt, és vennénk ennek a bődületesen nagy számnak a 1111-gyel való osztási maradékát, a Z11Z_{11} gyűrűben végezzük el az alábbi 328328 tényezős moduláris szorzást. Ezt képlettel kifejezve:

mod11(222328 darab)=mod11(2)mod11(2)mod11(2)328 darab\bmod_{11}(\underbrace{2\cdot 2\cdot \ldots \cdot 2}_{\text{328 darab}})=\underbrace{\bmod_{11}(2)\odot \bmod_{11}(2)\odot \ldots \odot \bmod_{11}(2)}_{\text{328 darab}}

Ez azért szerencsés, mert így számolgatás közben nem fogunk olyan óriási részeredményeket kapni, amelyek túllépik a számítógép számábrázolási határait. A gyakorlatban azonban a kitevő nagyságrendje a többszázjegyű számok körében mozog, így ez a módszer beláthatatlanul sok moduláris szorzást igényel. Most egy olyan módszert fogunk mutatni, amelynek a segítségével még ezek az óriási kitevős moduláris hatványok is pillanatok alatt kiszámíthatók. Ez az ismételt négyzetre emelések módszere néven ismeretes, és a moduláris hatványozás 18.8. Tétel szerinti azonosságait használja ki igen trükkös módon.

Maradjunk továbbra is a mod11(2328)\bmod_{11}(2^{328}) moduláris hatvány kiszámításának példájánál. Első lépésként a 328328-as kitevőt felírjuk kettes számrendszerben:

328101001000328 \to 101001000‬

A különböző számrendszerekről részletesen a 3. fejezetben volt szó. Az ott leírtaknak megfelelően ez tulajdonképpen a 328328 felírása a 22 bizonyos hatványainak összegeként. Ebben az összegben a 22-nek épp azok a hatványai szerepelnek, amelyeknek megfelelő helyiértéken 11-es áll a fenti bináris számábrázolásban. Azaz:

328=28+26+23328=2^8+2^6+2^3‬

Ennek az összegnek a tagjaiból a 14.12. Definíció 5. pontja szerinti disztributivitási szabályt alkalmazva kiemelhetjük a 232^3 hatványt:

328=(25+23+1)23328=(2^5+2^3+1)‬\cdot 2^3

Ehhez hasonlóan a zárójelben maradt összeg első két tagjából ismételten kiemelhető a 232^3 hatvány:

328=((22+1)23+1)23328=((2^2+1)\cdot 2^3+1)‬\cdot 2^3

Így tehát az eredeti mod11(2328)\bmod_{11}(2^{328}) moduláris hatvány felírható a következőképpen:

mod11(2328)=mod11(2((22+1)222+1)222)\bmod_{11}(2^{328})=\bmod_{11}(2^{((2\cdot 2+1)\cdot 2\cdot 2\cdot 2+1)‬\cdot 2\cdot 2\cdot 2})

A hatványozás azonosságairól szóló 18.8. Tétel 2. és 3. pontjai alapján ez így írható fel:

mod11(2328)=mod11((((((((22)22)2)2)22)2)2)2)\bmod_{11}(2^{328})=\bmod_{11}((((((((2^2)^2\cdot 2)^2)^2)^2\cdot 2)^2)^2)^2)

Azaz egy olyan műveletsorozatot kell elvégeznünk, amelynek minden lépésében az előző lépésben kapott részeredményt vagy négyzetre emeljük, vagy pedig megszorozzuk a 22 alappal. Ebben a konkrét példában egy dupla négyzetreemelés után először szorozni kell, ezután következik egy tripla négyzetreemelés, aztán ismét egy szorzás, végül megint egy tripla négyzetreemelés.

Minthogy a mod11\bmod_{11} maradékképző függvény a 18.7. Tétel alapján egy gyűrűhomomorfizmus az egész számok Z\Z gyűrűje és a Z11Z_{11} gyűrű között, ezért ez a műveletsorozat a Z11Z_{11} gyűrűben is elvégezhető. Ezt az alábbiakban el is végezzük lépésenként:

mod11(22)=4mod11(42)=5mod11(52)=10mod11(102)=1mod11(12)=1mod11(12)=1mod11(12)=2mod11(22)=4mod11(42)=5mod11(52)=3\begin{aligned}\bmod_{11}&(2^2)=4 \\ \bmod_{11}&(4^2)=5 \\ \bmod_{11}&(5\cdot 2)=10 \\ \bmod_{11}&(10^2)=1 \\ \bmod_{11}&(1^2)=1 \\ \bmod_{11}&(1^2)=1 \\ \bmod_{11}&(1\cdot 2)=2 \\ \bmod_{11}&(2^2)=4 \\ \bmod_{11}&(4^2)=5 \\ \bmod_{11}&(5^2)=3 \end{aligned}

Azaz a mod11(2328)=3\bmod_{11}(2^{328})=3 végeredményt 327327 helyett megkaptuk mindössze 1010 darab moduláris szorzásból.

Most vizsgáljuk meg az imént leírt módszer lépésszámát általánosságban is. Tegyük fel, hogy a modm(ax)\bmod_{m}(a^x) moduláris hatványt szeretnénk meghatározni. Lépésszám alatt most értelemszerűen a szükséges moduláris szorzások számát értjük. Ezt az xx kitevő nagysága határozza meg, amelyről most tegyük fel, hogy nn darab számjeggyel írható le a kettes számrendszerben. A legrosszabb eset nyilván az, amikor minden bináris számjegy értéke 11, hiszen ekkor az összes neki megfelelő 2-hatvány szerepel az összegben:

x=2n1+2n2+2n3++23+22+21+1x=2^{n-1}+2^{n-2}+2^{n-3}+\ldots +2^3+2^2+2^1+1

A sorozatos kiemelések hatására egy olyan kifejezést kapunk, amely n2n-2 darab egymásba ágyazott zárójelet tartalmaz:

x=(2n2+2n3++22+21+1)2+1==((2n3+2n4++21+1)2+1)2+1==(((n2 darab2+1)2+1)2++1)2+1\begin{aligned}x&=(2^{n-2}+2^{n-3}+\ldots +2^2+2^1+1)\cdot 2+1=\\&=((2^{n-3}+2^{n-4}+\ldots +2^1+1)\cdot 2+1)\cdot 2+1=\\&\vdots \\&=\underbrace{((\ldots (}_{n-2 \text{ darab}}2+1)\cdot 2 + 1)\cdot 2 +\ldots +1)\cdot 2 + 1\end{aligned}

Azaz mind az n2n-2 darab zárójel esetén az addigi részeredményhez hozzá kell adni 11-et, majd az egészet megszorozni 22-vel. Végül az utolsó lépésben mégegyszer hozzá kell adni az egészhez 11-et. Mivel ez a kifejezés a modm(ax)\bmod_m(a^x) moduláris hatvány kitevőjében szerepel, ezért a 18.8. Tétel 2. és 3. pontjai alapján ennek a hatványnak a kiszámítása összesen 2n12n-1 darab moduláris szorzásból megúszható. Ráadásul ez a lehető legrosszabb eset, amikor a kitevő bináris számábrázolásában minden bit értéke 11.

Ez tehát azt jelenti, hogy mind a Diffie-Hellman kulcscsere protokoll, mind pedig a fejezet hátralévő szakaszaiban bemutatott RSA eljárás során előforduló moduláris hatványokat rendkívül gyorsan ki tudjuk számítani még abban az esetben is, ha több ezer bites számokról van szó. Ugyanis legrosszabb esetben is a kitevő bináris számjegyei számának duplája lesz az elvégzendő moduláris szorzások száma.

Eddig tehát megismertük a továbbiakban fontos három fő összetevőt:

Ezek után minden készen áll arra, hogy megismerkedjünk az emberiség egyik legfontosabb találmányával.

A Rivest-Shamir-Adleman (RSA) aszimmetrikus kulcsú rejtjelező eljárás

A 9.8. szakaszban mutattuk be az aszimmetrikus kulcsú rejtjelezés forradalmian új gondolatát. Ezt most pár mondatban átismételjük, ám javasoljuk az Olvasónak a hivatkozott szakasz átolvasását. A nagy ötlet ugye az volt, hogy a fogadó oldalon az üzenet visszafejtéséhez más kulcsot kelljen használni, mint amivel a küldő oldal titkosította azt. Ekkor ugyanis nincs szükség arra, hogy a fogadó és a küldő oldal előzetesen megállapodjon egy közös kulcsban.

Ezt sok esetben egyébként nem is tudnák megtenni. Gondoljunk csak például arra, amikor valamilyen külföldi webáruházban vásárolunk. Ez a vásárlás végén átirányít minket egy olyan bank fizetőoldalára, amelynek nem is vagyunk az ügyfelei. Ilyenkor a böngészőnknek a begépelt bankkártyaadatokat titkosítva kell elküldenie a bank szerverére, hiszen rendkívül érzékeny adatokról van szó. Amennyiben nem létezne aszimmetrikus kulcsú titkosítás, akkor a folyamat itt meg is akadna. Szükség lenne ugyanis egy közös kulcsra a vásárló és a bank közötti kommunikáció titkosításához.

Az RSA eljárásnak köszönhetően azonban ilyenre nincs szükség, mivel a böngésző a bank publikus kulcsával – amely tehát bárki számára elérhető – titkosíthatja az elküldendő bankkártyaadatokat, amelyet azután csak a bank fog tudni visszafejteni a saját titkos kulcsával. Megjegyezzük, hogy valójában nem pontosan ez történik a háttérben, ám ez az alapelv megértése szempontjából lényegtelen.

Most térjünk vissza főszereplőinkhez, és tegyük fel, hogy Alice szeretne Bob-nak elküldeni egy xx üzenetet. Ehhez előkeresi a nyilvános kulcstárból Bob KbK_b publikus kulcsát, és ezzel paraméterezi az EE rejtjelező függvényt. Ily módon előáll az yy kódszöveg, amelyet elküld Bob-nak. Ezt az üzenetet kizárólag Bob tudja visszafejteni, mivel a KbK_b publikus kulcshoz tartozó kbk_b titkos kulcsot csak ő ismeri. Bob tehát a kbk_b titkos kulccsal paraméterezve a DD dekódoló függvényt könnyedén vissza tudja állítani az eredeti xx üzenetet, míg a titkos kulcsot nem ismerő támadó számára ez gyakorlatilag lehetetlen. Ez a folyamat látható a 21.2. ábrán.

Aszimmetrikus kulcsú rejtjelező modell
21.2. ábra: Aszimmetrikus kulcsú rejtjelező modell

Az 1970-es évek nagy kérdése volt, hogy vajon mik lehetnek az ábrán szereplő EE és DD függvények – ha egyáltalán léteznek ilyenek. Az úttörő eredmény a 21.3. képen látható Ronald Linn Rivest, Adi Shamir és Leonard Max Adleman érdeme, akik 1977-ben publikálták az úgynevezett Rivest-Shamir-Adleman (RSA) algoritmust, amely talán az emberiség egyik legnagyobb horderejű felfedezése volt – legalábbis a társadalmunkra gyakorolt hatását tekintve mindenképpen.

Adi Shamir (balra), Ron Rivest (középen) és Len Adleman (jobbra)
21.3. ábra: Adi Shamir (balra), Ron Rivest (középen) és Len Adleman (jobbra)

Az alábbiakban – mostmár a szükséges számelméleti ismeretekkel felvértezve – ismertetjük ennek az eljárásnak a részleteit, majd az egészet egy egyszerű példán szemléltetjük.

RSA kulcspár generálása

Előszöris Bobnak szüksége lesz egy publikus és egy titkos részből álló kulcspárra. Ezek előállítását kulcsgenerálásnak nevezzük. Ehhez Bob keres magának két különböző, elegendően nagy prímszámot. Az "elegendően nagy" manapság tipikusan 20482048 vagy 40964096 bináris számjeggyel ábrázolható prímeket jelent. Ez tízes számrendszerben körülbelül a 600600 vagy 12001200 számjegyű számok nagyságrendje. Arról a 23. fejezetben lesz szó, hogy Bob hogyan képes ilyen nagyságrendű prímeket találni viszonylag hamar, ezért ezt a problémát egyelőre tegyük félre.

Jelöljük a Bob által talált, és persze a lehető legnagyobb titokban tartott két prímet pp-vel és qq-val. Bob ezután összeszorozza ezt a két prímszámot. Az így kapott m=pqm=p\cdot q egész számot modulusnak fogjuk nevezni a továbbiakban. Ezt az mm számot nem szükséges titokban tartani, az ugyanis a publikus kulcs része lesz.

Második lépésként Bob kiszámítja az Euler-féle φ\varphi-függvény értékét mm-re, azaz kiszámítja a φ(m)\varphi(m) értéket, amelyet szintén a lehető legnagyobb titokban tart. A pp és qq prímszámok ismeretében ezt a 21.3., valamint a 21.5. Tétel alapján könnyen meg tudja tenni:

φ(m)=(p1)(q1)\varphi(m)=(p-1)\cdot (q-1)

Harmadik lépésként Bob választ egy tetszőleges 00 és φ(m)\varphi(m) közötti ee egész számot, amely relatív prím φ(m)\varphi(m)-hez. A 20.15. Tétel alapján ezt úgy is megfogalmazhatjuk, hogy Bob választ egy modulo φ(m)\varphi(m) redukált maradékosztályt, az ee egész szám pedig ennek a legkisebb pozitív reprezentánseleme lesz. Megint más megfogalmazásban a gyűrűk homomorfizmustétele miatt ee tulajdonképpen a 18.3. Definíció szerinti Zφ(m)Z_{\varphi(m)} gyűrű valamelyik invertálható eleme lesz.

Ezt Bob szintén hatékonyan ki tudja választani, mivel szerencsére – itt nem részletezett analitikus számelméleti okok miatt – viszonylag gyakori, hogy két tetszőlegesen kiválasztott egész szám egymáshoz relatív prím. Így Bob megteheti, hogy véletlenszerűen választ a 00 és φ(m)\varphi(m) közötti számok közül, majd a 17.4. szakaszban ismertetett euklidészi algoritmus segítségével kiszámítja a kiválasztott szám és φ(m)\varphi(m) kitüntetett közös osztóját.

Ha ez egy egység, akkor a 17.10. Definíció utáni megjegyzés alapján a választott szám relatív prím φ(m)\varphi(m)-hez, azaz megvan a keresett ee. Ha pedig nem ez a helyzet, akkor Bob megismétli az eljárást egy másik véletlenszerűen választott számmal mindaddig, amíg nem talál egy φ(m)\varphi(m)-hez relatív prím számot. Az említett analitikus számelméleti összefüggések miatt ez majdnem biztosan már az első próbálkozáskor megtörténik. Az így kapott ee számot nem szükséges titokban tartani, az ugyanis a publikus kulcs része lesz.

Utolsó lépésként Bob kiszámítja az előző lépésben kiválasztott ee szám multiplikatív inverzét a Zφ(m)Z_{\varphi(m)} gyűrűben. Ehhez ugye meg kell oldania az alábbi lineáris kongruenciát:

ex1(modφ(m))e\cdot x\equiv 1\pmod{\varphi(m)}

A 20.8. Definíció alapján a megoldás a 20.14. Tétel 1. pontja miatt egyetlen darab modulo φ(m)\varphi(m) maradékosztály lesz – mivel ee relatív prím φ(m)\varphi(m)-hez, és emiatt (e,φ(m))1(e,\varphi(m))\sim 1. Az ee szám Zφ(m)Z_{\varphi(m)}-beli multiplikatív inverze ennek az eredményül kapott maradékosztálynak a legkisebb pozitív eleme lesz, amelyet a továbbiakban dd-vel fogunk jelölni.

A dd kiszámításához a 20.13. Tétel szerint Bobnak tulajdonképpen az alábbi lineáris diofantoszi egyenletet kell megoldania, amelyhez a 21.2. Tétel 1. pontja alapján a kibővített euklidészi algoritmust használhatja:

ex+φ(m)y=1ex+\varphi(m)y=1

Bob a kapott dd számot titokban tartja, az ugyanis a titkos kulcs része lesz.

A kulcsgenerálás ezzel befejeződött. Bob kulcspárja a következő lesz:

  • Bob publikus kulcsa: Az mm modulusból és az ee egész számból álló (m;e)(m;e) számpár.
  • Bob titkos kulcsa: Az mm modulusból és a dd egész számból álló (m;d)(m;d) számpár.

Bob ezek után akár meg is semmisítheti az eredetileg választott pp és qq prímszámokat, valamint a belőlük kiszámított φ(m)\varphi(m) értéket, azokra ugyanis a továbbiakban nem feltétlenül van szüksége. A 22.7. szakaszban azonban látni fogjuk, hogy a pp és qq prímszámok segítségével Bob hogyan tudja jelentősen felgyorsítani a dekódolás folyamatát. Mindenesetre biztonságos helyen kell ezeket tárolnia, ugyanis a segítségükkel a publikus kulcsból a fentiek alapján hatékonyan kiszámítható a titkos kulcs, így nem lenne jó, ha illetéktelen kezekbe kerülnének. Nélkülük azonban jelenlegi számelméleti ismereteink alapján ez egy belátható időn belül nem kivitelezhető algoritmikus feladat még a világ összes számítási kapacitásával sem. Ehhez ugyanis prímtényezőire kéne bontani a publikus kulcsban szereplő mm modulust, vagy valamilyen más – mindezidáig nem ismert – módon kiszámítani a φ(m)\varphi(m) értéket, ami ugye a dd dekódoló kulcs meghatározásához kell.

Bob a kulcspárjának publikus részét – azaz az (m;e)(m;e) számpárt – nyilvánosságra hozhatja, ugyanis ennek segítségével lehet majd a neki szánt bizalmas üzeneteket titkosítani. Ezzel szemben a kulcspár titkos részét – azaz az (m;d)(m;d) számpárt – a lehető legnagyobb titokban kell tartania, ugyanis a titkosított üzeneteket kizárólag ezzel lehet majd visszafejteni.

RSA kódolás és dekódolás

Az RSA esetén mind a rejtjelezés, mind pedig a dekódolás során tulajdonképpen egy-egy moduláris hatványozást kell elvégezni. Ennek módjáról az ismételt négyzetreemelések módszerének kapcsán a 21.4. szakaszban volt szó bővebben. Ha Alice valamilyen üzenetet vagy adathalmazt szeretne küldeni Bob-nak, akkor előszöris kikeresi a nyilvános kulcstárból Bob publikus kulcsát. Az ebben szereplő mm modulus fogja kijelölni azt a 18.3. Definíció szerinti ZmZ_m gyűrűt, amiben majd moduláris hatványozást el kell végezni, az ee szám pedig a kódoláshoz használandó kitevő lesz.

A rejtjelezni kívánt üzenetet Alice valamilyen egyezményes vagy szabványos módon egy, a ZmZ_m gyűrű elemeiből álló számsorozattá alakítja át, amelyet előkódolásnak nevezünk. Ez sokféleképpen történhet, erről egy kicsit bővebben a blokkrejtjelezőkről szóló 5.6. szakaszban volt szó. A technikai részletekre itt nem térünk ki, ám a következő szakaszban fogunk mutatni erre egy egyszerű példát.

A lényeg, hogy Bob ebből a számsorozatból egyértelműen tudja majd rekonstruálni az eredeti üzenetet. Az RSA szempontjából tehát a nyílt szöveg tulajdonképpen egy x1,x2,x3,x_1, x_2, x_3, \ldots számsorozat, amelynek tagjai a ZmZ_m gyűrű elemei, azaz mm-nél kisebb nemnegatív egész számok.

Az Alice által használt EE rejtjelező függvény az alábbi moduláris hatványozás lesz:

E(x)=modm(xe)E(x)=\bmod_m(x^e)

Itt xx jelöli a nyílt szöveget reprezentáló számsorozat soron következő tagját, az ee kitevő és az mm modulus pedig Bob publikus kulcsát alkotják.

Alice tehát a bemeneti x1,x2,x3,x_1, x_2, x_3, \ldots nyílt számsorozatból a Bob (m;e)(m;e) publikus kulcsával paraméterezett EE rejtjelező függvény segítségével előállítja az y1,y2,y3,y_1, y_2, y_3, \ldots rejtjelezett számsorozatot:

y1=modm(x1e)y2=modm(x2e)y3=modm(x3e)\begin{aligned} y_1&=\bmod_m({x_1}^e) \\ y_2&=\bmod_m({x_2}^e) \\ y_3&=\bmod_m({x_3}^e) \\ &\vdots \end{aligned}

Az így kapott y1,y2,y3,y_1, y_2, y_3, \ldots számsorozatot Alice átküldi a nembiztonságos kommunikációs csatornán Bob-nak. A Bob által használt DD dekódoló függvény nagyon hasonlít a rejtjelező függvényhez. Az egyetlen különbség, hogy ezúttal Bob (m;d)(m;d) titkos kulcsával kell paraméterezni a moduláris hatványozást:

D(y)=modm(yd)D(y)=\bmod_m(y^d)

Bob tehát a bemeneti y1,y2,y3,y_1, y_2, y_3, \ldots rejtjelezett számsorozatból a saját (m;d)(m;d) titkos kulcsával paraméterezett DD dekódoló függvény segítségével "varázslatos módon" visszakapja az Alice által közölni kívánt x1,x2,x3,x_1, x_2, x_3, \ldots nyílt számsorozatot:

x1=modm(y1d)x2=modm(y2d)x3=modm(y3d)\begin{aligned} x_1&=\bmod_m({y_1}^d) \\ x_2&=\bmod_m({y_2}^d) \\ x_3&=\bmod_m({y_3}^d) \\ &\vdots \end{aligned}

A visszakapott számsorozatból végül Bob az egyezmény vagy szabvány szerinti előkódolás megfordításával megkapja az eredeti üzenetet vagy adathalmazt. A 22. fejezetben fogjuk igazolni, hogy az imént említett "varázslat" valójában nem a véletlen műve, hanem az eddig megismert számelméleti összefüggések következménye. Most azonban nézzünk egy egyszerű példát az RSA rejtjelező használatára.

Példa RSA rejtjelezésre

Tegyük fel, hogy Alice egy bizalmas üzenetet szeretne elküldeni Bob-nak. Az egyszerűség kedvéért Alice és Bob megegyeznek, hogy a kommunikációhoz az angol ábécé betűit használják írásjelek és szóközök nélkül, az üzenet végét pedig a # karakter fogja jelezni. A bizalmas üzenet ezek alapján a következő:

sziabobmiahelyzet#

Ahhoz, hogy Alice ezt az üzenetet egy digitális kommunikációs csatornán átküldhesse, valamilyen módon egy bináris jelsorozattá kell alakítania azt. Ez történhet például az ASCII kódrendszer alapján, amelyről bővebben a 2.2. szakaszban volt szó. Mi most az egyszerűség kedvéért egy ennél egyszerűbb kódrendszert fogunk használni, amely csak az angol ábécé kisbetűit és az üzenet végét jelző # karaktert tartalmazza. Ez összesen 2727 szimbólum, amely 55 bites kódszavakkal ábrázolható. Az alábbi táblázat első oszlopa a kódolandó szimbólumokat, a második és harmadik oszlop pedig a hozzájuk rendelt számokat tartalmazza tízes és kettes számrendszerben. A számrendszerekről bővebben a 3. fejezetben volt szó:

symboldecimalbinarya000000b100001c200010d300011e400100f500101g600110h700111i801000j901001k1001010l1101011m1201100n1301101o1401110p1501111q1610000r1710001s1810010t1910011u2010100v2110101w2210110x2310111y2411000z2511001#2611010\begin{array}{c|c|c} \text{symbol} & \text{decimal} & \text{binary} \\ \hline a & 0 & 00000 \\ b & 1 & 00001 \\ c & 2 & 00010 \\ d & 3 & 00011 \\ e & 4 & 00100 \\ f & 5 & 00101 \\ g & 6 & 00110 \\ h & 7 & 00111 \\ i & 8 & 01000 \\ j & 9 & 01001 \\ k & 10 & 01010 \\ l & 11 & 01011 \\ m & 12 & 01100 \\ n & 13 & 01101 \\ o & 14 & 01110 \\ p & 15 & 01111 \\ q & 16 & 10000 \\ r & 17 & 10001 \\ s & 18 & 10010 \\ t & 19 & 10011 \\ u & 20 & 10100 \\ v & 21 & 10101 \\ w & 22 & 10110 \\ x & 23 & 10111 \\ y & 24 & 11000 \\ z & 25 & 11001 \\ \# & 26 & 11010 \end{array}

Ezek alapján a sziabobmiahelyzet# üzenetből az alábbi 9090 bit hosszú bináris jelsorozat lesz:

10010s11001z01000i00000a00001b01110o00001b01100m01000i00000a00111h00100e01011l11000y11001z00100e10011t11010#\begin{aligned}&\underbrace{10010}_{\text{s}} \underbrace{11001}_{\text{z}} \underbrace{01000}_{\text{i}} \underbrace{00000}_{\text{a}} \underbrace{00001}_{\text{b}} \underbrace{01110}_{\text{o}} \underbrace{00001}_{\text{b}} \\ &\underbrace{01100}_{\text{m}} \underbrace{01000}_{\text{i}} \underbrace{00000}_{\text{a}} \underbrace{00111}_{\text{h}} \underbrace{00100}_{\text{e}} \underbrace{01011}_{\text{l}} \underbrace{11000}_{\text{y}} \\ &\underbrace{11001}_{\text{z}} \underbrace{00100}_{\text{e}} \underbrace{10011}_{\text{t}} \underbrace{11010}_{\#} \end{aligned}

Mivel a kommunikációs csatornát a szemtelen Eve lehallgatja, ezért Alice kénytelen titkosítani ezt a jelsorozatot. Sajnos azonban ezúttal Alice-nak és Bob-nak nincs módja személyes találkozót megbeszélni annak érdekében, hogy valamilyen közös szimmetrikus kulcsban meg tudjanak állapodni, ahogy tették azt például az 1. fejezetben. De ez nem is jelent problémát, hiszen ismerik az előző szakaszokban ismertetett aszimmetrikus kulcsú RSA rejtjelező eljárást. Alice ezért megkéri Bob-ot, hogy generáljon magának egy RSA kulcspárt, és annak publikus részét küldje el neki a kommunikációs csatornán keresztül, hogy azzal titkosítani tudja számára a fenti bizalmas üzenetet.

Bob ezért választ magának két különböző prímszámot. Tegyük fel, hogy Bob a p=211p=211 és q=139q=139 prímszámokat választotta. A gyakorlatban persze a választott prímszámoknak többszázjegyűeknek kell lenniük a megfelelő biztonság érdekében, azonban most a példa kedvéért maradjunk ezeknél. Bob e két prímszám összeszorzásával meghatározza az mm modulust, majd kiszámítja a φ(m)\varphi(m) értéket:

m=pq=211139=29329φ(m)=(p1)(q1)=210138=28980\begin{aligned}m&=p\cdot q=211\cdot 139=29329 \\ \varphi(m)&=(p-1)\cdot (q-1)=210\cdot 138=28980\end{aligned}

Bob választ továbbá egy φ(m)\varphi(m)-hez relatív prím ee számot. Ezt a leírtaknak megfelelően úgy tudja megtenni, hogy választ egy véletlen számot 00 és φ(m)\varphi(m) között, majd az euklidészi algoritmus segítségével leellenőrzi, hogy a választott szám valóban relatív prím-e φ(m)\varphi(m)-hez. Ez majdnem biztosan teljesülni fog már elsőre. Ha esetleg mégsem, akkor újabb véletlenszámokkal próbálkozik mindaddig, amíg nem talál egy megfelelőt. Tegyük fel, hogy Bob az e=187e=187 számot választotta. Ha ee valóban relatív prím φ(m)\varphi(m)-hez, akkor az alábbi lineáris kongruenciának egyetlen megoldása lesz, méghozzá az a modulo φ(m)\varphi(m) maradékosztály, amelyben ott csücsül az ee számnak a 18.3. Definíció szerinti Zφ(m)Z_{\varphi(m)} gyűrűben vett multiplikatív inverze:

187=ed1(mod28980=φ(m))\underbrace{187}_{=e} \cdot d\equiv 1\pmod {\underbrace{28980}_{=\varphi(m)}}

Ennek a lineáris kongruenciának a 20.13. Tétel alapján az alábbi lineáris diofantoszi egyenlet felel meg:

187=ed+28980=φ(m)y=1\underbrace{187}_{=e}\cdot d+\underbrace{28980}_{=\varphi(m)}\cdot y=1

Szerencsére a 21.1. Tétel bizonyításában ismertetett kibővített euklidészi algoritmus egyszerre számítja ki az (e,φ(m))(e,\varphi(m)) kitüntetett közös osztót, és állítja elő azt ee és φ(m)\varphi(m) lineáris kombinációjaként. Bob tehát lefuttatja a kibővitett euklidészi algoritmust:

iri2ri1rikiuivi12898018718215411542187182511155318252363757344521275116235210\begin{array}{c|c|c|c|c|c|c}i & r_{i-2} & r_{i-1} & r_i & k_i & u_i & v_i \\ \hline 1 & 28980 & 187 & 182 & 154 & 1 & -154 \\ \hline 2 & 187 & 182 & 5 & 1 & -1 & 155 \\ \hline 3 & 182 & 5 & 2 & 36 & 37 & -5734 \\ \hline 4 & 5 & 2 & 1 & 2 & -75 & 11623 \\ \hline 5 & 2 & 1 & 0 & - & - & -\end{array}

Az utolsó nemnulla maradék 11, így e=187e=187 valóban relatív prím φ(m)=28980\varphi(m)=28980-hoz, továbbá Bob megkapta a 21.1. Tétel szerinti lineáris kombinációs együtthatókat is, azaz lényegében a fenti lineáris diofantoszi egyenlet egy megoldását:

187=e11623=d+28980=φ(m)(75)=y=1\underbrace{187}_{=e} \cdot \underbrace{11623}_{=d} + \underbrace{28980}_{=\varphi(m)} \cdot \underbrace{(-75)}_{=y}=1

Megvan a keresett dd, ami tehát 1162311623. A kulcsgenerálás ezzel befejeződött, Bob RSA kulcspárja a következő:

Ezek után Bob elküldi Alice-nak a kulcspár publikus részét – vagy akár elérhetővé teszi azt bárki számára egy nyilvános kulcstárban –, a titkos részét azonban szigorúan titokban tartja.

Alice-nak tehát az elküldendő bináris jelsorozatot a Zm=Z29329Z_m=Z_{29329} gyűrű elemeinek sorozatává kell alakítania. Ez egy olyan számsorozatot jelent, amelynek minden tagja nemnegatív és kisebb az m=29329m=29329 modulusnál. Egy rövid számolgatás után azt kapja, hogy a 1414 bites számok biztosan megfelelnek ennek a kritériumnak, hiszen 214=163842^{14}=16384. Ezzel szemben a 1515 bites számok között már előfordulhatnának a modulusnál esetleg nagyobb számok is, mivel 215=327682^{15}=32768. Így tehát Alice az üzenetet 1414 bit hosszú részekre darabolja.

Az elküldendő bitsorozat 9090 bit hosszú, így az utolsó darab 66 bitből fog állni. A fennmaradó 88 bitet Alice nyugodtan kitöltheti véletlenszerűen választott bitekkel, mivel a vételi oldalon Bob az üzenet végét jelző # karakterből egyértelműen azonosítani tudja majd ezeket az eldobható biteket. Így tehát az Alice által titkosítandó számsorozat a következő:

10010110010100x1=962000000000001011x2=1110000010110001x3=836900000000001110x4=1401000101111000x5=447211001001001001x6=1287311101001101001kito¨lteˊsx7=14953\begin{aligned}10010110010100 &\to x_1=9620 \\ 00000000001011 &\to x_2=11 \\ 10000010110001 &\to x_3=8369 \\ 00000000001110 &\to x_4=14 \\ 01000101111000 &\to x_5=4472 \\ 11001001001001 &\to x_6=12873 \\ 111010\underbrace{01101001}_{\text{kitöltés}} &\to x_7=14953\end{aligned}

Alice ezután a Bob publikus kulcsát alkotó m=29329m=29329 modulus és e=187e=187 kitevő segítségével kiszámítja a titkosított számsorozatot. Ezeket a moduláris hatványokat Alice a 21.4. szakaszban ismertetett ismételt négyzetreemelés módszerének segítségével hatékonyan tudja kiszámítani:

y1=mod29329(9620187)=7812y2=mod29329(11187)=869y3=mod29329(8369187)=445y4=mod29329(14187)=25123y5=mod29329(4472187)=2090y6=mod29329(12873187)=24726y7=mod29329(14953187)=9793\begin{aligned}y_1&=\bmod_{29329}({9620}^{187})=7812 \\ y_2&=\bmod_{29329}({11}^{187})=869 \\ y_3&=\bmod_{29329}({8369}^{187})=445 \\ y_4&=\bmod_{29329}({14}^{187})=25123 \\ y_5&=\bmod_{29329}({4472}^{187})=2090 \\ y_6&=\bmod_{29329}({12873}^{187})=24726 \\ y_7&=\bmod_{29329}({14953}^{187})=9793 \\ \end{aligned}

Ezután Alice az így kapott y1,y2,,y7y_1,y_2,\ldots,y_7 számokat kettes számrendszerben ábrázolja az eredeti számsorozathoz hasonlóan. Most azonban már előfordulhat bármilyen szám 00 és m=29329m=29329 között, így Alice kénytelen 1515 bitet használni:

001111010000100y1=7812000001101100101y2=869000000110111101y3=445‭‭110001000100011‬‬y4=25123000100000101010y5=2090110000010010110y6=24726010011001000001y7=9793\begin{aligned}001111010000100‬ &\gets y_1=7812 \\ 000‭001101100101‬ &\gets y_2=869 \\ ‭000000110111101‬ &\gets y_3=445 \\ ‭‭110001000100011‬‬ &\gets y_4=25123 \\ ‭000100000101010‬ &\gets y_5=2090 \\ ‭110000010010110‬ &\gets y_6=24726 \\ ‭010011001000001‬ &\gets y_7=9793\end{aligned}

Ezeket a 1515 bites darabokat Alice szépen egymás után fűzi, és az így kapott 105105 bites titkosított bitsorozatot elküldi Bob-nak a kommunikációs csatornán keresztül. Ne feledjük, hogy az Alice által használt, Bob-hoz tartozó publikus kulcs csak a titkosításhoz elegendő. A kulcs Bob-nál lévő titkos része nélkül maga Alice sem tudja visszafejteni ezt az üzenetet, így az teljes biztonságban utazik a csatornán a pofátlan Eve orra előtt.

Példa RSA dekódolásra

Most nézzük meg, hogy mit tud kezdeni ezzel a titkosított bitsorozattal a vételi oldalon lévő Bob, illetve a kommunikációs csatornát lehallgató Eve. Bob publikus kulcsát mindketten ismerik. Bob nyilván, hiszen ő maga generálta azt az előző szakaszban. Eve pedig legkésőbb akkor értesül róla, amikor Bob közli azt Alice-szal a kommunikációs csatornán keresztül, de akár közvetlenül le is töltheti a nyilvános kulcstárból.

Így tehát mindketten ismerik az m=29329m=29329 modulust, azaz tudják, hogy az Alice által elküldött titkosított bitsorozatot 1515 bites részekre kell darabolni ahhoz, hogy megkapják a 00 és 2932929329 közötti számokból álló y1,y2,,y7y_1,y_2,\ldots,y_7 sorozatot, amely tehát a következő:

001111010000100y1=7812000001101100101y2=869000000110111101y3=445‭‭110001000100011‬‬y4=25123000100000101010y5=2090110000010010110y6=24726010011001000001y7=9793\begin{aligned}001111010000100‬ &\to y_1=7812 \\ 000‭001101100101‬ &\to y_2=869 \\ ‭000000110111101‬ &\to y_3=445 \\ ‭‭110001000100011‬‬ &\to y_4=25123 \\ ‭000100000101010‬ &\to y_5=2090 \\ ‭110000010010110‬ &\to y_6=24726 \\ ‭010011001000001‬ &\to y_7=9793\end{aligned}

Ebből a Bob titkos kulcsát alkotó m=29329m=29329 modulus és d=11623d=11623 kitevő segítségével lehet kiszámítani az eredeti számsorozatot. Ezeket a moduláris hatványokat Bob a 21.4. szakaszban ismertetett ismételt négyzetreemelés módszerének segítségével hatékonyan tudja kiszámítani:

x1=mod29329(781211623)=9620x2=mod29329(86911623)=11x3=mod29329(44511623)=8369x4=mod29329(2512311623)=14x5=mod29329(209011623)=4472x6=mod29329(2472611623)=12873x7=mod29329(979311623)=14953\begin{aligned}x_1&=\bmod_{29329}({7812}^{11623})=9620 \\ x_2&=\bmod_{29329}({869}^{11623})=11 \\ x_3&=\bmod_{29329}({445}^{11623})=8369 \\ x_4&=\bmod_{29329}({25123}^{11623})=14 \\ x_5&=\bmod_{29329}({2090}^{11623})=4472 \\ x_6&=\bmod_{29329}({24726}^{11623})=12873 \\ x_7&=\bmod_{29329}({9793}^{11623})=14953 \\ \end{aligned}

Bob tehát valóban visszakapta az Alice által küldött eredeti számsorozatot. Eve azonban ezen a ponton bajba kerül, mivel nem ismeri a d=11623d=11623 dekódoló kulcsot, hiszen azt Bob mindvégig titokban tartotta. Sebaj, gondolja Eve, és megkísérli kiszámítani a publikus kulcsból a titkos kulcsot, pontosan úgy, ahogyan Bob tette a kulcsgenerálás során. Ehhez Eve-nek meg kéne tudnia határozni az e=187e=187 egész szám multiplikatív inverzét a 18.3. Definíció szerinti Zφ(m)Z_{\varphi(m)} gyűrűben, hiszen ez épp a keresett dd dekódoló kulcs lesz.

Igenám, csakhogy Eve számára még φ(m)\varphi(m) értéke sem ismert, és ennek kiszámításához a 21.3. és a 21.5. Tétel alapján szüksége volna az m=29329m=29329 modulus prímtényezős felbontására. Nem ismeretes ugyanis olyan algoritmikus módszer, amellyel a φ(m)\varphi(m) értéke hatékonyan kiszámítható mm prímtényezőinek ismerete nélkül. Ezért Eve sajnos – szerencsére – kénytelen megkeresni mm prímtényezőit, amelyre szintén nem ismert hatékony algoritmus. Így ez a feladat az idők végezetéig is eltarthat neki a világ összes számítógépével, amennyiben a Bob által választott prímszámok megfelelően nagyok.

Ezzel szemben Bob azért volt képes olyan gyorsan meghatározni φ(m)\varphi(m)-et, és így a dd titkos dekódoló kulcsot, mivel ő ismerte a p=211p=211 és q=139q=139 prímtényezőket. Nyilván, hiszen azokat ő maga választotta, és a kulcsgenerálás során ezek szorzatából képezte az m=29329m=29329 modulust. Természetesen – mint már említettük – a gyakorlatban a választott prímszámoknak többszázjegyűeknek kell lenniük a megfelelő biztonsági szint eléréséhez.

Bob tehát minden gond nélkül ki tudta számítani az x1,x2,,x7x_1, x_2, \ldots, x_7 számsorozatot. És ami még fontosabb: mivel kizárólag ő ismeri a d=11623d=11623 dekódoló kulcsot, ezért rajta kívül bárki más, aki az üzenet megfejtésével próbálkozik Eve-vel azonos helyzetben találja magát.

Az x1,x2,,x7x_1, x_2, \ldots, x_7 számsorozatból már viszonylag egyszerűen megkapható az Alice által elküldött karaktersorozat. Ehhez csak az előző szakaszban alkalmazott előkódolás lépéseit kell megfordítani. Ez már nem része az RSA eljárásnak, de a teljesség igénye miatt röviden ismertetjük.

Az m=29329m=29329 modulusból ugye tudható, hogy Alice 1414 bites számokat használt, amikor előállította ezt a sorozatot. A 1515 bites számok között ugyanis már előfordulhatnának ennél nagyobb számok is, mivel a 1515 biten kódolható számtartomány 00-tól 3276732767-ig terjed. Ezért Bob 1414 biten ábrázolja a visszafejtett számokat:

10010110010100x1=962000000000001011x2=1110000010110001x3=836900000000001110x4=1401000101111000x5=447211001001001001x6=1287311101001101001x7=14953\begin{aligned}10010110010100 &\gets x_1=9620 \\ 00000000001011 &\gets x_2=11 \\ 10000010110001 &\gets x_3=8369 \\ 00000000001110 &\gets x_4=14 \\ 01000101111000 &\gets x_5=4472 \\ 11001001001001 &\gets x_6=12873 \\ 11101001101001 &\gets x_7=14953\end{aligned}

Bob ezeket a biteket összefűzi, és az így kapott bitsorozatból a kódábécé alapján dekódolja az üzenetet. Amikor az üzenet végét jelző # karakterhez ér, a fennmaradó kitöltő biteket eldobja:

10010s11001z01000i00000a00001b01110o00001b01100m01000i00000a00111h00100e01011l11000y11001z00100e10011t11010#01101001eldobhatoˊ\begin{aligned}&\underbrace{10010}_{\text{s}} \underbrace{11001}_{\text{z}} \underbrace{01000}_{\text{i}} \underbrace{00000}_{\text{a}} \underbrace{00001}_{\text{b}} \underbrace{01110}_{\text{o}} \underbrace{00001}_{\text{b}} \\ &\underbrace{01100}_{\text{m}} \underbrace{01000}_{\text{i}} \underbrace{00000}_{\text{a}} \underbrace{00111}_{\text{h}} \underbrace{00100}_{\text{e}} \underbrace{01011}_{\text{l}} \underbrace{11000}_{\text{y}} \\ &\underbrace{11001}_{\text{z}} \underbrace{00100}_{\text{e}} \underbrace{10011}_{\text{t}} \underbrace{11010}_{\#} \underbrace{01101001}_{\text{eldobható}} \end{aligned}

Ezután pedig válaszolhat Alice-nak ugyanezen a módon. Ekkor azonban Alice publikus kulcsával kell rejtjeleznie a választ, amelyet viszont csak Alice fog tudni visszafejteni a saját titkos kulcsával. Alice-nak és Bob-nak tehát nincs szükségük biztonságos csatornára – például személyes találkozó – ahhoz, hogy egy közös kulcsban megegyezzenek, amelyet aztán egy valamilyen, az RSA-nál jóval hatékonyabb szimmetrikus kulcsú rejtjelező eljáráshoz használhatnak. Ezt egészen nyugodtan megtehetik Eve orra előtt a nembiztonságos csatornán keresztül az RSA eljárásnak köszönhetően.

Az 1. fejezetben ismertetett kulcsmegosztás problémája tehát megoldódni látszik. Van azonban még egy probléma, amelyet meg kell oldani.

RSA partnerhitelesítés és digitális aláírás

Vegyük észre, hogy egy aktív támadó – például Mallory – ezt a rendszert könnyedén kijátszhatja. Mallory ugyanis képes elérni, hogy Alice a Bob-nak szánt üzenetek kódolásához az ő publikus kulcsát használja, miközben abban a hitben van, hogy az valójában Bob publikus kulcsa. Alice-nak emiatt meg kell tudnia győződnie arról, hogy a kódoláshoz használt publikus kulcs valóban Bob publikus kulcsa, és nem pedig Mallory-é, aki csak azt hazudja magáról, hogy ő Bob. Ezt partnerhitelesítésnek neveztük, és a hozzá kapcsolódó problémakört részletesen kifejtettük a 10. fejezetben. A megoldást a digitális aláírások jelentették, amelynek lényegét most röviden átismételjük.

Egy aszimmetrikus kulcsú rejtjelezési eljárás esetén a kulcspár publikus részével kódolt üzeneteket kizárólag ugyanezen kulcspár titkos részével lehet dekódolni. Most igazolni fogjuk, hogy az RSA esetében a kulcsok szerepe felcserélhető. Nevezetesen: a kulcspár titkos részével kódolt üzeneteket kizárólag a kulcspár publikus részével lehet dekódolni.

Az alábbi egyenlet a publikus kulccsal való kódolás, majd a titkos kulccsal való dekódolás egymás utáni végrehajtását írja le. Ezt ugyan majd csak a következő fejezetben fogjuk igazolni, de most tegyük fel, hogy ennek eredményeként valóban az eredeti xx üzenetet kapjuk vissza:

modm((modm(xe)=y)d)=x\bmod_m((\underbrace{\bmod_m(x^e)}_{=y})^d)=x

Minthogy a modm\bmod_m maradékképző függvény a 18.7. Tétel alapján egy gyűrűhomomorfizmus az egész számok Z\Z gyűrűje és a 18.3. Definícióban bevezetett ZmZ_m gyűrű között, ezért a zárójelen belüli y=modm(xe)y=\bmod_m(x^e) hatványozás a ZmZ_m gyűrűben is elvégezhető. Ugyanezen okok miatt a dd kitevővel való külső x=modm(yd)x=\bmod_m(y^d) hatványozás szintén elvégezhető a ZmZ_m gyűrűben. Ha tehát ezt a két egymás utáni hatványozást a ZmZ_m gyűrűben értjük, akkor az alábbi egyenlet írható fel:

(xe)d=x(x^e)^d=x

A hatványozás azonosságairól szóló 18.8. Tétel bármilyen kommutatív gyűrű esetén alkalmazható, így nyilván a ZmZ_m gyűrű esetén is. Ennek 2. pontja alapján az alábbit kapjuk:

(xe)d=xed=xde=(xd)e=x(x^e)^d=x^{e\cdot d}=x^{d\cdot e}=(x^d)^e = x

Vagyis valóban: ha először kódolunk egy üzenetet egy kulcspár titkos részével, majd ezt dekódoljuk ugyanazon kulcspár publikus részével, akkor szintén az eredeti üzenetet kapjuk vissza. Ez a tulajdonság alkalmassá teszi az RSA eljárást digitális aláírások képzéséhez is. Ha ugyanis egy bitsorozat dekódolható például Bob publikus kulcsával, akkor azt csak egy olyan résztvevő kódolhatta, aki Bob titkos kulcsának birtokában volt. Márpedig ha Bob nem teljesen bolond, és valóban sosem adja ki a kezéből a titkos kulcsát, akkor ez bizonyíték arra, hogy az adott üzenetet kizárólag ő küldhette. A digitális aláíráson alapuló partnerhitelesítésről a 10. fejezetben volt szó részletesen, így azt itt nem ismételjük meg.

Ebben a fejezetben tehát megtanultunk lineáris diofantoszi egyenleteket megoldani a kibővített euklidészi algoritmus segítségével. Ezután az Euler-féle φ\varphi-függvény kiszámításához szükséges összefüggéseket tisztáztuk. Majd a moduláris hatványozáshoz mutattunk egy igen hatékony módszert: az úgynevezett ismételt négyzetreemelések módszerét. Végül ismertettük az RSA algoritmus részleteit, amelyet egy konkrét példán ki is próbáltunk.

Ebből úgy tűnik, hogyha egy üzenetet egy RSA kulcspár valamelyik tagjával kódolunk – legyen az akár a publikus, akár a titkos kulcs –, 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. A következő fejezetben matematikai bizonyítást adunk arra, hogy ez az összefüggés valóban bármilyen, az ismertetett kritériumoknak megfelelő kulcspár, továbbá bármilyen üzenet esetén fennáll. Ezután a 23. fejezetben megismerjük azokat a módszereket, amelyek segítségével viszonylag könnyedén találhatunk többszázjegyű prímszámokat az RSA kulcsgeneráláshoz.