Algoritma Rivest
Code 4 (RC4)
Algoritma
RC4 yang mengenkripsi antara kombinasi plainteks dengan menggunakan
bit-wise Xor (Exclusive-or). RC4 menggunakan panjang kunci dari 1 sampai 256 byte
yang digunakan untuk menginisialisasikan tabel sepanjang 256 byte. Tabel ini
digunakan untuk generasi yang berikut dari pseudo
random yang menggunakan XOR dengan plaintext untuk menghasilkan ciphertext. Masing - masing elemen dalam
tabel saling ditukarkan minimal sekali. Proses dekripsinya dilakukan dengan
cara yang sama (karena Xor merupakan fungsi simetrik).
Untuk
menghasilkan keystream, cipher menggunakan state internal yang meliputi dua bagian :
1.
Tahap key
scheduling dimana diberi nilai awal berdasarkan kunci enkripsi.State yang
diberi nilai awal berupa array yang merepresentasikan suatu permutasi dengan 256
elemen, jadi hasil dari algoritma KSA adalah permutasi awal. Array yang
mempunyai 256 elemen ini (dengan indeks 0 sampai dengan 255) dinamakan S.
Berikut adalah algoritma KSA dalam bentuk pseudo-code
dimana key adalah kunci enkripsi dan keylength
adalah besar kunci enkripsi dalam bytes
(untuk kunci 128 bit, keylength = 16).
2. Tahap pseudo-random generation dimana state automaton beroperasi dan outputnya menghasilkan keystream. Setiap putaran, bagian keystream sebesar 1 byte (dengan nilai antara 0 sampai dengan 255) dioutput oleh PRGA berdasarkan state S. Berikut adalah algoritma PRGA dalam bentuk pseudo-code:
Setelah
terbentuk keystream, kemudian keystream tersebut dimasukkan dalam
operasi XOR dengan plaintext yang
ada, dengan sebelumnya pesan dipotong-potong terlebih dahulu menjadi byte-byte.( Okie Setiawan, dkk ; Pros iding SNATIF. No.1, 2014 : 117)
Keamanan sistem sandi RC4
Menurut Rifki Sadikin (2012 : 214), Ukuran
sandi RC4 sangat berpengaruh terhadap
keamanan sistem Sandi RC4. RC4 telah
dibuktikan tidak aman untuk ukuran kunci yang kecil, yaitu dibawah 5 byte. Rekomendasi penggunaan sistem
sandi RC4 agar memiliki keamanan yang
kuat adalah :
1.
Ukuran
kunci sama atau lebih besar daripada 256 bit
( 16 byte)
2. Setiap
sesi baru membangkitkan kunci yang baru(dengan pembangkitkan kunci yang baru
menghingdari penyerang untuk melakukan analisis sandi difernsial pada sistem
sandi).
Berikut adalah implementasi algoritma
RC4 dengan mode 4 byte (untuk lebih
menyederhanakan dalam perhitungan manual) serta untuk kebutuhan sistem yang
sangat terbatas. S-Box dengan panjang 4 byte, dengan S[0]=0, S[1]=1, S[2]=2 dan
S[3]=3 sehingga array S menjadi:
0 1 2 3
Inisialisasi 4 byte
kunci array, K. Misalkan kunci Ulang kunci sampai memenuhi seluruh adalah 2 5 7
3, sehingga array K berisi 2 5 7 3 dan mencoba untuk mengenkripsikan kata HALO.
Inisialisasi
i dan j dengan 0 kemudian dilakukan KSA agar tercipta state-array yang acak.
Penjelasan iterasi lebih lanjut dapat dijelaskan sebagai berikut:
Iterasi 1
i = 0
j = (0 + S[0] + K [0
mod 4]) mod 4
= (0 + 0 + 2) mod 4 = 2
Swap (S[0],S[2])
Hasil Array S
2 1 0 3
Iterasi 2
i = 1
j = (2 + S[1] + K [1
mod 4]) mod 4
= (2 + 1 + 5) mod 4 =0
Swap (S[1],S[0])
Hasil Array S
1 2 0 3
Iterasi 3
i = 2
j = (0 + S[2] + K [2
mod 4]) mod 4
= (0 + 0 + 7) mod 4 = 3
Swap (S[2],S[3])
Hasil
1 2 3 0
Iterasi 4
i = 3
j = (3 + S[3] + K [3
mod 4]) mod 4
= (3 + 0 + 3) mod 4 = 2
Swap (S[3],S[2])
Hasil Array S
1 2 0 3
Setelah
melakukan KSA, akan dilakukan PRGA. PRGA akan dilakukan sebanyak 4 kali
dikarenakan plainteks yang akan dienkripsi berjumlah 4 karakter. Hal ini disebakan
karena dibutuhkan 1 kunci dan 1 kali pengoperasian XOR untuk tiap tiap karakter
pada plainteks. Berikut adalah tahapan penghasilan kunci enkripsi dengan PRGA.
Array S
1 2 0 3
Inisialisasi
i = 0
j = 0
Iterasi 1
i = (0 + 1) mod 4 = 1
j = (0 + S[1]) mod 4 =
(0+ 2) mod
4 = 2
swap (S[1],S[2])
1 0 2 3
K1 = S[(S[1]+S[2]) mod
4] = S[2
mod 4] = 2
K1 = 00000010
Iterasi 2
i = (1 + 1) mod 4 = 2
j = (2 + S[2]) mod 4 =
(2+ 2) mod
4 = 0
swap (S[2],S[0])
2 0 1 3
K2 = S[(S[2]+S[0]) mod
4] = S[3
mod 4] = 3
K2 = 00000011
Iterasi 3
i = (2 + 1) mod 4 = 3
j = (0 + S[3]) mod 4 =
(0+ 3) mod
4 = 3
swap (S[3],S[3])
1 0 2 3
K3 = S[(S[3]+S[3]) mod
4] = S[6
mod 4] = 2
K3 = 00000010
Iterasi 4
i = (3 + 1) mod 4 = 0
j = (3 + S[0]) mod 4 =
(3+ 1) mod
4 = 0
swap (S[0],S[0])
1 0 2 3
K1 = S[(S[0]+S[0]) mod
4] = S[2
mod 4] = 2
K4 = 00000010
Setelah menemukan kunci untuk tiap karakter,
makadilakukan operasi XOR antara karakter pada plaintext dengan kunci yang
dihasilkan. Berikut adalah tabel ASCII untuk tiap-tiap karakter pada plaintks
yang digunakan.
Huruf
Kode ASCII (Binary 8 bit)
H
01001000
A
01000001
L 01001100
O
01001111
Berikut adalah proses
pengXORan dari plainteks dengan key yang telah didapat:
H
A L O : 01001000 01000001
01001100 01001111
Key
: 00000010 00000011 00000010
00000010
Cipherteks : 01001010 01000010 01001110 01001101
Algoritma
RC4 (Dekripsi)
Proses dekripsi ciphertext menggunakan algoritma RC4 ini
sama untuk proses key-schedule-nya.
Untuk mendapatkan plaintext, ciphertext
yang diperoleh di XORkan dengan pseudo
random byte yang didapat sebelumnya. Maka hasilnya adalah plainteks atau
teks asli.
Pesan dikirim dalam
bentuk cipherteks sehingga setelah sampai di penerima pesan dapat kembali
diubah menjadi plainteks dengan meng-XOR-kan dengan kunci yang sama. Pemrosesan
pesan setelah sampai pada penerima dapat dilihat pada dibawah ini.
Proses XOR pseudo random byte dengan cipherteks
pada dekripsi yaitu:
Cipherteks :
01001010 01000010 01001110 01001101
pseudo random byte :
00000010 00000011 00000010 00000010
Plainteks :
01001000 01000001 01001100 01001111
H A
L O
Demikian, Tulisan ini saya buat. Semoga bermanfaat untuk Semua orang yang membutuhkan. Untuk Tanya tanya Silahkan Email Ke dodibeck7@gmail.com. terimakasih :)
ka, ada contoh perhitungan manual rc4 yang lebih dari satu kata ga ?
ReplyDeletehai devira,, yg saya jelaskan diatas adalah peng enkripsian satu kata yaitu HALO
Deletesudah saya jelaskan secara detail. insyah Allah Kalau ada yg mesti ditanyakan saya akan bantu . thnks
saar PRGA literasi ke 3, swap S[3],S[3] . kenapa array awal (dari litersi 2) yaitu 2013 menjadi 1023 pada array literasi 3. padahal pertukaran dilakukan pada s yang sama saitu S[3]?
ReplyDelete