Kriptografske metode javnog ključa razvile su se kao rješenje problema razmjene ključeva među strankama u komunikaciji zaštićenoj kriptografijom tajnog ključa. Enkripcija tajnim ključem pati od velikog problema: kako će tajni ključ koji obje stranke trebaju poznavati da bi uspostavile komunikaciju stići od Helene Igoru ? Naime, ukoliko npr. Helena generira tajni ključ ona ga mora poslati Igoru, no to je osjetljiva informacija koju bi trebalo enkriptirati. Nažalost, tajni ključ je Igoru potreban za dekripciju.
Što je kriptografija javnog ključa ?
Kriptografija javnog kluča, otkrivena 70-tih godina, rješava već spomenuti problem enkripcije poruka između dvije stranke bez prethodnog dogovora o ključu.
U kriptografiji javnog ključa, Helena i Igor ne samo da imaju različite ključeve, već svako od njih dvoje ima dva ključa. Jedan Helenin ključ je privatni ključ i on ne smije biti poznat nikome osim Heleni. Drugi Helenin ključ je javni ključ i on može odn. treba biti poznat svakome tko želi komunicirati sa Helenom.
Kad Helena želi poslati sigurnu poruku Igoru, ona enkriptira poruku koristeći Igorov javni ključ (koji ona poznaje). Igor koristi svoj privatni ključ (koji samo on poznaje) kako bi dekriptirao poruku. Kada Igor želi slati sigurnu poruku Heleni, on enkriptira poruku koristeći Helenin javni ključ (... koji svi znaju) i rezultat enkripcije šalje Heleni. Helena koristi svoj tajni ključ da dekriptira Igorovu poruku. Ana može prisluškivati oba javna ključa i enkriptirane poruke, no ne može dekriptirati poruke pošto tajni ključevi od Helene niti od Igora nisu niti razmjenjeni.
Javni i privatni ključ generiraju se u paru i trebaju biti većih duljina nego tajni ključ ekvivalentne kriptografske snage koji se koristi u kriptografiji tajnog ključa. Tipične duljine ključa za RSA algoritam javnog ključa je 1024 bita.Važno je napomenuti da je praktički neizvedljivo generirati privatni ključ na temelju javnog ključa (ovo se temelji se najčešće na problemu faktorizacije velikih brojeva).
Kriptografske metode javnog ključa su spore, u usporedbi sa metodama tajnog ključa 100 do 1000 puta sporije. Tako da se u praksi najčešće koristi hibridbna tehnika. Naime, enkripcija metodama javnog ključa koristi se za distribuciju tajnog ključa ili sjedničkog ključa (session key) drugoj stranci, a tada se tim sjedničkim ključem obje stranke koriste za razmjenu poruka primjenjujući enkripciju tajnog ključa.
Algoritmi i podrška u JDK 1.4.
Sljedeća dva algoritma se koriste kriptografiji javnog ključa:
Cipher klasa manipulira i algoritme javnog ključa koristeći ključeve koje
proizvodi KeyPairGenerator klasa. Sljedeće metode se koriste u algoritmima
javnog ključa:
| Metoda: | Funkcija: |
| KeyPairGenerator.getInstance("RSA") | Instancira objekt KeyPairGenerator za određeni algoritam (RSA u ovom slučaju) |
| KeyPairGenerator.initialize(1024) | Inicijalizira generator ključeva i određuje duljinu ključa u bitovima (1024) |
| KeyPairGenerator.generateKeyPair() | Generira par ključeva privatni i javni |
| Cipher.getInstance("RSA/ECB/PKCS1Padding") | Instancira objekt Cipher uz određeni algoritam, mod i metodu paddinga |
| Cipher.init(Cipher.ENCRYPT_MODE, key.getPublic()) | Inicijalizira Cipher objekt za enkripciju javnim ključem |
| Cipher.doFinal(plainText) | Enkriptira plaintext string |
| Cipher.init(Cipher.DECRYPT_MODE, key.getPrivate()) | Inicijalizira Cipher objekt za dekripciju privatnim ključem |
| Cipher.doFinal(cipherText) | Dekriptira ciphertext string |
Kriptografija javnog ključa primjer:
Obzirom da JDK 1.4 odn. standardni provider SUN nema ugrađenu podršku za RSA algoritam već samo za Diffie-Hellman, prije pokretanja primjera potrebno je instalirati novog kriptografskog providera koji nudi podrsku za RSA.
U mom slučaju koristio sam Legion of the Bouncy Castle implementaciju JCE providera kojeg u obliku JAR datoteke možete skinuti sa njihovih stranica http://www.bouncycastle.org.
Instalaciju Bouncy Castle providera (a ujedno i bilo kojeg drugog JCE providera) provodite na sljedeći (sličan) način:
Ukoliko pri pokretanju aplikacije ne dobijete sljedeći izlaz:
C:\Documents and Settings\Igor\My Documents\My WWW\FLY\Java\kod>java
CryptoJavniKljuc "Ovo je poruka"
Generiram RSA par kljuceva (molim pricekajte) ...
Generiranje RSA para kljuceva dovrseno!
Greska: Algorithm RSA not available
instalirali ste Bouncy Castle kriptografskog providera.

JAVA datoteka sa kodom primjera nalazi se ovdje.
Izvršavanje primjera za kriptografiju javnog ključa:
C:\Documents and Settings\Igor\My Documents\My WWW\FLY\Java\kod>javac CryptoJavniKljuc.java
C:\Documents and Settings\Igor\My Documents\My
WWW\FLY\Java\kod>java CryptoJavniKljuc
Upotreba: java CryptoJavniKljuc tekst
C:\Documents and Settings\Igor\My Documents\My
WWW\FLY\Java\kod>java CryptoJavniKljuc "Ovo je poruka"
Generiram RSA par kljuceva (molim pricekajte) ...
Generiranje RSA para kljuceva dovrseno!
BouncyCastle Security Provider v1.14
Enkripcija zapoceta ...
Enkripcija zavrsena !
w?w????jn?z?A/i?¶/??|?i?????A????.0?????H?z??TH ?J8`9<?p??0?+{? ?????¤???p??q?z§$?w????
??<?&?¶=?i.B?V??/2T
?3??c.W??q?<o
Dekripcija zapoceta ...
Dekripcija zavrsena !
Ovo je poruka