
Fel tudjuk törni a titkosítást?
A titkosítás lényege az, hogy a beavatott személyek úgy tudjanak egymásnak üzenetet küldeni, hogy bármely üzenetet el tudjanak olvasni, azonban egyetlen kívülálló se ismerhesse meg a tartalmat, illetve ne lehessen más nevében hamis üzenetet küldeni. A régebbi titkosítások meglehetősen egyszerűek voltak, amelyek közül néhány már inkább egy rejtvényújság feladványa lehetne, mintsem biztonságos kriptográfiai megoldás.
Egy rövid történeti kitérő után áttekintünk két modern titkosítási módszert, az RSA és az elliptikus görbéken alapuló kódolást. Az utóbbi két módszer matematikai háttere lényegesen meghaladja az emelt szintű középiskolai érettségi követelményeit, ennek ellenére sokak számára érdekesek lehetnek. A kíváncsiságunkat az is táplálja, hogy a mindennapokban gyakran találkozunk a kriptovalutákkal, blockchain-nel és elektronikus aláírással Az alábbiakban áttekintendő kódok akár nemzetbiztonsági szintű rejtjelezésre is alkalmasak.
Valóban fontos kérdés: Fel tudjuk törni a titkosítást? A válasz lényegében csak annyi tud lenni, hogy a mai technológia mellett jelenleg tudunk olyan titkosítást készíteni, amely reális időn belül nem törhető fel. Azt viszont nehéz megmondani, hogy a kvantumszámítógépek korában milyen titkosítási módszereket kell majd kialakítani.
Kódolás
A kódolás alapja valamilyen kódszó, kódrendszer alkalmazása, amellyel betűket, szótagokat, szavakat esetleg kifejezéseket helyettesítünk. Például a templomos lovagok által használt jelrendszer a betűket helyettesítette:
Rejtjelezés
A legegyszerűbb rejtjelezés, ha az ABC betűit helyettesítjük úgy, hogy minden betű helyett az őt követő \(n\)-dik betűt írjuk. Ha az ABC végére érünk, akkor elölről folytatjuk a leszámolást. Ez a módszer, a kódolással ellentétben, némi átalakítással már sokkal biztonságosabb lehet. A II. világháborúban, a németek által használt Enigma is ezen az elven működött. Az Enigma egy mechanikus berendezés volt, hasonló egy írógéphez. Az egyes betűk több tárcsán keresztül kerültek kódolásra úgy, hogy minden tárcsa módosított az előző által megadott kódon. Ahhoz, hogy a kódolt szöveget el tudják olvasni, biztosítani kellett, hogy minden gépen ugyanaz legyen a tárcsák beállítása, amelyet minden nap változtattak. Ennek ellenére feltörték az Enigmát, és sikeresen dekódolták a Szövetségesek a német üzeneteket.Szimmetrikus kriptográfia
A számítástechnika fejlődésével olyan algoritmusok is kifejlesztésre kerültek, amelyek modern titkosítást tettek lehetővé, azonban közös volt bennük, hogy ugyanazt a kulcsot kellett alkalmazni a kódoláshoz és a dekódoláshoz. Természetesen ezt titokban kellett tartani, és minden részvevőnek rendelkeznie kellett ezzel a kóddal. A szimmetrikus kriptográfia továbbra sem tudta megoldani azt a problémát, hogy a kulcsokat meg kellett osztani mindenkivel, és változatás esetén újra kellett küldeni.Aszimmetrikus kriptográfia
Az aszimmetrikus vagy nyilvános kulcsú titkosírás lényege, hogy minden résztvevő két kulccsal rendelkezik, amelyből az egyiket titokban tartja, azonban a másik nyilvános. Ezeknek a kulcsoknak nem kell megegyezni az üzenetet küldőnél és fogadónál. A fogadó fél pedig a saját kulcsával tudja dekódolni az üzenetet. Nézzük meg ennek a logikáját egy kicsit közelebbről. \(A\) üzenetet küld \(B\)-nek. Mindkét résztvevő elkészít magának egy kulcsot, amelyek egymás inverzei \(T,\,P\). Ezek közül a saját \(P\)-t nyilvánosságra hozzák, \(T\)-t pedig titokban tartják. Mindenki saját \(T,\,P\) kulcspárt hoz létre. \(A\) a \(text\) üzenet helyett a titkosított \(txet=P_B(T_A(text))\) kódolt üzenetet küldi el \(B\)-nek. \(B\) az üzenetet \(A\) publikus kulcsának és saját titkos kulcsának segítségével dekódolja, azaz \(P_A(T_B(txet))=text\) műveletet végzi el. Mivel az egy emberhez tartozó kulcsok egymás inverzei, azaz \(P_A(T_A(text))=text\), így az alábbiak szerint történik a dekódolás: \[\begin{aligned} &P_A(T_B(txet))=\\ &=P_A(T_B(P_B(T_A(text))))=\\ &=P_A(T_A(text))=text \end{aligned}\notag\] A nyilvános kulcsú kódolás sok tekintetben kielégíti az igényeinket. Az \(A\) által küldött üzenetet csak \(B\) tudja dekódolni (sőt azt is tudja, hogy \(A\) küldte), \(C\) se feltörni, se hamisítani nem tudja az üzenetet, illetve nem tud más nevében hamis üzenetet küldeni. Továbbá nagy előrelépés, hogy nincs szükség titkos kulcsok megosztására, minden szereplő magának hozza létre.RSA kódolás
Az előző bekezdésben bevezetett jelölések szokatlanok, azonban ha megpróbáljuk a segítségükkel értelmezni az Euler-függvényt, akkor láthatjuk, hogy az csak a számokhoz rendeli hozzá az adott számhoz, a relatív prímek számát Az Euler-Fermat tétel, pedig csak azt állítja, hogy, hogy ha adott \(a\) és \(m\), két egymáshoz relatív prím, akkor az \(a^{\varphi(m)}\) szám, \(m\)-mel osztva, \(1\)-et ad maradékul.Bitcoin titkosítása – elliptikus görbékkel
A diszkrét logaritmus és az elliptikus görbék is idegen fogalmak, ráadásul teljes megértésükhöz felsőbb matematikai ismeretek szükségesek. Ennek ellenére tartogatnak olyan érdekességeket, amelyek már középiskolás tudással is megérthetők. Három lépésben mutatjuk be a titkosítás alapjait. Elsőször az elliptikus görbéket tekintjük át, és értelmezünk a pontjai között műveleteket. Második lépés, hogy megértsük, hogy miért használható ez a rendszer titkosításra, azaz, hogyan lehet nyílt és titkos kulcsokkal üzenni úgy, hogy lényegében feltörhetetlen kódolást készítünk. Végül megpróbálunk eljutni a valós kódolás alapjaihoz, amelyeket véges elemű halmazon értelmezett műveletekkel végzünk.Elliptikus görbék
Elliptikus görbének nevezzük azt a síkgörbét, amelynek a pontjai kielégítik a következő egyenletet, kiegészítve egy “végtelenben felvett” ponttal, amelyet \(O\)-val jelölünk. \[ \begin{aligned} y^2=x^3+ax+b \end{aligned}\notag \] A fentiekben definiált elliptikus görbékből a kriptavaluták, így a Bitcoin-hoz használt blockchain titkosítását az alábbi elliptikus görbéből kiindulva végzik. \[ \begin{aligned} a=0,\,b=7\\ y^2=x^3+7 \end{aligned}\notag \]


