Nyilvános kulcsú rejtjelezés


A nyilvános kulcsú rejtjelezés alapötlete, hogy a kódolás, titkosítás folyamatát elválasztja a dekódolástól, és olyan algoritmust használ, ahol a kódoláshoz használt paraméter nem azonos a dekódoláshoz használt paraméterrel, és a kódoláshoz használt paraméterből nem határozható meg a dekódoláshoz szükséges paraméter.

Ennek a folyamatnak a formális leírása a

M=C(m;e)
és
m=D(M;f)

egyenletekkel adható meg. Itt e és f a kódoló és dekódoló paraméterek.

Egy ilyen algoritmussal a kódoló e paramétert nyilvánossá téve bárki titkosított üzenetet tud küldeni a címzettnek, akihez az e nyilvános kulcs tartozik, de dekódolni csak a címzett tudja, amennyiben a privát f kulcsot csak a címzett ismeri.

Ha a C és D algoritmusok kommutatívak, vagyis az előbbi egyenleteken kívül

M=D(m;f)
és
m=C(M;e)

is igaz, akkor lehetőség van arra is, hogy a címzett biztonsággal tudja megállapítani az üzenet küldőjét.

Ehhez a címzett és a feladó kulcsait is alkalmazni kell. Legyen e_s és f_s a feladó nyilvános és titkos kulcsa. Ugyanígy legyen e_a és f_a a címzett nyilvános és titkos kulcsa. Ekkor az m üzenet kódolását a

M=C(D(m;f_s);e_a)

egyenlettel lehet leírni, a dekódolásét pedig az

M=C(D(M;f_a);e_s)

egyenlettel. A feladó biztos lehet abban, hogy csak a címzett tudja az üzenetet elolvasni, hiszen a dekódoláshoz szükséges f_a csak a címzett birtokában van. A címzett is biztos lehet abban, hogy feladó küldte a levelet, hiszen a kódoláshoz szükséges f_s csak a feladó birtokában van.

Ezt a módszert használva létre lehet hozni egy kódkönyvet, amiben mindenkinek szerepel a nyilvános kódja, és így a kódkönyvben szereplők bármelyike tud bárki másnak levelet küldeni anélkül, hogy előtte valamilyen levelezőpár specifikus titkos kulcsban megállapodtak volna. Természetesen a kódkönyvnek megbízhatónak kell lennie.

Meg kell mindenképpen jegyezni, hogy a megvalósítások során nem pontosan ez az eljárás. A nyilvános kulcsú rejtjelezési algoritmusok lassúak, és nem alkalmasak arra, hogy magát az m üzenetet kódolják, ha az hosszú. A szokásos eljárás az, hogy a nyilvános kulcsú rejtjelezéssel csak a gyorsabb titkos kulcsú rejtjelezéshez használandó kulcsot rejtjelezik, és az üzenetet a kiválasztott titkos kulcsú rejtjelezéssel kódolják. A titkos kulcsú rejtjelezés titkos kulcsát így, első hallásra groteszk módon a rejtjelezett szöveggel együtt küldik el.

Ez a módszer - amit borítékolásnak is neveznek utalva arra, hogy a titkos kulcsot a rejtjelezett szöveggel együtt egy nyilvános kulcsú kódolással lezárt borítékban a rejtjelezett szöveggel együtt küldik - ötvözi a titkos és nyilvános kulcsú rejtjelezések előnyeit. Nincsen szükség előre megállapodni a titkos kulcsban, hiszen azt a szöveggel együtt lehet küldeni, ugyanakkor a kódolás és dekódolás gyors, mert a lassú nyilvános kulcsú rejtjelező algoritmussal csak a titkos kulcsot kell kódolni az egyik és dekódolni a másik oldalon.

A feladó azonosítása sem egészen az a gyakorlati eljárások során, mint a fenti egyszerüsített modell. Nem az egész szöveget kódolja a feladó a saját titkos kulcsával, hanem annak csak egy lenyomatát. Egy szöveg lenyomata egy olyan rövid ellenőrző kód, amelyet az eredeti szövegből gyorsan lehet generálni, és nagyon kicsi a valószínűsége annak, hogy két különböző szöveg ellenörző kódja azonos legyen. (A lenyomat elnevezés az ujjlenyomat hasonlatból jött.) Ezt az ellenőrző összeget kódolva a feladó titkos kulcsával egy olyan elektronikus aláírást kapunk, amelyet a címzett dekódol a feladó nyilvános kulcsával, és összehasonlít az általa elolvasott üzenet lenyomatával. Ha a kettő egyezik, akkor valóban ezt az üzenetet és valóban a feladó küldte.

A gyakorlatban szinte kizárólagos az úgynevezett MD5 (Message Digest algoritmus 5. verziója), amely egy 64 bites kódot generál az üzenethez.


toc