Cím: Az RSA kulcsgenerálás és a Carmichael-számok kapcsolata 1.
Szerző(k):  Kiss Gábor 
Füzet: 2019/május, 264 - 270. oldal  PDF  |  MathML 

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

A nyílt kulcsú titkosító algoritmus matematikai alapjait 1976-ban fektette le Ron Rivest, Adi Shamir és Len Adleman. A nevük kezdőbetűi alapján elnevezett RSA algoritmus napjaink egyik leggyakrabban használt adattitkosító eljárása. A szakirodalomban elérhető matematikai alapok felhasználásával magam is elkészítettem a titkosító eljárás ‐ gyakorlatban is jól használható ‐ programját. A kulcsgenerálás algoritmusának pontosabb vizsgálatával sikerült kimutatni, hogy a prímek mellett speciális összetett számok is kiválóan alkalmazhatók kulcsok generálásához, sőt jelentősen csökkenthetik a kulcsok előállításának időtartamát.
A dolgozat megmutatja, hogy a Fermat féle prímteszt ‐ annak ellenére, hogy prímek keresésére nem megbízható, mert átbújhatnak rajta összetett számok is ‐ tökéletesen alkalmas megbízható RSA kulcsok generálására.
A továbbiakban összefoglaljuk azokat a matematikai tételeket, algoritmusokat, melyek az eljárás elvi alapjait adják.

1.Az Euler‐Fermat-tétel és az Euler-féle φ függvény.
2.Az ax+by=1 diophantoszi egyenlet megoldhatósága és a modális inverz fogalma.
3.A rend és a primitív gyök fogalma.
4.A kiterjesztett euklideszi algoritmus.
5.A kétkulcsos titkosítás alaptétele, kapcsolata a kétkulcsos titkosítással és az elektronikus aláírással.
6.Prímek keresése, tesztelése (valószínűségi becslés), ,,Tanúk'' és ,,Cinkosok'' viszonya.
7.Carmichael-számok definíciója és tulajdonságai.
8.A kétkulcsos titkosítás alaptételének egy fontos általánosítása (CA-tétel).
9.Kulcspárgenerálás összetett számokból.

A cikkben nem bizonyított tételek igazolása megtalálható pl. Freud‐Gyarmati: Számelmélet c. könyvében.
A következő mellékletek letölthetők a www.plwsecur.com URL címről. 1. Az a program (PLWSecur.exe), mely a fenti elvek alapján ténylegesen végre is hajtja egy adott fájl vagy mappa titkosítását, illetve annak visszafejtését ‐ ez a program integráltan tartalmazza a kulcsgeneráló modult, de itt a CA tételt még nem alkalmazzuk. 2. Az a különálló kulcsgeneráló modul (KulcsparGen_CA.exe + Delphi source kód), mely a CA tételt már alkalmazza. A generált kulcsok természetesen tökéletesen együttműködnek a PLWSecur.exe programmal.
 
1. Az Euler‐Fermat-tétel és az Euler-féle φ függvény

 
Tétel. Ha p prím és a nem osztható p-vel, akkor ap-11(modp) ‐ (ez a ,,kis'' Fermat-tétel).
 
Bizonyítás. Az a,2a,...,(p-1)a számokat osszuk el p-vel és a maradékok legyenek m1,m2,...,mp-1, azaz:
a=k1p+m1,2a=k2p+m2,(p-1)a=kp-1p+mp-1.
A maradékok között nem lehet két egyenlő, mert ha mi=mj lenne, akkor (i-j)a osztható lenne p-vel, de ez lehetetlen, mert sem (i-j), sem a nem osztható p-vel.
A fenti egyenlőségek oldalait összeszorozva (p-1)!ap-1=Kp+(p-1)! , hiszen a jobb oldalon megjelenik a p-1 darab különböző maradék szorzataként (p-1)! . Ebből átrendezéssel következik, hogy (p-1)!(ap-1-1)=Kp. Mivel (p-1)! nem osztható p-vel, azért ap-1-1 osztható p-vel, azaz ap-11(modp).
 
Definíció. Legyen φ(n) az n-nél nem nagyobb, nemnegatív, n-hez relatív prím számok darabszáma ‐ ez az Euler-féle φ függvény.
 
