metode enkripsi simetris RC4
Ketika internet menjadi salah satu media komunikasi yang banyak digunakan orang, sebagian orang kemudian berpikir untuk menjadikanya sebagai media untuk transaksi komersial semacan internet banking, e-comerce, dan lain sebagainya. Kebutuhan akan hal itu kemudian didukung dengan lahirnya berbagai metode ataupun algoritma – algoritma enkripsi untuk pengamanan data misalnya MD2,MD4,MD5,RC4,RC5, dan lain sebagainya. Pembakuan penulisan pada kriptografi dapat ditulis dalam bahasa matematika. Fungsi-fungsi yang mendasar dalam kriptografi adalah enkripsi dan dekripsi. Enkripsi adalah proses mengubah suatu pesan asli (plaintext) menjadi suatu pesan dalam bahasa sandi (ciphertext).
C = E (M)
dimana
M = pesan asli
E = proses enkripsi
C = pesan dalam bahasa sandi (untuk ringkasnya disebut sandi)
Sedangkan dekripsi adalah proses mengubah pesan dalam suatu bahasa sandi menjadi pesan asli kembali.
M = D (C)
D = proses dekripsi
Dalam setiap transaksi di internet , idealnya, setiap data yang ditransmisikan harusnya terjamin :
- Integritas data
Jaminan integritas data sangat penting, sehingga data yang di kirimkan akan sama persis dengan data yang diterima, tanpa mengalami perubahan apapun pada selama ditransmisikan.
- Kerahasiaan data
Jaminan kerahasiaan data juga penting karena dengan demikian tidak ada pihak lain yang bisa membaca data yang ada selama data tersebut ditransmisikan.
- Otentikasi akse data
Mekanisme otentikasi akses data menjamin bahwa data ditransmisikan oleh pihak yang benar dengan tujuan transimisi yang benar pula.
Teknik kriptografi data untuk enkripsi ada dua macam yaitu:
- Kriptografi simetrik
Dengan model kriptografi ini, data di enkripsi dan didekripsi dengan kunci rahasia yang sama.
- Kriptografi asimetrik
Dengan model kriptografi ini, data dienkripsi dan didekripsi dengan kunci rahasia yang berbeda.pasangan kunci untuk enkripsi dan dekripsi dikenal dengan private key dan public key.
Gbr-1. Metode enkripsi simetrik (1) dan asimetrik (2)
Aplikasi kriptografi simetrik RC4 menggunakan Java
RC4 merupakan merupakan salah satu jenis stream cipher, yaitu memproses unit atau input data pada satu saat. Dengan cara ini enkripsi atau dekripsi dapat dilaksanakan pada panjang yang variabel. Algoritma ini tidak harus menunggu sejumlah input data tertentu sebelum diproses, atau menambahkan byte tambahan untuk mengenkrip. Metode enkripsi RC4 sangat cepat kurang lebih 10 kali lebih cepat dari DES.
Untuk melihat bagaimana metode enlripsi RC4 bekerja maka dalam tulisan ini dibuat aplikasi dengan menggunakan java, adapun source program tersebut adalah sebagai berikut :
Nama file : RC4Engine.java
—————-mulai—————-
class KeyParameter{
private byte[] key;
public KeyParameter(byte[] key){
this(key,0,key.length);
}
public KeyParameter(byte[] key,int keyoff,int keyLen){
this.key = new byte[keyLen];
System.arraycopy(key,keyoff,this.key,0,keyLen);
}
public byte[] getKey(){
return key;
}
}
class EncRC4Engine{
private final static int STATE_LENGTH = 256;
private byte[] engineState = null,workingKey = null;
private int x=0,y=0;
private static final char[] kDigits = {‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’a',’b',’c',’d',’e',’f'};
EncRC4Engine(){}//constructor
public void init(boolean forEncryption,KeyParameter params){
if(params instanceof KeyParameter){
workingKey = ((KeyParameter)params).getKey();
setKey(workingKey);
return;
}
throw new IllegalArgumentException(“invalid parameter passed to RC4 init”+params.getClass().getName());
}
public void processBytes(byte[] in,int inOff,int len,byte[] out,int outOff){
if((inOff+len)>in.length){
throw new RuntimeException(“output buffer too short”);
}
if((outOff+len)>out.length){
throw new RuntimeException(“out put buffer too short”);
}
for (int i = 0 ; i < len ; i++){
x = (x+1) & 0xff;
y = ( engineState[x] + y ) & 0xff;
//swap
byte tmp = engineState[x];
engineState[x] = engineState[y];
engineState[y] = tmp;
//xor
out[i + outOff] = (byte)(in[i+inOff] ^ engineState[(engineState[x] + engineState[y]) & 0xff]);
}
}
public String bytesToHex(byte[] raw){
int length = raw.length;
char[]hex = new char[length*2];
for (int i=0;i<length;i++){
int value = (raw[i]+256) % 256;
int highIndex = value >> 4;
int lowIndex = value & 0×0f;
hex[i*2+0] = kDigits[highIndex];
hex[i*2+1] = kDigits[lowIndex];
}
return (new String(hex)).toString();
}
public void reset(){
setKey(workingKey);
}
//private implementation
private void setKey(byte[] keyBytes){
workingKey = keyBytes;
x=0;y=0;
if (engineState == null){
engineState = new byte [STATE_LENGTH];
}
//reset the state of the engine
for(int i = 0;i < STATE_LENGTH;i++){
engineState[i]=(byte)i;
}
int i1=0;int i2=0;
for(int i=0;i < STATE_LENGTH;i++){
i2 = ((keyBytes[i1] & 0xff) + engineState[i]+ i2) & 0xff;
//do the byte swap inline
byte tmp = engineState[i];
engineState[i]=engineState[i2];
engineState[i2]=tmp;
i1=(i1+1) % keyBytes.length;
}
}
}
————-selesai—————-
nama file : TesRC4Engine.java
————-mulai—————-
import java.io.*;
class tesRC4Engine {
public static void main (String args[]){
try{
String myKey1, myKey2, text2Encrypt, text2Decrypt;
BufferedReader b;
byte[] ciphertext1;
byte[] ciphertext2;
EncRC4Engine s1 = new EncRC4Engine();
EncRC4Engine s2 = new EncRC4Engine();
b = new BufferedReader(new InputStreamReader(System.in));
System.out.print(“masukan data untuk encryption : “);
text2Encrypt = b.readLine();
System.out.print(“masukan kunci encryption : “);
myKey1 = b.readLine();
s1.init(true,new KeyParameter(myKey1.getBytes()));
ciphertext1 = new byte[text2Encrypt.length()];
s1.processBytes(text2Encrypt.getBytes(),0,text2Encrypt.length(),ciphertext1,0);
System.out.print(“hasil encrypt dari \”" + text2Encrypt);
System.out.println(“\” adalah ” + s1.bytesToHex(ciphertext1));
text2Decrypt = s1.bytesToHex(ciphertext1);
System.out.print(“masukan kunci untuk decrypt : “);
myKey2 = b.readLine();
s2.init(false,new KeyParameter(myKey2.getBytes()));
ciphertext2 = new byte[ciphertext1.length];
s2.processBytes(ciphertext1, 0, ciphertext1.length,ciphertext2,0);
System.out.print(“hasil decrypt dari \”" + text2Decrypt);
System.out.println(“\” adalah ” + (new String(ciphertext2)).toString());
}catch(IOException e){
e.printStackTrace();
}
}
}
———–selesai———–
Kompilasi dan hasil eksekusi dari source program diatas afalah sebagai berikut:
C:\>java TesRC4Engine
masukan data untuk encryption : keamanan jaringan komputer
masukan kunci encryption : kjk
hasil encrypt dari “keamanan jaringan komputer” adalah 5ec874ee3cd7cd0b38dad37c7b684c0ccc589c2f1e689287a746
masukan kunci untuk decrypt : kjk
hasil decrypt dari “5ec874ee3cd7cd0b38dad37c7b684c0ccc589c2f1e689287a746″ adalah keamanan jaringan komputer
C:\>java TesRC4Engine
masukan data untuk encryption : keamanan jaringan komputer
masukan kunci encryption : h
hasil encrypt dari “keamanan jaringan komputer” adalah ca28c9e03687b13fd9f0273fb8c5d31eba8955371c82c3985647
masukan kunci untuk decrypt : kjk
hasil decrypt dari “ca28c9e03687b13fd9f0273fb8c5d31eba8955371c82c3985647″ adalah ÿ…Ück>ZÁ@•1ªÃøsñ¢woš$k”s
Dari hasil diatas dapat diambil suatu analisi bahwa :
- RC4 merupakan algoritma enkripsi simetris
Hal ini terbukti bahwa untuk melakukan enkripsi dan dekripsi diperlukan suatu kunci/key yang sama. Jika key untuk enkripsi dan key untuk dekripsi berbeda, hasil dekripsi tidak akan menghasilkan hasil yang sama dengan plain text yang sebenarnya. Hal ini dapat dilihat pada eksekusi program yang kedua.
- Hasil enkripsi bergantung dari key
Hasil enkripsi dari plain text yang sama akan berbeda jika digunakan key atau kunci yang berbeda pula. Dengan kata lain hasil enkripsi merupakan fungsi dari plain text dan key.
Keamanan metode enkripsi RC4
Perbandingan kemanan metode enkripsi DES dengan RC4 menurut penulisnya pada http://www.geocities.com/amwibowo/resource/komparasi/komparasi.html adalah sebagai berikut :
|
Panjang kunci DES |
Jaminan waktu untuk menemukan kunci |
|
40-bit |
0,4 detik |
|
56-bit |
7 jam |
|
64-bit |
74 jam 40 menit |
|
128-bit |
157.129.203.952.300.000 tahun |
Tabel 1.1. Serangan brute-force pada DES
|
Panjang kunci RC4 |
Jaminan waktu untuk menemukan kunci |
|
40-bit |
15 hari |
|
56-bit |
2.691,49 tahun |
|
64-bit |
689.021,57 tahun |
|
128-bit |
12.710.204.652.610.000.000.000.000 tahun |
Tabel 1.2. Serangan brute-force pada RC4
Dari tabel diatas dapat dilihat bahwa metode enkripsi dengan menggunkan RC4 masih lebih aman dibanding dengan metode enkripsi dengan DES.
Daftar pustaka
Wicaksono, Adi. (2003). Pemrograman Internet dan XML pada Ponsel dengan Midlet Java. Jakarta: PT Elex Media Komputindo.
Kriptografi [online], available http://www.geocities.com/amwibowo/resource/ komparasi/komparasi.html [12 desember 2005].
Sukmawan, Budi.(1998). RC4 STREAM CIPHER, available http://bdg.centrin.net.id/ ~budskman/rc4.htm [12 desember 2005].
Semoga bermanfaat.
Regards
Hyraxz ( mr.hhan@gmail.com )
Saya adalah mahasiswa jurusan infrmatika yang saat ini tengah mengerjakan skripsi tentang enkripsi file.Saya menemukan kesulitan di dalam mengerjakan tugas tersebut.Saya sangat membutuhkan pertolongan dari anda tentang pembuatan enkripsi file tersebut tentang referensi penggunaan metode-metode seperti DES,RC4,RSA,3DES,DSA (keuntungan dan kelemahan,juga metode yang paling pas untuk membuat enkripsi tersebut).Saya sangat berterima kasih jika anda mau membantu saya dalam menyelesaikan tugas akhir saya.
emir
August 2, 2007 at 4:01 pm
@emir
untuk keuntungan rc4 seperti diatas (sedikit) untuk metode yang lainya saya sendiri belum mempelajari lebih jauh. untuk referensi rc4 diatas saya menggunakan buku java kecil warna biru karangan Wicaksono, Adi, barangkali bisa dijadikan referensi. semoga membantu.
hhan
August 3, 2007 at 12:07 am
mr. hhan. ini mirip judul TA gw. heheheh… “Implementation MD5, SHA1 & RC4 algorithms for Cryptography System on Mobile Internet Based on Java”
Mau lebih aman lagi? nah tu kunci enkripsi nya dihash dulu (pake MD5 ato SHA1). outputnya kan kalo MD5 128 bit, SHA1 160 bit. Lumayan panjang tho.. Siapa tau usernya males bikin key yg panjang panjang, so langsung digenerate sm sistem.
betul banget ni algoritma relatif nggak berat, bahkan di hape 3650 gw yg waktu zamannya TA dulu bisa processing. Kalo temen kita yang satu lg, nyobain RSA pake hape.. walah walah.. pake matlab aja dah setengah mati prosesnya. Nekat pake hape lagi. Hehe..
dah nyoba kalo dikasi key yg berulang belom? ni bisa jadi analisa buat kelemahan RC4 lho, contoh, gmn kalo dikasi key “kjkkjk”, dengan plain teks yang sama apa yang terjadi dgn cipher nya?
Jadi keinget zaman zaman perjuangan dulu
btw, update in alamat blog gw dong. Dah bukan di angger.com lagi, sekarang pindah ke http://chasta.wordpress.com
chasta
October 14, 2007 at 9:44 pm
@chasta
wahhh.. ganti wordpress jg ya.. ok boss dah di update
hhan
October 16, 2007 at 8:59 am
oi..bs tolongin gw ga recomendasiin judul TA S1 IF..gw puyeng nih ga ketemu2 apa yg mesti gw bt..thanks 4 reply
RyZ
November 19, 2007 at 9:49 am
Thx informasinya…
Sy emang lagi nyari enkripsi di java… Ntar kl ada kesulitan sy bole konsultasi ya
visit:
http://danigunawan.blogspot.com
http://blackmindstorm.blogspot.com
dagu
November 23, 2007 at 5:54 pm
bagus
raihana
December 7, 2007 at 8:44 am
ms, hhan / yang lain saya minta informasinya dong. saya sedang bikin tugas akhir mengenai enkripsi nih tapi pake visual basic 6.0 trus yang saya buat hanya kriptografi klasiknya aj (caesar, playfair, shift, hill and vigenere cipher). saya uda buat untuk caesarnya tapi untuk yang lain saya agak kesulitan. bisa bantu ga? pleeeeaaaseee!
syahrul
December 12, 2007 at 3:20 pm
mr.hhan tolongin saya dong…
saya dapet tugas dari dosen untuk mencari tentang
RC5 baik algoritmanya, source code nya, flowchartnya, kelebihan serta kelemahannya yang disertai dengan pembuktian kenapa hal tsb saya anggap kelemahan dr RC5…(t’utama ttg kelebihan n kelemahannya deh)
atau saya minta tolong kasih tau referensi yang dapat membantu saya dalam pengerjaan tugas tsb. mohon dijwb scepatnya krn tugas ini hari senin tgl. 17 des. 2007 sdh dimnta di presentasikan…please,,,
trima kasih byk
sobah
December 15, 2007 at 2:55 pm
http://en.wikipedia.org/wiki/RC5
hhan
December 16, 2007 at 1:57 pm
[...] satu lagi artikel baru,kali ini tentang security pada proses pengiriman data. artikel dengan judul metode enkripsi simetris RC4 membahas mengenai macam2 encription disertai dengan contoh program enkripsi RC4 dengna menggunakan Java.untuk lebih lengkapnya silahkan lihat di:http://hhan.wordpress.com/2007/07/25/metode-enkripsi-simetris-rc4 [...]
HhAN » Blog Archive » [new article] metode enkripsi simetris RC4
September 10, 2008 at 12:46 pm
gd dh cobain skrip java…truz jalan..
pertanyaanya..
1. Kenapa panjang isi pesan utk di enkripsi g bisa panjang..misalnya > 30 karakter…
2. Kenapa panjang key-nya g bisa panjang..misalnya > 10 karakter…
btw tx ya
sharpeni
November 26, 2008 at 5:49 pm
Minta tolong di perlihatkan flow/alur programnya donk…. tx ya
sharpeni
November 27, 2008 at 5:47 am
pakai flow chart
sharpeni
November 27, 2008 at 5:48 am