Metode enkripsi simetris RC4

Posted: Selasa, 30 Maret 2010 by feri van iero in
0

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.


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].

0 komentar: