Laporan Avalanche Effect
Dari Algoritma Rivest Code 4 (RC4)





Nama : Annisa Nurika
NIM : 09021181419127

UNIVERSITAS SRIWIJAYA
TEKNIK INFORMATIKA REGULER A 2014






Algoritma kriptografi Rivest Code 4 (RC4) 

Algoritma kriptografi Rivest Code 4 (RC4) merupakan salah satu algoritma kunci simetris dibuat oleh RSA Data Security Inc (RSADSI) yang berbentuk stream chipper. Algoritma ini ditemukan pada tahun 1978 oleh Ronald Rivest dan menjadi simbol keamanan RSA (merupakan singkatan dari tiga nama penemu: Rivest Shamir Adleman).  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 plainteks untuk menghasilkan cipherteks. Masing-masing elemen dalam tabel saling ditukarkan minimal sekali.

Algoritma RC4 menggunakan dua buah S-Box yaitu array sepanjang 256 yang berisi permutasi dari bilangan 0 sampai 255, dan S-Box kedua, yang berisi permutasi merupakan fungsi dari kunci dengan panjang yang variabel.

Cara kerja algoritma RC4 yaitu inisialisasi S-Box pertama, S[0],S[1],...,S[255], dengan bilangan 0 sampai 255. Pertama isi secara berurutan S [0] = 0, S[1] = 1,..., S[255] = 255. Kemudian inisialisasi array lain (S-Box lain), misal array K dengan panjang 256. Isi array K dengan kunci yang diulangi sampai seluruh array K[0], K[1],...,K[255] terisi seluruhnya.

Proses inisialisasi S-Box (Array S)
for i = 0 to 255
S[i] = i

Proses inisialisasi S-Box (Array K)
Array Kunci // Array dengan panjang kunci “length”.
for i = 0 to 255
K[i] = Kunci[i mod length]

Kemudian lakukan langkah pengacakan S-Box dengan langkah sebagai berikut:
i = 0 ; j = 0
for i = 0 to 255
{
j = (j + S[i] + K[i]) mod 256
swap S[i] dan S[j]
}

Setelah itu, buat pseudo random byte dengan langkah sebagai berikut:
i = ( i + 1 ) mod 256
j = ( j + S[i] ) mod 256
swap S[i] dan S[j]
t = (S[i] + S[j]) mod 256
K = S[t]

Byte K di-XOR-kan dengan plainteks untuk menghasilkan cipherteks atau di-XOR-kan dengan cipherteks untuk menghasilkan plainteks.a




Simulasi pengukuran AE pada Proses enkripsi Algoritma RC4

Saya menggunakan metode mengukur difusi bit dari 2 proses (enkripsi/deskripsi) dengan plainteks yang sama dan 2 kunci yang berbeda 1 bit.
Dan dengan menggunakan Array mode 8 byte

Plainteks : HELO (01001000, 01000101, 01001100, 01001111)
Kunci 1 : HID (01001000, 01001001, 01000100)
Kunci 2 : JID (01001010, 01001001, 01000100 )

1. Inisialisasi S-Box (Array S) mode 8 byte

0
1
2
3
4
5
6
7

2. Inisialisasi S-Box (Array Kunci ) 4 byte kunci array, Kunci =  HID

7
8
3
7
8
3
7
8

3. Lakukan pencampuran operasi, karena menggunakan array dengan panjang 8 byte maka algoritma menjadi :
i = 0 ; j = 0
for i = 0 to 8
j = (j + S[i] + K[i]) mod 8
swap S[i] dan S[j]

Iterasi 1
i = 0 ; j = 0
j = (j + S[i] + K[i]) mod 8
  = (j + S[0] + K[0]) mod 8
  = (0 + 0 + 7) mod 8
  = 7

swap S[0] dan S[7], Sehingga array S :
7
1
2
3
4
5
6
0

Iterasi 2
i = 1 ; j = 7
j = (j + S[i] + K[i]) mod 8
  = (7 + S[1] + K[1]) mod 8
  = (7 +  1 + 8) mod 8
  = 0

swap S[1] dan S[0], Sehingga array S :
1
7
2
3
4
5
6
0

Iterasi 3
i = 2 ; j = 0
j = (j + S[i] + K[i]) mod 8
  = (0 + S[2] + K[2]) mod 8
  = (0 + 2 + 3) mod 8
  = 5