Diszkrét logaritmus
Olyan titkosítás szeretnénk képezni, amely során a titkosítás könnyen megtörténhet, de feltörni nem lehet. Az elliptikus görbékkel definiált műveletek lehetővé teszik ezt. Ugyanis, ha nagy \(n\) számot keresünk, akkor ennek ellenére \(Q=nP\) könnyen számítható, azonban \(P,Q\) ismeretében lényegében reménytelen meghatározni \(n\) értékét. A műveletet, amellyel \(P\) és \(Q\) ismeretében \(n\) meghatározható, diszkrét logaritmusnak nevezzük és \(n=\log_P Q\)-val jelöljük.Véges elemű elliptikus görbe
A folytonos elliptikus görbék esetén látható, hogy az egyik pontból, hogyan juthatunk el egy másikba, összeadással, vagy skalárral való szorzással. A kriptográfiában nem jók az ennyire kiszámítható elemek, ezért a valós számokon értelmezett elliptikus görbék helyett ezek véges sok pontját használják. Az elliptikus görbe azon értékeit tekintjük, amelyekre teljesül a görbét leíró egyenlőség modul p, azaz csak azokat a pontokat tekintjük, amelyek koordinátáira teljesül, hogy \[ \begin{aligned} y^2=x^3+7\mod p \end{aligned}\notag \] Az \(x,y\) értékeit is csak véges sok számból, \((0,\,1,\,\ldots,\,p-1)\)-ből választjuk ki. Az előzőek alapján a kriptográfiában használatos elliptikus görbe képe \(y^2=x^3+7,\,p=17\):