RC4
RC4 yang juga dikenal dengan ARCFOUR (Alleged RC4)adalah software stream cipher yang paling banyak digunakan. RC4 juga digunakan dalam protokol yang populer seperti SSL (Secure Sockets Layer) yang digunakanuntuk melindungi lalu lintas internet dan WEP yang digunakan untuk mengamankan jaringan wireless.
Sejarah RC4
RC4 didesain oleh Ron Rivest yang berasal dari RSASecurity pada tahun 1987. RC sendiri mempunyaisingkatan resmi yaitu "Rivest Chiper", namun jugadikenal sebagai “Ron’s Code” RC4 sebenarnyadirahasiakan dan tidak dipublikasikan kepada khalayakramai, namun ternyata ada orang yang tidak dikenalmenyebarkan RC4 ke mailing list "Cypherpunks"' .Kemudian berita ini dengan cepat diposkan ke sci.crypt
newsgroup, dan dari newsgroup ini kemudian menyebarluas di internet. Kode yang dibocorkan tersebut dipastikankeasliannya karena output yang dikeluarkansama dengansoftware-software yang menggunakan RC4 yangberlisensi. Nama RC4 sudah dipatenkan, sehingga RC4sering disebut juga ARCFOUR atau ARC4 (Alleged RC4)untuk menghindari masalah pematenan. RSA Securitytidak pernah secara resmi merilis algoritma tersebut,
namun Rivest secara pribadilah yang merilisnya tersebutdengan menhubunkan Wikipedia Inggris ke catatan-catatan yang ia punya. RC4 telah menjadi bagian dariprotokol enkripsi yang standard dan sering digunakan,termasuk WEP dan WPA untuk wireless card, serta TLS.Faktor utama yang menjadi kesuksesan dari RC4 adalahkecepatannya dan kesederhanaannya dalam menanganibanyak applikasi, sehingga mudah untuk mengembangkanimplementasi yang effisien ke software dan hardware.
Implementasi dari Algoritma RC4
Banyak stream cipher dibuat berdasarkan LinearFeedback Shift Registers (LFSRs) yang efisien diperangkat keras namun kurang efisien dalam perangkatlunak. Desain dari RC4 menghindari penggunaan LFSRs,dan algoritma ini ideal untuk implementasi perangkatlunak karena hanya menggunakan manipulasi byte.Algoritma ini menggunakan 256 byte memori untukkunci, yaitu key[0] sampai key[k-1], dan variabel integer i, j, dan y. Reduksi modular dari beberapa nilai modulo256 dapat dilakukan dengan sebuah bitwise AND dengan 255 (yang ekuivalen untuk mengambil byte dengan orderendah dari nilai di pertanyaan).Berikut ini adalah implementasinya dalam bahasa C.
unsignedcharS[256]; unsignedinti,j; voidswap(unsignedchar*s,unsignedinti,unsignedintj){
unsignedchartemp =s[i]; s[i]=s[j]; s[j]=temp;}
/* KSA */ voidrc4_init(unsignedchar*key, unsignedintkey_length){
for(i =0;i <256;i++) S[i]=i; for(i =j =0;i <256;i++){ j =(j +key[i %key_length]+S[i])&255;
swap(S,i,j); } i =j =0;}
/* PRGA */ unsignedcharrc4_output(){
i =(i +1)&255; j =(j +S[i])&255; swap(S,i,j); returnS[(S[i]+S[j])&255];
}
- include <stdio.h>
intmain(){
intk,output_length; unsignedcharkey[]="Secret";
// key hardcoded to "Secret" output_length =10; // number of bytes of output desired rc4_init(key,6); // length of key is 6 in this case k =0;
while(k <output_length){ printf("%c",rc4_output()); k++; }}
Keamanan
Tidak seperti stream cipher modern, RC4 tidakmengambil nonce yang terpisah bersamaan dengan kunci.Hal ini berarti jika kunci single long-term digunakanuntuk mengenkripsi beberapa stream, kriptosistemnyaharus menentukan bagaimana cara mengombinasikan nonce tersebut dan kunci long-term untuk menghasilkankunci stream untuk RC4. Sebuah pendekatan untukmenangani hal tersebut adalah dengan membuat sebuahkunci RC4 dengan menggunakan fungsi hash. Enkripsidengan menggunakan RC4 dapat diterobos dan rentanterhadap bit-flipping attack. Untuk menanggulangi hal ini,skema enkripsi harus dikombinasikan dengan messageauthentication code yangkuat.