Godine 1976. Whitfield Diffie i
Martin Hellman
su ponudili jedno moguće rješenje problema razmjene ključeva,
zasnovano na činjenici da je u nekim grupama potenciranje puno jednostavnije od logaritmiranja.
Pretpostavimo da se osobe A i B žele dogovoriti o jednom tajnom slučajnom elementu u cikličkoj grupi G, kojeg bi onda poslije mogli koristiti kao ključ za šifriranje u nekom simetričnom kriptosustavu. Oni taj svoj dogovor moraju provesti preko nekog nesigurnog komunikacijskog kanala, a da pritom nisu prethodno razmijenili nikakvu tajnu informaciju. Jedina informacija koju imaju jest grupa G i njezin generator g.
Diffie-Hellmanov protokol za razmjenu ključeva:
|
Njihov protivnik koji može prisluškivati njihovu komunikaciju preko nesigurnog komunikacijskog kanala zna sljedeće podatke: G, g, ga, gb, te treba iz ovih podataka izračunati gab. Ako protivnik iz poznavanja g i ga može izračunati a (tj. ako može riješiti problem diskretnog logaritma), onda i on može pomoću a i gb izračunati gab.
Ovdje pretpostavljamo da protivnik samo prisluškuje komunikaciju. Ako protivnik može i mijenjati poruke, tada osnovni Diffie-Hellmanov protokol nije dovoljan: moguć je napad "čovjek u sredini" (engl. man-in-the-middle). Zato se u praksi javne vrijednosti moraju autentificirati, primjerice digitalnim potpisima ili certifikatima.
Diffie i Hellman se smatraju začetnicima kriptografije
javnog ključa.
Ideja javnog ključa se sastoji u tome da se konstruiraju kriptosustavi
kod kojih bi iz poznavanja funkcije šifriranja eK
bilo praktički nemoguće (u nekom razumnom vremenu) izračunati
funkciju dešifriranja dK.
Tada bi funkcija eK mogla biti javna. U provedbi
ove ideje ključnu ulogu igraju tzv. osobne jednosmjerne funkcije.
Za funkciju f kažemo da je jednosmjerna (one-way)
ako je f lako, a f -1 teško izračunati.
Ako je pritom f -1 lako izračunati ako nam je
poznat neki dodatni podatak (trapdoor - skriveni ulaz), onda
f nazivamo osobna jednosmjerna funkcija.
Uočimo da se i u klasičnoj kriptografiji tajnost u suštini zahtijeva samo od funkcije
za dešifriranje dK. Banalan primjer: kod Cezarove šifre nije problem što svi
znaju da se slova šifriraju tako da se pomiču za 3 mjesta udesno, već je problem što iz tog podatka
baš svatko može zaključiti da se dešifriranje provodi pomicanjem za 3 mjesta ulijevo.
No, i kod svih ostalih kriptosustava koje smo dosad susreli, veza funkcija
eK i dK
je bila vrlo jednostavna, pa skrivanje jedne,
a otkrivanje druge funkcije nije imalo nikakvog smisla.
Kriptosustav s javnim ključem se sastoji od dviju familija
{eK} i {dK} funkcija za šifriranje
i dešifriranje (ovdje K prolazi skupom svih mogućih
korisnika) sa svojstvom:
|
Ako pošiljalac A želi poslati poruku x primaocu B, onda B najprije pošalje A svoj javni ključ eB. Potom A šifrira svoju poruku pomoću eB i pošalje primaocu šifrat y = eB(x). Konačno, B dešifrira šifrat koristeći svoj tajni ključ dB: dB(y) = dB(eB(x)) = x.
Ako grupa korisnika želi komunicirati na ovaj način, situacija je još jednostavnija. Naime, tada svi korisnici stave svoje javne ključeve u neku javnu, svima dostupnu datoteku. Sada B ne mora slati svoj javni ključ osobi A, već A jednostavno pročita eB iz datoteke.
Pritom je važno pitanje kako A može biti siguran da javni ključ koji je pročitao zaista pripada osobi B. Ako protivnik može podmetnuti svoj javni ključ umjesto B-ova, tada može čitati poruke namijenjene B-u. U praksi se taj problem rješava certifikatima i infrastrukturom javnih ključeva (PKI) ili drugim pouzdanim načinima provjere javnog ključa.
Ovdje se može postaviti pitanje kako osoba B može biti sigurna da joj je upravo osoba A poslala poruku. Naime, svatko ima pristup funkciji eB, pa se može lažno predstaviti kao osoba A. Dakle, postavlja se pitanje vjerodostojnosti ili autentičnosti poruke. Sljedeći pojednostavljeni protokol ilustrira ideju izazova i odgovora (engl. challenge-response), iako se u stvarnim sustavima koriste preciznije definirani protokoli i digitalni potpisi.
Neki kriptosustavi omogućavaju čak da korisnici digitalno potpišu svoju poruku. To je važno zbog toga što tada A ne može kasnije zanijekati da je upravo on poslao konkretnu poruku. U pojednostavljenom modelu, osobito za kriptosustave poput RSA-a u kojima su prostor otvorenih tekstova i šifrata isti, potpis se može shvatiti kao primjena tajne funkcije na poruku ili na njezin sažetak. U stvarnim sustavima digitalni potpis se ne dobiva jednostavnim "dešifriranjem" poruke, nego se potpisuje kriptografski sažetak poruke prema posebno definiranoj shemi potpisa.
Pretpostavimo da je
P =
C. Tada A može potpisati
poruku x tako da osobi B pošalje šifrat
dB(eA(z)) = dB(eA(dA(eB(x)))) = x.
Sada B zna sigurno da je poruku poslao A, jer je samo on mogao upotrijebiti funkciju dA. Da je umjesto te funkcije upotrijebljena neka treća funkcija dC, kao rezultat ne bi dobili smislenu poruku. Nadalje, ako bi A kasnije zanijekao da je on autor poruke, B bi mogao "sucu" pokazati poruke x i z. Sudac bi provjerio da vrijedi eB(x) = eA(z) i to bi bio dokaz da je A pošiljalac.
Glavne prednosti kriptosustava s javnim ključem u usporedbi sa
simetričnima su:
Pa ipak, u realnom svijetu kriptografija javnog ključa ne predstavlja zamjenu za simetrične kriptosustave. U praksi se kriptografija javnog ključa najčešće ne koristi za izravno šifriranje dugih poruka, nego za razmjenu ključeva koji se zatim koriste u simetričnom kriptosustavu. Naime, osobe A i B komuniciraju pomoću simetričnog kriptosustava s ključem kojeg su razmijenili pomoću kriptosustava s javnim ključem. To se zove hibridni kriptosustav.
Osnovni razlog zašto se javni ključ ne koristi za šifriranje poruka, jest da su algoritmi s javnim ključem puno sporiji (oko 1000 puta) od modernih simetričnih algoritama.
Drugi nedostatak naivno definiranih kriptosustava s javnim ključem jest da su ranjivi ako je prostor mogućih poruka malen i ako je šifriranje determinističko. Ako je y = e(x), a otvoreni tekst može poprimiti samo jednu od n mogućih vrijednosti, kriptoanalitičar može šifrirati svih n mogućih otvorenih tekstova i usporediti rezultate s y. Tako neće otkriti tajni ključ d, ali će otkriti otvoreni tekst x. Jasno, ovaj napad je primjenjiv ako je n mali (npr. ako je x neki iznos u eurima za kojeg je razumno pretpostaviti da je manji od 1000000). Zato se u stvarnim shemama šifriranja s javnim ključem koristi odgovarajuće slučajno popunjavanje (padding), odnosno probabilističko šifriranje.
U modernoj kriptografiji, koja se koristi u komercijalnom svijetu
(tipična situacija je da osoba A želi kupiti nešto od osobe B preko
interneta), pojavljuju se, uz klasične, i neki sasvim novi problemi:
Kako smo već rekli, kriptosustavi javnog ključa su mnogo sporiji od simetričnih. Stoga je njihova uporaba u 1. problemu ograničena na razmjenu ključeva za simetrične šifre. S druge strane, "digitalni potpisi", koji se koriste u rješavanju 2., 3. i 4. problema, zahtijevaju uporabu kriptografije javnog ključa.
| Web stranica kolegija Kriptografija | Andrej Dujella - osobna stranica |