pengukuran running time dari setiap perlakuan. Ulangan setiap perlakuan dilakukan sebanyak 10 kali untuk masing-masing RSA dan RSA-. Lingkungan Penelitian Perangkat keras dan perangkat lunak yang digunakan adalah sebagai berikut. a. Perangkat lunak: sistem operasi Windows XP Professional Edition dan aplikasi bahasa pemrograman Java, b. Perangkat keras: Prosesor Intel Core Duo. HASIL DAN PEMBAHASAN Analisis Algoritma Pada penelitian ini dilakukan analisis terhadap algoritma RSA dan RSA-. Algoritma tersebut dapat dibagi menjadi tiga bagian utama, yaitu algoritma pembangkitan kunci, algoritma enkripsi, dan algoritma dekripsi. Adapun subrutin-subrutinnya diacu dari Menezes. Masing-masing algoritma tersebut dapat dilihat pada analisis berikut. 1. Analisis Subrutin RSA dan RSA- 1.1 Analisis Subrutin Primality Test Pada subrutin ini RSA menggunakan algoritma Miller-Rabin. Algoritma Miller-Rabin adalah sebagai berikut. (a) x ;= a m mod n; (b) If (x 1 mod n) return n is prime and halt; (c) For (j = 0, 1,..., k-1) (d) If (x -1 mod n) return n is prime and halt; (e) Else x := x 2 mod n; (f) Return n is composite and halt; Subrutin Primality Test menggunakan algoritma modular exponentiation, sehingga (Menezes et 1.2 Analisis Subrutin Euclid Subrutin Euclid berfungsi untuk menentukan gcd antara 2 bilangan bulat a dan b. Algoritma subrutin Euclid adalah sebagai berikut. (a) If b = 0 Then (b) Euclid a (c) Else (d) Euclid (b, a mod b) Proses ini dilakukan dengan menggunakan algoritma perkalian, sehingga kompleksitasnya adalah O((lg n) 2 ). (Menezes et 1.3 Analisis Subrutin Extended Euclid Subrutin Extended Euclid digunakan untuk mencari kunci pribadi. Algoritma subrutin Extended Euclid adalah sebagai berikut. (a) If b = 0 Then (b) return (a, 1, 0) (c) (d1, x1, y1) Extended Euclid (b, a, mod b) (d) (d, x, y) (d1, y1, x1 - a/b y1) (e) return (d, x, y) Subrutin Extended Euclid juga menggunakan algoritma perkalian, sama seperti pada subrutin Euclid, sehingga kompleksitasnya adalah O((lg n) 2 ). (Menezes et 1.4 Analisis Subrutin Modular Exponentiation Algoritma Modular Exponentiation digunakan untuk melakukan operasi modular, a b mod n. Algoritmanya adalah sebagai berikut. (a) d 1 (b) Andaikan (b 1, b 2,... b k-1, b k ) adalah representasi biner dari b (c) Untuk i 1 sampai k lakukan (d) d (d*d) mod n (e) Jika b i = 1 maka (f) d (d*a) mod n (g) Modular Exponentiation d Algoritma Modular Exponentiation mempunyai kompleksitas sebesar O((lg n) 3 ) (Menezes et 2. Analisis Algoritma RSA 2.1 Analisis Algoritma Pembangkitan Kunci (a) Pilih dua bilangan prima, p dan q secara acak dan terpisah untuk setiap p dan q. (b) Hitung n = p x q. (c) Hitung (n) = (p-1) (q-1). (d) Pilih bilangan bulat antara satu dan (1<e< ) yang juga merupakan coprime dari. Coprime yang dimaksud adalah bilangan terbesar yang dapat membagi e dan untuk menghasilkan nilai 1 (pembagi ini dinyatakan dengan gcd. (e) Hitung d, dimana d e -1 mod (n). Pada baris (a), diperlukan algoritma Miller- Rabin untuk menentukan prima tidaknya suatu bilangan, sehingga kompleksitasnya sebesar O((lg n) 3 ). Baris (b) dan (c) merupakan
perkalian biasa, sehingga kompleksitasnya adalah O((lg n) 2 ). Baris (d) menggunakan subrutin Euclid, sehingga kompleksitasnya adalah O((lg n) 2 ). Baris (e) menggunakan subrutin Extended Euclid yang mempunyai kompleksitas sebesar O((lg n) 2 ). Jadi total secara keseluruhan, kompleksitas algoritma pembangkitan kunci pada RSA adalah O((lg n) 3 ). 2.2 Analisis Algoritma Enkripsi Diagram alir proses enkripsi pada algoritma RSA dapat dilihat pada Gambar 2. Kunci Publik (n,e) Plaintext Proses Enkripsi Pesan Gambar 3 Proses dekripsi pesan pada RSA Proses dekripsi pesan pada RSA adalah menghitung M, dimana M = C d (mod n), dengan d adalah eksponen dekripsi, M adalah plaintext, C adalah ciphertext, dan n adalah modulus. Proses ini dilakukan menggunakan algoritma modular exponentiation, sehingga Ciphertext Gambar 2 Proses enkripsi pesan pada RSA Proses enkripsi pesan pada RSA adalah menghitung C, dimana C = M e (mod n), dengan e adalah eksponen enkripsi, M adalah plaintext, C adalah ciphertext, dan n adalah modulus. Proses ini dilakukan menggunakan algoritma modular exponentiation, sehingga 2.3 Analisis Algoritma Dekripsi Diagram alir proses dekripsi pada algoritma RSA dapat dilihat pada Gambar 3. 3. Analisis Algoritma RSA- 3.1 Analisis Algoritma Pembangkitan Kunci (a) Pilih bilangan prima p dan q secara acak, sehingga gcd (p-1, q-1) = 2. (b) Hitung n = p x q. (c) Pilih 2 bilangan bulat dp dan dq secara acak, sehingga gcd (dp, p-1) = 1, gcd (dq, q-1) = 1dan dp == dq mod 2. (d) Cari suatu nilai d sehingga d == dp mod p-1 dan d == dq mod q-1. (e) Hitung e = d -1 (mod (n)). Pada baris (a) menggunakan algoritma Miller-Rabin, sehingga kompleksitasnya adalah O((lg n) 3 ). Baris (b) merupakan perkalian biasa, sehingga kompleksitasnya adalah O((lg n) 2 ). Pada baris (c), dp Є Z* p-1 dan dq Є Z* q-1. Didapat O((lg (p-1) 2 ) + (lg (q-1) 2 )) = O((lg (n/2)) 2. Baris (d) merupakan operasi modular biasa, sehingga didapat, O((lg (p-1)) + (lg (q- 1))) = O((lg (n/2)). Baris (e) menggunakan subrutin Extended Euclid yang mempunyai kompleksitas sebesar O((lg n) 2 ). Jadi total secara keseluruhan, kompleksitas algoritma pembangkitan kunci pada RSA- adalah O((lg n) 3 ). 3.2 Analisis Algoritma Enkripsi Diagram alir proses enkripsi pada algoritma RSA- dapat dilihat pada Gambar 4.
mempunyai kompleksitas sebesar O((lg (n/2)) 2 ). Pada baris (c) dapat diperoleh, O((lg p) ((lg (n/2)) 2 ) = O((lg (n/2)) 3 ). Jadi total secara keseluruhan, kompleksitas algoritma dekripsi pada RSA- adalah O((lg (n/2)) 3 ). Gambar 4 Proses enkripsi pesan pada RSA- Proses enkripsi pesan pada RSA- adalah menghitung C, dimana C = M e (mod n), dengan e adalah eksponen enkripsi, M adalah plaintext, C adalah ciphertext, dan n adalah modulus. Proses ini dilakukan menggunakan algoritma modular exponentiation, sehingga 3.3 Analisis Algoritma Dekripsi Diagram alir proses dekripsi pada algoritma RSA- dapat dilihat pada Gambar 5. Gambar 5 Proses dekripsi pesan pada RSA- Algoritma dekripsi pada RSA- adalah sebagai berikut. (a) Mp = C dp mod p dan Mq = C dq mod q (b) v = (Mq Mp) p_inv_q mod q (c) M = Mp + pv Pada baris (a) menggunakan algoritma modular exponentiation, sehingga di dapat, O(((lg p) 3 ) + ((lg q) 3 )) = O((lg (n/2)) 3 ). Baris (b) Analisis Keamanan Kekuatan algoritma RSA terletak pada tingkat kesulitan memfaktorkan modulus n. Jika n berhasil difaktorkan menjadi p dan q, maka (n) = (p-1) (q-1) dapat dihitung. Selanjutnya, karena kunci enkripsi e tidak rahasia, maka kunci dekripsi d dapat dihitung dari persamaan d e -1 mod (n). Algoritma RSA dikatakan aman jika penyerang sulit memfaktorkan modulus n menjadi p dan q. Untuk n yang besar dengan faktor prima yang besar juga, akan sulit untuk memfaktorkannya. Hal ini yang menjadi alasan mengapa RSA bertumpu kepada faktorisasi bilangan bulat. Nilai p dan q panjangnya lebih dari 100 digit. Dengan demikian hasil kali n = p x q akan lebih dari 200 digit. Usaha untuk memfaktorkan bilangan bulat 200 digit menjadi faktornya sangat besar. Ada beberapa serangan terhadap implementasi RSA. Serangan-serangan ini umumnya mengeksploitasi kelemahan dalam cara RSA digunakan, bukan merusak algoritma RSA. Berikut ini adalah beberapa serangannya, yang secara teori dapat dilakukan. 1. Brute force Diberikan c = m e mod n, coba semua nilai kunci d ; 0 e (n) untuk memenuhi m = c d mod n. Dalam prakteknya, K = (n) 2500 ruang kunci yang begitu besar tidak memungkinkan untuk menemukan d. 2. Mencari (n) Diberikan n, e, c = m e mod n. Cari (n) dan hitung d = e -1 mod (n). menghitung (n) dipercaya sesulit memfaktorkan n. 3. Langsung mencari nilai d Diberikan n, e, c = m e mod n. Cari nilai d dan hitung m = c d mod n. menghitung d dipercaya sesulit memfaktorkan n. 4. Memfaktorkan n Diberikan n, e, c = m e mod n, faktor p x q = n, kemudian hitung : (n) = (p-1) (q-1) e = d -1 mod (n) m = c d mod n Sangat sulit mefaktorkan n. Tabel 1 berikut adalah waktu yang diperlukan untuk memfaktorkan n. (Menezes et
Tabel 1 Waktu MIPS untuk faktorisasi n Desimal Bit Waktu MIPS Algoritma 100 332 7 QS 110 365 75 QS 120 398 830 QS 129 428 5000 QS 130 431 1000 GNFS 140 465 2000 GNFS 155 512 8000 GNFS Keterangan : QS = Quadratic Sieve GNFS = Generalized Number Field Sieve Analisis Hasil Implementasi Implementasi algoritma RSA dan RSA- dilakukan dengan menggunakan bahasa pemrograman Java. Hal ini didasarkan atas pertimbangan bahwa Java mampu membangkitkan bilangan besar. Class yang dipakai adalah BigInteger. Java memperlakukan BigInteger sebagai string, sehingga tidak akan terjadi overflow. Sistem diimplementasikan dengan menggunakan metode client-server. Tampilan program client dan server dapat dilihat pada Lampiran 1 dan Lampiran 2. Untuk dapat berkomunikasi, server membuka koneksi terlebih dahulu. Setelah itu, client juga membuka koneksinya. Tampilan saat melakukan koneksi pada client dan server dapat dilihat pada Lampiran 3 dan Lampiran 4. Sebelum pengiriman pesan dimulai, kunci dibangkitan terlebih dahulu. Contoh pembangkitan kunci dapat dilihat pada Lampiran 7. Ada dua algoritma yang tersedia, yaitu RSA dan RSA-. Pengiriman pesan dalam satu waktu hanya bisa memilih salah satu diantara kedua algoritma tersebut. Contoh pengiriman pesannya dapat dilihat pada Lampiran 5 dan Lampiran 6. Dari hasil implementasi ini dilakukan pengukuran waktu enkripsi dan dekripsi, serta membandingkan waktu enkripsi dan dekripsi dari RSA dan RSA-. Nilai e (eksponen enkripsi) yang dipakai adalah 65537, nilai eksponen ini dianjurkan supaya waktu komputasinya bisa cepat dan kemanan tetap terjaga. Contoh plaintext, ciphertext, dan hasil dekripsi masing-masing dapat dilihat pada Lampiran 8, Lampiran 9, dan Lampiran 10. Tujuan dari membandingkan waktu enkripsi dan dekripsi kedua algoritma ini adalah untuk membuktikan bahwa penambahan pada algoritma RSA berdampak pada meningkatnya kecepatan waktu dekripsi. Penambahan tidak berdampak pada waktu enkripsi, jadi secara teori waktu enkripsi RSA dan RSA- relatif sama. Pengukuran dilakukan dengan menggunakan 10 ukuran file teks yang berbeda dalam selang 1764 byte sampai dengan 21168 byte sebagai obyek kajian, dengan perulangan untuk setiap perlakuan sebanyak 10 kali. Hasil pengukuran waktu enkripsi dan dekripsi pada RSA dan RSA- dapat dilihat pada Tabel 2, Tabel 3, Tabel 4, dan Tabel 5. Tabel 2 Hasil pengukuran waktu enkripsi RSA 1 1764 21.8 2 3528 36 3 5292 54.6 4 8820 101.6 5 10584 112.6 6 12348 125 7 14112 134.5 8 15876 135.8 9 17640 170.3 10 21168 181.2 107.34 Tabel 3 Hasil pengukuran waktu dekripsi RSA Waktu Dekripsi 1 1764 610.8 2 3528 1401.7 3 5292 2348.3 4 8820 3814.4 5 10584 3995.3 6 12348 4411 7 14112 5162.5 8 15876 5689.2 9 17640 6511.1 10 21168 8173.6 4211.79
Tabel 4 Hasil pengukuran waktu enkripsi RSA- 1 1764 20.4 2 3528 38.9 3 5292 73.6 4 8820 104.6 5 10584 121.8 6 12348 134.1 7 14112 148.5 8 15876 149.9 9 17640 151.6 10 21168 168.6 111.2 dekripsi RSA adalah 4211.79 ms, sedangkan pada RSA- adalah 1372.44 ms. Dari data ini, dapat diperoleh bahwa RSA- pada percobaan dengan 10 kali pengulangan, 3 kali lebih cepat dari RSA. Penambahan pada RSA terbukti mampu mempercepat proses dekripsi. Rincian waktu eksekusi dekripsi pada RSA dan RSA- dapat dilihat pada Lampiran 12 dan Lampiran 14. Pada RSA-, perhitungan modulo p dan modulo q dipecah menggunakan. Hal inilah yang menyebabkan komputasi dekripsi pada RSA- menjadi lebih cepat dibandingkan pada RSA. Perbandingan waktu enkripsi dan dekripsi pada RSA dan RSA- terhadap ukuran file dapat dilihat pada Gambar 6 dan Gambar 7. Tabel 5 Hasil pengukuran waktu dekripsi RSA- 1 1764 317 2 3528 626.5 3 5292 845.5 4 8820 1243.8 5 10584 1357.7 6 12348 1374.9 7 14112 1503 8 15876 1726.4 9 17640 2353.2 10 21168 2376.4 1372.44 Berdasarkan Tabel 2 dan Tabel 4, waktu rata-rata enkripsi RSA dan RSA- masingmasing adalah 107.34 ms dan 111.2 ms. Nilai ini bisa dikatakan hampir sama. Penambahan tidak berpengaruh pada enkripsi. Hal ini dikarenakan penambahan dilakukan pada dekripsi saja bukan pada enkripsi. Seiring meningkatnya ukuran file, waktu enkripsi juga mengalami peningkatan. Rincian waktu eksekusi enkripsi pada RSA dan RSA- dapat dilihat pada Lampiran 11 dan Lampiran 13. Dari data Tabel 3 dan Tabel 5, dapat dilihat bahwa waktu rata-rata dekripsi pada RSA- lebih cepat dibandingkan pada RSA. Waktu Gambar 6 Grafik hubungan waktu enkripsi RSA dan RSA- terhadap ukuran file Dari gambar 6, dapat terlihat bahwa waktu enkripsi RSA dan RSA- tidak berbeda jauh. Algoritma enkripsi pada RSA- sama dengan RSA, yaitu C = M e (mod n). Gambar 7 Grafik hubungan waktu dekripsi RSA dan RSA- terhadap ukuran file Pada Grafik 7, jelas terlihat waktu komputasi RSA lebih lambat dibandingkan RSA-. RSA- mengalami peningkatan waktu komputasi dekripsi yang relatif rendah, sedangkan RSA mengalami peningkatan waktu komputasi dekripsi yang lebih pesat. Hal ini