Tétel. Ha A és N relatív prímek, akkor Aφ(N)1(modN) (Euler tétele ‐ a kis Fermat-tétel Euler-féle általánosítása).
A bizonyítás lényegében ugyanaz, mint a kis Fermat-tétel esetében: Legyenek m1,m2,...,mφ(N) az N-hez relatív prím osztási maradékok, és ezek A-szorosainak is tekintsük az N-nel való osztásnál keletkező maradékait:
Am1s1(modN),Am2s2(modN),Amφ(N)sφ(N)(modN).

Könnyen belátható, hogy az s1,s2,...,sφ(N) számok az m1,m2,...,mφ(N) számok egy permutációja. Ehhez elegendő megmutatni, hogy az si számok relatív prímek N-hez, és nincs közöttük két egyenlő. Ha (si,N)=p>1 lenne, akkor Ami is osztható lenne p-vel, ami lehetetlen. Ha lenne köztük két egyenlő, akkor
A(mi-mj)=Ami-Amj osztható lenne N-nel, ami szintén lehetetlen, mert (A,N)=1 és |mi-mj|<N. A fenti kongruenciák szorzatából ‐ a maradékok szorzatával való egyszerűsítés után ‐ következik az állítás.
Ha N prím, akkor φ(N)=N-1, így belátható, hogy Euler tétele valóban a kis Fermat-tétel általánosítása.
Megemlítjük még a φ függvény néhány ‐ későbbiekben felhasznált ‐ alapvető tulajdonságát:
 
Tétel. Ha p és q relatív prímek, akkor φ(pq)=φ(p)φ(q).
Speciálisan, ha p és q egymástól különböző prímek, akkor φ(pq)=φ(p)φ(q)=(p-1)(q-1).
 
Tétel. Tetszőleges n1 és p prím esetén φ(pn)=(p-1)pn-1.
 
Bizonyítás. Mivel p prím, azért az 1,2,3,...,pn számok között p-vel csak a p,2p,3p,...,pn-1p=pn számok oszthatók, a többi relatív prím pn-hez. A p-vel oszthatók száma pn-1, tehát a fenti intervallum pn-hez relatív prímjeinek száma pn-pn-1=pn-1(p-1).
 
Tétel. Legyen n prímtényezős alakja
n=p1α1p2α2...prαr=i=1rpiαi,aholαi>0.
Ekkor φ(n) felírható a következő szorzat alakjában:
φ(n)=i=1rpiαi-1(pi-1)=ni=1r(1-1pi)=npnp   prím(1-1p).

 
2. Az ax+by=1 diophantoszi egyenlet megoldhatósága és
a modális inverz fogalma

 
Tétel. Legyenek a és b egész számok. Az ax+by=1 diophantoszi egyenletnek akkor és csak akkor van egészekből álló xy megoldása, ha a és b relatív prímek, azaz (a,b)=1.
a) Ha a és b legnagyobb közös osztójára (a,b)>1, akkor az egyenlet átírható (a,b)(a1x+b1y)=1 alakba.
Semmilyen xy pár nem elégítheti ki az előbbi egyenletet, mert a jobb oldalon álló 1 nem osztható (a,b)-vel.
b) Legyen (a,b)=1. Az általánosság csorbítása nélkül feltehető, hogy a és b pozitív. Átrendezés után x=1-bya, azaz keresni kell azt az y egész számot, amelyre by-nak az a-val való osztási maradéka 1; megmutatjuk, hogy létezik ilyen y szám. A b számot szorozzuk meg az 1,2,...,a számokkal, és képezzük az a-val való osztás maradékait:
1b=k1a+m1,2b=k2a+m2,ab=kaa+ma(ma=0).

Belátható, hogy az m1,m2,...,ma maradékok a 0,1,2,...,a-1 számok egy permutációja, tehát elő kell fordulnia 1-nek is mint osztási maradéknak. Indirekte tegyük fel ugyanis, hogy van köztük két egyenlő, például mi=mj, ekkor (i-j)b=(ki-kj)a(0). Mivel |i-j|<a, azért i-j nem lehet osztható a-val, de akkor ‐ (a,b)=1 miatt ‐ (i-j)b sem.
 
1. következmény. Az ax+by=c diophantoszi egyenletnek mindig van megoldása, ha (a,b)=1. (Ugyanis, ha x0 és y0 megoldása ax+by=1-nek, akkor cx0 és cy0 megoldása ax+by=c-nek.)
 
