Implementasi Algoritma Xor Dan Algoritma Rc4 Pada Aplikasi Enkripsi Dan Dekripsi Teks Berbasis Android
BAB 2
LANDASAN TEORI
2.1 Kriptografi
Kata Cryptography berasal dari bahasa Yunani yang terdiri dari dua kata yaitu kryptos
yang berarti rahasia dan graphein yang berarti tulisan (Mollin, 2007). Menurut
terminologinya, kriptografi adalah ilmu dan seni untuk menjaga keamanan pesan
ketika pesan dikirim dari suatu tempat ke tempat lain (Ariyus, 2008).
2.1.1
Sejarah kriptografi
Kriptografi mempunyai sejarah yang menarik dan panjang. Kriptografi sudah
digunakan 4000 tahun yang lalu yang diperkenalkan oleh orang-orang Mesir untuk
mengirim pesan ke pasukan militer yang berada di lapangan dan supaya pesan tersebut
tidak terbaca oleh pihak musuh walaupun kurir pembawa pesan tersebut tertangkap
oleh musuh (Ariyus, 2006).
2.1.2
Algoritma kriptografi
Algoritma ditinjau dari asal usul kata, kata algoritma mempunyai sejarah yang
menarik, kata ini muncul dalam kamus Webster sampai akhir tahun 1957 hanya
menemukan kata algorism yang mempunyai arti proses perhitungan dengan bahasa
Arab. Algoritma berasal dari nama penulis buku Arab yang terkenal yaitu Abu Ja’far
Muhammad Ibnu Musa al-Khuwarizmi (al-Khuwarizmi dibaca oleh orang barat
menjadi algorism). Kata algorism lambat laun berubah menjadi algorithm.
Definisi terminologinya algoritma adalah urutan langkah-langkah logis untuk
penyelesaian masalah yang disusun secara sistematis. Algoritma kriptografi
merupakan langkah-langkah logis bagaimana menyembunyikan pesan dari orangorang yang tidak berhak atas pesan tersebut.
7
Algoritma kriptografi terdiri dari tiga fungsi dasar yaitu:
1. Enkripsi: Enkripsi merupakan hal yang sangat penting dalam kriptografi yang
merupakan pengamanan data yang dikirimkan dan terjaga kerahasiannya.
Pesan asli disebut plaintext yang dirubah menjadi kode-kode yang tidak
dimengerti atau disebut dengan chipertext.
2. Dekripsi: Dekripsi merupakan kebalikan dari enkripsi, pesan yang telah
dienkripsi dikembalikan kebentuk asalnya ( plaintext) disebut dengan dekripsi
pesan.
3. Kunci: Kunci yang dimaksud disini adalah kunci yang dipakai untuk
melakukan enkripsi dan dekripsi, kunci terbagi menjadi dua bagian yaitu kunci
pribadi (private key) dan kunci umum (public key).
Secara umum fungsi tersebut dapat dilihat pada Gambar 2.1.
Plaintext
Enkripsi
Ciphertext
Kunci
Dekripsi
Plaintext
Kunci
Gambar 2.1 Proses enkripsi dan dekripsi
2.2 Macam-Macam Algoritma Kriptografi
Algoritma kriptografi dibagi tiga berdasarkan kunci yang dipakai, yaitu algoritma
simetri (menggunakan satu kunci untuk proses enkripsi dan dekripsi), algoritma
asimetri (menggunakan kunci yang berbeda untuk proses enkripsi dan dekripsi), dan
fungsi hash (Ariyus, 2008).
2.2.1
Algoritma simetri
Algoritma simetri adalah algoritma dimana penyandian kunci enkripsi dan kunci
dekripsi bernilai sama. Kunci pada penyandian simetri diasumsikan bersifat
rahasia dan hanya pihak yang melakukan enkripsi dan dekripsi yang mengetahui
nilainya (Sadikin, 2012).
Algoritma ini sering disebut dengan algoritma klasik karena memakai
kunci yang sama untuk kegiatan enkripsi dan dekripsi. Algoritma ini sudah ada
8
sejak lebih dari 4000 tahun yang lalu. Bila mengirim pesan dengan menggunakan
algoritma ini, si penerima pesan harus diberitahu kunci dari pesan tersebut agar bisa
mendekripsikan pesan yang dikirim. 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. Algoritma yang memakai kunci simetri di antaranya adalah DES, RC2,
RC4, RC5, RC6, IDEA, AES, A5, OTP, dan sebagainya (Ariyus, 2008).
Proses kriptografi simetri dapat dilihat pada Gambar 2.2.
Teks
Enkripsi
Ciphertext
Dekripsi
Teks
Kunci Rahasia
Gambar 2.2 Kriptografi simetri
2.2.2
Algoritma asimetri
Algoritma asimetri atau sering juga disebut dengan penyandian kunci publik (public
key) adalah algoritma dimana penyandian antara kunci enkripsi dan dekripsi
mempunyai nilai yang beda. Kunci enkripsi yang juga disebut dengan kunci publik
(public key) bersifat terbuka. Sedangkan, kunci dekripsi yang juga disebut kunci privat
(private key) bersifat tertutup/rahasia (Sadikin, 2012).
Kunci-kunci tersebut berhubungan satu sama lain. Dengan kunci publik orang
dapat mengenkripsi pesan tetapi tidak bisa mendekripsinya. Hanya orang yang
memiliki kunci rahasia yang dapat mendekripsi pesan tersebut. Algoritma asimetri
bisa mengirimkan pesan dengan lebih aman daripada algoritma simetri. Contoh, Alice
mengirim pesan ke Bob menggunakan algoritma asimetri. Hal yang harus dilakukan
adalah:
1. Bob memberitahukan kunci publiknya ke Alice.
2. Alice mengenkripsikan dengan menggunakan kunci publik Bob.
3. Bob mendekripsi pesan dari Alice dengan kunci rahasianya.
4. Begitu juga sebaliknya jika Bob ingin mengirim pesan ke Alice.
9
Proses kriptografi asimetri dapat dilihat pada Gambar 2.3.
Gambar 2.3 Kriptografi asimetri (Paar, 2010)
Algoritma yang memakai kunci public diantaranya adalah: DSA, RSA, DH, ECC,
Kriptografi Kuantum, dan lain sebagainya.
2.3 Tipe dan Model Algoritma Kriptografi
Pada dasarnya ada dua tipe dan model yang umum digunakan dalam algoritma
kriptografi simetri yaitu aliran kode (stream cipher ) dan blok kode (block cipher ).
2.3.1
Aliran kode
Aliran kode (stream cipher ) adalah sebuah simetri cipher yang beroperasi bit per bit
pada plaintext dimana 1 bit setiap kali transformasi untuk menjadi ciphertext. Aliran
kode mengenkripsi teks asli menjadi teks kode bit per bit. Stream cipher umumnya
lebih cepat daripada block cipher pada perangkat keras dan juga lebih tepat dalam
beberapa kasus wajib (misalnya, dalam beberapa aplikasi telekomukasi) dimana ketika
proses pengiriman data memiliki buffering yang terbatas sehingga setiap karakter
harus diproses secara individu (van Tillborg, 2011).
Stream cipher Pertama kali diperkenalkan oleh Vernam melalui algoritma
yang dikenal dengan nama kode Vernam. Kode Vernam diadopsi dari one-time pad
cipher , yang dalam hal ini karakter diganti dengan bit (0 dan 1). Ciphertext diperoleh
dengan melakukan penjumlahan modulo 2 satu bit plaintext dengan satu bit kunci
seperti pada persamaan 1.
Ci = Pi + K i mod 2.………….............................................(1)
10
yang dalam hal ini:
P i : bit plaintext
Ki : bit kunci
Ci : bit ciphertext
1. Plaintext diperoleh dengan melakukan penjumlahan modulo 2 satu bit
ciphertext dengan satu bit kunci seperti pada persamaan 2.
Pi = (Ci − K i ) mod 2....………...............................................(2)
2. Dengan kata lain, kode Vernam adalah versi lain dari kode one-time pad.
3. Oleh karena operasi penjumlahan modulo 2 identik dengan operasi bit dengan
operator XOR maka persamaan 1 dapat ditulis seper.ti pada persamaan 3.
Ci = Pi ⊕ K i ....………...........................................................(3)
dan proses dekripsi menggunakan persamaan seperti pada persamaan 4.
Pi = Ci ⊕ K i ....…...................................................................(4)
Pada stream cipher , bit hanya mempunyai dua buah nilai sehingga proses
enkripsi hanya menyebabkan dua keadaan pada bit tersebut, berubah atau tidak
berubah. Dua keadaan itu ditentukan oleh kunci enkripsi yang disebut aliran bit kunci
(keystream). Aliran bit kunci dibangkitkan dari sebuah pembangkit yang dinamakan
pembangkit aliran bit kunci (keystream generator ). Aliran bit kunci (sering dinamakan
running key) di-XOR-kan dengan aliran bit-bit plaintext, P 1, P 2, …, P i untuk
menghasilkan aliran bit-bit ciphertext (Ariyus, 2008). Konsep stream cipher dapat
dilihat pada Gambar 2.4.
Pengirim
Penerima
Key stream
Key stream
Generator
Generator
Keystream
Plaintext
P1
K1
K1
⊕
Enkripsi
C1
Ciphertext
⊕
Dekripsi
Gambar 2.4 Konsep stream cipher
P1
Plaintext
11
Contoh: misalkan plaintext adalah 110010101 dan aliran bit kunci (keystream)
adalah 101001110 maka ciphertext yang dihasilkan yaitu 011011011. Proses tersebut
dapat dilihat pada Gambar 2.5.
Plaintext (110010101)
Keystream Generator
Keystream (101001110)
Ciphertext
(011011011)
⊕
Secret Key
Gambar 2.5. Contoh stream cipher (Smart, 2004)
Aliran kode (stream cipher ) merupakan kode yang berasal dari hasil XOR
seperti pembahasan diatas. Setiap bit plaintext dengan setiap bit kunci. Kunci
merupakan kunci utama (kunci induk) yang digunakan untuk membangkitkan kunci
acak semu yang dibangkitkan dengan Pseudo-Random Sequence Generator yang
merupakan suatu nilai yang nampak seperti diacak tetapi sesungguhnya nilai tersebut
merupakan suatu urutan. Secara khusus urutan dari nilai yang dihasilkan oleh RNG
(Random Number Generator ).
Random Number Generator secara umum adalah pseudo-random, yang
memberikan inial state atau seed (nilai yang dimasukkan ke dalam state). Seluruh
urutan tersebut ditentukan secara menyeluruh. Meskipun demikian jumlah
karakteristik
yang
ditampilkan
berasal
dari
urutan
yang
acak
tersebut.
Pseudorandomness menghasilkan urutan yang sama secara berulang-ulang pada
penempatan yang berbeda. Kemudian kunci acak semu tersebut diberi operasi XOR
dengan plaintext untuk mendapatkan ciphertext. Proses stream cipher dapat dilihat
pada Gambar 2.6.
Gambar 2.6 Proses stream sipher
12
Keamanan sistem stream cipher bergantung seluruhnya pada pembangkit
aliran bit kunci (keystream). Jika pembangkit mengeluarkan aliran bit kunci yang
seluruhnya nol maka ciphertext sama dengan plaintext sehingga proses enkripsi
menjadi tidak ada artinya. Jika pembangkit mengeluarkan aliran bit kunci dengan pola
16 bit yang berulang maka algoritma enkripsinya menjadi sama seperti enkripsi
dengan XOR sederhana yang memiliki tingkat keamanan yang tidak berarti. Jika
pembangkit mengeluarkan aliran bit kunci yang benar-benar acak (truly random),
maka algoritma enkripsinya sama dengan one-time pad dengan tingkat keamanan
yang sempurna. Pada kasus ini aliran bit kunci sama panjangnya dengan panjang
plaintext, dan mendapatkan aliran kode sebagai unbreakable cipher . Tingkat
keamanan stream cipher terletak antara algoritma XOR sederhana dengan one-time
pad. Semakin acak keluaran yang dihasilkan oleh pembangkit aliran kunci bit, maka
semakin sulit kriptanalis memecahkan ciphertext-nya (Ariyus, 2008).
2.3.2
Blok kode
Blok kode (block cipher ) adalah sebuah fungsi enkripsi dengan membagi-bagi data
menjadi beberapa blok yang tetap. Generasi sekarang dari block cipher mempunyai
ukuran blok 128 bit (16 byte). Block cipher ini mengenkripsi 128 bit plaintext menjadi
128 bit ciphertext sebagai hasilnya. Ukuran plaintext dan ciphertext selalu sama, dan
kita sebut ini sebagai ukuran blok pada block cipher (Ferguson, 2010).
Blok kode mempunyai banyak aplikasi. Aplikasi tersebut digunakan untuk
memberikan layanan confidentiality (kerahasiaan), integritas data atau authentication
(pengesahan pemakai), dan juga bisa memberikan layanan keystream generator untuk
aliran kode (stream cipher ). Misalkan blok plaintext (P ) yang berukuran m bit
dinyatakan sebagai vektor seperti pada persamaan 5.
P = (Pi , P2 , … , Pm )..................................................................(5)
yang dalam hal ini pi adalah 0 atau 1 untuk i = 1, 2, …, m, dan blok ciphertext (C)
adalah:
C = (Ci , C2 , … , Cm ).................................................................(6)
yang dalam hal ini c i adalah 0 atau 1 untuk i = 1, 2, …, m.
Bila plaintext dibagi menjadi n buah blok, barisan blok plaintext dinyatakan pada
persamaan 7.
(Pi , P2 , … , Pn )............................................................................(7)
13
Untuk setiap blok plaintext P i, bit-bit penyusunnya dapat dinyatakan pada persamaan
8.
Pi = (Pi1 , Pi2 , … , Pim )...............................................................(8)
Enkripsi dan dekripsi dengan kunci K dinyatakan berturut-turut seperti pada
persamaan 9 dan 10.
Ek P = ................................................................................(9)
untuk dekripsi,
Dk C = �..............................................................................(10)
dan fungsi E haruslah fungsi yang berkorespondensi satu-ke-satu, sehingga:
−1
=
.................................................................................(11)
Proses enkripsi dan dekripsi block cipher dapat dilihat pada Gambar 2.7.
Enkripsi:
Block Plaintext P
Dekripsi:
Block Ciphertext C
P = (p1, p2, …, pm)
C = (c1, c2, …, cm)
Key K
Key K
E
D
Block Ciphertext C
Block Plaintext P
C = (c1, c2, …, cm)
P = (p1, p2, …, pm)
Gambar 2.7 Proses enkripsi dan dekripsi Block Cipher
Contoh: Database di sebuah bank memiliki data INCOME, dienkripsi menjadi
satu blok, itu berarti semua rekening memiliki blok enkripsi yang sama. Misalnya,
database bank memilki dua record:
MEMBER: HOLLY INCOME $100,000
MEMBER: HEIDI INCOME $100,000
Hasil enkripsinya menjadi:
ABCQZRME GHQRMSIB CTXUVYSS RMGRPFQN
ABCQZRME ORMPABRZ CTXUVYSS RMGRPFQN
Penyerang bisa menyimpulkan bahwa record yang ada di dalam database tersebut
memiliki nilai yang sama. Kesimpulan itu diambil dari kata CTXUVYSS
14
RMGRPFQN. Serangan dilakukan terhadap block cipher dengan melihat posisi dan
ukuran blok. Untuk meminimalkan serangan terhadap block cipher digunakan
beberapa cara agar posisi dan ukurannya menjadi tidak sama. Banyak mode block
cipher yang dapat dipakai. Mode operasi block cipher terbagi menjadi empat bagian,
antara lain:
1. Mode Electronic Code Book (ECB)
2. Mode Cipher Block Chaining (CBC)
3. Mode Cipher Feed Back (CFB)
4. Mode Output Feed Back (OFB)
Dari setiap mode tersebut plaintext dibagi menjadi blok-blok. Misalnya, setiap
blok mempunyai nilai 128 bit. Jika terdapat plaintext yang dibagi ke bentuk blok yang
mempunyai nilai kurang dari 128 bit maka blok tersebut terlebih dahulu ditambah
dengan padding bit (bit tambahan) agar jumlahnya menjadi 128 bit untuk setiap
bloknya (Ariyus, 2008).
2.4 Algoritma Kriptografi XOR
Algoritma XOR adalah algoritma enkripsi sederhana dengan menggunakan prinsip
operator logika XOR (Exclusive-OR). Cara enkripsinya adalah dengan meng-XOR-kan
plaintext dengan kunci sehingga didapatkan ciphertext-nya. Sebaliknya untuk proses
dekripsi adalah dengan meng-XOR-kan ciphertext dengan kunci sehingga didapatkan
plaintext-nya kembali. Teknik ini beroperasi sesuai prinsip seperti pada Tabel 2.1.
Tabel 2.1 Tabel XOR
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
0
Gambar 2.8 Gerbang logika XOR
15
Jika kita berpikir tentang angka 0 dan 1 pada operasi diatas, maka operasi XOR
adalah sama dengan pemambahan modulo 2. Dasar algoritma XOR ini didefinisikan
sebagai berikut:
untuk enkripsi dapat dilihat pada persamaan 12.
P ⊕ K = C.................……….................................................(12)
sedangkan untuk dekripsi seperti pada persamaan 13.
C ⊕ K = P.........…......……...................................................(13)
Kode XOR ini memiliki keuntungan menjadi sangat efisien dan benar-benar simetris
dalam arti bahwa enkripsi dan dekripsi adalah fungsi yang sama. Jika K dipilih secara
acak dan hanya digunakan sekali, maka algoritma ini dikenal sebagai Vernam onetime pad. Sayangnya, hal ini memerlukan sebuah kunci yang sama panjangnya dengan
plaintext, yang membuatnya agak susah untuk diimplementasikan dalam beberapa
aplikasi (Hoffstein, 2008).
Sebagai contoh Algoritma XOR sederhana diketahui plaintext “ILKOM” jika
ditulis dalam format ASCII 8-bit menjadi 01001001 01001100 01001011 01001111
01001101 dapat dienkripsi dengan suatu kunci string “AAAAA” (01000001
01000001 01000001 01000001 01000001 dalam format ASCII 8-bit) sehingga didapat
hasil sebagai berikut:
01001001 01001100 01001011 01001111 01001101
01000001 01000001 01000001 01000001 01000001
-------------------------------------------------------------- ⊕
00001000 00001101 00001010 00001110 00001100 (BSCRLFSOFF)
dan sebaliknya proses dekripsi:
00001000 00001101 00001010 00001110 00001100
01000001 01000001 01000001 01000001 01000001
-------------------------------------------------------------- ⊕
01001001 01001100 01001011 01001111 01001101 (ILKOM)
Operator XOR sering dijadikan sebagai salah satu komponen dalam pembentukan
chipertext yang lebih kompleks. Namun, penggunaan suatu kunci yang berulang
secara konstan menyebabkan suatu chipertext dapat dengan mudah dipecahkan
menggunakan analisis frekuensi (seperti dibahas pada huruf yang paling sering
muncul dalam suatu bahasa).
Keutamaan dari teknik ini adalah mudah
16
diimplementasikan dan operasi XOR tidak sulit secara komputasional. Oleh Karena
itu, algoritma XOR masih sering kali digunakan untuk menyembunyikan informasi
dalam kasus-kasus tertentu dan kemudian dilengkapi dengan suatu mekanisme
keamanan tambahan lainnya.
2.5 Algoritma Kriptografi RC4
RC4 didesain oleh Ron Rivest yang berasal dari RSA Security pada tahun 1987. RC4
sendiri mempunyai singkatan resmi yaitu “Rivest Chiper”, namun juga dikenal
sebagai “Ron’s Code”. RC4 sebenarnya dirahasiakan dan tidak dipublikasikan kepada
khalayak ramai, namun ternyata ada orang yang tidak dikenal menyebarkan RC4 ke
mailing list Cypherpunks. Kemudian berita ini dengan cepat diposkan ke sci.crypt
newsgroup, dan dari newsgroup ini kemudian menyebar luas di internet. Kode yang
dibocorkan tersebut dipastikan keasliannya karena output yang dikeluarkan sama
dengan software-software yang menggunakan RC4 yang berlisensi.
Nama RC4 sudah dipatenkan, sehingga RC4 sering disebut juga ARCFOUR
atau ARC4 (Allegred RC4) untuk menghindari masalah pematenan. RSA Security tidak
pernah secara resmi merilis algoritma tersebut, namun Rivest secara pribadilah yang
merilisnya tersebut dengan menghubungkan Wikipedia Inggris ke catatan-catatan
yang ia punya. RC4 telah menjadi bagian dari protokol enkripsi yang standar dan
sering digunakan, termasuk WEP dan WPA untuk wireless card, serta TLS. Faktor
utama yang menjadi kesuksesan dari RC4 adalah kecepatannya dan kesederhanaannya
dalam mengenai banyak aplikasi, sehingga mudah untuk mengembangkan
implementasi yang efisien ke software dan hardware.
RC4 termasuk ke dalam kode aliran ( stream cipher ) dengan kunci
rahasia/kunci simetri (kunci yang sama digunakan untuk proses enkripsi dan dekripsi).
Seperti halnya dengan Vernam Cipher , inti dari enkripsi RC4 adalah pembangkitan
kunci aliran (keystream) yang bersifat acak semu (pseudo random). Algoritma RC4
terdiri atas 2 bagian yaitu Key Scheduling algorithm (KSA) dan Pseudo Random
Generation Algorithm (PRGA) (Mooduto, 2004).
17
2.5.1
Key schedulling algorithm
Tahap pertama dari algoritma RC4 adalah key schedulling (KSA). Pada tahap ini State
diberi nilai awal berupa larik yang merepresentasikan suatu permutasi dengan 256
elemen. Jadi, hasil dari KSA adalah permutasi awal. Larik yang mempunyai 256
elemen ini (dengan indeks 0-255) dinamakan S (Kromodimoeljo, 2010). Langkahlangkah pembentukan S adalah sebagai berikut:
1. Inisialisasi kotak-S sesuai dengan indeksnya: S[0] = 0, S[1] = 1, …, S[255] =
255. Kotak-S yang terbentuk ditunjukkan oleh Tabel 2.2.
Tabel 2.2 Larik 256 byte kotak-S awal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
2. Kunci dimasukkan ke dalam larik berukuran 256. Jika ukuran kunci kurang
dari 256 byte, maka dilakukan padding dengan mengulang kunci hingga larik
terisi penuh. Misalkan kunci “jaya” dengan kode ASCII 106, 97, 121, dan 97.
Tabel 2.3 menunjukkan larik 256 byte dengan kunci tersebut.
18
Tabel 2.3 Larik 256 byte kunci
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
3. Kotak-S disusun kembali membentuk kotak-S akhir yang ditunjukkan oleh
Tabel 2.4. Langkah pertama, penghitung j diinisialisasi dengan nol. Kemudian
nilai j yang baru = (j + S[i] + K[i]) mod 256. Lalu, nilai S[i] dan S[j]
ditukarkan. Proses penentuan nilai j yang baru dan penukaran nilai S[i] dengan
S[j] tersebut dilakukan dari i = 0 sampai dengan i = 255.
Tabel 2.4 Larik 256 byte kotak-S akhir
78
103
71
171
47
127
223
143
216
66
153
185
15
69
244
167
152
8
29
147
97
227
195
174
108
155
100
224
7
182
188
146
133
176
10
255
180
58
88
84
92
122
228
192
54
205
93
5
207
197
181
177
51
62
63
115
80
45
237
48
72
126
186
194
111
156
144
231
253
136
64
238
160
137
19
217
89
193
91
61
28
23
50
105
94
221
172
132
229
211
166
98
44
230
178
130
134
198
90
0
245
241
34
30
27
18
208
79
95
117
249
85
19
140
119
179
219
254
52
39
168
138
169
112
32
14
204
201
25
129
110
246
40
26
120
35
16
21
199
159
13
202
184
191
175
162
109
251
247
225
77
113
65
96
81
139
164
70
236
183
215
104
125
239
20
43
76
206
187
114
75
190
1
60
83
234
149
243
73
189
82
57
46
86
141
101
220
161
200
4
56
131
53
87
33
242
6
250
3
222
74
9
173
165
24
12
106
36
233
213
123
17
22
42
142
99
37
148
163
196
218
49
203
210
41
68
107
154
212
170
235
252
128
118
158
11
214
157
59
248
135
124
55
240
102
151
121
2
67
145
31
232
209
116
226
150
38
Untuk i = 0, j = (0 + S[0] + K[0]) mod 256 = (0 + 0 + 106) mod 256 = 106.
Nilai S[0] dan S[106] ditukarkan sehingga S[0] = 106 dan S[106] = 0.
Demikian seterusnya sampai i = 255.
2.5.2
Pseudo random generation algorithm
Tahap selanjutnya dari algoritma RC4 dinamakan Pseudo Random Generation
Algorithm (PRGA). Tahap ini menghasilkan nilai pseudo-random yang kemudian diXOR-kan dengan plaintext untuk proses enkripsi atau dengan ciphertext pada proses
dekripsi). Langkah pertama adalah menginisialisasikan nilai i dan j dengan nol. Untuk
k = 0, …, k = panjang pesan – 1, nilai i dan j yang baru dihitung dengan cara:
i = (i + 1) mod 256
j = (j + S[i]) mod 256
Nilai S[i] dan S[j] ditukarkan. Kemudian, nilai S dengan indeks t = (S[i] + S[j]) mod
256 diambil. Nilai S[t] tersebut terakhir di-XOR-kan dengan plaintext atau ciphertext
dengan indeks k.
Misalkan pesan yang akan dienkripsi adalah “ilkom“ dengan panjang lima
byte. Pesan tersebut dalam kode ASCII adalah 105, 108, 107, 111, 109. Ciphertext
dihasilkan pertama-tama dengan menginisialisasikan nilai i dan j dengan nol.
Selanjutnya, dari nilai nol sampai dengan empat dilakukan perhitungan nilai i dan j
yang baru. Hasil perhitungan yang pertama adalah:
i = (0 + 1) mod 256 = 1
j = (0 + S[1]) mod 256 = (0 + 103) mod 256 = 103
20
Nilai S[1] = 103 dan S[103] = 30 ditukarkan sehingga dihasilkan S[1] = 30 dan S[103]
= 103. Selanjutnya, nilai t dihitung: t = (S[1] + S[103]) mod 256 = (30 + 103) mod 256
= 133. Kemudian, nilai S[t] = S[133] = 120 di-XOR-kan dengan pesan[k] = pesan[0],
yaitu “ i ” yang kode ASCII nya adalah 105.
01111000
01101001_⊕
00010001 (dalam desimal = 17, yaitu kode ASCII untuk karakter “DC1”)
Proses tersebut diulang sampai karakter terakhir plaintext. Algoritma yang sama juga
digunakan untuk mendekripsi ciphertext (Fiansyah, 2008).
2.6 Android
Android merupakan sistem operasi Mobile berbasis kernel Linux yang dikembangkan
oleh Android Inc. Sistem operasi ini bersifat terbuka (open source) sehingga para
pengembang dapat membuat aplikasi mereka sendiri. Awalnya Google Inc. membeli
Android Inc. yang merupakan pendatang baru yang membuat perangkat lunak untuk
telepon genggam. Kemudian untuk mengembangkan Android di bentuklah Open
Handset Alliance yang merupakan gabungan dari 34 perusahaan peranti keras, peranti
lunak, dan telekomunikasi termasuk Google, HTC, Intel, Motorola, Qualcomm, TMobile, dan NVidia. Pada saat perilisan perdana Android pada tanggal 5 November
2007,
Android
bersama
Open
Handset
Alliance
menyatakan
mendukung
pengembangan standar terbuka pada perangkat seluler. Di lain pihak, Google merilis
kode-kode Android dibawah lisensi Apache, sebuah lisensi perangkat lunak standar
terbuka perangkat seluler. Terdapat dua jenis distributor sistem operasi Android.
Pertama yang mendapat dukungan penuh dari Google atau Google Mail Service
(GMS) dan kedua adalah yang benar-benar bebas distribusinya tanpa dukungan
langsung dari Google atau dikenal sebagai Open Handset Distribution (DHD)
(Ardiansyah, 2011).
Sejak April 2009, versi Android dikembangkan dengan nama kode yang dinamai
berdasarkan makanan pencuci mulut dan penganan manis. Masing-masing versi dirilis
sesuai urutan alfabet, yakni Cupcake (1.5), Donut (1.6), Eclair (2.0–2.1), Froyo (2.2–
2.2.3), Gingerbread (2.3–2.3.7), Honeycomb (3.0–3.2.6), Ice Cream Sandwich (4.0–
4.0.4), Jelly Bean (4.1–4.3), KitKat (4.4-4.4.3), Lollipop (5.0) dan Marsmallow (6.0).
21
2.7 Penelitian yang Relevan
Beberapa penelitian yang telah dilakukan sebelumnya yang berkaitan dengan
penelitian ini adalah:
1. Nihe, H.R (2015) dalam skripsi yang berjudul Implementasi Algoritma Affine
Cipher dan Algoritma Advance Encryption Standard (AES) Pada Aplikasi
Short Message Service (SMS) Berbasis Android. Berdasarkan hasil pengujian,
perbandingan panjang SMS berbanding lurus dengan waktu proses enkripsi
dan dekripsi dimana dalam proses tersebut, algoritma AES membutuhkan
waktu lebih lama dibandingkan dengan algoritma affine cipher .
2. Penelitian yang dilakukan oleh Nababan, A.M (2015). Membahas tentang
penerapan algoritma RC4 dan Teknik Spread Spectrum untuk pengamanan
Text File dimana ukuran naskah asli dan naskah acak selalu sama. Ukuran
cover-image dan stego-image juga selalu sama. Hubungan antara panjang
naskah acak dan waktu pemrosesan untuk penyisipan dan ekstraksi adalah
hubungan yang berbanding lurus. Semakin panjang naskah acak, semakin lama
waktu pemrosesan, begitu juga dengan sebaliknya.
3. Penelitian yang dilakukan oleh Fiansyah, E (2008). Membahas tentang
penerapan algoritma RC4 pada aplikasi sistem informasi pengolah database
pendataan kegiatan skripsi dimana aplikasi yang menggunakan mekanisme
keamanan enkripsi, client menerima waktu tanggap lebih lama dibandingkan
aplikasi yang tidak menggunakan keamanan enkripsi. Namun dengan adanya
mekanisme keamanan enkripsi, data menjadi lebih aman.
4. Sebayang, A.M.S (2014) dalam skripsi yang berjudul Implementasi Kombinasi
Beuafort Cipher dan Afffine Cipher pada Three –Pass Protocol untuk
Pengamanan Data. Berdasarkan hasil pengujian grafik, hubungan antara
waktu proses dan panjang plaintext diperoleh bahwa hasil panjang plaintext
berbanding lurus terhadap waktu, semakin panjang plaintext maka waktu yang
dibutuhkan juga akan semakin lama.
LANDASAN TEORI
2.1 Kriptografi
Kata Cryptography berasal dari bahasa Yunani yang terdiri dari dua kata yaitu kryptos
yang berarti rahasia dan graphein yang berarti tulisan (Mollin, 2007). Menurut
terminologinya, kriptografi adalah ilmu dan seni untuk menjaga keamanan pesan
ketika pesan dikirim dari suatu tempat ke tempat lain (Ariyus, 2008).
2.1.1
Sejarah kriptografi
Kriptografi mempunyai sejarah yang menarik dan panjang. Kriptografi sudah
digunakan 4000 tahun yang lalu yang diperkenalkan oleh orang-orang Mesir untuk
mengirim pesan ke pasukan militer yang berada di lapangan dan supaya pesan tersebut
tidak terbaca oleh pihak musuh walaupun kurir pembawa pesan tersebut tertangkap
oleh musuh (Ariyus, 2006).
2.1.2
Algoritma kriptografi
Algoritma ditinjau dari asal usul kata, kata algoritma mempunyai sejarah yang
menarik, kata ini muncul dalam kamus Webster sampai akhir tahun 1957 hanya
menemukan kata algorism yang mempunyai arti proses perhitungan dengan bahasa
Arab. Algoritma berasal dari nama penulis buku Arab yang terkenal yaitu Abu Ja’far
Muhammad Ibnu Musa al-Khuwarizmi (al-Khuwarizmi dibaca oleh orang barat
menjadi algorism). Kata algorism lambat laun berubah menjadi algorithm.
Definisi terminologinya algoritma adalah urutan langkah-langkah logis untuk
penyelesaian masalah yang disusun secara sistematis. Algoritma kriptografi
merupakan langkah-langkah logis bagaimana menyembunyikan pesan dari orangorang yang tidak berhak atas pesan tersebut.
7
Algoritma kriptografi terdiri dari tiga fungsi dasar yaitu:
1. Enkripsi: Enkripsi merupakan hal yang sangat penting dalam kriptografi yang
merupakan pengamanan data yang dikirimkan dan terjaga kerahasiannya.
Pesan asli disebut plaintext yang dirubah menjadi kode-kode yang tidak
dimengerti atau disebut dengan chipertext.
2. Dekripsi: Dekripsi merupakan kebalikan dari enkripsi, pesan yang telah
dienkripsi dikembalikan kebentuk asalnya ( plaintext) disebut dengan dekripsi
pesan.
3. Kunci: Kunci yang dimaksud disini adalah kunci yang dipakai untuk
melakukan enkripsi dan dekripsi, kunci terbagi menjadi dua bagian yaitu kunci
pribadi (private key) dan kunci umum (public key).
Secara umum fungsi tersebut dapat dilihat pada Gambar 2.1.
Plaintext
Enkripsi
Ciphertext
Kunci
Dekripsi
Plaintext
Kunci
Gambar 2.1 Proses enkripsi dan dekripsi
2.2 Macam-Macam Algoritma Kriptografi
Algoritma kriptografi dibagi tiga berdasarkan kunci yang dipakai, yaitu algoritma
simetri (menggunakan satu kunci untuk proses enkripsi dan dekripsi), algoritma
asimetri (menggunakan kunci yang berbeda untuk proses enkripsi dan dekripsi), dan
fungsi hash (Ariyus, 2008).
2.2.1
Algoritma simetri
Algoritma simetri adalah algoritma dimana penyandian kunci enkripsi dan kunci
dekripsi bernilai sama. Kunci pada penyandian simetri diasumsikan bersifat
rahasia dan hanya pihak yang melakukan enkripsi dan dekripsi yang mengetahui
nilainya (Sadikin, 2012).
Algoritma ini sering disebut dengan algoritma klasik karena memakai
kunci yang sama untuk kegiatan enkripsi dan dekripsi. Algoritma ini sudah ada
8
sejak lebih dari 4000 tahun yang lalu. Bila mengirim pesan dengan menggunakan
algoritma ini, si penerima pesan harus diberitahu kunci dari pesan tersebut agar bisa
mendekripsikan pesan yang dikirim. 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. Algoritma yang memakai kunci simetri di antaranya adalah DES, RC2,
RC4, RC5, RC6, IDEA, AES, A5, OTP, dan sebagainya (Ariyus, 2008).
Proses kriptografi simetri dapat dilihat pada Gambar 2.2.
Teks
Enkripsi
Ciphertext
Dekripsi
Teks
Kunci Rahasia
Gambar 2.2 Kriptografi simetri
2.2.2
Algoritma asimetri
Algoritma asimetri atau sering juga disebut dengan penyandian kunci publik (public
key) adalah algoritma dimana penyandian antara kunci enkripsi dan dekripsi
mempunyai nilai yang beda. Kunci enkripsi yang juga disebut dengan kunci publik
(public key) bersifat terbuka. Sedangkan, kunci dekripsi yang juga disebut kunci privat
(private key) bersifat tertutup/rahasia (Sadikin, 2012).
Kunci-kunci tersebut berhubungan satu sama lain. Dengan kunci publik orang
dapat mengenkripsi pesan tetapi tidak bisa mendekripsinya. Hanya orang yang
memiliki kunci rahasia yang dapat mendekripsi pesan tersebut. Algoritma asimetri
bisa mengirimkan pesan dengan lebih aman daripada algoritma simetri. Contoh, Alice
mengirim pesan ke Bob menggunakan algoritma asimetri. Hal yang harus dilakukan
adalah:
1. Bob memberitahukan kunci publiknya ke Alice.
2. Alice mengenkripsikan dengan menggunakan kunci publik Bob.
3. Bob mendekripsi pesan dari Alice dengan kunci rahasianya.
4. Begitu juga sebaliknya jika Bob ingin mengirim pesan ke Alice.
9
Proses kriptografi asimetri dapat dilihat pada Gambar 2.3.
Gambar 2.3 Kriptografi asimetri (Paar, 2010)
Algoritma yang memakai kunci public diantaranya adalah: DSA, RSA, DH, ECC,
Kriptografi Kuantum, dan lain sebagainya.
2.3 Tipe dan Model Algoritma Kriptografi
Pada dasarnya ada dua tipe dan model yang umum digunakan dalam algoritma
kriptografi simetri yaitu aliran kode (stream cipher ) dan blok kode (block cipher ).
2.3.1
Aliran kode
Aliran kode (stream cipher ) adalah sebuah simetri cipher yang beroperasi bit per bit
pada plaintext dimana 1 bit setiap kali transformasi untuk menjadi ciphertext. Aliran
kode mengenkripsi teks asli menjadi teks kode bit per bit. Stream cipher umumnya
lebih cepat daripada block cipher pada perangkat keras dan juga lebih tepat dalam
beberapa kasus wajib (misalnya, dalam beberapa aplikasi telekomukasi) dimana ketika
proses pengiriman data memiliki buffering yang terbatas sehingga setiap karakter
harus diproses secara individu (van Tillborg, 2011).
Stream cipher Pertama kali diperkenalkan oleh Vernam melalui algoritma
yang dikenal dengan nama kode Vernam. Kode Vernam diadopsi dari one-time pad
cipher , yang dalam hal ini karakter diganti dengan bit (0 dan 1). Ciphertext diperoleh
dengan melakukan penjumlahan modulo 2 satu bit plaintext dengan satu bit kunci
seperti pada persamaan 1.
Ci = Pi + K i mod 2.………….............................................(1)
10
yang dalam hal ini:
P i : bit plaintext
Ki : bit kunci
Ci : bit ciphertext
1. Plaintext diperoleh dengan melakukan penjumlahan modulo 2 satu bit
ciphertext dengan satu bit kunci seperti pada persamaan 2.
Pi = (Ci − K i ) mod 2....………...............................................(2)
2. Dengan kata lain, kode Vernam adalah versi lain dari kode one-time pad.
3. Oleh karena operasi penjumlahan modulo 2 identik dengan operasi bit dengan
operator XOR maka persamaan 1 dapat ditulis seper.ti pada persamaan 3.
Ci = Pi ⊕ K i ....………...........................................................(3)
dan proses dekripsi menggunakan persamaan seperti pada persamaan 4.
Pi = Ci ⊕ K i ....…...................................................................(4)
Pada stream cipher , bit hanya mempunyai dua buah nilai sehingga proses
enkripsi hanya menyebabkan dua keadaan pada bit tersebut, berubah atau tidak
berubah. Dua keadaan itu ditentukan oleh kunci enkripsi yang disebut aliran bit kunci
(keystream). Aliran bit kunci dibangkitkan dari sebuah pembangkit yang dinamakan
pembangkit aliran bit kunci (keystream generator ). Aliran bit kunci (sering dinamakan
running key) di-XOR-kan dengan aliran bit-bit plaintext, P 1, P 2, …, P i untuk
menghasilkan aliran bit-bit ciphertext (Ariyus, 2008). Konsep stream cipher dapat
dilihat pada Gambar 2.4.
Pengirim
Penerima
Key stream
Key stream
Generator
Generator
Keystream
Plaintext
P1
K1
K1
⊕
Enkripsi
C1
Ciphertext
⊕
Dekripsi
Gambar 2.4 Konsep stream cipher
P1
Plaintext
11
Contoh: misalkan plaintext adalah 110010101 dan aliran bit kunci (keystream)
adalah 101001110 maka ciphertext yang dihasilkan yaitu 011011011. Proses tersebut
dapat dilihat pada Gambar 2.5.
Plaintext (110010101)
Keystream Generator
Keystream (101001110)
Ciphertext
(011011011)
⊕
Secret Key
Gambar 2.5. Contoh stream cipher (Smart, 2004)
Aliran kode (stream cipher ) merupakan kode yang berasal dari hasil XOR
seperti pembahasan diatas. Setiap bit plaintext dengan setiap bit kunci. Kunci
merupakan kunci utama (kunci induk) yang digunakan untuk membangkitkan kunci
acak semu yang dibangkitkan dengan Pseudo-Random Sequence Generator yang
merupakan suatu nilai yang nampak seperti diacak tetapi sesungguhnya nilai tersebut
merupakan suatu urutan. Secara khusus urutan dari nilai yang dihasilkan oleh RNG
(Random Number Generator ).
Random Number Generator secara umum adalah pseudo-random, yang
memberikan inial state atau seed (nilai yang dimasukkan ke dalam state). Seluruh
urutan tersebut ditentukan secara menyeluruh. Meskipun demikian jumlah
karakteristik
yang
ditampilkan
berasal
dari
urutan
yang
acak
tersebut.
Pseudorandomness menghasilkan urutan yang sama secara berulang-ulang pada
penempatan yang berbeda. Kemudian kunci acak semu tersebut diberi operasi XOR
dengan plaintext untuk mendapatkan ciphertext. Proses stream cipher dapat dilihat
pada Gambar 2.6.
Gambar 2.6 Proses stream sipher
12
Keamanan sistem stream cipher bergantung seluruhnya pada pembangkit
aliran bit kunci (keystream). Jika pembangkit mengeluarkan aliran bit kunci yang
seluruhnya nol maka ciphertext sama dengan plaintext sehingga proses enkripsi
menjadi tidak ada artinya. Jika pembangkit mengeluarkan aliran bit kunci dengan pola
16 bit yang berulang maka algoritma enkripsinya menjadi sama seperti enkripsi
dengan XOR sederhana yang memiliki tingkat keamanan yang tidak berarti. Jika
pembangkit mengeluarkan aliran bit kunci yang benar-benar acak (truly random),
maka algoritma enkripsinya sama dengan one-time pad dengan tingkat keamanan
yang sempurna. Pada kasus ini aliran bit kunci sama panjangnya dengan panjang
plaintext, dan mendapatkan aliran kode sebagai unbreakable cipher . Tingkat
keamanan stream cipher terletak antara algoritma XOR sederhana dengan one-time
pad. Semakin acak keluaran yang dihasilkan oleh pembangkit aliran kunci bit, maka
semakin sulit kriptanalis memecahkan ciphertext-nya (Ariyus, 2008).
2.3.2
Blok kode
Blok kode (block cipher ) adalah sebuah fungsi enkripsi dengan membagi-bagi data
menjadi beberapa blok yang tetap. Generasi sekarang dari block cipher mempunyai
ukuran blok 128 bit (16 byte). Block cipher ini mengenkripsi 128 bit plaintext menjadi
128 bit ciphertext sebagai hasilnya. Ukuran plaintext dan ciphertext selalu sama, dan
kita sebut ini sebagai ukuran blok pada block cipher (Ferguson, 2010).
Blok kode mempunyai banyak aplikasi. Aplikasi tersebut digunakan untuk
memberikan layanan confidentiality (kerahasiaan), integritas data atau authentication
(pengesahan pemakai), dan juga bisa memberikan layanan keystream generator untuk
aliran kode (stream cipher ). Misalkan blok plaintext (P ) yang berukuran m bit
dinyatakan sebagai vektor seperti pada persamaan 5.
P = (Pi , P2 , … , Pm )..................................................................(5)
yang dalam hal ini pi adalah 0 atau 1 untuk i = 1, 2, …, m, dan blok ciphertext (C)
adalah:
C = (Ci , C2 , … , Cm ).................................................................(6)
yang dalam hal ini c i adalah 0 atau 1 untuk i = 1, 2, …, m.
Bila plaintext dibagi menjadi n buah blok, barisan blok plaintext dinyatakan pada
persamaan 7.
(Pi , P2 , … , Pn )............................................................................(7)
13
Untuk setiap blok plaintext P i, bit-bit penyusunnya dapat dinyatakan pada persamaan
8.
Pi = (Pi1 , Pi2 , … , Pim )...............................................................(8)
Enkripsi dan dekripsi dengan kunci K dinyatakan berturut-turut seperti pada
persamaan 9 dan 10.
Ek P = ................................................................................(9)
untuk dekripsi,
Dk C = �..............................................................................(10)
dan fungsi E haruslah fungsi yang berkorespondensi satu-ke-satu, sehingga:
−1
=
.................................................................................(11)
Proses enkripsi dan dekripsi block cipher dapat dilihat pada Gambar 2.7.
Enkripsi:
Block Plaintext P
Dekripsi:
Block Ciphertext C
P = (p1, p2, …, pm)
C = (c1, c2, …, cm)
Key K
Key K
E
D
Block Ciphertext C
Block Plaintext P
C = (c1, c2, …, cm)
P = (p1, p2, …, pm)
Gambar 2.7 Proses enkripsi dan dekripsi Block Cipher
Contoh: Database di sebuah bank memiliki data INCOME, dienkripsi menjadi
satu blok, itu berarti semua rekening memiliki blok enkripsi yang sama. Misalnya,
database bank memilki dua record:
MEMBER: HOLLY INCOME $100,000
MEMBER: HEIDI INCOME $100,000
Hasil enkripsinya menjadi:
ABCQZRME GHQRMSIB CTXUVYSS RMGRPFQN
ABCQZRME ORMPABRZ CTXUVYSS RMGRPFQN
Penyerang bisa menyimpulkan bahwa record yang ada di dalam database tersebut
memiliki nilai yang sama. Kesimpulan itu diambil dari kata CTXUVYSS
14
RMGRPFQN. Serangan dilakukan terhadap block cipher dengan melihat posisi dan
ukuran blok. Untuk meminimalkan serangan terhadap block cipher digunakan
beberapa cara agar posisi dan ukurannya menjadi tidak sama. Banyak mode block
cipher yang dapat dipakai. Mode operasi block cipher terbagi menjadi empat bagian,
antara lain:
1. Mode Electronic Code Book (ECB)
2. Mode Cipher Block Chaining (CBC)
3. Mode Cipher Feed Back (CFB)
4. Mode Output Feed Back (OFB)
Dari setiap mode tersebut plaintext dibagi menjadi blok-blok. Misalnya, setiap
blok mempunyai nilai 128 bit. Jika terdapat plaintext yang dibagi ke bentuk blok yang
mempunyai nilai kurang dari 128 bit maka blok tersebut terlebih dahulu ditambah
dengan padding bit (bit tambahan) agar jumlahnya menjadi 128 bit untuk setiap
bloknya (Ariyus, 2008).
2.4 Algoritma Kriptografi XOR
Algoritma XOR adalah algoritma enkripsi sederhana dengan menggunakan prinsip
operator logika XOR (Exclusive-OR). Cara enkripsinya adalah dengan meng-XOR-kan
plaintext dengan kunci sehingga didapatkan ciphertext-nya. Sebaliknya untuk proses
dekripsi adalah dengan meng-XOR-kan ciphertext dengan kunci sehingga didapatkan
plaintext-nya kembali. Teknik ini beroperasi sesuai prinsip seperti pada Tabel 2.1.
Tabel 2.1 Tabel XOR
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
0
Gambar 2.8 Gerbang logika XOR
15
Jika kita berpikir tentang angka 0 dan 1 pada operasi diatas, maka operasi XOR
adalah sama dengan pemambahan modulo 2. Dasar algoritma XOR ini didefinisikan
sebagai berikut:
untuk enkripsi dapat dilihat pada persamaan 12.
P ⊕ K = C.................……….................................................(12)
sedangkan untuk dekripsi seperti pada persamaan 13.
C ⊕ K = P.........…......……...................................................(13)
Kode XOR ini memiliki keuntungan menjadi sangat efisien dan benar-benar simetris
dalam arti bahwa enkripsi dan dekripsi adalah fungsi yang sama. Jika K dipilih secara
acak dan hanya digunakan sekali, maka algoritma ini dikenal sebagai Vernam onetime pad. Sayangnya, hal ini memerlukan sebuah kunci yang sama panjangnya dengan
plaintext, yang membuatnya agak susah untuk diimplementasikan dalam beberapa
aplikasi (Hoffstein, 2008).
Sebagai contoh Algoritma XOR sederhana diketahui plaintext “ILKOM” jika
ditulis dalam format ASCII 8-bit menjadi 01001001 01001100 01001011 01001111
01001101 dapat dienkripsi dengan suatu kunci string “AAAAA” (01000001
01000001 01000001 01000001 01000001 dalam format ASCII 8-bit) sehingga didapat
hasil sebagai berikut:
01001001 01001100 01001011 01001111 01001101
01000001 01000001 01000001 01000001 01000001
-------------------------------------------------------------- ⊕
00001000 00001101 00001010 00001110 00001100 (BSCRLFSOFF)
dan sebaliknya proses dekripsi:
00001000 00001101 00001010 00001110 00001100
01000001 01000001 01000001 01000001 01000001
-------------------------------------------------------------- ⊕
01001001 01001100 01001011 01001111 01001101 (ILKOM)
Operator XOR sering dijadikan sebagai salah satu komponen dalam pembentukan
chipertext yang lebih kompleks. Namun, penggunaan suatu kunci yang berulang
secara konstan menyebabkan suatu chipertext dapat dengan mudah dipecahkan
menggunakan analisis frekuensi (seperti dibahas pada huruf yang paling sering
muncul dalam suatu bahasa).
Keutamaan dari teknik ini adalah mudah
16
diimplementasikan dan operasi XOR tidak sulit secara komputasional. Oleh Karena
itu, algoritma XOR masih sering kali digunakan untuk menyembunyikan informasi
dalam kasus-kasus tertentu dan kemudian dilengkapi dengan suatu mekanisme
keamanan tambahan lainnya.
2.5 Algoritma Kriptografi RC4
RC4 didesain oleh Ron Rivest yang berasal dari RSA Security pada tahun 1987. RC4
sendiri mempunyai singkatan resmi yaitu “Rivest Chiper”, namun juga dikenal
sebagai “Ron’s Code”. RC4 sebenarnya dirahasiakan dan tidak dipublikasikan kepada
khalayak ramai, namun ternyata ada orang yang tidak dikenal menyebarkan RC4 ke
mailing list Cypherpunks. Kemudian berita ini dengan cepat diposkan ke sci.crypt
newsgroup, dan dari newsgroup ini kemudian menyebar luas di internet. Kode yang
dibocorkan tersebut dipastikan keasliannya karena output yang dikeluarkan sama
dengan software-software yang menggunakan RC4 yang berlisensi.
Nama RC4 sudah dipatenkan, sehingga RC4 sering disebut juga ARCFOUR
atau ARC4 (Allegred RC4) untuk menghindari masalah pematenan. RSA Security tidak
pernah secara resmi merilis algoritma tersebut, namun Rivest secara pribadilah yang
merilisnya tersebut dengan menghubungkan Wikipedia Inggris ke catatan-catatan
yang ia punya. RC4 telah menjadi bagian dari protokol enkripsi yang standar dan
sering digunakan, termasuk WEP dan WPA untuk wireless card, serta TLS. Faktor
utama yang menjadi kesuksesan dari RC4 adalah kecepatannya dan kesederhanaannya
dalam mengenai banyak aplikasi, sehingga mudah untuk mengembangkan
implementasi yang efisien ke software dan hardware.
RC4 termasuk ke dalam kode aliran ( stream cipher ) dengan kunci
rahasia/kunci simetri (kunci yang sama digunakan untuk proses enkripsi dan dekripsi).
Seperti halnya dengan Vernam Cipher , inti dari enkripsi RC4 adalah pembangkitan
kunci aliran (keystream) yang bersifat acak semu (pseudo random). Algoritma RC4
terdiri atas 2 bagian yaitu Key Scheduling algorithm (KSA) dan Pseudo Random
Generation Algorithm (PRGA) (Mooduto, 2004).
17
2.5.1
Key schedulling algorithm
Tahap pertama dari algoritma RC4 adalah key schedulling (KSA). Pada tahap ini State
diberi nilai awal berupa larik yang merepresentasikan suatu permutasi dengan 256
elemen. Jadi, hasil dari KSA adalah permutasi awal. Larik yang mempunyai 256
elemen ini (dengan indeks 0-255) dinamakan S (Kromodimoeljo, 2010). Langkahlangkah pembentukan S adalah sebagai berikut:
1. Inisialisasi kotak-S sesuai dengan indeksnya: S[0] = 0, S[1] = 1, …, S[255] =
255. Kotak-S yang terbentuk ditunjukkan oleh Tabel 2.2.
Tabel 2.2 Larik 256 byte kotak-S awal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
2. Kunci dimasukkan ke dalam larik berukuran 256. Jika ukuran kunci kurang
dari 256 byte, maka dilakukan padding dengan mengulang kunci hingga larik
terisi penuh. Misalkan kunci “jaya” dengan kode ASCII 106, 97, 121, dan 97.
Tabel 2.3 menunjukkan larik 256 byte dengan kunci tersebut.
18
Tabel 2.3 Larik 256 byte kunci
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
106 97 121 97 106 97 121 97 106 97 121 97 106 97 121 97
3. Kotak-S disusun kembali membentuk kotak-S akhir yang ditunjukkan oleh
Tabel 2.4. Langkah pertama, penghitung j diinisialisasi dengan nol. Kemudian
nilai j yang baru = (j + S[i] + K[i]) mod 256. Lalu, nilai S[i] dan S[j]
ditukarkan. Proses penentuan nilai j yang baru dan penukaran nilai S[i] dengan
S[j] tersebut dilakukan dari i = 0 sampai dengan i = 255.
Tabel 2.4 Larik 256 byte kotak-S akhir
78
103
71
171
47
127
223
143
216
66
153
185
15
69
244
167
152
8
29
147
97
227
195
174
108
155
100
224
7
182
188
146
133
176
10
255
180
58
88
84
92
122
228
192
54
205
93
5
207
197
181
177
51
62
63
115
80
45
237
48
72
126
186
194
111
156
144
231
253
136
64
238
160
137
19
217
89
193
91
61
28
23
50
105
94
221
172
132
229
211
166
98
44
230
178
130
134
198
90
0
245
241
34
30
27
18
208
79
95
117
249
85
19
140
119
179
219
254
52
39
168
138
169
112
32
14
204
201
25
129
110
246
40
26
120
35
16
21
199
159
13
202
184
191
175
162
109
251
247
225
77
113
65
96
81
139
164
70
236
183
215
104
125
239
20
43
76
206
187
114
75
190
1
60
83
234
149
243
73
189
82
57
46
86
141
101
220
161
200
4
56
131
53
87
33
242
6
250
3
222
74
9
173
165
24
12
106
36
233
213
123
17
22
42
142
99
37
148
163
196
218
49
203
210
41
68
107
154
212
170
235
252
128
118
158
11
214
157
59
248
135
124
55
240
102
151
121
2
67
145
31
232
209
116
226
150
38
Untuk i = 0, j = (0 + S[0] + K[0]) mod 256 = (0 + 0 + 106) mod 256 = 106.
Nilai S[0] dan S[106] ditukarkan sehingga S[0] = 106 dan S[106] = 0.
Demikian seterusnya sampai i = 255.
2.5.2
Pseudo random generation algorithm
Tahap selanjutnya dari algoritma RC4 dinamakan Pseudo Random Generation
Algorithm (PRGA). Tahap ini menghasilkan nilai pseudo-random yang kemudian diXOR-kan dengan plaintext untuk proses enkripsi atau dengan ciphertext pada proses
dekripsi). Langkah pertama adalah menginisialisasikan nilai i dan j dengan nol. Untuk
k = 0, …, k = panjang pesan – 1, nilai i dan j yang baru dihitung dengan cara:
i = (i + 1) mod 256
j = (j + S[i]) mod 256
Nilai S[i] dan S[j] ditukarkan. Kemudian, nilai S dengan indeks t = (S[i] + S[j]) mod
256 diambil. Nilai S[t] tersebut terakhir di-XOR-kan dengan plaintext atau ciphertext
dengan indeks k.
Misalkan pesan yang akan dienkripsi adalah “ilkom“ dengan panjang lima
byte. Pesan tersebut dalam kode ASCII adalah 105, 108, 107, 111, 109. Ciphertext
dihasilkan pertama-tama dengan menginisialisasikan nilai i dan j dengan nol.
Selanjutnya, dari nilai nol sampai dengan empat dilakukan perhitungan nilai i dan j
yang baru. Hasil perhitungan yang pertama adalah:
i = (0 + 1) mod 256 = 1
j = (0 + S[1]) mod 256 = (0 + 103) mod 256 = 103
20
Nilai S[1] = 103 dan S[103] = 30 ditukarkan sehingga dihasilkan S[1] = 30 dan S[103]
= 103. Selanjutnya, nilai t dihitung: t = (S[1] + S[103]) mod 256 = (30 + 103) mod 256
= 133. Kemudian, nilai S[t] = S[133] = 120 di-XOR-kan dengan pesan[k] = pesan[0],
yaitu “ i ” yang kode ASCII nya adalah 105.
01111000
01101001_⊕
00010001 (dalam desimal = 17, yaitu kode ASCII untuk karakter “DC1”)
Proses tersebut diulang sampai karakter terakhir plaintext. Algoritma yang sama juga
digunakan untuk mendekripsi ciphertext (Fiansyah, 2008).
2.6 Android
Android merupakan sistem operasi Mobile berbasis kernel Linux yang dikembangkan
oleh Android Inc. Sistem operasi ini bersifat terbuka (open source) sehingga para
pengembang dapat membuat aplikasi mereka sendiri. Awalnya Google Inc. membeli
Android Inc. yang merupakan pendatang baru yang membuat perangkat lunak untuk
telepon genggam. Kemudian untuk mengembangkan Android di bentuklah Open
Handset Alliance yang merupakan gabungan dari 34 perusahaan peranti keras, peranti
lunak, dan telekomunikasi termasuk Google, HTC, Intel, Motorola, Qualcomm, TMobile, dan NVidia. Pada saat perilisan perdana Android pada tanggal 5 November
2007,
Android
bersama
Open
Handset
Alliance
menyatakan
mendukung
pengembangan standar terbuka pada perangkat seluler. Di lain pihak, Google merilis
kode-kode Android dibawah lisensi Apache, sebuah lisensi perangkat lunak standar
terbuka perangkat seluler. Terdapat dua jenis distributor sistem operasi Android.
Pertama yang mendapat dukungan penuh dari Google atau Google Mail Service
(GMS) dan kedua adalah yang benar-benar bebas distribusinya tanpa dukungan
langsung dari Google atau dikenal sebagai Open Handset Distribution (DHD)
(Ardiansyah, 2011).
Sejak April 2009, versi Android dikembangkan dengan nama kode yang dinamai
berdasarkan makanan pencuci mulut dan penganan manis. Masing-masing versi dirilis
sesuai urutan alfabet, yakni Cupcake (1.5), Donut (1.6), Eclair (2.0–2.1), Froyo (2.2–
2.2.3), Gingerbread (2.3–2.3.7), Honeycomb (3.0–3.2.6), Ice Cream Sandwich (4.0–
4.0.4), Jelly Bean (4.1–4.3), KitKat (4.4-4.4.3), Lollipop (5.0) dan Marsmallow (6.0).
21
2.7 Penelitian yang Relevan
Beberapa penelitian yang telah dilakukan sebelumnya yang berkaitan dengan
penelitian ini adalah:
1. Nihe, H.R (2015) dalam skripsi yang berjudul Implementasi Algoritma Affine
Cipher dan Algoritma Advance Encryption Standard (AES) Pada Aplikasi
Short Message Service (SMS) Berbasis Android. Berdasarkan hasil pengujian,
perbandingan panjang SMS berbanding lurus dengan waktu proses enkripsi
dan dekripsi dimana dalam proses tersebut, algoritma AES membutuhkan
waktu lebih lama dibandingkan dengan algoritma affine cipher .
2. Penelitian yang dilakukan oleh Nababan, A.M (2015). Membahas tentang
penerapan algoritma RC4 dan Teknik Spread Spectrum untuk pengamanan
Text File dimana ukuran naskah asli dan naskah acak selalu sama. Ukuran
cover-image dan stego-image juga selalu sama. Hubungan antara panjang
naskah acak dan waktu pemrosesan untuk penyisipan dan ekstraksi adalah
hubungan yang berbanding lurus. Semakin panjang naskah acak, semakin lama
waktu pemrosesan, begitu juga dengan sebaliknya.
3. Penelitian yang dilakukan oleh Fiansyah, E (2008). Membahas tentang
penerapan algoritma RC4 pada aplikasi sistem informasi pengolah database
pendataan kegiatan skripsi dimana aplikasi yang menggunakan mekanisme
keamanan enkripsi, client menerima waktu tanggap lebih lama dibandingkan
aplikasi yang tidak menggunakan keamanan enkripsi. Namun dengan adanya
mekanisme keamanan enkripsi, data menjadi lebih aman.
4. Sebayang, A.M.S (2014) dalam skripsi yang berjudul Implementasi Kombinasi
Beuafort Cipher dan Afffine Cipher pada Three –Pass Protocol untuk
Pengamanan Data. Berdasarkan hasil pengujian grafik, hubungan antara
waktu proses dan panjang plaintext diperoleh bahwa hasil panjang plaintext
berbanding lurus terhadap waktu, semakin panjang plaintext maka waktu yang
dibutuhkan juga akan semakin lama.