BAB 2
LANDASAN TEORI
2.1Algoritma RC4
RC4 merupakan salah satu jenis stream cipher, yaitu memproses unit atau input data pada satu saat. Dengan cara ini enkripsi maupun dekripsi dapat dilaksanakan pada
panjang variabel. Algoritma ini tidak harus menunggu sejumlah input data tertentu
sebelum diproses, atau menambahkan byte tambahan untuk mengenkripnya. Metode
enkripsi RC4 sangat cepat kurang lebih 10 kali lebih cepat dari Data Encyption
Standard (DES) (Mollin, 2005).
Sistem sandi RC4 dikembangkan oleh Ronald Rivest untuk RSA Data Security
(sekarang RSA Security) pada 1984 yang merupakan sistem sistem stream yang sangat banyak digunakan (Mollin, 2005). RC4 menggunakan panjang variabel kunci dari 1
s.d 256 byte untuk menginisialisasi state tabel. State table digunakan untuk
pengurutan menghasilkan byte pseudo-random yang kemudian menjadi stream pseudo-random. Setelah di-XOR dengan plaintext sehingga didapatkan ciphertext.
Tiap elemen pada state table ditukar sedikitnya sekali tukaran. Kunci RC4 sering dibatasi sampai 40 bit, tetapi ada kemungkinan untuk mengunakan kunci 128 bit. RC4
memiliki kemampuan penggunaan kunci antara 1 sampai 2048 bit.
Ukuran dari sistem sandi RC4 sangat mempengaruhi keamanan sistem sandi
tersebut. RC4 telah dibuktikan tidak aman dengan ukuran kunci sandi yang kecil,
yaitu di bawah 5 byte. Penggunaan sandi RC4 memiliki keamanan yang kuat, yaitu:
1. Ukuran kunci sama atau lebih besar daripada 256 bit (16 byte)
2. Setiap sesi yang membangkitkan kunci yang baru ( dengan pembangkitan
kunci yang baru dapat menghindari penyerang untuk menganalisis sandi
Dalam beberapa aplikasi, RC4 digunakan untuk enkripsi data seperti RSA
SecurPC yang merupakan salah satu produk RSA Securty, Inc. Algoritma RC4 juga
digunakan untuk keamanan komunikasi dalam pengiriman data melalui email dan keamanan website dengan menggunakan protokol SSL (Secure Sockets Layer).
Misalnya kriptografi yang menggunakan algoritma RC4 ini adalah HotCrypt, WodCrypt serta SSLite dan CryptoLite dari IBM.
Algoritma RC4 dirancang supaya dapat diimp lementasikan pada software secara efisien. Ini yang membuat RC4 sangat populer untuk dipakai pada aplikasi
internet, antara lain RC4 digunakan dalam standard TLS (transport layer security)
dan WEP (wireless equivalent privacy) (Sadikin, 2012).
Cara membuat keystream dalam RC4 adalah dengan menggunakan state
automaton yang terdiri dari dua cara, yaitu :
1. Key scheduling di mana state automaton diberi nilai awal berdasarkan kunci enkripsi.
2. Pseudo-random generation dimana state automaton beroperasi dan outputnya menghasilkan keystream.
Variabel suatu enkripsi dihasilkan dari setup kunci, dimana kunci akan di
XOR-kan dengan plaintext untuk menghasilkan teks yang sudah dienkripsi. XOR merupakan operasi logika yang membandingkan dua bit biner. Jika nilai beda, maka
akan dihasilkan nilai 1, sedangkan jika kedua bit tersebut sama maka nilainya adalah
0. Kemudian penerima pesan akan mendekripsikan dengan meng-XOR-kan kembali
dengan memakai kunci yang sama supaya menghasilkan plaintext yang sama.
Kunci
Gambar 2.2. Proses pembangkitan acak untuk kunci RC4 (Munir, 2006)
Gambar 2.2 merupakan proses membangkitkan kunci secara acak, di mana
aliran kunci K dipilih dengan mengambil nilai S[i] dan S[j] dan menjumlahkan
dengan modulo 256. Hasil dari penjumlahan tersebut adalah index t, sehingga S[t]
akan menjadi kunci aliran K yang kemudian dipakai untuk enkripsi plaintext, karena karakter kunci dicopy secara berulang-ulang maka ada kemungkinan nilai- nilai di
dalam larik S ada yang sama. Sebenarnya RC4 mudah diserang dengan known-plaintext attack, apabila kriptanalis mengetahui plaintext dan ciphertext yang
berkoresponden (Munir, 2006).
2.1.1 Cara Kerja RC4
RC4 menggunakan dua buah kotak subtitusi (S-box) array 256 byte yang berisi
permutasi dari bilangan 0 sampe 255 dan S-Box kedua yang berisi permutasi fungsi
dari kunci dengan panjang yang variabel (Sadikin, 2012).
Cara kerja dari algoritma RC4 ini adalah dengan menginisialisasi S-box
pertama, S[0], S[1], ...., S[255], dengan bilangan 0 sampai dengan 255. Pertama-tama
isi secara berurutan S[0] = 0, S[1] = 1, ..., S[255] = 255. Kemudian inisialisasi array
lain (S-Box lain), misalnya array K dengan panjang 256. Isi array K dengan kunci
yang diulangi sampai seluruh array K[0], K[1], ..., K[255] sampai terisi semuanya.
Proses dari inisialisasi S-Box (Array S) (Giradkar & Bhattacharya, 2015).
For r = 0 to 255
Proses inisialisasi S-box (Array K)
Array Kunci
for i = 0 to 255
K [i] = kunci [i mod length]
Kemudian lakukan langkah pengacakan S-Box dengan cara sebagai berikut:
j = 0
for i = 0 to 255
j = (j + S[i] + K[i]) mod 26
isi S [i] dan isi S [j[ di swap
Dengan demikian berakhirlah proses persiapan kunci RC4. Untuk
membangkitkan kunci enkripsi, dilakukan proses berikut ini:
i = j = 0
i = (i + 1) mod 256
j = (j + S [i]) mod 26
Isi S [i] dan S [j] di swap
k = S [ S [i] + S [j] ] mod 26
k kecil di atas merupakan kunci yang langsung beroperasi terhadap plaintext, sedangkan K besar adalah kunci utama atau kunci induk. Bila terdapat plaintext P,
maka operasi enkripsinya adalah: C = P ⊕ k , sedangkan untuk operasi dekripsi
adalah P = k ⊕ C.
Contoh:
Implementasi algoritma RC4 menggunakan mode 4 byte untuk mengenkripsi
plaintext EMY dengan kunci 2 8.
Langkah- langkahnya adalah sebagai berikut :
a. Inisialisasi array S-box dengan panjang 4 byte sehingga array S-box array S
berbentuk S[0]=0, S[1]=1, S[2]=2, S[3]=3.
Tabel 2.1 Inisialisasi Array S-box
Index 0 1 2 3
S 0 1 2 3
b. Inisialisasi array kunci (S-box lain). Pada contoh ini digunakan algoritma
sehingga kunci k = [2 8 2 8], S-box kunci K berbentuk K[0]=2, K[1]=8,
K[2]=2, dan K[3]=8.
Tabel 2.2 Kunci yang digunakan
Index 0 1 2 3
K 2 8 2 8
c. Kemudian lakukan permutasi nilai- nilai di dalam array S dengan cara
menukarkan isi array S[i] dengan S[j]. Karena pada contoh di atas digunakan
algoritma RC4 dengan mode 4 byte. Berikut prosesnya:
j = 0
for i = 0 to 3
j = (j+S[i] + K[i]) mod 4 isi S[i] dan isi S[j] ditukar
dengan menggunakan algoritma tersebut. Untuk nilai i = 0 sampai i = 3
didapatkan nilai array S sebagai berikut:
1. Iterasi pertama, untuk nilai i = 0
j = (j + S[i] + K[i]) mod 4 j = (j + S[0] K[0]) mod 4 j = (0 + 0 + 2) mod 4 j = 2
Kemudian lakukan pertukaran antara isi array S[0] dengan S[2], sehingga
hasilnya array S sebagai berikut:
Tabel 2.3 Swap antara S[0] dengan S[2]
Index 0 1 2 3
S 2 1 0 3
2. Iterasi kedua, untuk nilai i = 1 dan j = 2 (nilai j = 2 diperoleh dari hasil
iterasi pertama)
Kemudian lakukan pertukaran antara isi array S[1] dengan S[3], sehingga
hasilnya array S sebagai berikut:
Tabel 2.4 Swap antara S[1] dengan S[3]
Index 0 1 2 3
S 2 3 0 1
3. Iterasi ketiga, untuk nilai i = 2 dan j = 3 (nilai j = 3 diperoleh dari hasil
iterasi kedua.
j = (j + S[i] + K[i]) mod 4 j = (j + S[2] K[2]) mod 4 j = (3 + 0 + 2) mod 4 j = 1
Kemudian lakukan pertukaran antara isi array S[2] dengan S[1], sehingga
hasilnya array S sebagai berikut:
Tabel 2.5 Swap antara S[2] dengan S[1]
Index 0 1 2 3
S 2 0 3 1
4. Iterasi keempat, untuk nilai i = 3 dan j = 1 (nilai j = 1 diperoleh dari hasil
iterasi ketiga.
j = (j + S[i] + K[i]) mod 4 j = (j + S[3] K[3]) mod 4
j = (1 + 1 + 8) mod 4 j = 2
Kemudian lakukan pertukaran antara isi array S[3] dengan S[2], sehingga
hasilnya array S sebagai berikut:
Tabel 2.6 Swap antara S[3] dengan S[2]
Index 0 1 2 3
5. Hasil dari array S-box akan digunakan untuk langkah selanjutnya adalah
array S hasil iterasi yang terakhir atau iterasi keempat pada implementasi
algoritma RC4 dengan mode 4 byte.
d. Karena plaintext mempunyai panjang 4 byte, untuk mendapatkan ciphertext
terlebih dahulu bangkitkan keystream sebanyak 3 byte. Proses untuk membangkitkan key enkripsi pada mode 4 byte adalah sebagai berikut:
i = j = 0
Dengan menggunakan algoritma di atas, dapat digunakan untuk
membangkitkan kunci proses enkripsi dengan cara berikut:
1. Iterasi pertama, untuk nilai i = j = 0, maka
Lakukan swap terhadap S[1] dan S[0], sehingga array S menjadi:
Tabel 2.7 Swap antara S[1] dengan S[0]
Index 0 1 2 3
S 0 2 1 3
t = (S[1] + S[0]) mod 4
t = (2 + 0) mod 4 = 2
K = S[t] = S[2] = 1
Jadi, kunci pertama untuk enkripsi adalah 1.
2. Iterasi kedua, untuk nilai i = 1 dan j = 0 (nilai i dan j didapat dari hasil
iterasi pertama, maka:
i = (i + 1) mod 4
j = (j + S[i]) mod 4
j = (0 + S[2]) mod 4
j = (0 + 1) mod 4 = 1
Lakukan swap terhadap S[2] dan S[1], sehingga array S menjadi:
Tabel 2.8 Swap antara S[2] dengan S[1]
Index 0 1 2 3
S 0 1 2 3
t = (S[2] + S[1]) mod 4
t = (2 + 1) mod 4 = 3
K = S[t] = S[3] = 3
Jadi, kunci kedua untuk enkripsi adalah 3.
3. Iterasi ketiga, untuk nilai i = 2 dan j = 3 (nilai i dan j didapat dari hasil
iterasi kedua, maka:
i = (i + 1) mod 4
i = (2 + 1) mod 4 = 3
j = (j + S[i]) mod 4
j = (0 + S[3]) mod 4
j = (1 + 3) mod 4 = 0
Lakukan swap terhadap S[3] dan S[0], sehingga array S menjadi:
Tabel 2.9 Swap antara S[0] dengan S[2]
Index 0 1 2 3
S 3 1 2 0
t = (S[3] + S[0]) mod 4
t = (0 + 3) mod 4 = 3
K = S[t] = S[3] = 0
Jadi, kunci pertama untuk enkripsi adalah 0.
e. Kemudian lakukan enkripsi, dengan plaintext di- XOR kan dengan kunci.
Tabel 2.10 Proses Enkripsi
Kode Biner
E M Y
Plaintext 01000101 01001101 01011001
Kunci (k) 00110001 00110011 00110000
P ⊕K 01110100 01111110 01101001
Ciphertext T ~ I
Untuk mengembalikan plaintextnya, sebagai berikut:
Tabel 2.11 Proses Dekripsi
Kode Biner
T ~ I
Ciphertext 01110100 01111110 01101001
Kunci (k) 00110001 00110011 00110000
P ⊕K 01000101 01001101 01011001
Plaintext E M Y
2.2 Algoritma Kriptografi
Berdasarkan kunci yang dipakai, algoritma kriptografi dibagi menjadi tiga bagian,
yaitu sebagai berikut:
a. Algoritma Simetris
Algoritma ini merupakan algoritma klasik karena memakai kunci yang sama
untuk enkripsi dan dekripsi. Keamanan pesan yang menggunakan algoritma
ini tergantung pada kunci. Jika kunci tersebut diketahui oleh orang lain , maka
akan dapat melakukan enkripsi maupun dekripsi terhadap pesan yang dikirim.
Algoritma yang menggunakan kunci simetris diantaranya adalah: Data
Encryption Standard (DES), RC2, RC4, RC5, RC6, International Data Encryption Algorithm (IDEA), Advanced Encryption Standard (AES), One Time Pad (OTP), A5, dan lain sebagainya.
Berikut adalah skema dari kriptografi simetris:
Kelebihan dari algoritma simetris adalah kecepatan operasinya lebih tinggi
dibandingkan dengan algoritma asimetris dan karena kecepatannya tinggi, maka dapat
digunakan pada sistem real time.
Sedangkan kelemahan dari algoritma ini adalah setiap pengiriman pesan
dengan pengguna yang berbeda dibutuhkan key yang berbeda pula, sehingga terjadi kesulitan dalam manajemen key dan permasalahan di dalam pengiriman kunci
biasanya disebut dengan “key distribution problem” (Chehal & Singh, 2012).
b. Algoritma Asimetris
Algoritma ini merupakan algoritma kunci publik, karena kata kunci yang
digunakan untuk mengenkripsi dan mengdekripsi pesan menggunakan kunci
yang berbeda. Pada algoritma asimetris, kunci terbagi kepada dua bagian,
yaitu: kunci umum yang boleh diketahui oleh semua orang, sedangkan kunci
private hanya boleh diketahui oleh satu orang saja. Algoritma yang menggunakan kunci publik adalah: Digital Signature Algorithm (DSA), RSA, Diffie-Helman (DH), kriptografi Quantum, dan lain sebagainya.
Gambar 2.4. Skema kriptografi Simetris
Kelebihan dari algoritma asimetris adalah pada masalah keamanan pada
distribusi kunci dapat lebih baik dan pada manajemen kunci yang lebih baik karena
jumlah kuncinya yang lebih sedikit.
Sedangkan kelemahan dari algoritma asimetris adalah kecepatannya lebih
rendah dibandingkan dengan algoritma simetris dan tingkat keamanannya sama, key yang digunakan lebih panjang jika dibandingkan dengan algoritma simetris. (Mulya,
2013)
c. Fungsi Hash
Merupakan fungsi yang menerima masukan string yang panjangnya
sembarang dan mengkonversikannya menjadi string yang keluaran
panjangnya tetap (fixed) (umumnya berukuran jauh lebih kecil daripada
Jika string tersebut menyatakan pesan, maka sembarang pesan M berukuran bebas dapat dikompresi oleh fungsi hash H melalui persamaan :
h = H (M) (2.1)
2.3 Pembangkit Bilangan Acak
Bilangan acak adalah bilangan yang sulit diprediksi, ada beberapa bagian dari
bilangan acak yang dapat diprediksi dan saling berhubungan. Kebanyakan
pembangkit bilangan acak (Random Number Generator (RNG)) mengulang string yang sama setelah melakukan n putaran. Sedangkan ada juga yang bilangan acak
menghasilkan nilai acak dengan fokus pada suatu area tertentu.
Random Number Generator merupakan suatu peralatan komputasional yang
dirancang untuk menghasilkan suatu deretan nilai yang tidak dapat ditebak polanya
dengan mudah, sehingga deretan nilai tersebut dapat dianggap sebagai suatu keadaan
acak. RNG sulit diterapkan dalam praktek. Bilangan acak yang dihasilkan oleh
komputer sekalipun tidak benar-benar acak dan kebanyakan dari bilangan acak
tersebut jika diterapkan dalam kriptografi juga tidak benar-benar bilangan acak,
melainkan bilangan acak semu. Itu berarti bilangan acak yang dihasilkan dapat
ditebak deretan nilainya (Schneier, 1996). Dalam kriptografi, bilangan acak yang
dihasilkan dengan rumus-rumus matematika itu disebut bilangan acak semu, karena
bilangan tersebut yang dibangkitkan dapat berulang kembali secara berkala.
Pembangkit deret bilangan acak yang seperti itu disebut PRNG (pseudo-random
number generator) (Schneir, 1996).
Pseudo-random number generator (PRNG) adalah suatu algoritma yang menghasilkan suatu urutan nilai acak dimana emlemen-elemenya bergantung pada
setiap nilai yang dihasilkan (Stinson, 1995). Output dari PNRG tidak benar-benar
acak, tetapi hanya mirip dengan nilai acak. Kebanyakan algoritma dari pseudo random number generator ditujukan untuk menghasilkan suatu contoh yang secara
seragam terdistribusi. Pseudo-random number generatorini sering digunakan dalam kriptografi pada proses pembentukan kunci dari sebuah metode kriptografi.
Kerumitan dari PRNG ini adalah waktu menentukan tingkat keamanan dari metode
kriptografi. Semakin rumit PRNG yang digunakan, maka akan semakin tinggi tingkat
Pembangkit bilangan acak yang dapat menghasilkan bilangan yang tidak
dapat diprediksi oleh orang-orang yang tidak bertanggung jawab untuk kriptografi
adalah cryptographically secure pseudorandom generator (CSPRNG). Syarat untuk CSPRNG adalah :
1. Secara statistik mempunyai sifat-sifat yang baik ( lulus dalam uji
keacakan statistik).
2. Tahan terhadap serangan-serangan yang ada. Serangan tersebut bertujuan
untuk memprediksi bilangan acak yang dihasilkan.
Kebanyakan PRNG tidak cocok untuk CSPRNG, karena tid ak memenuhi
syarat yang ada. CSPRNG dirancang untuk menahan terhadap serangan-serangan
yang ada dari kriptanalis.
2.4 Blum Blum Shub (BBS)
Blum Blum Shub (BBS) merupakan suatu pseudo random number generator yang diajukan pada tahun 1986 oleh Lenore Blum, Manuel Blum, dan Michael Shub. BBS
mempunyai persamaan:
Xn+1 = Xn2 mod m (2.2)
m diatas merupakan hasil perkalian dua buah bilangan prima besar p dan q, serta
hasilnya dalam LSB dari Xn dimana hal yang sama sebagai parity dari Xn. Dua buah bilangan prima p dan q harus terhadap 3 mod 4 dan GCD harus kecil. Generator
tersebut sering digunakan untuk aplikasi kriptografi, karena generator ini tidak begitu cepat.
Untuk membangkitkan bilangan acak dengan BBS, algoritmanya adalah
sebagai berikut:
a. Pilih dua buah bilangan prima rahasia, p dan q, yang masing- masing sama
dengan 3 modulo 4.
b. Kalikan keduanya menjadi n = p x q. Bilangan m ini disebut sebagai
bilangan bulat blum.
c. Pilih bilangan bulat acak s sebagai umpan, bilangan yang dipilih harus
memenuhi kriteria:
ii. s dan n relatif prima
d. Hitung nilai x0 = s2 mod n.
e. Hasilkan bilangan bit acak dengan cara:
i. Hitung xi = x(i-1)2 mod n.
ii. Hasilkan zi = bit- bit yang diambil dari xi. Bit yang diambil bisa
merupakan LSB atau hanya satu bit atau sebanyak j bit (j tidak
melebihi log2 (log2 n). Bilangan bit acak dapat digunakan langsung
atau diformat dengan aturan tertentu, sedemikian hingga menjadi
bilangan bulat (Sadikin, 2012).
2.5 Riset Terkait
Beberapa penelitian telah dilakukan oleh peneliti, yang berkaitan dengan penulisan
penelitian ini. Adapun penelitian tersebut dapat dilihat di bawah ini:
Penelitian Xie & Pan (2010), mengungkapkan bahwa kelemahan dari
Algoritma RC4 terdapat pada KSA (Key Scheduling Algorithm) dan kelemahan lainnya pada PGRA (Pseudo random generator algorithm), pada PGRA yang penting keadaan awal dari S-Box, dimana peneliti menggunakan untuk memperoleh Key
Stream, salah satu kelemahan dari PGRA adalah hubungan antara S-Box pada waktu yang berbeda. pada paper peneliti fokus pada kelemahan PGRA dengan meningkatkan
RC4 untuk melindungi PGRA dari berbagai macam serangan. Untuk meningkatkan
RC4 dipilih dua buah kunci rahasia K1 dan K2 sebagai seed dan dua S-Box S1 dan S2
yang mana semua berisi elemen N dari 0 sampai N-1. Pada algoritma baru peneliti
menggunakan tiga titik yaitu i, j1, dan j2. Hasil yang diperoleh dari paper ini
algoritma baru tersebut dapat meningkatkan keamanan RC4 dan improved RC4 lebih cepat dari algoritma RC4.
Penelitian Weerangsinghe (2013), mengungkapkan ba hwa peningkatan RC4
dilakukan dalam sebuah aplikasi, tujuannya untuk mendapatkan output dan
keamananan yang baik. Cipher yang diusulkan diambil dari penelitian Xie & Pan.
Penelitian Jindal & Sing (2014), mengungkapkan bahwa melakukan analisi
terhadap kelemahan dari KSA dan PGRA kemudian diusulkan dengan sebuah
algoritma modifikasi RC4 (MRC4). Modifikasi tersebut ditambahkan pada struktur
algoritma RC4, yang mana untuk meningkatkan keamanan sementara tetapi tetap
Penelitian Sanjaya & Telnoni (2015), mengungkapkan bahwa menggunakan
Algoritma AES (Advanced Encryption Standard) untuk enkripsi, pada saat proses
pembangkitan kunci digunakan metode chaotic function agar dapat menghasilkan penurunan waktu proses enkripsi dan dekripsi yang baik, dan untuk membangkitkan
kunci acak digunakan metode random BBS (Blum Blum Shub).
2.6 Perbedaan Dengan Riset Lain
Dalam penelitian ini, dilakukan pembangkitan kunci acak dengan metode (BBS)
Blum Blum Shub untuk pengacakan tabel S-Box. Hasil dari pembangkitan kunci
tersebut susah diprediksi dan ditebak oleh seseorang (kriptanalis).
2.7 Kontribusi Riset
Penelitian ini ingin memberikan pemahamanan dalam hal menentukan kunci yang
aman bagi pengirim dan penerima, dengan menggunakan Blum Blum Shub (BBS)
diharapkan dapat menghasilkan kunci yang baik dalam mengamankan data dengan