2. következmény. Az ax+by=(a,b) diophantoszi egyenletnek mindig van megoldása. Ez eredetileg Bézout lemmája. A megoldás nem egyértelmű, mert ha x és y megoldás, akkor x1=x+kb és y1=y-ka is az. Az a,b számok legnagyobb közös osztóját, illetve az egyenlet egy xy megoldását a kiterjesztett euklideszi algoritmussal lehet meghatározni (lásd ott).
 
Az ax+by=1 alakú diophantoszi egyenletek szoros kapcsolatban vannak az ax1(modn) alakú kongruenciákkal. Formális okok miatt az ax1(modn) kongruencia x megoldását tekinthetjük az a szám modális multiplikatív inverzének, azaz jelölhetjük így is: xa-1(modn). Természetesen ha x0 megoldás, akkor x0+kn is az (k tetszőleges egész szám lehet).
 
Tétel. Az ax1(modn) kongruenciának akkor és csak akkor van x megoldása, ha (a,n)=1. (Ha van megoldás, akkor szimmetria okok miatt (x,n)=1.)
 
Bizonyítás. Tekintsük az ax+ny=1 diophantoszi egyenletet. Ennek akkor és csak akkor van megoldása, ha (a,n)=1. Másrészt, az ax=1-ny alakból látszik, hogy az egyenlet éppen azt jelenti, hogy ax1(modn).
 

Következmény. Az Euler‐Fermat-tételt felhasználva, ha (a,n)=1, akkor az ax1(modn) kongruencia megoldása felírható xaφ(n)-1(modn) alakban is. Ez az alak többnyire csak elméleti jelentőségű, mivel konkrét esetekben a modális inverz meghatározásához a kiterjesztett euklideszi algoritmust használjuk; ez eldönti, hogy az (a,n)=1 feltétel teljesül-e, s ha igen, akkor egyidejűleg megadja az inverzet is.
 
 
3. A rend és a primitív gyök fogalma

Képezzük g egymás utáni (1.,2.,...,k-adik) hatványait (modp). Ha az így képzett számok között megjelenik a 0, akkor minden további szám már 0 marad. Ha nem jelenik meg a 0, akkor előbb-utóbb ciklusba esik, azaz létezik egy legkisebb k>1 egész, amelyre ggk(modp) lesz. Ekkor a ciklus hossza k-1. (Vegyük észre, hogy ha (g,p)=1, akkor 0 nem jelenik meg.)
Ha a tetszőlegesen választott g és p esetében létrejön a fenti típusú ciklus, akkor definíció szerint a ciklus hossza g rendje (modp) ‐ melynek jelölése op(g) (kiejtve ordo g(modp)).
Könnyen belátható, hogy ha (g,p)=1 akkor op(g) mindig létezik, és az Euler‐Fermat-tétel miatt op(g)φ(p). Sőt, az is belátható, hogy ha gk1(modp), akkor a ciklikusság miatt op(g) osztja k-t, speciálisan op(g)-φ(p) is mindig fennáll.
Ha (g,p)=1 és op(g)=φ(p), akkor g-t p primitív gyöknek nevezzük (modp). Ha g primitív gyök (modp), akkor a g1,g2,...,gφ(p)1 számok (modp) maradékai a p-hez relatív prím maradékok egy permutációját adják.
Most megmutatjuk, hogy a (g,p)=1 nem csak elégséges, de szükséges feltétel is op(g) létezésére, így arra is, hogy g primitív gyök legyen (modp). Ennek belátásához csupán azt kell észrevennünk, hogy ab(modm) esetén (a,m)=(b,m). Ha létezik op(g), akkor van olyan k>0 egész szám, amelyre gk1(modp), így (gk,p)=(1,p)=1, ezért (g,p)=1-nek is teljesülnie kell.
Bizonyítás nélkül közöljük a primitív gyök létezésére vonatkozó alábbi tételt:
 

Primitív gyök pontosan (csak) az N=2,4,pk,2pk alakú modulusokra létezik, ahol p páratlan prímszám és k>0 egész.
 

 
4. A kiterjesztett euklideszi algoritmus

