2. JAVA CRYPTOGRAPHIC EXTENSION
(JCE)
I. Pendahuluan
API yang pertamaadalahJCA (Java Cryptography Architecture), merupakan framework sekuriti
yang diintegrasikanbersamainti (core) dari Java API. JCA banyakdikeluhkanmenyediakankriptografi yang
kurang 'kuat', dimanapanjangkuncikriptografi yang diperbolehkanhanyasampaimaksimum 128 atau 256
bit. Sudahbarangtentukuncikriptografi yang tidak 'kuat' ataupanjang bit kunci yang pendekmaka hacker
yang memecahkankriptografitersebut (cipher) hanyamemerlukanwaktu yang tidakterlalu lama. Lokasi
JCA terletakpadapaketjava.security.
API yang keduaadalah JCE (Java Cryptography Extension), merupakan framework
sekuritiekstensidari Java.Iamenyediakanekstensiuntukkriptografi yang kuat, diperbolehkanuntuk di-
eksporolehpemerintah US setelahkebijakanmengenaieksportahun 2000. JCE
mulaidiperbolehkansebagaiopsipakettambahanpada JDK v 1.2.x dan 1.3.x, sedangkanpada JDK v 1.4.x
telahdiintegrasikan.API JCE diimplementasioleh Cryptographic Service Providers.Pada JDK v 1.4.x
keatassecara default API service-provider nyaadalahSunJCE.Dengan JCE
makamemberikeleluasaankepadakita (memprogram java kriptografi) untukmemakaiimplementasidari API
service-provider yang diinginkan.Lokasi JCE terletakpadapaketjavax.crypto.
Symmetric dan Asymmetric Cryptography
merupakanjenisalgoritmakriptografiberdasarkanpenggunaankunci.Singkatnya, kriptografi symmetric
menggunakankunci yang samauntukmelakukan proses enkripsidandekripsisedangkankriptografi
asymmetric menggunakankunci yang berbedauntuk encrypt dan decrypt. Contohalgoritma symmetric
adalah AES, DES, RC4 dllsedangkan asymmetric adalah RSA, Elgamaldll.Gambardibawahinimerupakan
proses enkripsidandekripsialgoritma symmetric dan asymmetric.
Symmetric Algorithm Asymmetric Algorithm
3. Padaalgoritma asymmetric, terdapatduabuahkunciyaitukuncipublikuntuk encrypt dankunci private
untuk decrypt. Ketikaseseorang (misal Alice) akanmengirimkanpesanke Bob, maka Alice
akanmengenkripsipesantersebutmenggunakankuncipublik Bob dan Bob akanmembukapesan yang
diterimanyamenggunakankunci private. Hal tersebutmerupakankelebihanpadasistem asymmetric karena
user cukupmenyimpansecararahasiakunci private miliknya,
sedangkankuncipublikdapatdisebarkankeseluruh user yang
inginberkomunikasidengannyatanpaperlukhawatir orang yang
tidakberhakdapatmembukapesanmenggunakankuncipublik yang telahdisebartersebut.
Padasistem symmetric, kunci yang digunakanuntuk encrypt dan decrypt adalahsama, sehingga
user yang salingberkomunikasimenggunakansistem symmetric harussalingberkirimkunci yang
samakarenajikamerekatidakmenggunakankunci yang samamakapesantidakdapatterbuka di sisipenerima.
Jikaterdapatseseorang yang berada di tengah2 proses
kirimterimakuncidanberhasilmendapatkankuncitersebutmakamakasemuapesandapatterbuka.
Berbedadengansistem asymmetric, user hanyaperlu mengirimkankuncipubliksupaya orang
laindapatberkomunikasidengandirinya. User tidakperlutakutpenyerangdapatmerekonstruksi private
key darikuncipublik yang didapatkannya.
Kompleksitaspendistribusiankunci
pada symmetric lebihtinggidibandingkandengan asymmetric. Setiapsatukuncipada symmetric digunakano
lehdua user atausatugrupuntukberkomunikasi. Sayailustrasikansebagaiberikut, ketika user A
akanberkomunikasidengan user B merekamenggunakankunci X danketika user A berkomunikasidengan
user C merekaakanmenggunakankunci Y. Makaketika user B,C,D akanmengirimkanpesanke user A, user
A akanmenggunakan 3 buahkunci yang berbedauntukmembukapesan yang diterima.
Berbedadengansistem asymmetric,user B,C,D cukupmenggunakankuncipublik A
untukmengirimkanpesandan A cukupmenggunakankunci private nyauntukmembukapesantersebut.
Akan tetapi, sistem symmetric lebihcepatdalamkomputasidan ciphertext yang
dihasilkanlebihsedikitsehinggatidakmembebanibandwithpadasaat proses pengirimanpesan.
Biasanya symmetric dan asymmetric seringdigunakanbersamaanpadasuatusistem.Sebagaicontohpadasiste
m video conference
Agievic, asymmetric digunakanuntukpendistribusiankunci symmetric, kunci symmetric inidigunakanuntu
kuntukmengenkripsikomunikasi video conference
AES (Advance Encryption Standart)
Advanced Encryption Standard (AES) merupakanalgoritmakriptografi simetrik yang
dapatdigunkanuntukmengamakan data.Algoritma AESadalahblokchipertextsimetrik yang
dapatmengenkripsi (encipher) dandekripsi (decipher) informasi. Enkripsimerubah data yang
tidakdapatlagidibacadisebutciphertext.sebaliknyadekripsiadalahmerubahciphertext data
menjadibentuksemula yang kitakenalsebagai plaintext. Algoritma AESmengunakankuncikriptografi 128,
192, dan 256 bits untukmengenkripdandekrip data padablok 128 bits.
DES (Digital Encryption Standart)
Secure random key. DES (Data Encryption Standard) adalahalgoritmacipher blok yang
populerkarenadijadikan standard algoritmaenkripsikunci-simetri, meskipunsaatini standard
tersebuttelahdigantikandenganalgoritma yang baru, AES, karenaDES sudahdianggaptidakamanlagi.
SebenarnyaDES adalahnama standard enkripsisimetri, namaalgoritmaenkripsinyasendiriadalahDEA
4. (Data Encryption Algorithm), namunnamaDES lebihpopulerdaripadaDEA. AlgoritmaDES
dikembangkan di IBM dibawahkepemimpinan W.L. Tuchman padatahun
1972.AlgoritmainididasarkanpadaalgoritmaLucifer yang dibuatoleh Horst
Feistel.AlgoritmainitelahdisetujuiolehNational Bureau of Standard (NBS)
setelahpenilaiankekuatannyaolehNational Security Agency (NSA) AmerikaSerikat.DES
termasukkedalamsistemkriptografisimetridantergolongjeniscipher blok. DES beroperasipadaukuranblok
64 bit. DES mengenkripsikan 64 bit plainteksmenjadi 64 bit cipherteksdenganmenggunakan 56 bit kunci
internal (internal key) atauupa-kunci(subkey). Kunci internal dibangkitkandarikuncieksternal(external
key) yang panjangnya 64 bit.
II.Menginstall JCE
Berikutiniadalahcaramenginstall JCE ke JDK API kita.
1. Download Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files
disiniuntuk yang menggunakan JDK 7. Jikamenggunakan JDK selainitubisadisesuaikan.
2. Uncompressdanekstrak file yang didownloadtadi. Iniakanmembuatsubdirektori JCE.
Didalamdirektoritersebutakanterdapat file sbb:
README.txt
COPYRIGHT.html Copyright information
local_policy.jar Unlimited strength local policy file
US_export_policy.jar Unlimited strength US export policy file
3.Menginstall the unlimited strength policy JAR files.
Standarlokasiuntuk JCE jurisdiction policy JAR files adalah:
/jre/lib/security [Unix]
jrelibsecurity [Win32]
Artinyainitergantungkepada environment Java andaapakahandamenjalankanaplikasi java menggunakan
JRE denganmenginstall JDK atauhanya JRE sajatanpamenginstall JDK.
Dalamkasus environment Java menginstalldengan JDK, makamungkinakansepertiberikut
/home/user1/jdk1.6.0/jre [Unix]
C:jdk1.6.0jre [Win32]
Dalamkasus environment Java hanya JRE sajatanpamenginstall JDK, makamungkinakansepertiberikut
/home/user1/jre1.6.0 [Unix]
C:jre1.6.0 [Win32]
Dalamkasussayamakalokasiuntuk JCE adalah (JRE denganmenginstall JDK)
5. C:Program FilesJavajdk1.7.0_11jrelibsecurity [Win32]
4. Copy local_policy.jar dan US_export_policy.jar ke C:Program FilesJavajdk1.7.0_11jrelibsecurity
(ini environment Java di laptop saya). Catatan, kemungkinan file tersebutsudahada di direktoritersebut,
sehinggaandaharusmenimpasaja file tersebutdengan yang didownloadtadi.Jikalebihamannyamaka file
yang sudahadatadibisa di-rename terlebihdahulu.
5. Restart komputerandauntukmenyingkirkan exception yang terjadisebelummemasang file jar JCE yang
barutersebut.
III.ProgamKriptografi
a. Program Kriptografi DES
Source Code
packageorg.wikijava.crypto;
importjava.io.IOException;
importjava.io.UnsupportedEncodingException;
importjava.security.InvalidKeyException;
importjava.security.Key;
importjava.security.NoSuchAlgorithmException;
importjava.security.SecureRandom;
importjavax.crypto.BadPaddingException;
importjavax.crypto.Cipher;
importjavax.crypto.IllegalBlockSizeException;
importjavax.crypto.KeyGenerator;
importjavax.crypto.NoSuchPaddingException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
*
* @author Giulio
*/
public class CryptoMessage {
private Key key;
/**
6. * Generates the encryption key. using "des" algorithm
*
* @throws NoSuchAlgorithmException
*/
private void generateKey() throws NoSuchAlgorithmException {
KeyGenerator generator;
generator = KeyGenerator.getInstance("DES");
generator.init(new SecureRandom());
key = generator.generateKey();
}
private String encrypt(String message) throws IllegalBlockSizeException,
BadPaddingException, NoSuchAlgorithmException,
NoSuchPaddingException, InvalidKeyException,
UnsupportedEncodingException {
// Get a cipher object.
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
// Gets the raw bytes to encrypt, UTF8 is needed for
// having a standard character set
byte[] stringBytes = message.getBytes("UTF8");
// encrypt using the cypher
byte[] raw = cipher.doFinal(stringBytes);
// converts to base64 for easier display.
BASE64Encoder encoder = new BASE64Encoder();
String base64 = encoder.encode(raw);
return base64;
}
private String decrypt(String encrypted) throws InvalidKeyException,
NoSuchAlgorithmException, NoSuchPaddingException,
IllegalBlockSizeException, BadPaddingException, IOException {
// Get a cipher object.
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
//decode the BASE64 coded message
BASE64Decoder decoder = new BASE64Decoder();