DAN EKSAK
DISERTASI
MOHAMMAD ANDRI BUDIMAN 148123005
PROGRAM STUDI DOKTOR (S-3) ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA
MEDAN
2021
FAKTORISASI MODULUS RSA SECARA METAHEURISTIK DAN EKSAK
DISERTASI
Diajukan sebagai salah satu syarat untuk memperoleh gelar
Doktor Ilmu Komputer pada Program Studi Doktor (S-3) Ilmu Komputer Fakultas Ilmu Komputer dan Teknologi Informasi
Universitas Sumatera Utara
Oleh :
MOHAMMAD ANDRI BUDIMAN 148123005
PROGRAM STUDI DOKTOR (S-3) ILMU KOMPUTER FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA MEDAN
2021
PERNYATAAN ORISINALITAS
FAKTORISASI MODULUS RSA SECARA METAHEURISTIK DAN EKSAK
DISERTASI
Dengan ini saya nyatakan bahwa saya mengakui semua karya Disertasi ini adalah hasil kerja saya sendiri kecuali kutipan dan ringkasan yang tiap bagiannya telah dijelaskan sumbernya dengan benar.
Medan, Maret 2021
MOHAMMAD ANDRI BUDIMAN NIM : 148123005
PERNYATAAN PERSETUJUAN PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN
AKADEMIS
Sebagai sivitas akademika Universitas Sumatera Utara, saya yang bertanda tangan di bawah ini:
Nama : MOHAMMAD ANDRI BUDIMAN NIM : 148123005
Program Studi : DOKTOR (S-3) Ilmu Komputer Jenis Karya Ilmiah : DISERTASI
Demi pengembangan ilmu pengetahuan, menyetujui untuk memberikan kepada Universitas Sumatera Utara Hak Bebas Royalti Non-Eksklusif (Non-Exclusive Royalty free Right) atas disertasi saya yang berjudul:
FAKTORISASI MODULUS RSA SECARA METAHEURISTIK DAN EKSAK
Beserta perangkat yang ada (jika diperlukan). Dengan Hak Bebas Royalti Non-Eksklusif ini, Universitas Sumatera Utara berhak menyimpan, mengalih media, memformat, mengelola dalam bentuk database, merawat dan mempublikasikan Disertasi saya tanpa meminta izin dari saya selama tetap mencantumkan nama saya sebagai penulis dan sebagai pemegang dan atau sebagai pemilik hak cipta.
Demikian pernyataan ini dibuat dengan sebenarnya.
Medan, Maret 2021
MOHAMMAD ANDRI BUDIMAN NIM : 148123005
Telah diuji dan dinyatakan lulus pada Tanggal : 5 Maret 2021
PANITIA PENGUJI SIDANG TERBUKA Ketua : Prof. Dr. Muhammad Zarlis Anggota : 1. Prof. Dr. Opim Salim Sitompul 2. Prof. Dr. Herman Mawengkang 3. Dr. Syahril Efendi
4. Dr. Elviawaty Muisa Zamzami 5. Dr. Zakarias Situmorang
RIWAYAT HIDUP
DATA PRIBADI
Nama lengkap berikut gelar : Mohammad Andri Budiman, S.T., M.Comp.Sc., M.E.M.
Tempat dan Tanggal Lahir : Medan, 08 Oktober 1975 Alamat Rumah : Jl. Ir. H. Juanda No. 25
Medan 20152 Telepon /HP : +6289621395413 Email : [email protected]
Instansi Tempat Bekerja : Program Studi S-1 Ilmu Komputer
Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara
Alamat Kantor : Jl. Universitas No. 9-A Kampus USU
Medan 2015 Telepon : (061) 8210077
DATA PENDIDIKAN
SD : SD SWASTA HARAPAN 1 Lulus : 1987 SMP : SMP SWASTA HARAPAN 1 Lulus : 1990 SMA : SMA NEGERI 1 MEDAN Lulus : 1993 Strata-1 : INSTITUT TEKNOLOGI BANDUNG Lulus : 1998 Strata-2 : UNIVERSITY OF NEW SOUTH WALES, AUSTRALIA Lulus : 2002 Strata-2 : UNIVERSITY OF TECHNOLOGY SYDNEY, AUSTRALIA Lulus : 2004
KATA PENGANTAR
Syukur Alhamdulillah dipanjatkan ke hadirat Allah ‘Azza Wa Jalla sebab hanya dengan berkat Rahmat, Taufiq, Hidayah, Inayah, dan Fadhilah-Nya-lah maka Disertasi dengan judul
“FAKTORISASI MODULUS RSA SECARA METAHEURISTIK DAN EKSAK” dapat diselesaikan melalui bimbingan, arahan dan bantuan yang diberikan Promotor, Ko-Promotor, Pembanding, para dosen, teman-teman seperjuangan, khususnya mahasiswa Program Studi Doktor (S-3) Ilmu Komputer di Fasilkom-TI Universitas Sumatera Utara.
Dengan selesainya disertasi ini, penulis mengucapkan terima kasih yang sebesar-besarnya kepada :
1. Rektor Universitas Sumatera Utara, Dr. Muriyanto Amin, S.Sos., M.Si. atas izin belajar dan kesempatan yang diberikan kepada penulis untuk mengikuti dan menyelesaikan pendidikan Program Doktor (S-3) di Universitas Sumatera Utara.
2. Dekan Fakultas Fasilkom-TI Universitas Sumatera Utara, Prof. Dr. Opim Salim Sitompul atas kesempatan yang diberikan kepada penulis menjadi mahasiswa Program Doktor (S- 3) pada Program Doktor Fasilkom-TI Universitas Sumatera Utara.
3. Ketua Program Studi Doktor(S-3) Ilmu Komputer, Prof. Dr. Muhammad Zarlis, Sekretaris Program Studi Doktor (S-3) Ilmu Komputer Dr. Syahril Efendi, M.I.T. beserta seluruh staf pengajar pada Program Studi Doktor (S-3) Ilmu Komputer Fasilkom-TI Universitas Sumatera Utara, yang telah memberi saran, masukan, dan arahan sehingga Penulis dapat menyelesaikan pendidikan.
4. Prof. Dr. Muhammad Zarlis selaku Promotor, Prof. Dr. Opim Salim Sitompul selaku Ko- Promotor 1, Prof. Dr. Herman Mawengkang selaku Ko-Promotor 2, yang dengan penuh kesabaran, ketelitian, dan ketekunan dalam membimbing, memotivasi, memberikan ilmu yang bermanfaat, dukungan, kritik, dan saran, kebijaksanaan, dan semangat sehingga penulis dapat menyelesaikan disertasi ini.
5. Dr. Syahril Efendi, Dr. Elviawaty Muisa Zamzami, dan Dr. Zakarias Situmorang sebagai komisi penguji, yang telah memberikan kritik, masukan, dan saran yang bermanfaat dalam perbaikan disertasi ini.
6. Seluruh staf administrasi pada Program Studi Doktor (S-3) Ilmu Komputer dan pada Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara yang telah memberikan pelayanan kepada penulis selama mengikuti perkuliahan.
7. Orang tua tercinta dan mertua tercinta Penulis, Papa Prof. dr. H. Budi Rahardjo Hadibroto, Sp.O.G.(K) dan Mama drg. Hj. Tengku Rafina Nurdiaty dan Papa Ir. H.O.K.
Nazaruddin Hisyam, M.S., dan Mama Dra. Hj. Herawaty Halim atas segala cinta, kasih sayang, doa, bantuan moral, dan material.
8. Istri tercinta Dr. dr. Gema Nazri Yanni, M.Ked.(Ped.), Sp.A.(K) dan anak-anak tersayang Dimas Alif Muhammad, Fathan Abiyan Muhammad, dan Fayyadh Abqary Muhammad yang selalu mendoakan, memberikan bantuan moral, material, semangat, dukungan dan kasih sayang yang luar biasa selama penulis mengikuti pendidikan.
9. Adik-adik tersayang dr. Muhammad Oky Prabudi, M.Ked.(O.G.), Sp.O.G.(K) dan Dr. dr.
Rini Savitri Daulay, M.Ked.(Ped.), Sp.A.(K) beserta seluruh keponakan tersayang, serta Andrey Verindra Nasution, S.Sn., dan Ilsa Budi Lestari, B.M. atas segala dukungan, doa, dukungan moral, materil, dan kasih-sayang.
10. Adik-adik ipar tercinta Dina Kurnia Pascawati, S.S., M.B.A., Muhammad Arifin Nasution, S.Sos., M.S.P., dan drg. Gema Nazri Yanti, M.Kes., Reza Aswad, S.Sos. dan Dini Fitriyani, S.Sos., Agus Prabowo Mursito, S.E. dan Nurul Chairiza, S.T., Aditya Wimarsetyo, S.T. dan Rahmi Khairwina, B.Acc.(Hons.), serta O.K. Mohammad Fajar Ikhsan, B.A.(Hons.), M.Sc., Ph.D. dan Vina Irhamna, S.E. beserta seluruh keponakan tersayang atas segala dukungan, doa, dukungan moral, materil, dan kasih-sayang.
11. Keluarga besar Almarhum Opa dan Almarhumah Oma tercinta, Prof. Dr. H. Suhadji Hadibroto, M.B.A. dan Hj. Aisyah Rahman Hasibuan, M.A., keluarga besar Almarhum Atokpa dan Almarhumah Atokma tercinta, H. Tengku Nurdin dan Hj. Tengku Rafiah, Om H. Tengku Burhanuddin, S.E. dan keluarga, Almarhum Om Mayjen TNI H. Tengku Rizal Nurdin, S.I.P. dan keluarga, Tante dr. H. Tengku Sofia Hanum, Sp.T.H.T. dan keluarga, Om Ir. H. Tengku Adi Graha Putra dan keluarga, Om Ir. H. Tengku Isma Irawadi Nurdin dan keluarga, dan Om Dr. Ir. H. Tengku Erry Nuradi, M.Si. dan keluarga beserta seluruh sepupu dan keponakan tersayang atas segala dukungan, doa, dukungan moral, materil, dan kasih-sayang.
12. Teman-teman Angkatan Pertama Program Studi Doktor (S-3) Ilmu Komputer, jajaran pimpinan, administrasi dan sivitas akademika Fasilkom-TI Universitas Sumatera Utara.
13. Kepada semua pihak yang tidak dapat penulis sebutkan satu persatu dalam disertasi ini, terima kasih atas semua bantuan yang telah diberikan.
Penulis sangat menyadari bahwa no man is an island, manusia tidak dapat berdiri sendiri,
tidak sempurna, sehingga tentulah masih banyak kekurangan dalam penulisan disertasi ini.
Dengan demikian, apabila ada hal yang kurang sempurna, penulis mohon koreksi dengan segenap kerendahan hati.
Atas segala bantuan yang diberikan, penulis bermunajat kepada Allah SWT agar diberikan balasan yang berlipat ganda. Aamiin Aamiin Aamiin Yaa Rabbal ‘Aalamiin.
Medan, Maret 2021 Penulis,
Mohammad Andri Budiman NIM : 148123005
FAKTORISASI MODULUS RSA SECARA METAHEURISTIK
DAN EKSAK
ABSTRAK
Sejak dipublikasikan pada tahun 1978, algoritma RSA (Rivest-Shamir-Adleman) menjadi salah satu algoritma kriptografi kunci publik pertama yang menerapkan konsep kriptografi asimetrik Diffie-Hellman yang masih digunakan hingga saat ini. Tingkat keamanan RSA berbanding lurus dengan seberapa sukar memfaktorkan modulus RSA, yaitu n, sebuah bilangan bulat positif yang sangat besar menjadi dua buah faktor primanya, yaitu p dan q.
Metode metaheuristik selama ini dikenal untuk menyelesaikan masalah-masalah kontinu, dan jarang sekali digunakan untuk menyelesaikan masalah-masalah diskrit, seperti pemfaktoran.
Sementara itu, metode pemfaktoran eksak yang ada di dalam ranah teori bilangan adalah metode pemfaktoran eksak yang bersifat umum: dapat digunakan untuk memfaktorkan sembarang bilangan bulat dan tidak memperhitungkan apakah bilangan bulat tersebut memiliki kriteria tertentu seperti modulus RSA yang memiliki keterkaitan erat dengan nilai totient-nya. Penelitian ini mengukur seberapa baik kinerja metode metaheuristik dibandingkan dengan metode eksak di dalam memfaktorkan modulus RSA. Kemudian, penelitian ini mencoba mengembangkan sebuah algoritma pemfaktoran baru yang secara khusus ditujukan untuk modulus RSA. Lima buah metode metaheuristik, yakni random search, iterated local search, random-restart hill climbing, steepest ascent hill climbing, dan tabu search akan diukur kinerja real-time-nya dalam memfaktorkan modulus RSA, dan dipilih yang paling efisien. Kemudian, lima buah metode eksak, yakni Fermat difference of squares, Euler factorization, Brent factorization, Pollard, dan Pollard rho juga search akan diukur kinerja real-time-nya dalam memfaktorkan modulus RSA, dan dipilih yang paling efisien. Kemudian, dengan menggunakan melihat hubungan antara nilai n, Φ(n), p, dan q, serta dengan memperhatikan batas Fang-Liu, sebuah algoritma pemfaktoran baru yang khusus untuk memfaktorkan modulus RSA yang lebih efisien daripada kesepuluh metode dari ranah metaheuristik dan eksak tadi pun dikembangkan.
DAFTAR ISI
COVER ... i
PENGESAHAN DISERTASI ... ii
PERNYATAAN ORISINALITAS ... ii
PERNYATAAN PERSETUJUAN PUBLIKASI ... iv
RIWAYAT HIDUP... vi
KATA PENGANTAR ... vii
ABSTRAK ... x
DAFTAR ISI ... xi
BAB 1 PENDAHULUAN ... 1
1.1 Latar Belakang ... 1
1.2 Identifikasi Masalah ... 2
1.3 Batasan Masalah ... 2
1.4 Tujuan Penelitian ... 3
1.5 Manfaat Penelitian ... 3
BAB II TINJAUAN PUSTAKA ... 4
2.1 Algoritma RSA (Rivest-Shamir-Adleman) ... 4
2.1.1 Tahap pembangkitan kunci ... 4
2.1.2 Tahap enkripsi ... 4
2.1.3 Tahap dekripsi ... 5
2.2. Metode Metaheuristik ... 5
2.2.1 Random search ... 5
2.2.2 Iterated local search... 6
2.2.3 Hill climbing ... 6
2.2.4 Random restart hill climbing... 7
2.2.5 Steepest ascent hill climbing ... 7
2.2.6 Tabu search ... 8
2.3.1 Metode Fermat difference of squares ... 8
2.3.2 Metode faktorisasi Euler ... 9
2.3.3 Metode faktorisasi Miller-Rabin ... 11
2.3.4 Metode faktorisasi Brent ... 11
2.3.5 Algoritma Pollard ... 12
2.3.6 Algoritma Pollard p - 1... 13
2.3.6 Algoritma Pollard rho... 14
2.4 Metode eksak dengan pemanfaatan batas bawah dan batas atas Φ(n) (teori Fang- Liu) ... 15
BAB III METODE PENELITIAN ... 17
3.1. Pendahuluan ... 17
3.2. Data yang Digunakan ... 17
3.3. Metode yang Diusulkan ... 17
3.4 Beberapa Hasil Penelitian Awal ... 18
3.5 Algoritma Baru untuk Memfaktorkan Modulus RSA ... 19
BAB IV HASIL DAN DISKUSI ... 22
4.1. Hasil Algoritma Random Search... 22
4.2. Hasil Algoritma Iterated Local Search ... 27
4.3. Hasil Algoritma Random Restart Hill Climbing ... 31
4.4. Hasil Algoritma Steepest Ascent Hill Climbing with Replacement ... 35
4.5. Hasil Algoritma Tabu Search ... 39
4.6. Hasil Algoritma Fermat ... 42
4.7. Hasil Algoritma Euler ... 46
4.8. Hasil Algoritma Brent ... 48
4.9. Hasil Algoritma Pollard ... 49
4.10. Hasil Algoritma Pollard rho ... 55
4.11. Komparasi Kinerja Algoritma Baru terhadap Pollard rho ... 56
BAB V KESIMPULAN DAN SARAN... 61
5.1 Kesimpulan ... 61
5.2 Saran ... 61
DAFTAR PUSTAKA ... 62
BIODATA PROMOVENDUS ... 65
BAB I PENDAHULUAN
1.1 Latar Belakang
Di era modern ini, telah terjadi digitalisasi secara masif di hampir setiap aspek kehidupan.
Digitalisasi memungkinkan aspek-aspek tersebut berjalan dengan lebih cepat, akurat, otomatis, dan aman. Di bidang ilmu komputer, keamanan informasi digital dijamin oleh kriptografi, yaitu perpaduan ilmu matematika dan seni dalam mengamankan pesan. Algoritma kriptografi secara garis besar dibagi atas algoritma simetris dan algoritma kriptografi kunci publik.
Algoritma RSA (Rivest-Shamir-Adleman) adalah salah satu algoritma kriptografi kunci publik pertama yang menerapkan konsep kriptografi asimetrik Diffie-Hellman (Diffie dan Hellman, 1976). Semenjak dipublikasikan oleh Rivest, et al. (1978) hingga saat ini, RSA masih menjadi salah satu algoritma kunci publik yang paling banyak digunakan dalam pengamanan data digital. RSA memiliki beberapa varian (Boneh dan Shacham, 2002), di antaranya adalah RSA-CRT (Quisquater dan Couvreur, 1982), Batch RSA (Fiat, 1997), Multi- power RSA (Takagi, 1998), Rebalanced RSA (Wiener, 1990), dan Rprime RSA (Paixao dan Filho, 2003).
Baik RSA dan seluruh variannya memiliki paling tidak satu kesamaan, yaitu bahwa tingkat keamanan mereka sangat bergantung kepada sulitnya memfaktorkan modulus RSA, yakni sebuah bilangan bulat yang sangat besar, menjadi faktor-faktor primanya. Walaupun Boneh dan Venkatesan (1998) memprediksi bahwa kriptanalisis modulus RSA belum ekivalen dengan pemfaktoran bilangan bulat, mereka juga menggarisbawahi bahwa hal ini tidak serta- merta berarti kriptosistem RSA menjadi terlemahkan. Bahkan, Boneh (1999) menyatakan bahwa belum ada metode kriptanalisis yang memadai untuk membuat kriptosistem RSA menjadi lemah. Kendati demikian, RSA dapat menjadi terlemahkan apabila komputer kuantum hipotetikal menjadi kenyataan di masa yang akan datang (Kiviharju 2017). Bahkan, Shor (1999) telah menggagas sebuah algoritma yang apabila diimplementasikan pada komputer kuantum riil maka akan membuat pemfaktoran dapat dilakukan dalam waktu polinomial.
Sejumlah strategi algoritmik untuk memfaktorkan bilangan bulat telah lama
dikembangkan dalam ranah teori bilangan, subbidang matematika yang mempelajari tentang karakteristik bilangan bulat. Beberapa di antaranya adalah algoritma Euler, Fermat, Kraitchik, dan beberapa varian dari algoritma Pollard (Batten, 2013). Sementara itu, sedikit sekali riset yang dapat ditemukan tentang penggunaan metode metaheuristik untuk menyelesaikan maslah diskrit, seperti pemfaktorkan bilangan bulat. Padahal, menurut Siarry (2013), metode metaheuristik dapat diterapkan tidak saja pada masalah-masalah kontinu, namun bisa juga diterapkan pada masalah-masalah diskrit. Pemfaktoran, tentu saja, adalah sebuah masalah diskrit. Beberapa contoh metode metaheuristik adalah tabu search, hill-climbing, simulated annealing, dan ant colony optimization.
1.2 Identifikasi Masalah
Metode metaheuristik selama ini dikenal untuk menyelesaikan masalah-masalah kontinu, dan jarang sekali digunakan untuk menyelesaikan masalah-masalah diskrit, seperti pemfaktoran.
Penelitian ini akan memberikan gambaran apakah metode metaheuristik dapat digunakan untuk memfaktorkan modulus RSA secara efisien (dalam pengertian cepat) dan efektif (dalam pengertian bahwa hasil pemfaktoran harus optimal, dan bukan sub-optimal. Modulus RSA adalah bilangan bulat n, yang merupakan bagian dari kunci publik RSA. Secara sistematis, kinerja metode metaheuristik juga akan diperbandingkan dengan metode eksak, untuk mengetahui mana di antara kedua jenis metode ini yang paling efisien. Sampai saat penelitian ini dimulai, metode pemfaktoran eksak yang ada di dalam ranah teori bilangan adalah metode pemfaktoran eksak yang bersifat umum: dapat digunakan untuk memfaktorkan sembarang bilangan bulat dan tidak memperhitungkan apakah bilangan bulat tersebut memiliki kriteria tertentu. Dengan kata lain, belum ada metode pemfaktoran yang khusus dirancang untuk memfaktorkan bilangan bulat berkriteria khusus, seperti modulus algoritma kriptografi kunci publik RSA. Modulus RSA, n, adalah contoh bilangan bulat yang memiliki kriteria khusus tersebut karena adanya parameter e dan parameter totient yang pembangkitan keduanya berkaitan berkaitan dengan pembangkitan n. Keberadaan parameter e dan parameter totient ini dihipotesiskan dapat mempercepat pemfaktoran n dibandingkan dengan metode eksak biasa.
1.3 Batasan Masalah
Penelitian ini difokuskan pada hal-hal sebagai berikut:
1. Metode metaheuristik yang akan digunakan adalah sebagai berikut:
a. random search b. iterated local search
c. random-restart hill climbing d. steepest ascent hill climbing e. tabu search.
2. Metode eksak yang akan digunakan adalah sebagai berikut:
a. Fermat difference of squares b. Euler factorization
c. Brent factorization d. Pollard
e. Pollard rho
3. Pengukuran running time dilakukan secara riil (non-teoretis) pada sebuah mesin komputasi riil (komputer non-hipotetikal).
1.4 Tujuan Penelitian
Tujuan dari penelitian ini adalah untuk mengukur seberapa baik kinerja metode metaheuristik dibandingkan dengan metode eksak di dalam memfaktorkan modulus RSA. Penelitian ini juga akan mencoba mensinergikan antara metode metaheuristik dan metode eksak nonfaktorisasi dalam upaya memecahkan modulus RSA bila konstanta e dan totient diperhitungkan.
Diharapkan, sinergi tersebut dapat menghasilkan sebuah algoritma yang lebih cepat daripada kelima metode metaheuristik dan kelima metode eksak tersebut.
1.5 Manfaat Penelitian
Manfaat penelitian adalah menghasilkan beberapa program komputer yang menggunakan lima buah metode metaheuristik dan lima buah metode eksak untuk memfaktorkan modulus RSA, yaitu bilangan bulat n, dengan nilai yang berbeda-beda. Diharapkan, penggunaan sepuluh metode dari dua kelas yang berbeda tersebut (metaheuristik dan eksak) akan mampu menggambarkan seberapa jauh efisiensi waktu masing-masing dalam pemfaktoran modulus RSA. Dengan demikian, akan diperoleh mana metode yang paling efisien dari kesepuluh metode tersebut. Sebagai manfaat tambahan, algoritma baru pun akan dirancang dengan harapan dapat mengalahkan efisiensi waktu dari metode paling efisien tersebut.
BAB II
TINJAUAN PUSTAKA
2.1 Algoritma RSA (Rivest-Shamir-Adleman)
Algoritma RSA memiliki tiga buah tahap: pembangkitan kunci, enkripsi, dan dekripsi. Untuk menjelaskan ketiga tahap tersebut maka dapat dimisalkan ada dua pihak yang akan berkomunikasi secara digital, yaitu Alice (pengirim pesan digital) dan Bob (penerima pesan digital). Komputasi di dalam setiap tahap akan dijelaskan dalam subseksi berikut; komputasi mengacu kepada Rivest, et al. (1978) dan Mollin (2007).
2.1.1 Tahap pembangkitan kunci
Di dalam tahap pembangkitan kunci, Bob (penerima) akan melakukan hal-hal berikut ini.
1. Secara acak, Bob membangkitan dua buah bilangan bulat yang sangat besar yaitu p dan q, dengan syarat p ≠ q. Nilai p dan q adalah bagian dari kunci privat milik Bob, dan oleh sebab itu, nilai keduanya tidak boleh diketahui oleh pihak lain.
2. Bob menghitung modulus RSA, n = pq. Nilai n adalah bagian dari kunci publik milik Bob, dan oleh sebab itu, nilai n harus diketahui oleh pihak manapun yang ingin berkomunikasi dengan Bob. Dengan kata lain, Bob harus mempublikasi nilai n tersebut sehingga Alice dapat mengetahuinya.
3. Bob menghitung nilai totient n, Φ(n) = (p – 1)(q – 1). Nilai Φ(n) merupakan bagian dari kunci privat milik Bob, sehingga nilai ini harus dirahasiakan.
4. Secara acak, Bob mengambil nilai e, dengan syarat 1 < e < Φ(n) dan gcd(Φ(n), e)
= 1. Nilai e adalah kunci publik milik Bob yang akan digunakan oleh Alice untuk mengenkripsi, maka nilai e pun harus dipublikasikan.
5. Bob menghitung nilai d, dengan syarat de ≡ 1 (mod Φ(n)). Nilai d adalah kunci privat milik Bob, yang akan digunakan oleh Bob untuk mendekripsi, sehingga nilai ini harus dirahasiakan.
2.1.2 Tahap enkripsi
Di dalam tahap enkripsi, Alice (pengirim) akan melakukan hal-hal berikut ini.
1. Alice berusaha mendapatkan dua buah kunci publik milik Bob, yaitu n dan e.
2. Alice mengenkripsi pesan miliknya, yaitu m, menjadi pesan terenkripsi, yaitu c, dengan rumus c = me mod n.
3. Alice mengirim c kepada Bob.
2.1.3 Tahap dekripsi
Di dalam tahap dekripsi, Bob akan melakukan hal-hal berikut ini.
1. Bob menerima pesan terenkripsi, c, dari Alice.
2. Bob mendekripsi pesan tersebut menjadi m, dengan rumus m = cd mod n. Dengan demikian, Bob telah mendapatkan dan dapat pula membaca m, pesan yang Alice menginginkan Bob untuk membacanya.
2.2. Metode Metaheuristik
Metode metaheuristik adalah kerangka kerja algoritmik tingkat tinggi yang bersifat independen terhadap masalah yang akan diselesaikan (Mladonenovic dan Hansen, 1997).
Metode metaheuristik menyediakan sekumpulan petunjuk atau strategi umum untuk membangun sebuah algoritma optimasi heuristik yang bersifat khusus dan dependen terhadap masalah yang akan diselesaikan. Keenam metode metaheuristik yang akan dilakukan pada penelitian ini dibahas pada subseksi-subseksi berikut.
2.2.1 Random search
Random search adalah metode metaheuristik yang paling sederhana. Metode ini mencari kandidat-kandidat solusi secara acak sampai kandidat solusi yang paling baik ditemukan atau sampai waktu pencarian yang ditetapkan habis. Secara algoritmik, random search dapat dinyatakan sebagai berikut (Luke, 2013).
B ← GenerateRandomInitialSolution() repeat
S ← GenerateRandomSolution() if Quality(S) > Quality(B) then B ← S
until B is an acceptable solution or time is up return B
2.2.2 Iterated local search
Iterated local search (ILS) mencoba mencari solusi di daerah optimum lokal dengan cara melakukan hill-climbing. Dengan kata lain, ILS menemukan solusi optimum lokal, kemudian melihat ke optimum lokal yang berdekatan dan berkemungkinan untuk mengadopsi lokal optimum tersebut, kemudian melihat ke optimum lokal lain yang berdekatan, dan seterusnya.
Ide heuristik dari ILS adalah masih ada kemungkinan bahwa optimum lokal yang lebih baik dapat ditemukan di dekat nilai optimum lokal yang sekarang. Sering kali, dengan cara berjalan dari lokal optimum ke lokal optimum yang lain lebih baik daripada mencari lokasi yang sama sekali baru secara acak. Secara algoritmik, ILS dapat dideskripsikan sebagai berikut (dimodifikasi dari Luke (2013) serta Blum dan Raidl (2016)).
B ← GenerateRandomInitialSolution() S ← DoLocalSearchNear(B)
while S is not an acceptable solution and time is available S’ ← Perturbate(S)
S’’ ← DoLocalSearchNear(S)
if Quality(S’’) > Quality(S) then S ← S’’
end while return S
2.2.3 Hill climbing
Perumpamaan metode hill climbing adalah mencoba mengetahui puncak tertinggi dari sebuah gunung dengan cara melakukan pendakian dalam suasana kabut yang tebal dengan membawa alat pengukur ketinggian dan kompas namun tanpa membawa peta. Setelah mendaki suatu ketinggian yang acak, sang pendaki mencoba untuk bergerak sedikit ke arah timur, barat, utara, dan selatan, dengan harapan mendapatkan ketinggian yang lebih tinggi daripada ketinggian saat ini. Bila ada posisi pertama yang lebih tinggi daripada posisi sekarang, maka segera saja sang pendaki menuju ke arah tersebut, dan algoritma pun berulang kembali.
Namun, apabila tidak ada satu pun posisi di arah timur, barat, utara, atau selatan yang lebih tinggi, maka pencarian selesai, dan diasumsikan bahwa posisi saat inilah yang paling tinggi (Coppin, 2004).
Secara algoritmik, hill climbing dapat dijelaskan sebagai berikut; dimodifikasi dari Luke (2015).
S ← GenerateRandomInitialSolution()
while S is not an acceptable solution and time is available R ← Tweak(S)
if Quality(R) > Quality(S) then S ← R
end while return S
Metode hill climbing sering kali terjebak pada hasil pencarian yang bersifat optimum lokal (Bell dan Oommen, 2017). Hal ini dapat dimengerti karena metode hill climbing hanya berupaya mencari posisi yang lebih tinggi di daerah tetangga yang berdekatan dengan posisi sekarang saja, sementara itu, mungkin saja solusi optimum global berada daerah yang jauh daripada posisi sekarang.
2.2.4 Random restart hill climbing
Metode random restart hill climbing mengatasi kelemahan metode hill climbing yang sering terjebak pada solusi optimum lokal (Nicholson, et al., 2017). Metode ini menjalankan ratusan atau ribuan prosedur hill climbing pada lokasi awal yang berbeda-beda yang dibangkitkan secara acak (Gamez, et al., 2011). Metode ini bahkan dapat menghasilkan solusi pencarian yang lebih baik daripada algoritma genetika dan metode simulated annealing (Yu, et al., 2004).
2.2.5 Steepest ascent hill climbing
Metode steepest ascent hill climbing adalah salah satu varian metode hill climbing dengan sebuah perbedaan yang sederhana. Perbedaan tersebut adalah bahwa pada metode steepest
ascent hill climbing, pada saat meninjau tetangga-tetangga dekatnya, sang pendaki akan memeriksa yang mana di antara tetangga-tetangga dekatnya tersebut yang memiliki posisi yang paling tinggi (steepest ascent). Dengan demikian, metode steepest ascent hill climbing dapat menghasilkan solusi pencarian yang lebih baik daripada metode hill climbing biasa (Potdar dan Thool, 2014).
2.2.6 Tabu search
Metode tabu search didasarkan pada sebuah ide bahwa agar suatu metode dapat dikatakan sebagai cerdas (intelligent), maka ia harus menggunakan memori secara adaptif dan mengeksplorasi solusi secara responsif. Metode tabu search menggunakan pendekatan yang berbeda saat melakukan pencarian, yaitu menyimpan tabel kandidat-kandidat solusi yang telah dipertimbangkan (yang disebut sebagai tabu list) dan tidak akan kembali ke kandidat solusi yang ada di tabel tersebut sampai mereka telah cukup lama ditinggalkan. Daftar tersebut diisi satu demi satu dengan kandidat-kandidat solusi sampai dengan panjang maksimum tertentu. Apabila panjang maksimum telah tercapai, barulah anggota pertama dari tabu list dikeluarkan dari tabel tersebut, sehingga ia tidak menjadi “tabu” lagi untuk ditinjau.
Dengan demikian, tabu search dapat memandu prosedur heuristrik lokal untuk mengeksplorasi ruang solusi sehingga keluar dari solusi yang bersifat optimum lokal (Glover, 2013; Luke, 2015).
2.3 Metode Eksak
Metode eksak adalah metode yang selalu menjamin tercapainya solusi optimum bagi permasalahan optimisasi. Dalam permasalahan faktorisasi bilangan bulat seperti modulus RSA, metode eksak menjadi penting untuk digunakan karena faktorisasi bilangan bulat harus menghasilkan hasil yang tepat (optimum), dan bukan hasil yang bersifat pendekatan (sub- optimum). Tujuh metode eksak yang akan dilakukan dalam penelitian ini dibahas dalam subseksi-subseksi berikut.
2.3.1 Metode Fermat difference of squares
Metode Fermat difference of squares digagas oleh Pierre de Fermat pada tahun 1643 (Batten, 2013). Ide dasarnya ialah bila n = pq, di mana 1 < q < √ n, maka p > q. Dengan demikian, n selalu dapat ditulis sebagai:
Secara algoritmik, untuk memfaktorkan n, Fermat difference of squares dapat digambarkan sebagai berikut (ditafsir dari Batten (2013) dan Lehman (1974)).
r ← int(ceil(sqrt(n))) s ← r * r - n
while s is not perfect square r ← 1
s ← r * r – n end while
return r - int(sqrt(s))
Pseudocode di atas akan mengembalikan salah satu faktor dari n.
2.3.2 Metode faktorisasi Euler
Leonhard Euler mengembangkan metode faktorisasi Fermat sekitar seratus tahun setelah metode Fermat tersebut dipublikasi. Euler melihat bahwa bila n mempunyai dua buah representasi, maka dua kuadrat sempurna dapat pula dihasilkan dari ekivalennya dalam modulo n (Batten, 2013). Bentuk umum metode faktorisasi Euler adalah x2 + ay2 = n.
Dalam bahasa pemrograman Python, penulis menyajikan metode faktorisasi Euler sebagai berikut:
def generatePossibleSquare(n, b):
max = n // b squares = []
i = 0
while True:
if i * i <= max:
squares.append(i * i)
else:
break i += 1
return squares
def generateTwoPairsOfXYSquares(n, a, b, xSquares, ySquares):
pairs = []
for xSquare in xSquares:
for ySquare in ySquares:
if a * xSquare + b * ySquare == n:
pair = [int(math.sqrt(xSquare)), int(math.sqrt(ySquare))]
pairs.append(pair) return pairs
def Euler(n):
a = 1 b = 3
count = 1 while True:
xSquares = generatePossibleSquare(n, a) ySquares = generatePossibleSquare(n, b)
XY = generateTwoPairsOfXYSquares(n, a, b, xSquares, ySquares)
if len(XY) < 2:
a = rnd(1, 20) b = rnd(1, 20) else:
break count += 1
x1 = XY[0][0]
y1 = XY[0][1]
x2 = XY[1][0]
y2 = XY[1][1]
p = gcd(x1 * y2 - x2 * y1, n) q = gcd(x1 * y2 + x2 * y1, n)
return p, q
2.3.3 Metode faktorisasi Miller-Rabin
Secara matematis, metode faktorisasi Miller-Rabin dapat dilihat pada Conrad (2016). Dalam bahasa pemrograman Python, penulis menyajikan metode faktorisasi Miller-Rabin sebagai berikut:
def MillerRabinFactorization(n):
while True:
a = rnd(1, n - 1) p = gcd(a, n) if p > 1:
return p, n // p if p == 1:
t = ord(a, n) if t % 2 == 1:
continue if t % 2 == 0:
r = pow(a, t / 2, n) if r != 1:
p = gcd(a ** (t / 2) - 1, n) return p, n // p
2.3.4 Metode faktorisasi Brent
Secara matematis, metode faktorisasi Brent dapat dilihat pada Brent (1980). Dalam bahasa pemrograman Python, penulis menyajikan metode faktorisasi Brent sebagai berikut:
def integral_power_of_two(z):
pow2 = 1
while pow2 <= z:
if pow2 == z:
return True pow2 *= 2 return False
def brent(n):
xi = 2 xm = 2 i = 1
while True:
xi = (xi * xi + 1) % n s = gcd(xi - xm, n) if s != 1 and s != n:
return s
if integral_power_of_two(i):
xm = xi i += 1
2.3.5 Algoritma Pollard
Algoritma Pollard disajikan secara matematis dalam Pollard (1975). Dalam bahasa pemrograman Python, penulis menyajikan metode faktorisasi Pollard sebagai berikut:
def Pollard(n):
a = 2 i = 2
factor = [1]
while (n % 2 == 0):
factor.append(2) n = n // 2
while (n != 1):
if Fermat(n):
factor.append(n) factor.sort() return factor
a = modexp(a, i, n) d = gcd(a - 1, n) if 1 < d < n:
factor.append(d) n = n // d
i = 1 i += 1
2.3.6 Algoritma Pollard p - 1
Algoritma Pollard p - 1 disajikan secara matematis dalam Sarnaik, et al. (2015) dan Charest (2005). Dalam bahasa pemrograman Python, penulis menyajikan metode faktorisasi Pollard p - 1 sebagai berikut:
a = 2 b = 2 i = 1 d = 0
list_a = [a]
list_b = [b]
while True:
a = (pow(a, 2) + 1) % n
b = (pow((pow(b, 2) + 1), 2) + 1) % n list_a.append(a)
list_b.append(b) d = gcd(a - b, n)
i += 1
if d > 1 and d < n:
break
e = n // d
Nilai d dan e pada program di atas akan menjadi nilai p dan q pada RSA.
2.3.6 Algoritma Pollard rho
Algoritma Pollard rho disajikan secara matematis dalam Sarnaik, et al. (2015) dan Teske (2001). Dalam bahasa pemrograman Python, penulis menyajikan metode faktorisasi Pollard rho sebagai berikut:
def PollardRho(n):
iterations = 0
x = 2 y = 2 d = 1
list_x = []
list_y = []
list_d = []
list_iterations = []
start = time.time() while d == 1:
x = f(x, n)
y = f(f(y, n), n)
d = gcd(abs(x - y), n) list_x.append(x)
list_y.append(y) list_d.append(d)
list_iterations.append(iterations) iterations += 1
stop = time.time()
if d == n:
print "failure"
else:
print n, "=", d, "*", n // d
2.4 Metode eksak dengan pemanfaatan batas bawah dan batas atas Φ(n) (teori Fang- Liu)
Kloster (2010) menyebutkan bahwa bila n = pq dan Φ(n) = (p − 1)(q − 1), maka p dan q adalah akar dari persamaan kuadrat x2 − (n − Φ(n) + 1)x + n = 0. Karena di dalam RSA nilai n diketahui, maka langkah selanjutnya adalah mengetahui bagaimana hubungan antara n dan Φ(n).
Fang dan Liu (2017) menemukan bahwa batas bawah (lower bound) dan batas atas (upper bound) dari Φ(n) adalah sebagai berikut.
Batas ini selanjutnya akan disebut sebagai batas Fang-Liu. Pada RSA 200, maka ε = 0,99999.
Tabel 2.1 Persamaan digit bilangan n dan Φ(n) pada RSA-200 (Fang dan Liu, 2017)
Pada Tabel 2.1, terlihat bahwa digit-digit pertama bilangan n dan Φ(n) mempunyai persamaan hampir 50%. Dengan demikian, apabila nilai n telah diketahui dan nilai Φ(n) hendak dicari, maka proses pencarian dapat dimulai dari separuh digit n pertama saja, tidak lagi dari awal. Hal ini tentu saja akan mempercepat pencarian Φ(n), dan karenanya, menjadi sangat penting. Diharapkan, metode metaheuristik juga dapat membantu mempercepat pencarian digit-digit terakhir bilangan Φ(n).
BAB III
METODE PENELITIAN
3.1. Pendahuluan
Tingkat keamanan algoritma RSA tergantung kepada sulitnya memfaktorkan modulusnya (kunci publiknya), yaitu n, menjadi kunci-kunci privatnya, yaitu p dan q. Nilai n yang kecil akan menyebabkan algoritma RSA dengan mudah terkriptanalisis. Semakin besar nilai n, akan semakin sulit untuk memfaktorkan kunci publik RSA.
Sebagai contoh, bila n = 35, maka tanpa bantuan komputer pun, seseorang dapat memfaktorkan 35 = 7 × 5. Sementara itu, bila n = 221, maka tidak terlalu mudah bagi manusia untuk memfaktorkannya menjadi 221 = 13 × 19, namun mudah sekali bagi komputer untuk menyelesaikannya dengan teknik brute force (mencoba semua kemungkinan dalam ruang solusi).
Bila diambil nilai yang jauh lebih panjang, misalnya n = 12698378279147986655129 atau 23 digit, sudah tidak mungkin lagi bagi manusia untuk memfaktorkannya, dan komputer pun akan membutuhkan waktu yang sangat lama untuk memfaktorkan 12698378279147986655129 = 67326963541 × 188607618869 dengan teknik brute force.
Sementara itu, nilai n yang disarankan untuk RSA adalah 309 digit, yang berarti jauh melebihi 23 digit. Dengan demikian, memfaktorkan n menjadi tidak layak secara komputasi (computationally infeasible). Oleh karena itu, teknik brute force dipandang tidak layak untuk memfaktorisasi modulus RSA.
3.2. Data yang Digunakan
Di dalam penelitian ini, digunakan nilai n dari yang sekecil-kecilnya, yakni 2 digit sampai dengan sebesar-besarnya (tidak dibatasi). Pada tahap penelitian selanjutnya, nilai e dan Φ(n) berbeda-beda juga akan diteliti dampaknya terhadap faktorisasi n.
3.3. Metode yang Diusulkan
Pada awal penelitian, nilai n dengan jumlah digit berbeda-beda akan difaktorisasi dengan 5 (lima) metode metaheuristik yaitu random search, iterated local search,, random-restart hill
climbing, steepest ascent hill climbing, dan tabu search. Kemudian, akan dipilih metode metaheuristik mana yang menghasilkan waktu faktorisasi yang paling cepat.
Selanjutnya, nilai-nilai n yang telah digunakan dengan metode metaheuristik tersebut akan diujicobakan kembali untuk difaktorisasi dengan 5 (lima) metode eksak, yaitu Fermat difference of squares, Euler factorization, Brent factorization, Pollard, dan Pollard rho.
Kemudian, akan dipilih metode faktorisasi mana yang menghasilkan waktu faktorisasi yang paling cepat.
Selanjutnya, akan diteliti apakah ada hubungan-hubungan khusus antara n dengan e dan Φ(n). Sebelumnya, telah diketahui hubungan-hubungan umum antara parameter- parameter tersebut, yaitu:
1. n = pq
2. Φ(n) = (p – 1)(q – 1) 3. 1 < e < Φ(n)
4. gcd(Φ(n), e) = 1
Dengan mengetahui hubungan-hubungan yang khusus antara n dengan e dan Φ(n), maka akan dikembangkan sebuah algoritma baru yang merupakan campuran antara metode metaheuristik tercepat dan metode eksak tercepat. Diharapkan, algoritma baru ini akan dapat memfaktorisasi modulus RSA secara lebih cepat dibandingkan dengan metode-metode metaheuristik dan eksak sebelumnya.
3.4 Beberapa Hasil Penelitian Awal
Beberapa penelitian awal telah dilakukan, dan hasilnya telah dipublikasi pada:
1. Data Science – Journal of Computing and Applied Informatics Vol. 01, No. 2, Tahun 2018, hal 48-56, dengan judul “Using random search and brute force algorithm in factoring the RSA modulus”.
2. Data Science – Journal of Computing and Applied Informatics Vol. 01, No. 1, Tahun 2017, hal 30-38, dengan judul “On factoring the RSA modulus using tabu search”
3. Journal of Physics: Conference Series Vol. 943, Tahun 2017, hal 012057, dengan judul
“On factoring RSA modulus using random-restart hill climbing algorithm and Pollard’s rho algorithm” yang sebelumnya telah diseminarkan di AD INTERCOMME
International Conference on Mathematics and Mathematics Education, 13-14 Oktober 2017.
Dari ketiga publikasi tersebut, untuk sementara dapat disimpulkan bahwa tiga metode faktorisasi eksak yang diuji (brute force, Pollard, dan Pollard rho) masih lebih unggul dari segi waktu komputasi daripada metode metaheuristik yang diuji (random search, random restart hill climbing, dan tabu search).
Keunggulan waktu metode faktorisasi eksak ini sangat signifikan, sehingga hampir- hampir dapat disimpulkan bahwa metode faktorisasi eksak jauh lebih layak digunakan untuk memfaktorisasi modulus RSA dibandingkan metode metaheuristik. Kendati demikian, masih ada tiga metode metaheuristik dan empat metode faktorisasi eksak lain yang harus diteliti untuk mendapatkan kesimpulan yang tetap.
Selanjutnya, masih dimungkinkan bahwa metode metaheuristik dapat membantu mengubah metode nonfaktorisasi eksak menjadi metode faktorisasi campuran, yaitu dengan meneliti hubungan-hubungan khusus antara n dengan e dan Φ(n) dan melihat apakah metode metaheuristik dapat mempercepat untuk mendapatkan Φ(n) bila diketahui nilai n. Bila Φ(n) bisa dengan cepat diketahui dengan bantuan metode metaheuristik, maka p dan q dapat dicari semudah mencari akar dari persamaan kuadrat x2 − (n − Φ(n) + 1)x + n = 0.
3.5 Algoritma Baru untuk Memfaktorkan Modulus RSA
Seperti dikemukakan pada Bab 2, hubungan antara n dengan Φ(n) berada dalam batas Fang- Liu sebagai berikut.
Dengan demikian, bila nilai n diketahui, maka nilai Φ(n) cukup dicari secara iteratif dalam batas Fang-Liu tersebut.
Selanjutnya, telah diketahui bahwa n = pq di mana p dan q adalah bilangan prima x1 dan x2 yang merupakan akar dari persamaan kuadrat x2 − (n − Φ(n) + 1)x + n = 0. Maka, untuk mencari nilai p dan q, cukuplah melakukan iterasi nilai Φ(n) dalam batas Fang-Liu di atas, yang menyebabkan x1 dan x2 menjadi bilangan prima.
Berdasarkan pendekatan-pendekatan di atas, sebuah algoritma baru untuk
memfaktorkan modulus RSA dikembangkan. Algoritma tersebut dipaparkan dalam bentuk pseudocode, sebagai berikut.
input n
let epsilon = 0.99999
let lowerbound = int((3 + epsilon) * floor((n - 2 * ceil(sqrt(n)) + 1) / 4))
if (lowerbound mod 2 = 1) {
lowerbound = lowerbound – 1
} // make sure that the starting point is even since totient must be even
let upperbound = int(4 * floor((n - 2 * ceil(sqrt(n)) + 1) / 4))
if (upperbound mod 2 = 1) {
upperbound = upperbound + 1
} // make sure that the ending point is even since totient must be even
let a = 1 let c = n
// a and c are the constants of the quadratic equation ax^2 + bx + c = 0
let totient = upperbound let iterations = 1
let x1 = 0 let x2 = 0
while (totient ≠ lowerbound) {
let b = -(n - totient + 1)
// b is the constant of the quadratic equation ax^2 + bx + c = 0 let D = b ^ 2 - 4 * a * c
// D is the discriminant of the quadratic equation ax^2 + bx + c = 0
if (D < 0) {
// if the discriminant is negative, no roots can be derived let totient = totient - 4
let iterations = iterations + 1 continue while
}
let x1 = (-b + sqrt(D)) / (2 * a) let x2 = (-b - sqrt(D)) / (2 * a) if (x1 and x2 are integers) {
output x1, x2 // p and q are found exit while
}
let totient = totient - 4
let iterations = iterations + 1 }
Karena algoritma baru ini hanya memiliki satu buah loop yang independen terhadap fungsi lain, maka dapat diprediksi bahwa kompleksitas algoritma ini adalah θ(n), di mana n adalah modulus RSA.
BAB IV
HASIL DAN DISKUSI
Berikut ini akan dipaparkan hasil eksperimen pemfaktoran modulus RSA dengan lima algoritma metaheuristik, lima algoritma eksak, dan algoritma baru tersebut. Eksperimen dilakukan pada komputer 64-bit dengan spesifikasi Chip A12X Bionic dengan Neural Engine dan koprosesor M12, dengan sistem operasi iOS 12. Sementara itu, bahasa pemrograman yang digunakan adalah bahasa Python 2 dengan integrated development environment Pythonista versi 2.1.1 (2110008).
Eksperimen dilakukan dengan memfaktorisasi nilai n yang kecil hingga besar dan mencatat real running time masing-masing algoritma dalam seconds. Pertama-tama, akan diuji lima algoritma metaheuristik, yaitu random search, iterated local search, random-restart hill climbing, steepest ascent hill climbing, dan tabu search untuk mengetahui algoritma tercepat di kelas metaheuristik tersebut. Kemudian, akan diuji lima metode eksak, yaitu Fermat difference of squares, Euler factorization, Brent factorization, Pollard, dan Pollard rho untuk mengetahui algoritma tercepat di kelas eksak tersebut. Dari algoritma tercepat kelas metaheuristik dan algoritma tercepat kelas eksak tersebut akan dipilih pula yang mana yang lebih cepat di antara keduanya. Selanjutnya, algoritma tercepat ini akan menjadi benchmark bagi algoritma baru.
4.1. Hasil Algoritma Random Search
Berikut ini disajikan output lengkap algoritma random search untuk pemfaktoran n = 35.
Factoring n = 35
initialization [p, q] = [17, 13]
delta best = 186.0
exporation # 1 [p, q] = [13, 23]
delta S = 264.0 delta best = 186.0
exporation # 2 [p, q] = [13, 13]
delta S = 134.0 delta best = 186.0
exporation # 3 [p, q] = [13, 17]
delta S = 186.0 delta best = 134.0
exporation # 4 [p, q] = [3, 17]
delta S = 16.0 delta best = 134.0
exporation # 5 [p, q] = [23, 19]
delta S = 402.0 delta best = 16.0
exporation # 6 [p, q] = [7, 17]
delta S = 84.0 delta best = 16.0
exporation # 7 [p, q] = [23, 11]
delta S = 218.0 delta best = 16.0
exporation # 8 [p, q] = [5, 7]
delta S = 0.0 delta best = 16.0
success [5, 7]
running time 0.00182008743286 secs
Gambar 4.1 Pemfaktoran n = 35 dengan algoritma random restart
Pada Gambar 4.1, terlihat bahwa untuk memfaktorkan n = 35 = 5 * 7, dibutuhkan 8 eksplorasi.
Sedangkan untuk kasus n = 143, outputnya adalah sebagai berikut. (Output dirampingkan untuk menghemat halaman)
n = 143
initialization [p, q] = [67, 61]
delta best = 3944.0 exporation # 1 [p, q] = [103, 59]
delta S = 5934.0 delta best = 3944.0
exporation # 2 [p, q] = [103, 83]
delta S = 8406.0 delta best = 3944.0
exporation # 3 [p, q] = [41, 139]
delta S = 5556.0 delta best = 3944.0
exporation # 4 [p, q] = [23, 13]
delta S = 156.0
delta best = 3944.0
exporation # 5 [p, q] = [109, 73]
delta S = 7814.0 delta best = 156.0
. . .
exporation # 93 [p, q] = [127, 61]
delta S = 7604.0 delta best = 12.0
exporation # 94 [p, q] = [83, 19]
delta S = 1434.0 delta best = 12.0
exporation # 95 [p, q] = [11, 13]
delta S = 0.0 delta best = 12.0
success [11, 13]
running time 0.529484987259 secs
Gambar 4.2 Pemfaktoran n = 143 dengan algoritma random search
Pada Gambar 4.2, terlihat bahwa untuk memfaktorkan n = 143 = 11 * 13, dibutuhkan
95 eksplorasi. Kendati waktu pemfaktoran yang dibutuhkan masih di bawah 1 detik, hal ini menjadi indikasi bahwa untuk pemfaktoran n dengan jumlah digit yang sedikit lebih besar, akan dibutuhkan sangat banyak iterasi.
Untuk membuktikan prediksi di atas, maka dicoba memfaktorkan n = 437, dengan hasil sebagai berikut.
Factoring n = 437
initialization [p, q] = [193, 191]
delta best = 36426.0
exporation # 1 [p, q] = [19, 17]
delta S = 114.0 delta best = 36426.0
exporation # 2 [p, q] = [211, 313]
delta S = 65606.0 delta best = 114.0
exporation # 3 [p, q] = [29, 19]
delta S = 114.0 delta best = 114.0
. . .
exporation # 1459 [p, q] = [263, 293]
delta S = 76622.0 delta best = 8.0
exporation # 1460 [p, q] = [23, 419]
delta S = 9200.0 delta best = 8.0
exporation # 1461 [p, q] = [211, 269]
delta S = 56322.0 delta best = 8.0
time's up
Gambar 4.3 Pemfaktoran n = 437 dengan algoritma random search
Pada Gambar 4.3, terlihat bahwa kendati limit waktu 10 detik telah terlampaui dan sudah dilakukan 1461 eksplorasi, algoritma random search gagal mendapatkan hasil. Dengan demikian, dapat disimpulkan bahwa algoritma random search sama sekali tidak cocok untuk memfaktorkan modulus RSA.
4.2. Hasil Algoritma Iterated Local Search
Berikut ini disajikan output lengkap algoritma iterated local search untuk pemfaktoran n = 2173.
Factoring n = 2173
T = [0.0682857682243335, 0.061252044954216, 0.07873027964653073, 0.09904621287121335, 0.0635033855694833, 0.008403895832084474, 0.01151146489964322, 0.016737022935004443, 0.05575651789168726, 0.08553852055623169]
walk = [61, 37]
walk = [139, 13]
walk = [89, 29]
walk = [107, 19]
walk = [37, 59]
walk = [41, 53]
success [41, 53]
running time 0.00274395942688 secs
Gambar 4.4 Pemfaktoran n = 2173 dengan algoritma iterated local search
Pada Gambar 4.4, terlihat bahwa untuk memfaktorkan n = 2173 = 41 * 53 dibutuhkan waktu 0.00274395942688 detik, 6 langkah kecil (walk), dan hanya satu kali eksplorasi (lompatan besar).
Sebagai perbandingan dicoba untuk memfaktorkan n = 3953. Hasil yang didapat adalah sebagai berikut.
Factoring n = 3953
T = [0.02510115290220809, 0.0456744846948177, 0.09164139892224568, 0.002687020266023288, 0.01695121714284732, 0.09933434002878339, 0.04156156408936591, 0.005437964527489992, 0.06622031992346361, 0.06784426418288096]
walk = [89, 43]
walk = [101, 43]
walk = [61, 67]
walk = [157, 23]
walk = [97, 37]
walk = [89, 43]
walk = [59, 67]
success [59, 67]
running time 0.00661706924438 secs
Gambar 4.5 Pemfaktoran n = 3953 dengan algoritma iterated local search
Pada Gambar 4.5, terlihat bahwa untuk memfaktorkan n = 3953 = 59 * 67 dibutuhkan waktu 0.00661706924438 detik, 7 langkah kecil (walk), dan hanya satu kali eksplorasi (lompatan besar).
Factoring n = 286921
T = [0.05129616906294528, 0.06438520236111282, 0.030875124900050066,
0.054421544443041786, 0.021043831902229894, 0.04900866577194679, 0.06444236490290614, 0.019006295101937843, 0.05081710678755599, 0.05549362079525512]
walk = [607, 467]
walk = [661, 431]
walk = [701, 409]
. . .
walk = [409, 701]
walk = [479, 599]
success [479, 599]
running time 0.0631878376007 secs
Gambar 4.6 Pemfaktoran n = 286921 dengan algoritma iterated local search
Pada Gambar 4.6, terlihat bahwa untuk memfaktorkan n = 286921 = 479 * 599 dibutuhkan waktu 0.0631878376007 detik, 61 langkah kecil (walk), dan hanya satu kali eksplorasi (lompatan besar).
Di sini dapat disimpulkan bahwa banyaknya eksplorasi tidaklah terlalu menentukan kecepatan algoritma iterated local search untuk memfaktorkan modulus. Yang lebih menentukan adalah banyaknya langkah kecil (walk).
Dalam eksperimen berikutnya, algoritma iterated local search ternyata gagal
menemukan faktor dari n = 1017937 bila diberikan waktu kurang dari 10 detik. Dengan demikian, dapat disimpulkan bahwa algoritma iterated local search hanya cocok untuk memfaktorkan modulus RSA yang kecil saja.
4.3. Hasil Algoritma Random Restart Hill Climbing
Berikut ini disajikan output lengkap algoritma random restart hill climbing untuk pemfaktoran n = 286921.
Factoring n = 286921
n = 286921
Finding p and q, starting from 163 and above
R = [599, 463]
R = [433, 691]
R = [641, 337]
R = [631, 433]
R = [601, 431]
R = [733, 271]
R = [307, 859]
R = [463, 601]
R = [263, 1061]
R = [421, 661]
R = [139, 1987]
R = [283, 1103]
R = [271, 1033]
R = [311, 887]
R = [421, 673]
R = [457, 547]
R = [331, 829]
R = [467, 509]
R = [283, 853]
R = [433, 563]
R = [421, 619]
R = [283, 881]
R = [251, 1117]
R = [331, 919]
R = [509, 563]
R = [601, 461]
R = [313, 883]
R = [409, 601]
R = [317, 937]
R = [401, 631]
R = [577, 397]
R = [389, 619]
R = [331, 971]
. . .
R = [223, 1279]
R = [271, 1217]
R = [271, 1213]
R = [571, 397]
R = [269, 1051]
R = [523, 541]
R = [503, 419]
R = [347, 811]
R = [419, 661]
R = [479, 599]
best = [479, 599]
success [479, 599]
running time 0.0775530338287 secs
Gambar 4.7 Pemfaktoran n = 286921dengan algoritma random restart hill climbing
Pada Gambar 4.7, terlihat bahwa untuk memfaktorkan n = 286921 = 479 * 599 dibutuhkan waktu 0.0775530338287 detik, 60-an kali eksplorasi (lompatan besar), dan 2700- an kali walk (langkah kecil).
Berikutnya, dicoba memfaktorkan nilai n yang lebih besar, yaitu n = 536113, dengan hasil sebagai berikut.
Factoring n = 536113
n = 536113
Finding p and q, starting from 277 and above
R = [373, 1483]
R = [571, 743]
R = [401, 1193]
R = [647, 751]
R = [419, 1213]
R = [409, 1153]
. . .
R = [281, 1999]
R = [263, 1913]
R = [571, 887]
R = [439, 967]
R = [347, 1447]
R = [317, 1439]
R = [313, 1753]
R = [409, 1153]
R = [557, 863]
R = [197, 2789]
R = [521, 997]
R = [239, 2459]
R = [557, 883]
R = [227, 2143]
R = [457, 1123]
R = [401, 1217]
R = [317, 1487]
R = [617, 709]
R = [491, 1009]
R = [433, 1231]
R = [421, 1109]
R = [599, 661]
R = [337, 1723]
best = [359, 1493]
R = [337, 1367]
. . .
R = [463, 983]
R = [367, 1367]
R = [487, 1021]
R = [461, 1153]
R = [523, 751]
R = [439, 1129]
R = [653, 587]
R = [293, 1619]
R = [653, 821]
best = [653, 821]
success [653, 821]
running time 0.0153210163116 secs
Gambar 4.8 Pemfaktoran n = 536113 dengan algoritma random restart hill climbing
Pada Gambar 4.8, terlihat bahwa untuk memfaktorkan n = 536113 = 653 * 821 dibutuhkan waktu 0.0153210163116 detik, 60 kali eksplorasi (lompatan besar), dan 2000-an kali walk (langkah kecil). Walaupun n yang difaktorkan lebih besar, namun waktu, eksplorasi, dan walk yang dibutuhkan lebih kecil. Hal ini adalah karena algoritma ini sangat tergantung kepada starting point yang diambil: apa bila semakin dekat dengan solusi, maka semakin baik. Kebetulan, starting point yang diambil, yaitu 277, sudah dekat dengan hasil [653, 821].
Dengan demikian, dapat disimpulkan bahwa algoritma random restart hill climbing dapat digunakan untuk memfaktorkan RSA dengan syarat bila starting point yang diambil, cukup dekat dengan solusi. Namun, algoritma ini dapat berjalan dengan lamban bila modulus RSA yang hendak difaktorkan terlalu besar.
4.4. Hasil Algoritma Steepest Ascent Hill Climbing with Replacement
Berikut ini disajikan output algoritma steepest ascent hill climbing with replacement untuk pemfaktoran n = 64777.
Factoring n = 64777 R = [577, 109]
[577, 109]
W = [431, 149]
W = [181, 367]
W = [983, 61]
W = [1061, 59]
W = [953, 71]
W = [431, 149]
W = [1109, 61]
W = [617, 101]
W = [887, 83]
R = [991, 59]
[991, 59]
W = [607, 97]
W = [1279, 41]
W = [829, 71]
W = [827, 71]
W = [1009, 59]
W = [991, 61]
W = [1201, 53]
W = [751, 79]
W = [1301, 41]
R = [2083, 31]
[2083, 31]
W = [1409, 37]
W = [1951, 23]
W = [1367, 47]
W = [1223, 61]
W = [2137, 23]
W = [1901, 31]
W = [1249, 43]
W = [1303, 41]
W = [1489, 41]
R = [1051, 67]
[1051, 67]
W = [1171, 59]
W = [1879, 43]
W = [2753, 19]
W = [1999, 29]
W = [3037, 17]
W = [1871, 41]
W = [1597, 41]
W = [2237, 23]
W = [3079, 11]
R = [1733, 31]
. . .
[1061, 59]
W = [1307, 41]
W = [1549, 37]
W = [1481, 41]
W = [397, 157]
W = [307, 211]
W = [1103, 67]
W = [739, 83]
W = [1493, 41]
W = [1249, 53]
success [307, 211]
running time 0.761335134506 secs
Gambar 4.9 Pemfaktoran n = 64777 dengan algoritma steepest ascent hill climbing with replacement
Pada Gambar 4.9, terlihat bahwa untuk memfaktorkan n = 64777 = 307 * 211 dibutuhkan waktu 0.761335134506 detik, 61 kali eksplorasi (lompatan besar), dan 500-an kali walk (langkah kecil).
Kemudian, dicoba memfaktorkan nilai modulus yang jauh lebih besar, yaitu n = 5601209. Hasilnya adalah sebagai berikut.
Factoring n = 5601209 R = [1303, 4297]
[1303, 4297]
W = [2593, 2153]
W = [2083, 2699]
W = [3793, 1471]
W = [2539, 2203]
W = [2339, 2399]
W = [3229, 1733]
W = [2707, 2063]
W = [2609, 2141]
W = [3739, 1489]
R = [1879, 2971]
[1879, 2971]
W = [1621, 3463]
W = [2099, 2663]
W = [1997, 2797]
W = [1709, 3271]
W = [2039, 2741]
R = [599, 9343]
[599, 9343]
W = [977, 5743]
W = [1697, 3301]
W = [1087, 5153]
W = [2017, 2777]
W = [727, 7699]
W = [1697, 3299]
W = [1481, 3793]
W = [491, 11411]
W = [1933, 2897]
success [2017, 2777]
running time 0.0306921005249 secs
Gambar 4.10 Pemfaktoran n = 5601209 dengan algoritma steepest ascent hill climbing with replacement
Pada Gambar 4.10, terlihat bahwa untuk memfaktorkan n = 5601209 = 2017* 2777 dibutuhkan waktu 0.0306921005249 detik, 3 kali eksplorasi (lompatan besar), dan 27 kali walk (langkah kecil).
Hasil ini cukup mengejutkan, karena untuk memfaktorkan modulus yang jauh lebih besar, algoritma steepest ascent hill climbing with replacement justru membutuhkan waktu, walk, dan eksplorasi yang lebih sedikit. Namun, sekali lagi, sebagai algoritma yang memanfaatkan fungsi random untuk membangkitkan solusi, algoritma ini juga sangat bergantung kepada pemilihan starting point, semakin dekat dengan solusi, semakin baik (baca: sedikit) pula waktu, walk, dan eksplorasinya.
4.5. Hasil Algoritma Tabu Search
Berikut ini disajikan output algoritma tabu search untuk pemfaktoran n = 143.
Factoring n = 143
n = 143 L = [[37, 17]]
R = [19, 7]
W = [23, 5]
W = [31, 11]
W = [31, 7]
W = [29, 11]
W = [29, 13]
W = [19, 17]
W = [31, 7]
W = [37, 13]
W = [31, 7]
W = [37, 11]
W = [29, 7]
W = [23, 13]
W = [29, 11]
W = [23, 7]
W = [31, 7]
. . .
L = [[23, 7], [19, 7], [37, 17]]
R = [29, 7]
W = [29, 13]
W = [23, 5]
W = [23, 11]
W = [29, 11]
W = [17, 19]
W = [31, 11]
W = [11, 19]
W = [31, 7]
W = [29, 7]
W = [23, 5]
W = [17, 13]
W = [29, 13]
W = [23, 11]
W = [23, 5]
W = [19, 17]
W = [11, 13]
success [11, 13]
running time 0.2977039814 secs
Gambar 4.11 Pemfaktoran n = 143 dengan algoritma tabu search
Pada Gambar 4.11, terlihat bahwa untuk memfaktorkan n = 143 = 11* 13 dibutuhkan waktu 0.2977039814 detik, 3 kali eksplorasi (lompatan besar), dan 200-an kali walk (langkah
kecil).
Kemudian, dicoba untuk memfaktorkan n = 437. Hasilnya adalah sebagai berikut.
Factoring n = 437
n = 437 L = [[37, 17]]
R = [31, 19]
W = [37, 11]
W = [41, 7]
W = [53, 7]
W = [31, 13]
W = [47, 5]
W = [19, 23]
success [19, 23]
running time 0.00304293632507 secs
Gambar 4.12 Pemfaktoran n = 437 dengan algoritma tabu search
Pada Gambar 4.12, terlihat bahwa untuk memfaktorkan n = 437 = 19* 23 dibutuhkan