Két szám legnagyobb közös osztójának meghatározására ‐ nagy számok esetében ‐ a prímtényezős felbontásra alapozott eljárás időben kivárhatatlan.
Az a, b számok legnagyobb közös osztóját (LNKO) a közismert euklideszi algoritmussal lehet hatékonyan meghatározni. Az eljárás kiterjesztésével (veremtechnika alkalmazásával) az ax+by=(a,b) egyenlet x, y megoldását és az ax1(modn) kongruenciából az x(modn) inverzét is gyorsan kiszámíthatjuk.
Legyen M0 és M1 két pozitív egész szám, melyekből sorozatos maradékos osztásokkal képezzük a következő nemnegatív egészeket:
M0=k0M1+M2(M2<M0),M1=k1M2+M3(M3<M1),M2=k2M3+M4,Mn=knMn+1+0.
Mivel az M2,M3,... folyamatosan csökkennek (a páros indexűek monoton csökkenek M0-tól, míg a páratlan indexűek M1-től lefelé), ezért az n+1 osztás után a maradék 0 lesz.
Az Mn+1 értéke (a,b), azaz az LNKO. Az, hogy Mn+1 a kiinduló két (M0 és M1) szám közös osztója, következik az algoritmusból, a hátulról induló sorozatos visszahelyettesítésekből. Azt, hogy Mn+1 a kiinduló két (M0 és M1) szám legnagyobb közös osztója a következő módon láthatjuk be: Legyen P az M0 és M1 számok egyik közös osztója. Az algoritmusból következik, hogy P osztója M2-nek is, illetve tovább folytatva a gondolatmenetet valamennyi Mi-nek, beleértve Mn+1-et is. Tehát Mn+1-et osztja valamennyi P közös osztó, ezért Mn+1 a legnagyobb közös osztó.
A fenti algoritmus hátulról visszafelé alkalmazva, lehetővé teszi az ax+by=(a,b) egyenlet xy megoldásainak meghatározását is (ez az algoritmus kiterjesztése).
Foglaljuk táblázatba a fenti algoritmus egy-egy sorának számait (A, B, R, K) az alábbiak szerint:
 
 
 

Az A, B, R, K oszlopok számait ‐ az i-edik sorban ‐ jelöljük ai,bi,ri,ki-vel.
 
 
 

Vegyük észre, hogy minden sorban az (ai,bi)=an+1(=LNKO) azonosak minden i=0,...,n+1 esetén. (Az (n+1)-edik sort az egységes jelölés végett szúrtuk csak be.)
Az ax+by=1 diophantoszi egyenlet vizsgálatánál említett 2. következmény (Bézout-lemma) miatt minden sorra igaz, hogy az (ai,bi)=aixi+biyi egyenletnek van xiyi megoldása. Speciálisan az (n+1)-edik sornál xn+1=1, yn+1=0.
Megmutatjuk, hogy az i-edik sor xiyi együtthatói származtathatók az (i+1)-edik sor együtthatóiból, azaz hátulról visszafelé indulva az xn+1,yn+1=1,0 párból kiszámítható az x0y0 pár, azaz meghatározható az (a,b)=ax+by diophantoszi egyenlet megoldása.
Tegyük fel, hogy az (ai+1,bi+1)=ai+1xi+1+bi+1yi+1 egyenlet xi+1yi+1 megoldása már ismert. Ugyanezt az összefüggést az i-edik sorra alkalmazva (ai,bi)=aixi+biyi. Behelyettesítve a felfelé mutató nyilakkal jelölt egyenlőségeket, valamint felhasználva a sor elemei közötti belső összefüggést:
(ai,bi)=aixi+biyi=(kibi+ri)xi+biyi=(kiai+1+bi+1)xi+ai+1yi==ai+1(kixi+yi)+bi+1xi=(ai+1,bi+1).
Az együtthatók egyenlőségéből xi+1=kixi+yi és yi+1=xi, ahonnan átrendezéssel:
xi=yi+1,yi=xi+1-kixi=xi+1-kiyi+1,
vagyis az i-edik sor együtthatói kiszámíthatók az (i+1)-edik sor együtthatóiból, tehát az eljárás végén megkapjuk a keresett x0y0 megoldást.
Vegyük észre, hogy az algoritmus alkalmazásakor szükségünk van a ki hányadosokra, melyeket az LNKO meghatározásakor veremben kell elhelyezni. Mivel az ax1(modn) kongruencia megoldása ekvivalens az ax-ny=1 diophantoszi egyenlet megoldásával, a fenti eljárással az a modális inverzét is meg tudjuk határozni.
 

A cikk folytatása a szeptemberi számban lesz olvasható.