swap S[2] dan S[5], Sehingga array S :
1
7
5
3
4
2
6
0

Iterasi 4
i = 3 ; j = 5
j = (j + S[i] + K[i]) mod 8
  = (5 + S[3] + K[3]) mod 8
  = (5 + 3 + 7) mod 8
  = 7

swap S[3] dan S[7], Sehingga array S :
1
7
5
0
4
2
6
3

Iterasi 5
i = 4 ; j = 7
j = (j + S[i] + K[i]) mod 8
  = (7 + S[4] + K[4]) mod 8
  = (7 + 4 + 8) mod 8
  = 3

swap S[4] dan S[3], Sehingga array S :
1
7
5
4
0
2
6
3

Iterasi 6
i = 5 ; j = 3
j = (j + S[i] + K[i]) mod 8
  = (3 + S[5] + K[5]) mod 8
  = (3 + 2 + 3) mod 8
  = 0

swap S[5] dan S[0], Sehingga array S :
2
7
5
4
0
1
6
3

Iterasi 7
i = 6 ; j = 0
j = (j + S[i] + K[i]) mod 8
  = (0 + S[6] + K[6]) mod 8
  = (0 + 6 + 7) mod 8
  = 5

swap S[6] dan S[5], Sehingga array S :
2
7
5
4
0
6
1
3

Iterasi 8
i = 7 ; j = 5
j = (j + S[i] + K[i]) mod 8
  = (5 + S[7] + K[7]) mod 8
  = (5 + 3 + 8) mod 8
  = 0

swap S[7] dan S[0], Sehingga array S :
3
7
5
4
0
6
1
2


4. Proses Enkripsi, mengXORkan pseudo random byte dengan plainteks.
Plainteks : HELLO , planteks terdiri 5 karakter jadi ada 5 iterasi, dengan algoritma
i = ( i + 1 ) mod 8
j = ( j + S[i] ) mod 8
swap S[i] dan S[j]
t = (S[i] + S[j]) mod 8
K = S[t]

Iterasi 1
i = 0 ;  j = 0
i = ( i + 1 ) mod 8
  = ( 0 + 1) mod 8
  = 1

dan
j = ( j + S[i] ) mod 8
  = ( 0 + S[0] ) mod 8
  = ( 0 + 3 ) mod 8
  = 3

Swap S[i] dan S[j], yaitu S[1] S[3], sehingga array S menjadi :

3
4
5
7
0
6
1
2

