A nyilvános kulcsú kriptográfia az 1970-es években indult fejlődésnek. A korábban bemutatott Diffie-Helmann algoritmus mellett szintén 1976-ban született meg az RSA eljárás, ami a nevét arról a három matematikusról kapta, akik kitalálták: Ron Rivest, Adi Shamir és Len Adleman. Ez manapság a leggyakrabban használt titkosítási eljárások közé tartozik az interneten.
Az algoritmus a moduláris számelmélet és a prímszámelmélet egyes tételein alapszik. A rendszer attól lesz aszimetrikus, hogy két kulcs tartozik hozzá. Egy nyilvános kulcs, amit a titkosításra használunk és egy privát kulcs, amit visszafejtésre használunk. A nyilvános kulcs onnan kapta a nevét, hogy ez titkosíttatlan csatornán is átvithető minden gond nélkül, bárkivel megosztható és ennek ismeretében a kulcs birtokosa tud számunkra titkosított üzeneteket küldeni, amit csak mi tudunk visszafejteni, hiszen csak mi ismerjük ideális esetben a titkos kulcsunkat.
Itt is a leírás során a matematikai dolgokba nagyon nem merülök el, csak annyira amennyire szükséges. Nézzük meg tehát, hogy is működik az RSA:
- Véletlenszerűen válasszunk két nagy prímet,
p-t ésq-t. - Számoljuk ki az
N = pqértéket, ami a nyilvános és titkos kulcs modulusa lesz. - Számoljuk ki az Euler-féle
φfüggvény értékét N-re:φ(N) = (p -1)(q-1) - Válasszunk egy olyan egész
eszámot, amire teljesül1 < e < φ(N), valaminteésφ(N)legnagyobb közös ösztója 1. - Számítsuk ki d-t úgy hogy, a következő teljesüljön:
de = 1 + kφ(N)valamelykpozitív egészre
A nyilvános kulcs N modulusból és e kitevőből fog állni, míg a titkos kulcs N modulusból és d kitevőből áll. Utóbbi párt kell titokban tartani.
A gyakorlatban ha e kis bithosszal rendelkezik és kicsi a Hamming súlya, akkor hatékonyabb titkosítást kapunk. e értékének a leggyakrabban 65537-et (216+1) szokás választani. A legkisebb és leggyorsabb lehetséges e érték 3, de ennek az alkalmazása nem javasolt, mivel bizonyos beállítások mellett kevésbé biztonságos kódot eredményez.
A Titkosítás folyamata
Amennyiben Alice üzenetet szeretne küldeni Bob-nak, akkor ismernie kell Bob publikus kulcsát és ennek a fordítottja is igaz. A publikus kulcsok nem biztonságos hálózaton is továbbíthatóak.
A publikus kulcsok ismerete után a következő dolog, ami kell a titkosításhoz, az maga az üzenet, amit titkosítani szeretnénk. Mivel az RSA szintén blokkokban dolgozik az üzenetet fel kell bővíteni, hogy pont egész számú blokkból álljon. Az RSA erre a célra a PKCS#1 algoritmust alkalmazza, de bármilyen más megoldás alkalmazható, a lényeg, hogy az üzenet blokkjainak mérete, m kisebb legyen, mint a kulcs generálásakor kapott N szám.
A titkos üzenet c ezek felhasználásával az alábbi módon állítható elő: c = me mod N
Bob a kapott c üzenetet a saját titkos kulcsával az alábbi módon tudja visszafejteni: m = cd
Identitás ellenőrzés
A Diffie–Hellman csere során említésre került a Man in the middle támadás. Ez a probléma az RSA esetén is fennáll, mivel nem tudhatja Alice, hogy valójában Bob-al kommunikál-e.
A probléma áthidalására dolgozták ki a digitális aláírás algoritmust (EDSA), ami lehetővé teszi a felek azonosítását. Ez egy kétkulcsos titkosítási rendszert és egy Hash algoritmust kombinál.
Alice a Bob-nak küldendő üzenetén számol egy hash értéket. Ezt a Hash értéket titkosítja az aláíráshoz használt kulcspárjának a privát kulcsával. Bob az üzenet megkapása után Alice aláírásához tartozó publikus kulcs segítségével dekódolja a hash értéket, majd az üzenethez ő is kiszámolja a hash értéket. Ha az aláírás részeként kapott hash és az üzenet hash értéke egyezik, akkor Bob biztos lehet benne, hogy Alice küldte az üzenetet, mivel csak Alice rendelkezik az aláíráshoz rendelt privát kulccsal.
Itt fontos megjegyezni, hogy az aláíráshoz használt kulcspár nem azonos a titkosításhoz használttal. Ha azonos kulcspárok kerülnének alkalmazásra, akkor nem titkosított üzenetek aláírásával lényegében ismert bemenetre ismert kimenet csomagokat adnánk egy támadó kezébe, amiből a titkos kulcsunkat meg tudná szerezni.