Seminar Nasional Informatika 2014 APLIKSASI TES BILANGAN PRIMA MENGUNAKAN RABINMILLER, GCD, FAST EXPONENSIAL DAN FAKTORISASI PRIMA UNTUK DASAR MATEMATIS KRIPTOGRAFI Budi Triandi STMIK Potensi Utama, Jl. K.L Yos Sudarso Km.6.5 No.3A Tanjung Mulia Medan [email protected] Abstrak Keamanan data merupakan suatu hal yang sangat penting dan merupakan kebutuhan bagi setiap orang yang melakukan transaksi data melalui media online. Dalam kriptografi terdapat beberapa model untuk melakukan pengamanan data, salah satunya adalah penggunaan kunci dalam mengamankan data, kunci yang digunakan dalam teknik penyandian terbagi menjadi dua yaitu public key dan private key. Penggunaan kunci pablik pada kriptografi dihadapkan pada permasalahan yang sulit seperti faktorialisasi, algoritma diskrit, kurva elips, problema Knapsack dan lainnya. Perpangkatan modulo, faktorialisasi dan penggunaan bilangan prima merupakan hal yang sangat mendasar dalam matematika kriptografi dalam pembentukan kunci pablik. Makalah ini membahas tentang implementasi algoritma Rabin–Miller, Fast Exponentiation, GCD (Greatest Common Divisor) dan faktorisasi prima kedalam alpikasi bantu yang dapat membantu dalam proses pemahaman untuk dasar perhitungan matematis kriptografi untuk proses pembelajaran. Algoritma Tes bilangan prima Rabin – Miller, Fast Exponentiation dan GCD (Greatest Common Divisor) dapat digunakan untuk bilangan yang besar hingga 15 digit. Kata Kunci : GCD, Fast Exponentiation, Rabin–Miller, faktorisasi prima 1. Pendahuluan Keamanan data saat ini sudah menjadi kebutuhan bagi setiap orang yang melakukan transaksi data melalui media online, banyak teknik keamanan yang dirancang sedemikian rupa sehingga memunculkan bebagai asfek kerumitan dalam hal pemahaman konsep dan teknik pengamana data. Dalam kriptografi terdapat beberapa model dalam melakukan pengamanan data, salah satunya adalah penggunaan kunci dalam mengamankan data, kunci dalam kriptografi digunakan untuk melakukan otentikasi data pada saat melakukan enkripsi dan depkripsi data, kunci yang digunakan dalam teknik penyandian terbagi menjadi dua yaitu public key dan private key. Penggunaan kunci pablik pada kriptografi dihadapkan pada permasalahan yang sulit seperti faktorialisasi, algoritma diskrit, kurva elips, problema Knapsack dan lainnya. Perpangkatan modulo, faktorialisasi dan penggunaan bilangan prima merupakan hal yang sangat mendasar dalam matematika kriptografi dalam pembentukan kunci pablik. Dalam hal pemahaman faktorialisasi, perpangkatan modulo dan pengujian bilangan prima dengan mengunakan teknik perhitungan manual dan konversi oral terkadang sering mengalami hambatan, sebagai contoh mencari hasil dari 410000 dan 3500 berdasarkan permasalahan tersebut dalam hal ini dibutuhkan aplikasi bantu yang dapat menguraikan tahap demi tahap untuk menentukan dan menjelaskan langka pencarian faktorialisasi, perpangkatan modulo dan pengujian bilangan prima. Proses kerja dari aplikasi bantu tersebut akan dibahas secara terperinci dan diakhir pembahasan akan diuraikan hasil kinerja aplikasi bantu, dari hasil tersebut nantinya diharapkan dapat dijadikan bahan dalam pengembangan ilmu pengetahuan dalam bidang teknologi keamanan data yang dapat mendukung dalam proses belajar mengajar. 2. Landasan Teori 2.1. Bilangan Di antara sistem bilangan, yang paling sederhana adalah bilangan-bilangan asli yaitu 1, 2, 3, 4, 5, …. Dengan bilangan ini kita dapat menghitung buku-buku kita, teman-teman kita, dan uang kita. Jika menggandengkan negatifnya dan nol, diperoleh bilangan-bilangan bulat yaitu …, -3, -2, -1, 0, 1, 2, 3, …. Dalam pengukuran panjang, berat atau tegangan listrik, bilangan-bilangan bulat tidak memadai. Bilangan ini terlalu kurang untuk memberikan ketelitian yang cukup. Oleh karena itu dituntun juga untuk mempertimbangkan hasil bagi (rasio) dari bilangan-bilangan bulat yaitu ¾, ½, dan sebagainya. Bilangan-bilangan yang dapat dituliskan dalam bentuk m/n dimana m dan n adalah bilangan-bilangan bulat dengan n ≠ 0, disebut bilangan-bilangan rasional. 227 Seminar Nasional Informatika 2014 Bilangan-bilangan rasional tidak berfungsi untuk mengukur semua panjang. Fakta yang mengejutkan ini ditemukan oleh orang Yunani kuno beberapa abad sebelum Masehi. Mereka memperlihatkan bahwa meskipun √2 merupakan panjang sisi miring sebuah segitiga siku-siku dengan sisi-sisi 1, bilangan ini tidak dapat dituliskan sebagai suatu hasil bagi dari dua bilangan bulat. Jadi √2 adalah suatu bilangan tak rasional. Demikian juga bentuk-bentuk akar lainnya. Sekumpulan bilangan (rasional dan tak rasional) yang dapat mengukur panjang, bersamasama dengan negatifnya dan nol dinamakan bilangan-bilangan riil. Bilangan-bilangan riil dapat dipandang sebagai pengenal (label) untuk titik-titik sepanjang sebuah garis mendatar. Di sana bilangan-bilangan ini mengukur jarak ke kanan atau ke kiri (jarak berarah) dari suatu titik tetap yang disebut titik asal dan diberi label 0. Walaupun tidak mungkin memperlihatkan semua label itu, tiap titik memang mempunyai sebuah label tunggal bilangan riil. Bilangan ini disebut koordinat titik tersebut. Dan garis koordinat yang dihasilkan diacu sebagai garis riil. Gambar 1. Sistem Bilangan Sistem bilangan masih dapat diperluas lebih jauh lagi ke bilangan yang disebut bilangan kompleks. Bilangan-bilangan ini berbentuk a + b√-1, dimana a dan b adalah bilangan-bilangan riil. 2.2. Konsep Dasar Matematis Kriptografi Dasar matematis yang mendasari proses enkripsi dan dekripsi adalah relasi antara dua himpunan yaitu himpunan berisi elemen plaintext dan himpunan berisi elemen ciphertext. Enkripsi dan dekripsi merupakan fungsi tranformasi antara dua himpunan tersebut. Bila himpunan plaintext dinotasikan dengan P dan himpunan ciphertext dinotasikan dengan C, sedang fungsi enkripsi dinotasikan dengan E dan fungsi dekripsi dengan D maka proses enkripsi-dekripsi dapat dinyatakan dalam notasi matematis dengan : E(P) = C dan D(C) = P Karena proses enkripsi-dekripsi bertujuan memperoleh kembali data asal, maka : D(E(P)) = P Relasi antara himpunan plaintext dengan himpunan ciphertext harus merupakan fungsi korespondensi satu-satu (one to one relation). Hal ini merupakan keharusan untuk mencegah 228 terjadinya ambigu dalam dekripsi yaitu satu elemen ciphertext menyatakan lebih dari satu elemen plaintext. Pada metode kriptografi simetris atau konvensional digunakan satu buah kunci. Bila kunci dinotasikan dengan „K‟ maka proses enkripsi-dekripsi metode kriptografi simetris dapat dinotasikan dengan : Ek(P) = C dan Dk (C) = P Dan keseluruhan sistem dinyatakan sebagai : Dk(Ek(P))=P Pada metode kriptografi asimetris digunakan kunci umum untuk enkripsi dan kunci pribadi untuk dekripsi. Bila kunci umum dinotasikan dengan „PK‟ dan kunci pribadi dinotasikan dengan „SK‟ maka proses enkripsi-dekripsi metode kriptografi asimetris dapat dinotasikan dengan : EPK (P) = C dan DSK (C) =P Dan keseluruhan sistem dinyatakan sebagai : DSK(EPK(P)) = P 3. Pembahasan Secara garis besar, proses penyelesaian aplikasi dapat dibagi menjadi tiga bagian besar yaitu : 1. Melakukan Perpangkatan Modulo dengan Fast Exponentiation. 2. Melakukan Faktorisasi Persekutuan Terbesar dengan GCD (Greatest Common Divisor). 3. Tes Prima dengan Metoda Rabin – Miller. 4. Faktorisasi Prima dari Bilangan Selain itu, aplikasi yang dibuat mampu membangkitkan bilangan acak prima dengan bantuan algoritma tes prima dengan metoda Rabin – Miller dan perhitungan perpangkatan modulo dengan Fast Exponentiation. 3.1. Menghitung Perpangkatan Modulo dengan Fast Exponentiation Sebelum mempelajari proses pembangkitan bilangan acak prima dengan metoda Rabin – Miller, pada bagian ini akan diuraikan proses pencarian tahap demi tahap dengan perhitungan manual . Agar lebih memahami proses perhitungan perpangkatan modulo dengan Fast Exponentiation, diambil contoh kasus 1123829 mod 95317 dengan proses sebagai berikut : A1 = 11 B1 = 23829 Product = 1 While 23829 <> 0 True While 23829 mod 2 = 0 False B1 = 23829 - 1 = 23828 Seminar Nasional Informatika 2014 Product = (1 * 11) mod 95317 = 11 While 23828 <> 0 True While 23828 mod 2 = 0 True B1 = 23828 div 2 = 11914 A1 = (11 * 11) mod 2 = 121 While 11914 mod 2 = 0 True B1 = 11914 div 2 = 5957 A1 = (121 * 121) mod 2 = 14641 While 5957 mod 2 = 0 False B1 = 5957 - 1 = 5956 Product = (11 * 14641) mod 95317 = 65734 While 5956 <> 0 True While 5956 mod 2 = 0 True B1 = 5956 div 2 = 2978 A1 = (14641 * 14641) mod 2 = 86265 While 2978 mod 2 = 0 True B1 = 2978 div 2 = 1489 A1 = (86265 * 86265) mod 2 = 61401 While 1489 mod 2 = 0 False B1 = 1489 - 1 = 1488 Product = (65734 * 61401) mod 95317 = 30286 While 1488 <> 0 True While 1488 mod 2 = 0 True B1 = 1488 div 2 = 744 A1 = (61401 * 61401) mod 2 = 9500 While 744 mod 2 = 0 True B1 = 744 div 2 = 372 A1 = (9500 * 9500) mod 2 = 80118 While 372 mod 2 = 0 True B1 = 372 div 2 = 186 A1 = (80118 * 80118) mod 2 = 56510 While 186 mod 2 = 0 True B1 = 186 div 2 = 93 A1 = (56510 * 56510) mod 2 = 69966 While 93 mod 2 = 0 False B1 = 93 - 1 = 92 Product = (30286 * 69966) mod 95317 = 93366 While 92 <> 0 True While 92 mod 2 = 0 True B1 = 92 div 2 = 46 A1 = (69966 * 69966) mod 2 = 45987 While 46 mod 2 = 0 True B1 = 46 div 2 = 23 A1 = (45987 * 45987) mod 2 = 5890 While 23 mod 2 = 0 False B1 = 23 - 1 = 22 Product = (93366 * 5890) mod 95317 = 41967 While 22 <> 0 True While 22 mod 2 = 0 True B1 = 22 div 2 = 11 A1 = (5890 * 5890) mod 2 = 92029 While 11 mod 2 = 0 False B1 = 11 - 1 = 10 Product = (41967 * 92029) mod 95317 = 31520 While 10 <> 0 True While 10 mod 2 = 0 True B1 = 10 div 2 = 5 A1 = (92029 * 92029) mod 2 = 40123 While 5 mod 2 = 0 False B1 = 5 - 1 = 4 Product = (31520 * 40123) mod 95317 = 11004 While 4 <> 0 True While 4 mod 2 = 0 True B1 = 4 div 2 = 2 A1 = (40123 * 40123) mod 2 = 46316 While 2 mod 2 = 0 True B1 = 2 div 2 = 1 A1 = (46316 * 46316) mod 2 = 62771 While 1 mod 2 = 0 False B1 = 1 - 1 = 0 Product = (11004 * 62771) mod 95317 = 65102 While 0 <> 0 False FastExp(11, 23829, 95317) = 65102 3.2. Menghitung Faktorisasi Persekutuan Terbesar dengan GCD Untuk menghitung faktorisasi persekutuan terbesar antara dua buah bilangan dapat digunakan algoritma GCD. Proses perhitungannya dapat dilihat pada contoh berikut ini : GCD(4356, 6538) P = 4356 Q = 6538 While 6538 <> 0 True R = 4356 mod 6538 = 4356 P = 6538 Q = 4356 While 4356 <> 0 True R = 6538 mod 4356 = 2182 P = 4356 Q = 2182 While 2182 <> 0 True R = 4356 mod 2182 = 2174 P = 2182 Q = 2174 While 2174 <> 0 True R = 2182 mod 2174 = 8 P = 2174 Q=8 While 8 <> 0 True R = 2174 mod 8 = 6 P=8 Q=6 While 6 <> 0 True R = 8 mod 6 = 2 P=6 Q=2 While 2 <> 0 True R = 6 mod 2 = 0 P=2 Q=0 While 0 <> 0 False GCD(4356, 6538) = 2 3.3. Tes Prima dengan Metoda Rabin – Miller Inti dari proses pembangkitan bilangan acak prima adalah melakukan pengetesan apakah 229 Seminar Nasional Informatika 2014 bilangan acak yang dibangkitkan tersebut merupakan bilangan prima atau bukan. Agar lebih memahami proses pembangkitan bilangan acak prima, diambil contoh untuk bilangan 95317 dengan A = 11, maka proses penyelesaiannya adalah sebagai berikut : C = 95317 - 1 = 95316 nTemp = 0 95316 mod (2^0) = 0 And ((2^0) < 95317) - True nTemp = 0 + 1 = 1 95316 mod (2^1) = 0 And ((2^1) < 95317) - True nTemp = 1 + 1 = 2 95316 mod (2^2) = 0 And ((2^2) < 95317) - True nTemp = 2 + 1 = 3 95316 mod (2^3) = 0 And ((2^3) < 95317) - False B=3-1=2 M = 95316 / (2^2) = 23829 J=0 Z = FastExp(11, 23829, 95317) = 65102 (65102 = 1) Or (65102 = (95317 - 1)) = False (0 > 0) And (65102 = 1) = False J=0+1=1 (1 < 2) And (65102 <> (95317 - 1)) = True Z = FastExp(65102, 2, 95317) = 95316 (1 > 0) And (95316 = 1) = False J=1+1=2 (2 < 2) And (95316 <> (95317 - 1)) = False (95316 = (95317 - 1)) = True TesRabinMiller = True Dari hasil proses penetuan maka dapat disimpulkan bahwa 95317 lulus Tes Prima Rabin – Miller untuk A = 11. 3.4. Implementasi Pembangkit Bilangan Prima Dalam dunia nyata, implementasi pembangkitan bilangan prima dapat berlangsung dengan sangat cepat. Salah satu implementasinya adalah sebagai berikut : 1. Bangkitkan bilangan acak p sepanjang n bit. 2. Set bit MSB (Most Significant Bit) dan LSB (Least Significant Bit) nya ke “1”. Atau set bit paling kiri dan kanannya ke bit satu. Pengesetan bit MSB menjamin panjang bit bilangan prima yang dihasilkan sesuai dengan yang diinginkan. Pengesetan bit LSB menjamin agar bilangan acak adalah bilangan ganjil, karena bilangan prima pasti harus bilangan ganjil. 3. Periksa apakah p tidak dapat dibagi bilangan prima kecil : 2,3,5,7,11, dan seterusnya hingga bilangan prima tertinggi yang lebih kecil dari 256. Pemeriksaan ini akan mengurangi 80 % peluang bahwa bilangan yang dipilih bukan bilangan prima. Artinya bila bilangan yang dipilih tidak dapat dibagi bilangan prima kecil di atas, peluang 230 bilangan yang dipilih merupakan bilangan prima adalah 80 %. 4. Lakukan tes Rabin – Miller untuk beberapa nilai a. Bila p lolos tes untuk satu nilai a, bangkitkan nilai a lainnya. Pilih nilai a yang kecil agar perhitungan lebih cepat. Lakukan tes dengan minimal 5 macam nilai a. Bila p gagal dalam proses uji coba, bangkitkan p lainnya dan ulangi langkah (2). Agar lebih memahami proses kerja dari pembangkit bilangan prima, berikut ini contoh proses pembangkitan bilangan prima : 1. Bilangan Acak P = 95316 2. P = 95316 genap, P = 95316 + 1 = 95317 3. P = 95317 tidak dapat dibagi oleh bilangan prima kecil dari 3, 5 ... 251. 95317 lolos tes 80% dan merupakan prima. Tes dilanjutkan. 4. Tes Rabin-Miller untuk beberapa nilai A. TES-1. Tes Rabin Miller untuk P = 95317 dengan A = 11, telah dirincikan pada bagian Tes Prima Rabin – Miller di atas, dan hasilnya bilangan 95317 lolos tes. TES-2. Tes Rabin Miller untuk P = 95317 dengan A = 12 C = 95317 - 1 = 95316 nTemp = 0 95316 mod (2^0) = 0 And ((2^0) < 95317) - True nTemp = 0 + 1 = 1 95316 mod (2^1) = 0 And ((2^1) < 95317) - True nTemp = 1 + 1 = 2 95316 mod (2^2) = 0 And ((2^2) < 95317) - True nTemp = 2 + 1 = 3 95316 mod (2^3) = 0 And ((2^3) < 95317) - False B=3-1=2 M = 95316 / (2^2) = 23829 J=0 Z = FastExp(12, 23829, 95317) = 1 (1 = 1) Or (1 = (95317 - 1)) = True TesRabinMiller = True Hasilnya bilangan 95317 juga lulus tes, sehingga bilangan 95317 kemungkinan besar merupakan bilangan prima. 3.5. Faktorisasi Prima dari Bilangan Suatu bilangan dapat dituliskan dalam bentuk produk dari unsur pokok primanya. Proses ini disebut dengan faktorisasi prima. Faktorisasi prima dari suatu bilangan dapat dihasilkan dengan melakukan proses berikut ini : 1. Set nilai X = bilangan yang akan difaktorkan. 2. Set nilai I = 2. 3. Jika I merupakan bilangan prima maka : a. Jika X habis dibagi I maka : i. Set nilai X = X / I. Seminar Nasional Informatika 2014 ii. Simpan nilai I sebagai faktor prima dari bilangan. b. Ulangi langkah (4) hingga X tidak habis dibagi I. 4. Jika X = 1 maka proses selesai. 5. Jika X merupakan bilangan prima maka simpan X sebagai faktor prima dari bilangan dan proses selesai. 6. Set nilai I = I + 1. 7. Jika nilai I lebih kecil dari nilai X maka kembali ke langkah (3). Agar lebih jelas mengenai proses di atas, simaklah contoh berikut ini : Misalkan akan dicari faktor prima dari bilangan 252, maka proses penyelesaiannya adalah sebagai berikut : 1. Set X = 252. 2. Set I = 2. 3. 2 merupakan bilangan prima, maka : a. 252 habis dibagi 2, maka : i. X = 252 / 2 = 126. ii. Faktor prima = 2 b. 126 habis dibagi 2, maka : i. X = 126 / 2 = 63. ii. Faktor prima = 2 x 2 4. Set I = 2 + 1 = 3. 5. 3 merupakan bilangan prima, maka : a. 63 habis dibagi 3, maka : i. X = 63 / 3 = 21. ii. Faktor prima = 2 x 2 x 3 b. 21 habis dibagi 3, maka : i. X = 21 / 3 = 7. ii. Faktor prima = 2 x 2 x 3x3 6. 7 merupakan bilangan prima maka faktor prima = 2 x 2 x 3 x 3 x 7, dan proses selesai. Dari proses diatas didapatkan faktor prima dari bilangan 252 adalah 2 x 2 x 3 x 3 x 7. 4. Hasil Pengujian Program Algoritma Tes Prima Rabin Miller dengan bilangan yang dites = „739‟ Algoritma Tes Prima Rabin Miller dengan bilangan yang dites = „739‟. Gambar 2. Bilangan ‘739’ lulus tes prima Rabin Miller untuk A = 6 Algoritma Tes Prima Rabin Miller dengan angka yang dites = „1551‟. Gambar 3. Bilangan ‘1551’ tidak lulus tes prima Algoritma Pembangkit Bilangan Prima Acak Rabin Miller menghasilkan bilangan acak prima (5 digit) yaitu bilangan „46181‟. Gambar 4. Algoritma pembangkit bilangan prima acak menghasilkan bilangan prima ‘46181’ Algoritma Pembangkit Bilangan Prima Acak Rabin Miller menghasilkan bilangan acak prima (8 digit) yaitu bilangan „55184879‟. Gambar 5. Algoritma pembangkit bilangan prima acak menghasilkan bilangan prima ‘55184879’ Algoritma Fast Exponentiation dengan a = „10123‟, b = „230402‟ dan c = „349384‟. Gambar 6. Algoritma Fast Exponentiation dengan a = ‘10123’, b = ’230402’ dan c = ‘349384’, didapat hasil ‘13273’ 231 Seminar Nasional Informatika 2014 Algoritma Fast Exponentiation dengan a = „7287342‟, b = „5327543‟ dan c = „2394992‟. bilangan prima berdasrkan algoritma tersebut. 5. Gambar 7. Algoritma Fast Exponentiation dengan a = ‘7287342’, b = ’ 5327543’ dan c = ‘2394992’, didapat hasil ‘862400’ Algoritma GCD dengan a = „151654‟ dan b = „1252‟. 1. Algoritma GCD dengan a = „426995712‟ dan b = „56‟. Gambar 9. Algoritma GCD dengan a = ‘426995712’, b = ’ 56’, didapat hasil ‘8’ Aplikasi Tes Bilangan Prima adalah implementasi prosedur kerja algoritma Rabin Miller dalam menentukan apakah suatu bilangan yang di-input merupakan bilangan prima atau bukan. Dari hasil pengujian yang dilakukan algoritma Rabin-Miller dapat menetukan apakah bilangan yang diinputkan kedalam aplikasi merupakan bilangan prima atau bukan merupakan 232 kerja Simpulan Aplikasi tes bilangan prima mengunakan rabin-miller, fast exponentiation, dan GCD dapat dijadikan alternatip pengujian bilangan prima yang besar, aplikasi ini dapat menampilkan hasil proses perhitungan (analisa) algoritma sehingga dapat membantu dalam proses pemahaman untuk dasar matematika kriptografi. Aplikasi ini juga dapat digunakan untuk pemahaman masalah faktorisasi, perpangkatan modulo dan bilangan prima Dari pembahasan diatas dapat disimpulkan pada dasarnya pengujian bilangan prima dapat dilakukan dan dipahami dengan mudah dengan mengunakan aplikasi bantu. 6. Gambar 8. Algoritma GCD dengan a = ‘151654’, b = ’ 1252’, didapat hasil ‘2’ prosedur Pustaka Bruce Schneier, Applied Crytography, Second Edition, John Willey and Sons Inc., 1996. 2. Jennifer Seberpy, Jojef Pieprzyk, Cryptography : An Introduction to Computer Security. 3. K. Jusuf Ir, M.T., Kriptografi, Keamanan Internet dan Jaringan Komunikasi, Penerbit Informatika Bandung, 2002 4. Security Algorithms Group of Experts (SAGE), Report on the Evaluation of 3GPP Standard Confidentialty and Integrity Algorithms, 2000. 5. Matsui, Mitsuru, Toshio Tokita, MISTY, KASUMI and Camellia CipherAlgorithm Development, 2002. 6. William Stallings, Cryptography and Network Security, Third Edition, 2003. 7. David Cereso‟s Weblog, “On GSM Security”, URL:http://www.cerezo.name/weblog/ 8. Encryption security.com/directory/international-dataencryption-algorithm. 9. http://www.cs.nps.navy.mil/curricula/tracks/s ecurity/notes/chap04_43.html. 10. http://wwwunix.ecs.umass.edu/~ccowell/projects/VLSI %20Projects/ IDEA%20overview.htm. 11. http://eprint.iacr.org/2001/065.pdf, tanggal 11 Juli 2010. 12. www.cs.ru.nl/~petervr/library/ html/security/gb_2001_cryptography.pdf (Tanggal akses: 28 Juli 2010).