t = (S[i] + S[j]) mod 8
  = (S[1] + S[3] mod 8
  = (4+7) mod 8
  = 3

K = S[t] = S[3] = 7

Byte K di XORkan dengan Plainteks “H”
Iterasi 2
i = 1 ;  j = 3
i = ( i + 1 ) mod 8
  = ( 1 + 1) mod 8
  = 2

dan
j = ( j + S[i] ) mod 8
  = ( 3 + S[1] ) mod 8
  = ( 3 + 4 ) mod 8
  = 7

Swap S[i] dan S[j], yaitu S[2] S[7], sehingga array S menjadi :

3
4
2
7
0
6
1
5

t = (S[i] + S[j]) mod 8
  = (S[2] + S[7] mod 8
  = (2+5) mod 8
  = 7

K = S[t] = S[7] = 5

Byte K di XORkan dengan Plainteks “E”

Iterasi 3
i = 2 ;  j = 7
i = ( i + 1 ) mod 8
  = ( 2 + 1) mod 8
  = 3

dan
j = ( j + S[i] ) mod 8
  = ( 7 + S[3] ) mod 8
  = ( 7 + 7 ) mod 8
  = 6

Swap S[i] dan S[j], yaitu S[3] S[6], sehingga array S menjadi :

3
4
2
1
0
6
7
5

t = (S[i] + S[j]) mod 8
  = (S[3] + S[6] mod 8
  = (1+7) mod 8
  = 0

K = S[t] = S[0] = 3

Byte K di XORkan dengan Plainteks “L”

Iterasi 4
i = 3 ;  j = 6
i = ( i + 1 ) mod 8
  = ( 3 + 1) mod 8
  = 4

dan
j = ( j + S[i] ) mod 8
  = ( 6 + S[4] ) mod 8
  = ( 6 + 0 ) mod 8
  = 6

Swap S[i] dan S[j], yaitu S[4] S[6], sehingga array S menjadi :

3
4
2
1
7
6
0
5

t = (S[i] + S[j]) mod 8
  = (S[4] + S[6] mod 8
  = (7+0) mod 8
  = 7

K = S[t] = S[1] = 4

Byte K di XORkan dengan Plainteks “L”

Iterasi 5
i = 4 ;  j = 7
i = ( i + 1 ) mod 8
  = ( 4 + 1) mod 8
  = 5

dan
j = ( j + S[i] ) mod 8
  = ( 7 + S[5] ) mod 8
  = ( 7 + 6 ) mod 8
  = 5

Swap S[i] dan S[j], yaitu S[5] S[5], sehingga array S menjadi :

3
4
2
1
7
6
0
5

t = (S[i] + S[j]) mod 8
  = (S[5] + S[6] mod 8
  = (6+6) mod 8
  = 4

K = S[t] = S[4] = 1

Byte K di XORkan dengan Plainteks “O”



Proses XOR

H
E
L
L
O
Plainteks
Pseudo random byte
Chiperteks
01001000
00000111
01001111
01000101
00000101
01000000
01001100
00000011
01001111
01001100
00000100
01001000
01001111
00000001
01001110



1. Inisialisasi S-Box (Array S) mode 8 byte

0
1
2
3
4
5
6
7

2. Inisialisasi S-Box (Array Kunci ) 4 byte kunci array, Kunci =  JID

9
8
3
9
8
3
9
8

3. Lakukan pencampuran operasi, karena menggunakan array dengan panjang 8 byte maka algoritma menjadi :
i = 0 ; j = 0
for i = 0 to 8
j = (j + S[i] + K[i]) mod 8
swap S[i] dan S[j]

Iterasi 1
i = 0 ; j = 0
j = (j + S[i] + K[i]) mod 8
  = (j + S[0] + K[0]) mod 8
  = (0 + 0 + 9) mod 8
  = 1

swap S[0] dan S[1], Sehingga array S :
1
0
2
3
4
5
6
7

Iterasi 2
i = 1 ; j = 1
j = (j + S[i] + K[i]) mod 8
  = (1 + S[1] + K[1]) mod 8
  = (1 +  0 + 8) mod 8
  = 1

swap S[1] dan S[1], Sehingga array S :
1
0
2
3
4
5
6
7

Iterasi 3
i = 2 ; j = 1
j = (j + S[i] + K[i]) mod 8
  = (1 + S[2] + K[2]) mod 8
  = (1 + 2+ 3) mod 8
  = 6

swap S[2] dan S[6], Sehingga array S :
1
0
6
3
4
5
2
7

Iterasi 4
i = 3 ; j = 6
j = (j + S[i] + K[i]) mod 8
  = (6 + S[3] + K[3]) mod 8
  = (6 + 3 + 9) mod 8
  = 2

swap S[3] dan S[2], Sehingga array S :
1
0
3
6
4
5
2
7

Iterasi 5
i = 4 ; j = 2
j = (j + S[i] + K[i]) mod 8
  = (2 + S[4] + K[4]) mod 8
  = (2 + 4 + 8) mod 8
  = 6

swap S[4] dan S[6], Sehingga array S :
1
0
3
6
2
5
4
7

Iterasi 6
i = 5 ; j = 6
j = (j + S[i] + K[i]) mod 8
  = (6 + S[5] + K[5]) mod 8
  = (3 + 5 + 3) mod 8
  = 3

swap S[5] dan S[3], Sehingga array S :
1
0
3
5
2
6
4
7

Iterasi 7
i = 6 ; j = 3
j = (j + S[i] + K[i]) mod 8
  = (3 + S[6] + K[6]) mod 8
  = (3 + 4 + 9) mod 8
  = 0

swap S[6] dan S[0], Sehingga array S :
4
0
3
5
2
6
1
7

Iterasi 8
i = 7 ; j = 0
j = (j + S[i] + K[i]) mod 8
  = (0 + S[7] + K[7]) mod 8
  = (0 + 7 + 8) mod 8
  = 7

swap S[7] dan S[7], Sehingga array S :
4
0
3
5
2
6
1
7


4. Proses Enkripsi, mengXORkan pseudo random byte dengan plainteks.
Plainteks : HELLO , planteks terdiri 5 karakter jadi ada 5 iterasi, dengan algoritma
i = ( i + 1 ) mod 8
j = ( j + S[i] ) mod 8
swap S[i] dan S[j]
t = (S[i] + S[j]) mod 8
K = S[t]

Iterasi 1
i = 0 ;  j = 0
i = ( i + 1 ) mod 8
  = ( 0 + 1) mod 8
  = 1

dan
j = ( j + S[i] ) mod 8
  = ( 0 + S[0] ) mod 8
  = ( 0 + 4 ) mod 8
  = 4

Swap S[i] dan S[j], yaitu S[1] S[4], sehingga array S menjadi :

4
2
3
5
0
6
1
7

t = (S[i] + S[j]) mod 8
  = (S[1] + S[4] mod 8
  = (2+0) mod 8
  = 2

K = S[t] = S[2] = 3

Byte K di XORkan dengan Plainteks “H”
Iterasi 2
i = 1 ;  j = 4
i = ( i + 1 ) mod 8
  = ( 1 + 1) mod 8
  = 2

dan
j = ( j + S[i] ) mod 8
  = ( 4 + S[1] ) mod 8
  = ( 4 + 2 ) mod 8
  = 6

Swap S[i] dan S[j], yaitu S[2] S[6], sehingga array S menjadi :

4
2
1
5
0
6
3
7

t = (S[i] + S[j]) mod 8
  = (S[2] + S[6] mod 8
  = (1+3) mod 8
  = 4

K = S[t] = S[4] = 0

Byte K di XORkan dengan Plainteks “E”

Iterasi 3
i = 2 ;  j = 6
i = ( i + 1 ) mod 8
  = ( 2 + 1) mod 8
  = 3
dan
j = ( j + S[i] ) mod 8
  = ( 6 + S[3] ) mod 8
  = ( 6 + 5 ) mod 8
  = 3

Swap S[i] dan S[j], yaitu S[3] S[3], sehingga array S menjadi :

4
2
1
5
0
6
3
7

t = (S[i] + S[j]) mod 8
  = (S[3] + S[3] mod 8
  = (5+5) mod 8
  = 2

K = S[t] = S[2] = 1

Byte K di XORkan dengan Plainteks “L”

Iterasi 4
i = 3 ;  j = 3
i = ( i + 1 ) mod 8
  = ( 3 + 1) mod 8
  = 4
dan
j = ( j + S[i] ) mod 8
  = ( 3 + S[4] ) mod 8
  = ( 3 + 0 ) mod 8
  = 3

Swap S[i] dan S[j], yaitu S[4] S[3], sehingga array S menjadi :

4
2
1
0
5
6
3
7

t = (S[i] + S[j]) mod 8
  = (S[4] + S[3] mod 8
  = (5+0) mod 8
  = 5

K = S[t] = S[5] = 6

Byte K di XORkan dengan Plainteks “L”

Iterasi 5
i = 4 ;  j = 3
i = ( i + 1 ) mod 8
  = ( 4 + 1) mod 8
  = 5

dan
j = ( j + S[i] ) mod 8
  = ( 3 + S[5] ) mod 8
  = ( 3 + 6 ) mod 8
  = 1

Swap S[i] dan S[j], yaitu S[5] S[1], sehingga array S menjadi :

4
6
1
0
5
2
3
7

t = (S[i] + S[j]) mod 8
  = (S[5] + S[1] mod 8
  = (2+6) mod 8
  = 0

K = S[t] = S[0] = 4

Byte K di XORkan dengan Plainteks “O”


Proses XOR

H
E
L
L
O
Plainteks
Pseudo random byte
Chiperteks
01001000
00000011
01001011
01000101
00000000
01000111
01001100
00000001
01001101
01001100
00000110
01001010
01001111
00000100
01001011

Perbedaaan nilai bit dengan perbedaan kunci 1 bit
Kunci
Plainteks
Chiperteks
HID
01001000010001010100110001001100 01001111
0100111101000000010011110100100001001110
 JID
01001000010001010100110001001100 01001111
0100101101000111010011010100101001001011

Dengan menghitung banyaknya nilai bit yang berbeda dari masing-masing keluaran simulasi, dapat ditentukan bahwa nilai Avalanche Effect dari proses enkripsi Algoritma Rivest Code 4 (RC4)   sebagai berikut:

Dari hasil pengukuran Avalanche Effect pada simulasi diatas, dapat disimpulkan bahwa kinerja proses enkripsi  pada algoritma RC4 buruk karena hanya menghasilkan nilai Avalanche Effect sebesar 20%.