Egy hatékony titkosítási módszer

Elmélet

Ezt a módszert néhány pihentagyú dolgozta ki az MIT egyetemen. Ezért nevezik ezt másképpen MIT algoritmusnak. Az alapelv egyszerű, habár elég számításigényes, ezért gépek számára dolgozták ki, egy megfordíthatatlan matematikai művelet segítségével kódoljuk le az üzenetünket, majd ezt a címzett ezt egy másik megfordíthatatlan matematikai művelettel fogja visszakapni.

A kommunikáló felek kitalálnak két prímszámot (minél nagyobb annál jobb). Legyenek ezek a prímszámok p és q. Összeszorozzák ezt a kettőt, ekkor megkapják az a alapszámukat. Továbbá keresnek még két számot egy e-t és egy f-et, amikre igaz, hogy ef-1 osztható q-1 és p-1 értékekkel is. Az e és az f szám megkeresése nem igényel túl nagy gondolkodást. Vegyük a p-1 és a q-1 számok egyik közös többszörösét, majd adjunk hozzá egyet. Ezután ennek a számnak keressük meg az egyik osztóját az lesz az e, osszuk el e-vel a számot, az eredmény lesz a f szám. Ezek után az egymással titkosan beszélni szándékozók egymás közt közzéteszik az a alapszámukat és az e számot, de titokban kell tartaniuk az f számukat.

Tegyük fel, hogy be akarunk jelentkezni valamilyen titkos adatbázisba. Ehhez el kell küldenünk a felhasználónevünket és a jelszavunkat. Mi tudjuk az adatbázis a számát és az e számát. Természetesen azok is tudják a miénket. Az f számokat senki sem ismeri, mi is csak a sajátunkat tudjuk. Az elküldendő adat bájtok sorozata. A jelszavunk betűit ASCII kódjaik alapján alakítjuk számokká. Jelölje k az éppen kódolt karakter kódját. Az adatbázis e számát használva ezt a számot emeljük e. hatványra, majd osszuk el az adatbázis a alapszámával, és a maradékot írjuk le. Magyarán számoljuk ki a ke mod a értéket. Ha a kapott szám kevesebb, mint az a alapszám jegyszáma, akkor annyi nullát írunk elé, hogy éppen annyi legyen. Több jegyű, mint az a jegyszáma nem lehet. Ezt eljátszuk az összes betűre. Természetesen az azonos betűkre nem kell kétszer eljátszani ezt az egész tortúrát, hisz annak a kódja már ismert. Ha kész a kódolás, akkor az üzenet végére a saját f számukat használva kódoljuk oda az aláírásunkat, betűnként. Azaz kiszámoljuk a kf mod a értéket. A címzett fordítva jár el a dekódoláskor. Ő a saját titkos f számát használva dekódolja az üzenetet. Végül a küldő nyilvános e számát használva nyeri vissza az aláírást. Tehát amit a-val és e-vel kódoltunk, azt a-val és f-fel nyerhetjük vissza, és fordítva.

Minél nagyobb p és q számot választunk, annál nehezebb feltörni a kódunkat.

Természetesen a kódtörők dolgát nehezíteni lehet azzal, hogy még egy plusz titkosítást ráültetünk még az üzenetre. Egy egyszerűbbet. Például az első számjegyet eggyel növeljük, a másodikat kettővel, a harmadikat hárommal, stb. stb. stb. Tovább lehet növelni a biztonságot azzal, hogy felhasználónként más plusz kódolási eljárást ültetünk rá az így is kódolt rendszerre.

Gyakorlati alkalmazás

Igazat megvallva nem tudom, hogy milyen titkosítási eljárást használnak a hálózatokon, nekem van egy ötletem, hogy hogy lehetne a fentieket alkalmazni a gyakorlatban. Ennek az eljárásnak egyetlen sebezhető pontja van: a regisztráció, ha ugyanis ekkor lehallgatják az üzenetet, akkor könnyen feltörhetik és a nevedben léphetnek be.

Tegyük fel, hogy van egy webhely, ahol ilyen módon titkosítják az adatokat szoftveresen. Természetesen ez a felhasználó előtt ez rejtve zajlik. A dolog hátránya, hogy csak egyetlen gépen lesz használható, vagy legalább is magunkkal kell hordani a három számunkat egyfolytában.

A forgatókönyv a következő:

Regisztráció

Mikor a regisztrációs űrlapot betöltjük a szerver leküldi nekünk a nyilvános a és e számát, amit ezen a kommunikációs vonalon használ (csak egyszer használja).
A regisztrációs űrlap kitöltése után az adatokat titkosítjuk a kapott számokkal, és addig küldjük a szervernek, míg azt a választ kapjuk, hogy a regisztráció sikeres. A válaszüzenetben vissza fogja nekünk küldeni a három azonosító kódunkat, az a, e és f számunkat. A szerver nyilván tudja a te adataidat is, de nem fog vele visszaélni. Legalább is nem kéne.

Bejelentkezés

Először kódolatlanul elküldjük a felhasználónevünket a szervernek, a nevünket nyilván más is tudhatja. Ezután a jelszavunkat a saját f számunkkal kódolva. A rendszer visszafejti azt, és ellenőrzi, hogy helyes-e. Ha helyes volt, akkor a válaszüzenetben visszaküldi, hogy sikeres volt a bejelentkezés, és elküldi az új számainkat az a, e és f számot. Továbbá belekódolja még a szerver saját új a és e számát, amit csak a velünk folytatott kommunikációra használ majd, ezzel kell titkosítanunk. Ezután kommunikálhatunk a szerverrel a kapott számok használatával. Természetesen a sok számolás elkerülése végett. Letárol egy táblázatot, hogy ne kelljen túl sokat számolnia kommunikáció közben (ez a számolás folyamatosan működik, generálja a számokat és időnként kiosztja azokat a klienseknek [táblát is küld, hogy a kliens se szenvedjen], hogy ne akkor kelljen hirtelen). A kliens minden egyes üzenetébe belekódolja az f számával a jelszavát, az üzenet elejére pedig leírja, hogy hol van a jelszó a fájlban, ezzel is növelve a biztonságot (Ne mindig ugyanúgy kezdődjön, vagy végződjön egy üzenet).

Kijelentkezés

Ha befejeztük a munkánkat küldünk egy kijelentkező jelzést küldünk és kilépünk. A szerver addig nem hajlandó velünk kommunikálni, amíg újra be nem jelentkezünk. Továbbá a szerver minden egyes órában megpingel bennünket, hogy itt vagyunk-e még, ha nem érkezik válasz, kijelentkeztet.

Adataink védelme a szerveren

A szerver minden egyes adatunkat a jelszavunkkal titkosít. A jelszó ismerete, és a feloldó eljárás ismerete nélkül, még ha a feltörő hozzá is fér a fájlhoz, nem tud azzal mit kezdeni, csak egy átláthatatlan krix-krax lesz az egész, amit lát.

 

Ez az egész igazából webes felületen nem (vagy csak macerásan) valósítható meg, külön kliens programra lesz szükség. Nem is beszélve a számításigényről (szerver meghülyül...).