Metode enkripsi simetris RC4
Posted: Selasa, 30 Maret 2010 by feri van iero inKetika 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.
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 <>
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
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 <>
engineState[i]=(byte)i;
}
int i1=0;int i2=0;
for(int i=0;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].