Implementasi Algoritma Rc4a Dan Md5 Untuk Menjamin Confidentiality Dan Integrity Pada File Teks
BAB 2
LANDASAN TEORI
2.1 Kriptografi
Kriptografi adalah ilmu mengenai teknik enkripsi dimana data diacak menggunakan
suatu kunci enkripsi menjadi sesuatu yang sulit dibaca oleh seseorang yang tidak
memiliki kunci dekripsi (Kromodimoeljo, 2010). Kriptografi adalah ilmu tentang
metode-metode untuk mengirimkan pesan secara rahasia (disebut enkripsi atau bentuk
samaran) sehingga hanya penerima yang dimaksud yang dapat memecahkan dan
membaca pesan (dekripsi). Kriptografi secara etimologi terdiri dari kata kryptos
berasal dari bahasa Yunani yang berarti tersembunyi dan graphein yang berarti
tulisan. Pesan asli disebut plaintext dan pesan yang disamarkan disebut ciphertext
(Mollin, 2007).
Secara garis besar, proses enkripsi adalah proses pengacakan naskah asli
(plaintext) menjadi naskah acak (ciphertext) yang sulit untuk dibaca oleh seseorang
yang tidak mempunyai kunci dekripsi. Yang dimaksud dengan sulit untuk dibaca
disini adalah probabilitas mendapat kembali naskah asli oleh seseorang yang tidak
mempunyai kunci dekripsi dalam waktu yang tidak terlalu lama adalah sangat kecil
(Kromodimoeljo, 2010). Dekripsi merupakan kebalikan dari enkripsi. Pesan yang
telah dienkripsi dikembalikan ke bentuk asalnya (teks asli), disebut dengan dekripsi
pesan (Ariyus, 2008).
Algoritma kriptografi dibagi menjadi dua bagian berdasarkan kunci yang
dipakainya:
1. Algoritma simetris (menggunakan satu kunci untuk enkripsi dan dekripsinya).
2. Algoritma asimetris (menggunakan kunci yang berbeda untuk enkripsi dan
dekripsi).
Universitas Sumatera Utara
6
2.2 Algoritma Kriptografi Kunci Simetris
Algoritma kriptografi simetris menggunakan kunci yang sama untuk enkripsi dan
dekripsinya. Kunci pada penyandian simetris diasumsikan bersifat rahasia yakni hanya
pihak yang melakukan enkripsi dan dekripsi yang mengetahui nilainya. Oleh karena
itu, penyandian dengan kunci simetris disebut juga dengan penyandian kunci rahasia
(Sadikin, 2012).
Dalam lingkungan komunikasi, algoritma kriptografi kunci simetris dapat
digunakan jika kedua belah pihak yang berkomunikasi satu dengan yang lainnya
saling membagi kunci enkripsi sebelumnya (Wahana Komputer, 2003).
Keamanan dari pesan yang menggunakan algoritma ini tergantung pada kunci.
Jika kunci tersebut diketahui oleh orang lain maka orang tersebut akan dapat
melakukan enkripsi dan dekripsi terhadap pesan. Contoh algoritma yang memakai
kunci simetris antara lain DES, RC4, IDEA, AES, OTP, A5, dan lain sebagainya
(Ariyus, 2008).
Algoritma kriptografi kunci simetris dibagi menjadi dua yaitu :
1. Stream cipher
Stream cipher adalah suatu sistem di mana proses enkripsi dan dekripsinya
dilakukan dengan cara bit per bit. Pada sistem ini aliran bit kuncinya dihasilkan
oleh suatu pembangkit bit acak atau disebut juga pembangkit aliran kunci (Zain,
2012).
Stream cipher mengenkripsi satu bit setiap kali. Bit hanya mempunyai dua
buah nilai, sehingga proses enkripsi hanya menyebabkan dua keadaan pada bit
tersebut yakni berubah atau tidak berubah. Keamanan stream cipher bergantung
seluruhnya pada pembangkit aliran kunci. Jika pembangkit mengeluarkan aliran
kunci yang benar-benar acak maka algoritma enkripsinya berada pada tingkat
keamanan yang tinggi. Contoh algoritma stream cipher adalah RC4 dan A5
(Nathasia & Wicaksono, 2011).
Universitas Sumatera Utara
7
2. Block cipher
Sistem block cipher mengkodekan data dengan cara membagi plaintext menjadi
per blok dengan ukuran yang sama dan tetap. Kemudian setiap bloknya dienkripsi
atau didekripsi sekaligus (Zain, 2012). Contoh algoritma ini adalah RC5, DES,
AES, IDEA, dan Blowfish.
2.3 Algoritma Kriptografi Kunci Asimetris
Penyandian dengan kunci asimetris atau sering juga disebut dengan penyandian kunci
publik adalah penyandian dengan kunci enkripsi dan dekripsi yang berbeda nilai.
Kunci yang digunakan untuk enkripsi disebut dengan kunci publik (public key) dan
kunci yang digunakan untuk dekripsi disebut kunci rahasia (private key) (Sadikin,
2012).
Kunci asimetris adalah pasangan kunci kriptografi yang salah satunya
digunakan untuk proses enkripsi dan yang satu lagi untuk proses dekripsi. Semua
orang yang mendapatkan kunci publik dapat menggunakannya untuk mengenkripsi
suatu pesan, sedangkan hanya satu orang saja yang memiliki kunci rahasia yang dapat
melakukan pembongkaran terhadap sandi yang dikirim untuknya (Ariyus, 2006).
Contoh, Alice ingin mengirim pesan kepada Bob, maka hal yang harus
dilakukan adalah :
1. Bob memberitahukan kunci publiknya ke Alice.
2. Alice mengenkripsi pesan dengan menggunakan kunci publik Bob.
3. Bob mendekripsi pesan dari Alice dengan kunci rahasianya.
4. Begitu juga sebaliknya jika Bob ingin mengirim pesan kepada Alice.
Contoh algoritma yang menggunakan kunci asimetris adalah RSA, DSA, DiffieHellman (DH), dan lain-lain (Ariyus, 2008).
2.4 Algoritma RC4
RC4 adalah stream cipher yang dirancang di RSA Security oleh Ron Rivest tahun
1987. Pada mulanya cara kerja RC4 dirahasiakan oleh RSA Security, akan tetapi ini
dibocorkan di internet tahun 1994 di milis Cypherpunks. RSA Security tidak pernah
Universitas Sumatera Utara
8
merilis RC4 secara resmi, akibatnya banyak yang menyebutnya sebagai ARC4
(alleged RC4 atau tersangka RC4) untuk menghindari masalah trademark
(Kromodimoeljo, 2010).
RC4 merupakan salah satu jenis stream cipher, yaitu memproses unit atau
input data pada satu saat. Unit atau data pada umumnya merupakan sebuah byte.
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 (Sukmawan, 1998).
Algoritma RC4 terdiri atas 2 bagian yaitu Key Scheduling Algorithm (KSA)
dan Pseudo-Random Generation Algorithm (PRGA).
1. Key Scheduling Algorithm (KSA)
Dalam proses KSA terdapat 2 state array yang harus diinisialisasi yakni S
dan K. Array S sepanjang 256 diinisialisasi dengan bilangan 0 sampai 255,
S[0] = 0, S[1] = 1, ... , S[255] = 255. Sedangkan array K dengan panjang
256 diinisialisasi dengan kunci yang diulangi sampai seluruh array K[0],
K[1], ... , K[255] terisi penuh (Ariyanto, 2009).
Berikut adalah algoritma KSA, dimana simbol l menyatakan panjang
kunci dalam byte.
for i from 0 to 255
S[i] := i
endfor
j := 0
for i from 0 to 255
j := (j + S[i] + K[i mod l]) mod 256
swap values of S[i] and S[j]
endfor
Universitas Sumatera Utara
9
2. Pseudo-Random Generation Algorithm (PRGA)
State array S hasil dari proses KSA digunakan lagi dalam proses PRGA
ini untuk menghasilkan keystream yang akan di XOR kan dengan plaintext
untuk menghasilkan ciphertext (Mooduto & Albar, 2004).
Berikut adalah algoritma PRGA :
i := 0
j := 0
while GeneratingOutput:
i := (i + 1) mod 256
j := (j + S[i]) mod 256
swap values of S[i] and S[j]
output := S[(S[i] + S[j]) mod 256]
endwhile
2.5 Algoritma RC4A
Pada FSE 2004, Souradyuti Paul dan Bart Preneel telah mengusulkan sebuah varian
baru dari RC4 yang diberi nama RC4A. RC4A merupakan sebuah upaya untuk
meningkatkan keamanan dari RC4 tanpa mengurangi efisiensi.
RC4A adalah stream cipher yang berorientasi byte. Tahap pembentukan dari
RC4A lebih efisien dibanding RC4, tetapi tahap inisialisasinya memerlukan
setidaknya dua kali proses inisialisasi dari RC4.
Berikut adalah algoritma KSA dari RC4A (Tsunoo, et al. circa 2005):
RC4_KSA(K,�1 )
for i = 0 ... l-1
WK[i] = RC4_PRGA(�1 )
RC4_KSA(WK,�2 )
Universitas Sumatera Utara
10
Berikut adalah algoritma PRGA dari RC4A (Tsunoo, et al. circa 2005):
Initialization:
i = 0
�1 = �2 = 0
Generation loop
i = i + 1
�1 = �1 + �1 [i]
Swap (�1 [i], �1 [�1 ])
Output z = �2 [�1 [i] + �1 [�1 ]]
�2 = �2 + �2 [i]
Swap (�2 [i], �2 [�2 ])
Output z = �1 [�2 [i] + �2 [�2 ]]
RC4A menggunakan dua state array, S1 dan S2, dan tiga buah indeks i, j1, dan
j2. RC4A menggunakan KSA yang sama dengan RC4 kecuali satu hal dimana KSA
digunakan dua kali, masing-masing sekali untuk S1 dan S2. Semua operasi aritmetika
dihitung dengan modulo 256.
Proses KSA dari RC4A terdiri atas 2 bagian yaitu :
1. KSA dengan masukan K dan S1.
2. KSA dengan masukan WK dan S2.
WK dihasilkan dari PRGA milik RC4. l di sini merupakan panjang kunci
dalam byte.
Setelah S1 dan S2 diperoleh dari proses KSA, selanjutnya digunakan kembali dalam
PRGA. Tiap putaran dalam PRGA menghasilkan 2 byte output.
2.6 Fungsi Hash
Salah satu hal primitif mendasar dalam kriptografi modern adalah fungsi hash
kriptografi yang sering disebut dengan fungsi hash satu arah. Fungsi hash adalah
sebuah fungsi dengan masukan string biner yang panjangnya sembarang dan
menghasilkan string biner dengan panjang yang tetap. Fungsi hash yang paling
banyak digunakan dalam kriptografi adalah untuk integritas data dan tanda tangan
digital (Menezes, et al. 1996).
Universitas Sumatera Utara
11
Fungsi hash satu arah (one-way hash function) sering disebut juga sebagai
message digest, fingerprint, dan fungsi kompresi. Fungsi ini biasanya diperlukan bila
kita menginginkan pengambilan sidik jari suatu pesan. Sebagaimana sidik jari
manusia yang menunjukkan identitas si pemilik sidik jari, fungsi ini diharapkan pula
mempunyai kemampuan yang serupa dengan sidik jari manusia, di mana sidik jari
pesan diharapkan menunjuk ke satu pesan dan tidak dapat menunjuk kepada pesan
lainnya. Dinamakan sebagai fungsi kompresi karena biasanya, masukan fungsi hash
ini selalu lebih besar dari pada keluarannya, sehingga seolah-olah mengalami
kompresi. Namun kompresi hasil fungsi ini tidak dapat dikembalikan ke bentuk
awalnya sehingga disebut fungsi satu arah. Dinamakan message digest karena seolaholah merupakan inti sari pesan, meskipun sebenarnya tidak demikian (Kurniawan,
2004).
Fungsi hash dapat digunakan untuk mewujudkan layanan keutuhan data.
Misalnya M merupakan pesan dan h adalah fungsi hash, maka � = ℎ(�) disebut
dengan message digest. Sebelum pesan M disebarkan/dikirimkan sebuah message
digest ����� = ℎ(�) disimpan sebagai acuan. Misalnya didapatkan kembali �′
setelah disebarkan/dikirim apabila ingin menguji apakah � = �′ hitung kembali
message digest baru ����� = ℎ(�′) disimpulkan pesan tidak berubah bila ����� =
����� (Sadikin, 2012).
Fungsi hash memiliki karakteristik sebagai berikut (Kromodimoeljo, 2010) :
1. Preimage resistance.
Untuk suatu nilai hash yang sembarang (tidak diketahui asal-usulnya),
sangat sukar untuk mencari naskah yang mempunyai nilai hash tersebut.
2. Second preimage resistance.
Untuk suatu naskah �1 , sangat sukar untuk mencari naskah lain �2 yang
mempunyai nilai hash yang sama.
3. Collision resistance.
Sangat sukar untuk mencari dua naskah �1 dan �2 yang berbeda, yang
mempunyai nilai hash yang sama.
2.7 Algoritma MD5
MD5 adalah salah satu fungsi hash yang paling banyak digunakan. MD5 merupakan
versi perbaikan dari MD4 yang dirancang oleh Ron Rivest pada tahun 1991. MD5
Universitas Sumatera Utara
12
umumnya digunakan sebagai checksum untuk verifikasi integritas file yang
didownload dari internet.
MD5 memproses teks masukan ke dalam blok-blok 512 bit, kemudian dibagi
menjadi 16 buah sub blok sebesar 32 bit. Keluaran dari algoritma MD5 adalah sebuah
set dari 4 buah blok masing-masing 32 bit, yang kemudian menghasilkan nilai hash
128 bit (Schneier, 1996).
Langkah-langkah pembuatan message digest pada MD5 adalah sebagai berikut:
1. Penambahan bit-bit pengganjal (padding bits)
Pesan ditambahkan sejumlah bit pengganjal sedemikian sehingga panjang
pesan (dalam bit) kongruen dengan 448, modulo 512. Hal ini berarti pesan
akan mempunyai panjang yang hanya kurang 64 bit dari kelipatan 512.
Penambahan bit selalu dilakukan walaupun panjang pesan sudah kongruen
dengan 448, modulo 512. Jika panjang pesan jumlahnya 448 bit, maka
pesan tersebut ditambah dengan 512 bit menjadi 960 bit, jadi panjang bitbit pengganjal adalah antara 1 sampai 512 bit. Bit-bit pengganjal terdiri
dari sebuah bit 1 dan diikuti dengan bit 0 yang menjadi sisanya
(Chulkamdi, dkk. 2015).
2. Penambahan nilai panjang pesan semula
Pesan yang telah diberi bit-bit pengganjal selanjutnya ditambah lagi
dengan 64 bit yang menyatakan panjang pesan semula. Jika panjang pesan
semula > 264, maka hanya 64 bit secara low-order yang digunakan. Pada
saat ini, pesan yang dihasilkan memiliki panjang yang merupakan
kelipatan dari 512.
3. Inisialisasi penyangga (buffer) MD
MD5 membutuhkan 4 buah penyangga atau buffer yang masing-masing
panjangnya 4 x 32 bit = 128 bit. Setiap penyangga diinisialisasi dengan
nilai hexadesimal sebagai berikut :
A = 01 23 45 67
B = 89 ab cd ef
C = fe dc ba 98
D = 76 54 32 10
Universitas Sumatera Utara
13
4. Pengolahan pesan dalam blok berukuran 512 bit
Dalam tahap ini terdapat fungsi yang akan menghasilkan output satu buah
word 32 bit yang didefinisikan sebagai berikut :
F(b,c,d) = (b ∧ c) ( b ∧ d)
G(b,c,d) = (b ∧ d) ∨(c ∧ ∼d)
H(b,c,d) = b
c
I(b,c,d) = c
(b ∨
d
d)
(Operator logika and, or, not, xor masing-masing dilambangkan dengan
, , , ).
Tahap ini menggunakan sebuah tabel 64 elemen T[1 ... 64] yang dibangun
dari fungsi sinus. T[i] menunjukkan urutan ke-i elemen dari tabel yang
merupakan 232 × abs(sin(i)), di mana i dalam radian. Nilai T[i] dapat
dilihat pada Tabel 2.1.
Tabel 2.1 Nilai T[i]
T[1] = D76AA478
T[2] = E8C7B756
T[3] = 242070DB
T[4] = C1BDCEEE
T[5] = F57C0FAF
T[6] = 4787C62A
T[7] = A8304613
T[8] = FD469501
T[9] = 698098D8
T[10] = 8B44F7AF
T[11] = FFFF5BB1
T[12] = 895CD7BE
T[13] = 6B901122
T[14] = FD987193
T[15] = A679438E
T[16] = 49B40821
T[17]
T[18]
T[19]
T[20]
T[21]
T[22]
T[23]
T[24]
T[25]
T[26]
T[27]
T[28]
T[29]
T[30]
T[31]
T[32]
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
F61E2562
C040B340
265E5A51
E9B6C7AA
D62F105D
02441453
D8A1E681
E7D3FBCB
21E1CDE6
C33707D6
F4D50D87
455A14ED
A9E3E905
FCEFA3F8
676F02D9
8D2A4C8A
T[33]
T[34]
T[35]
T[36]
T[37]
T[38]
T[39]
T[40]
T[41]
T[42]
T[43]
T[44]
T[45]
T[46]
T[47]
T[48]
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
FFFA3942
8771F681
69D96122
FDE5380C
A4BEEA44
4BDECFA9
F6BB4B60
BEBFBC70
289B7EC6
EAA127FA
D4EF3085
04881D05
D9D4D039
E6DB99E5
1FA27CF8
C4AC5665
T[49]
T[50]
T[51]
T[52]
T[53]
T[54]
T[55]
T[56]
T[57]
T[58]
T[59]
T[60]
T[61]
T[62]
T[63]
T[64]
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
F4292244
432AFF97
AB9423A7
FC93A039
655B59C3
8F0CCC92
FFEFF47D
85845DD1
6FA87E4F
FE2CE6E0
A3014314
4E0811A1
F7537E82
BD3AF235
2AD7D2BB
EB86D391
Proses pada tahap ini terdiri dari 4 buah putaran dan masing-masing
putaran melakukan operasi dasar MD5 sebanyak 16 kali.
Operasi dasar MD5 ditulis dalam persamaan sebagai berikut:
a = b + ((a + F(b,c,d) + X[k] + T[i])
LANDASAN TEORI
2.1 Kriptografi
Kriptografi adalah ilmu mengenai teknik enkripsi dimana data diacak menggunakan
suatu kunci enkripsi menjadi sesuatu yang sulit dibaca oleh seseorang yang tidak
memiliki kunci dekripsi (Kromodimoeljo, 2010). Kriptografi adalah ilmu tentang
metode-metode untuk mengirimkan pesan secara rahasia (disebut enkripsi atau bentuk
samaran) sehingga hanya penerima yang dimaksud yang dapat memecahkan dan
membaca pesan (dekripsi). Kriptografi secara etimologi terdiri dari kata kryptos
berasal dari bahasa Yunani yang berarti tersembunyi dan graphein yang berarti
tulisan. Pesan asli disebut plaintext dan pesan yang disamarkan disebut ciphertext
(Mollin, 2007).
Secara garis besar, proses enkripsi adalah proses pengacakan naskah asli
(plaintext) menjadi naskah acak (ciphertext) yang sulit untuk dibaca oleh seseorang
yang tidak mempunyai kunci dekripsi. Yang dimaksud dengan sulit untuk dibaca
disini adalah probabilitas mendapat kembali naskah asli oleh seseorang yang tidak
mempunyai kunci dekripsi dalam waktu yang tidak terlalu lama adalah sangat kecil
(Kromodimoeljo, 2010). Dekripsi merupakan kebalikan dari enkripsi. Pesan yang
telah dienkripsi dikembalikan ke bentuk asalnya (teks asli), disebut dengan dekripsi
pesan (Ariyus, 2008).
Algoritma kriptografi dibagi menjadi dua bagian berdasarkan kunci yang
dipakainya:
1. Algoritma simetris (menggunakan satu kunci untuk enkripsi dan dekripsinya).
2. Algoritma asimetris (menggunakan kunci yang berbeda untuk enkripsi dan
dekripsi).
Universitas Sumatera Utara
6
2.2 Algoritma Kriptografi Kunci Simetris
Algoritma kriptografi simetris menggunakan kunci yang sama untuk enkripsi dan
dekripsinya. Kunci pada penyandian simetris diasumsikan bersifat rahasia yakni hanya
pihak yang melakukan enkripsi dan dekripsi yang mengetahui nilainya. Oleh karena
itu, penyandian dengan kunci simetris disebut juga dengan penyandian kunci rahasia
(Sadikin, 2012).
Dalam lingkungan komunikasi, algoritma kriptografi kunci simetris dapat
digunakan jika kedua belah pihak yang berkomunikasi satu dengan yang lainnya
saling membagi kunci enkripsi sebelumnya (Wahana Komputer, 2003).
Keamanan dari pesan yang menggunakan algoritma ini tergantung pada kunci.
Jika kunci tersebut diketahui oleh orang lain maka orang tersebut akan dapat
melakukan enkripsi dan dekripsi terhadap pesan. Contoh algoritma yang memakai
kunci simetris antara lain DES, RC4, IDEA, AES, OTP, A5, dan lain sebagainya
(Ariyus, 2008).
Algoritma kriptografi kunci simetris dibagi menjadi dua yaitu :
1. Stream cipher
Stream cipher adalah suatu sistem di mana proses enkripsi dan dekripsinya
dilakukan dengan cara bit per bit. Pada sistem ini aliran bit kuncinya dihasilkan
oleh suatu pembangkit bit acak atau disebut juga pembangkit aliran kunci (Zain,
2012).
Stream cipher mengenkripsi satu bit setiap kali. Bit hanya mempunyai dua
buah nilai, sehingga proses enkripsi hanya menyebabkan dua keadaan pada bit
tersebut yakni berubah atau tidak berubah. Keamanan stream cipher bergantung
seluruhnya pada pembangkit aliran kunci. Jika pembangkit mengeluarkan aliran
kunci yang benar-benar acak maka algoritma enkripsinya berada pada tingkat
keamanan yang tinggi. Contoh algoritma stream cipher adalah RC4 dan A5
(Nathasia & Wicaksono, 2011).
Universitas Sumatera Utara
7
2. Block cipher
Sistem block cipher mengkodekan data dengan cara membagi plaintext menjadi
per blok dengan ukuran yang sama dan tetap. Kemudian setiap bloknya dienkripsi
atau didekripsi sekaligus (Zain, 2012). Contoh algoritma ini adalah RC5, DES,
AES, IDEA, dan Blowfish.
2.3 Algoritma Kriptografi Kunci Asimetris
Penyandian dengan kunci asimetris atau sering juga disebut dengan penyandian kunci
publik adalah penyandian dengan kunci enkripsi dan dekripsi yang berbeda nilai.
Kunci yang digunakan untuk enkripsi disebut dengan kunci publik (public key) dan
kunci yang digunakan untuk dekripsi disebut kunci rahasia (private key) (Sadikin,
2012).
Kunci asimetris adalah pasangan kunci kriptografi yang salah satunya
digunakan untuk proses enkripsi dan yang satu lagi untuk proses dekripsi. Semua
orang yang mendapatkan kunci publik dapat menggunakannya untuk mengenkripsi
suatu pesan, sedangkan hanya satu orang saja yang memiliki kunci rahasia yang dapat
melakukan pembongkaran terhadap sandi yang dikirim untuknya (Ariyus, 2006).
Contoh, Alice ingin mengirim pesan kepada Bob, maka hal yang harus
dilakukan adalah :
1. Bob memberitahukan kunci publiknya ke Alice.
2. Alice mengenkripsi pesan dengan menggunakan kunci publik Bob.
3. Bob mendekripsi pesan dari Alice dengan kunci rahasianya.
4. Begitu juga sebaliknya jika Bob ingin mengirim pesan kepada Alice.
Contoh algoritma yang menggunakan kunci asimetris adalah RSA, DSA, DiffieHellman (DH), dan lain-lain (Ariyus, 2008).
2.4 Algoritma RC4
RC4 adalah stream cipher yang dirancang di RSA Security oleh Ron Rivest tahun
1987. Pada mulanya cara kerja RC4 dirahasiakan oleh RSA Security, akan tetapi ini
dibocorkan di internet tahun 1994 di milis Cypherpunks. RSA Security tidak pernah
Universitas Sumatera Utara
8
merilis RC4 secara resmi, akibatnya banyak yang menyebutnya sebagai ARC4
(alleged RC4 atau tersangka RC4) untuk menghindari masalah trademark
(Kromodimoeljo, 2010).
RC4 merupakan salah satu jenis stream cipher, yaitu memproses unit atau
input data pada satu saat. Unit atau data pada umumnya merupakan sebuah byte.
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 (Sukmawan, 1998).
Algoritma RC4 terdiri atas 2 bagian yaitu Key Scheduling Algorithm (KSA)
dan Pseudo-Random Generation Algorithm (PRGA).
1. Key Scheduling Algorithm (KSA)
Dalam proses KSA terdapat 2 state array yang harus diinisialisasi yakni S
dan K. Array S sepanjang 256 diinisialisasi dengan bilangan 0 sampai 255,
S[0] = 0, S[1] = 1, ... , S[255] = 255. Sedangkan array K dengan panjang
256 diinisialisasi dengan kunci yang diulangi sampai seluruh array K[0],
K[1], ... , K[255] terisi penuh (Ariyanto, 2009).
Berikut adalah algoritma KSA, dimana simbol l menyatakan panjang
kunci dalam byte.
for i from 0 to 255
S[i] := i
endfor
j := 0
for i from 0 to 255
j := (j + S[i] + K[i mod l]) mod 256
swap values of S[i] and S[j]
endfor
Universitas Sumatera Utara
9
2. Pseudo-Random Generation Algorithm (PRGA)
State array S hasil dari proses KSA digunakan lagi dalam proses PRGA
ini untuk menghasilkan keystream yang akan di XOR kan dengan plaintext
untuk menghasilkan ciphertext (Mooduto & Albar, 2004).
Berikut adalah algoritma PRGA :
i := 0
j := 0
while GeneratingOutput:
i := (i + 1) mod 256
j := (j + S[i]) mod 256
swap values of S[i] and S[j]
output := S[(S[i] + S[j]) mod 256]
endwhile
2.5 Algoritma RC4A
Pada FSE 2004, Souradyuti Paul dan Bart Preneel telah mengusulkan sebuah varian
baru dari RC4 yang diberi nama RC4A. RC4A merupakan sebuah upaya untuk
meningkatkan keamanan dari RC4 tanpa mengurangi efisiensi.
RC4A adalah stream cipher yang berorientasi byte. Tahap pembentukan dari
RC4A lebih efisien dibanding RC4, tetapi tahap inisialisasinya memerlukan
setidaknya dua kali proses inisialisasi dari RC4.
Berikut adalah algoritma KSA dari RC4A (Tsunoo, et al. circa 2005):
RC4_KSA(K,�1 )
for i = 0 ... l-1
WK[i] = RC4_PRGA(�1 )
RC4_KSA(WK,�2 )
Universitas Sumatera Utara
10
Berikut adalah algoritma PRGA dari RC4A (Tsunoo, et al. circa 2005):
Initialization:
i = 0
�1 = �2 = 0
Generation loop
i = i + 1
�1 = �1 + �1 [i]
Swap (�1 [i], �1 [�1 ])
Output z = �2 [�1 [i] + �1 [�1 ]]
�2 = �2 + �2 [i]
Swap (�2 [i], �2 [�2 ])
Output z = �1 [�2 [i] + �2 [�2 ]]
RC4A menggunakan dua state array, S1 dan S2, dan tiga buah indeks i, j1, dan
j2. RC4A menggunakan KSA yang sama dengan RC4 kecuali satu hal dimana KSA
digunakan dua kali, masing-masing sekali untuk S1 dan S2. Semua operasi aritmetika
dihitung dengan modulo 256.
Proses KSA dari RC4A terdiri atas 2 bagian yaitu :
1. KSA dengan masukan K dan S1.
2. KSA dengan masukan WK dan S2.
WK dihasilkan dari PRGA milik RC4. l di sini merupakan panjang kunci
dalam byte.
Setelah S1 dan S2 diperoleh dari proses KSA, selanjutnya digunakan kembali dalam
PRGA. Tiap putaran dalam PRGA menghasilkan 2 byte output.
2.6 Fungsi Hash
Salah satu hal primitif mendasar dalam kriptografi modern adalah fungsi hash
kriptografi yang sering disebut dengan fungsi hash satu arah. Fungsi hash adalah
sebuah fungsi dengan masukan string biner yang panjangnya sembarang dan
menghasilkan string biner dengan panjang yang tetap. Fungsi hash yang paling
banyak digunakan dalam kriptografi adalah untuk integritas data dan tanda tangan
digital (Menezes, et al. 1996).
Universitas Sumatera Utara
11
Fungsi hash satu arah (one-way hash function) sering disebut juga sebagai
message digest, fingerprint, dan fungsi kompresi. Fungsi ini biasanya diperlukan bila
kita menginginkan pengambilan sidik jari suatu pesan. Sebagaimana sidik jari
manusia yang menunjukkan identitas si pemilik sidik jari, fungsi ini diharapkan pula
mempunyai kemampuan yang serupa dengan sidik jari manusia, di mana sidik jari
pesan diharapkan menunjuk ke satu pesan dan tidak dapat menunjuk kepada pesan
lainnya. Dinamakan sebagai fungsi kompresi karena biasanya, masukan fungsi hash
ini selalu lebih besar dari pada keluarannya, sehingga seolah-olah mengalami
kompresi. Namun kompresi hasil fungsi ini tidak dapat dikembalikan ke bentuk
awalnya sehingga disebut fungsi satu arah. Dinamakan message digest karena seolaholah merupakan inti sari pesan, meskipun sebenarnya tidak demikian (Kurniawan,
2004).
Fungsi hash dapat digunakan untuk mewujudkan layanan keutuhan data.
Misalnya M merupakan pesan dan h adalah fungsi hash, maka � = ℎ(�) disebut
dengan message digest. Sebelum pesan M disebarkan/dikirimkan sebuah message
digest ����� = ℎ(�) disimpan sebagai acuan. Misalnya didapatkan kembali �′
setelah disebarkan/dikirim apabila ingin menguji apakah � = �′ hitung kembali
message digest baru ����� = ℎ(�′) disimpulkan pesan tidak berubah bila ����� =
����� (Sadikin, 2012).
Fungsi hash memiliki karakteristik sebagai berikut (Kromodimoeljo, 2010) :
1. Preimage resistance.
Untuk suatu nilai hash yang sembarang (tidak diketahui asal-usulnya),
sangat sukar untuk mencari naskah yang mempunyai nilai hash tersebut.
2. Second preimage resistance.
Untuk suatu naskah �1 , sangat sukar untuk mencari naskah lain �2 yang
mempunyai nilai hash yang sama.
3. Collision resistance.
Sangat sukar untuk mencari dua naskah �1 dan �2 yang berbeda, yang
mempunyai nilai hash yang sama.
2.7 Algoritma MD5
MD5 adalah salah satu fungsi hash yang paling banyak digunakan. MD5 merupakan
versi perbaikan dari MD4 yang dirancang oleh Ron Rivest pada tahun 1991. MD5
Universitas Sumatera Utara
12
umumnya digunakan sebagai checksum untuk verifikasi integritas file yang
didownload dari internet.
MD5 memproses teks masukan ke dalam blok-blok 512 bit, kemudian dibagi
menjadi 16 buah sub blok sebesar 32 bit. Keluaran dari algoritma MD5 adalah sebuah
set dari 4 buah blok masing-masing 32 bit, yang kemudian menghasilkan nilai hash
128 bit (Schneier, 1996).
Langkah-langkah pembuatan message digest pada MD5 adalah sebagai berikut:
1. Penambahan bit-bit pengganjal (padding bits)
Pesan ditambahkan sejumlah bit pengganjal sedemikian sehingga panjang
pesan (dalam bit) kongruen dengan 448, modulo 512. Hal ini berarti pesan
akan mempunyai panjang yang hanya kurang 64 bit dari kelipatan 512.
Penambahan bit selalu dilakukan walaupun panjang pesan sudah kongruen
dengan 448, modulo 512. Jika panjang pesan jumlahnya 448 bit, maka
pesan tersebut ditambah dengan 512 bit menjadi 960 bit, jadi panjang bitbit pengganjal adalah antara 1 sampai 512 bit. Bit-bit pengganjal terdiri
dari sebuah bit 1 dan diikuti dengan bit 0 yang menjadi sisanya
(Chulkamdi, dkk. 2015).
2. Penambahan nilai panjang pesan semula
Pesan yang telah diberi bit-bit pengganjal selanjutnya ditambah lagi
dengan 64 bit yang menyatakan panjang pesan semula. Jika panjang pesan
semula > 264, maka hanya 64 bit secara low-order yang digunakan. Pada
saat ini, pesan yang dihasilkan memiliki panjang yang merupakan
kelipatan dari 512.
3. Inisialisasi penyangga (buffer) MD
MD5 membutuhkan 4 buah penyangga atau buffer yang masing-masing
panjangnya 4 x 32 bit = 128 bit. Setiap penyangga diinisialisasi dengan
nilai hexadesimal sebagai berikut :
A = 01 23 45 67
B = 89 ab cd ef
C = fe dc ba 98
D = 76 54 32 10
Universitas Sumatera Utara
13
4. Pengolahan pesan dalam blok berukuran 512 bit
Dalam tahap ini terdapat fungsi yang akan menghasilkan output satu buah
word 32 bit yang didefinisikan sebagai berikut :
F(b,c,d) = (b ∧ c) ( b ∧ d)
G(b,c,d) = (b ∧ d) ∨(c ∧ ∼d)
H(b,c,d) = b
c
I(b,c,d) = c
(b ∨
d
d)
(Operator logika and, or, not, xor masing-masing dilambangkan dengan
, , , ).
Tahap ini menggunakan sebuah tabel 64 elemen T[1 ... 64] yang dibangun
dari fungsi sinus. T[i] menunjukkan urutan ke-i elemen dari tabel yang
merupakan 232 × abs(sin(i)), di mana i dalam radian. Nilai T[i] dapat
dilihat pada Tabel 2.1.
Tabel 2.1 Nilai T[i]
T[1] = D76AA478
T[2] = E8C7B756
T[3] = 242070DB
T[4] = C1BDCEEE
T[5] = F57C0FAF
T[6] = 4787C62A
T[7] = A8304613
T[8] = FD469501
T[9] = 698098D8
T[10] = 8B44F7AF
T[11] = FFFF5BB1
T[12] = 895CD7BE
T[13] = 6B901122
T[14] = FD987193
T[15] = A679438E
T[16] = 49B40821
T[17]
T[18]
T[19]
T[20]
T[21]
T[22]
T[23]
T[24]
T[25]
T[26]
T[27]
T[28]
T[29]
T[30]
T[31]
T[32]
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
F61E2562
C040B340
265E5A51
E9B6C7AA
D62F105D
02441453
D8A1E681
E7D3FBCB
21E1CDE6
C33707D6
F4D50D87
455A14ED
A9E3E905
FCEFA3F8
676F02D9
8D2A4C8A
T[33]
T[34]
T[35]
T[36]
T[37]
T[38]
T[39]
T[40]
T[41]
T[42]
T[43]
T[44]
T[45]
T[46]
T[47]
T[48]
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
FFFA3942
8771F681
69D96122
FDE5380C
A4BEEA44
4BDECFA9
F6BB4B60
BEBFBC70
289B7EC6
EAA127FA
D4EF3085
04881D05
D9D4D039
E6DB99E5
1FA27CF8
C4AC5665
T[49]
T[50]
T[51]
T[52]
T[53]
T[54]
T[55]
T[56]
T[57]
T[58]
T[59]
T[60]
T[61]
T[62]
T[63]
T[64]
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
F4292244
432AFF97
AB9423A7
FC93A039
655B59C3
8F0CCC92
FFEFF47D
85845DD1
6FA87E4F
FE2CE6E0
A3014314
4E0811A1
F7537E82
BD3AF235
2AD7D2BB
EB86D391
Proses pada tahap ini terdiri dari 4 buah putaran dan masing-masing
putaran melakukan operasi dasar MD5 sebanyak 16 kali.
Operasi dasar MD5 ditulis dalam persamaan sebagai berikut:
a = b + ((a + F(b,c,d) + X[k] + T[i])