UJI PRIMALITAS LUCAS-LEHMER MENGGUNAKAN PROGRAM KOMPUTER Sangadji1; Kelly Swandana2 1 Staf peneliti PPIN Batan, Serpong, Kawasan Puspiptek Gedung 71 Lantai 1, Tangerang 15314 [email protected] 2 Jurusan Matematika, Fakultas Sains dan Teknologi, Universitas Bina Nusantara Jln. K.H. Syahdan No. 9, Palmerah, Jakarta Barat 11480 ABSTRACT Several theories prime test have been developed to identify very large prime numbers. Each of these theories that have been developed up to now has not been really perfect in identifying prime numbers. However, the theory has been developed into the largest prime number search algorithm today is the Lucas-Lehmer theorem. In designing this algorithm, the authors develop a prime number test program bsed on the Lucas-Lehmer theorem. Program evaluation results show that the said theorem is able to test very large prime numbers. Test programs’ weakness is in length of calculation and testing time. However, for some particular cases it is observed that Lucas-Lehmer theorem is better than Pocklington theorem in identifying prime numbers. Keywords: cryptography, prime test, Lucas-Lehmer, pocklington ABSTRAK Untuk mengenali bilangan-bilangan prima yang sangat besar dikembangkanlah beberapa teori uji primalitas. Masing-masing teori yang telah dikembangkan sampai saat ini belum ada yang benar-benar sempurna dalam mengenali bilangan prima. Namun, teori yang banyak dikembangkan menjadi algoritma pencarian bilangan prima terbanyak saat ini adalah Teorema Lucas-Lehmer. Dalam perancangan algoritma ini, penulis membuat program pengujian bilangan prima dengan menggunakan teori dasar Teorema Lucas-Lehmer Hasil evaluasi program menunjukkan bahwa teorema di atas dapat menguji bilangan – bilangan prima. Kelemahan program dalam pengujian bilangan prima yang relatif besar adalah lamanya waktu perhitungan dan pengujian. Namun, untuk beberapa kasus tertentu didapatkan Teorema Lucas-Lehmer lebih baik dibandingkan dengan Teorema Pocklington dalam mengenali suatu bilangan prima. Kata kunci: kriptografi, uji primalitas, Lucas-Lehmer, pocklington Uji Primalitas Lucas-Lehmer …... (Sangadji; Kelly Swandana) 135 PENDAHULUAN Teori bilangan merupakan salah satu cabang matematika yang telah lama dipelajari. Pada awalnya, ‘keindahan’ sifat bilangan atau sistem bilangan merupakan suatu daya tarik tersendiri bagi pakar-pakar matematika dalam mengembangkan konsep-konsep dalam teori bilangan. Salah satu bagian penting dari teori bilangan yang memiliki ‘keindahan’ ini adalah konsep bilangan prima. Suatu bilangan bulat, n > 1 , disebut bilangan prima bila n hanya punya pembagi 1 dan n sendiri. Bilangan prima memiliki keunikan karena sifat-sifatnya yang khas dalam teori bilangan. Sebagai contoh, Teori Fundamental Aritmatika menunjukkan bahwa bilangan-bilangan prima adalah faktor penyusun bilangan-bilangan bulat positif. Setiap bilangan bulat positif dapat dinyatakan secara tunggal sebagai bilangan prima atau hasil perkalian dari bilangan-bilangan prima tanpa memperhatikan urutannya. Semenjak Rivest, Shamir & Adleman (1978) mengenalkan skema kriptografi kunci publik untuk menjaga kerahasiaan dan mengamankan pengiriman pesan, maka pengetahuan dan konsep teori bilangan semakin meluas dimanfaatkan dalam menunjang perkembangan teknologi informasi. Skema kriptografi kunci publik ini bekerja berdasarkan pada sifat-sifat bilangan prima. Kehandalan skema ini bergantung pada kemampuan kita untuk menemukan bilangan-bilangan prima yang sangat besar. Sedangkan tingkat keamanannya bergantung pada ketidakmampuan kita memfaktorkan suatu bilangan bulat positif sebagai hasil perkalian bilangan-bilangan prima yang besar. Sehingga dapat disimpulkan bahwa semakin besar suatu bilangan prima, maka semakin unik pula sifatnya dan akan semakin besar manfaatnya. Oleh karena itu, orang kemudian berlomba-lomba untuk menemukan bilangan prima yang lebih besar daripada yang ditemukan sebelumnya. Metode Lucas-Lehmer merupakan suatu metode uji primalitas yang telah banyak dipergunakan orang untuk mencari bilangan prima yang besar. Sampai saat ini, metode ini masih dipercaya kehandalannya untuk mengenali bilangan prima yang besar tanpa harus memfaktorkan bilangan tersebut. Metode ini menggunakan bilangan Mersenne sehingga lebih cepat dalam prosesnya dibandingkan dengan metode lainnya, seperti metode Pocklington. Bahkan bilangan prima yang terbesar yang berhasil ditemukan pada Februari 2005 merupakan hasil uji algoritma Lucas-Lehmer. Makalah ini akan membahas tentang algoritma uji Lucas-Lehmer dan solusi contoh penerapannya dengan bantuan program komputer. Sehingga mempermudah dalam proses pengujiannya. Lucas Lehmer Bilangan Prima adalah Bilangan bulat positif 1 hanya mempunyai satu pembagi positif. Setiap bilangan bulat positif lainnya mempunyai minimal dua pembagi positif karena pasti dapat dibagi oleh 1 dan bilangan itu sendiri. Definisi Bilangan prima adalah bilangan bulat positif yang lebih besar dari 1 dan hanya dapat dibagi oleh 1 dan bilangan itu sendiri. Contoh : bilangan bulat positif 2, 3, 5, 89, dan 101 adalah bilangan-bilangan prima. Greatest Common Divisor (Pembagi Persekutuan Terbesar) Suatu bilangan bulat b dikatakan dapat habis dibagi oleh bilangan bulat a ≠ 0, ditulis dengan notasi a | b, jika terdapat bilangan bulat c sedemikian sehingga b = ac. Kita tuliskan a b untuk menunjukkan bahwa b tidak habis dibagi a. Kita ambil bilangan – bilangan bulat positif a dan b, dengan setidaknya salah satu dari keduanya tidak sama dengan 0. Greatest Common Divisor dari a dan b, ditandakan dengan gcd(a,b) adalah bilangan bulat positif d yang memenuhi syarat-syarat: 136 Jurnal Mat Stat, Vol. 10 No. 2 Juli 2010: 135--143 d | a dan d | b. Jika c | a dan c | b, maka c ≤ d. Bilangan Mersenne Suatu bilangan bulat berbentuk 2m – 1 telah dipelajari secara mendalam oleh banyak matematikawan terdahulu. Pada tahun 1536, Hudalricus Regius menunjukkan bahwa 211 – 1 bukan bilangan prima karena dapat difaktorkan menjadi 23.89. Marin Mersenne pada tahun 1644 menyatakan bahwa 2m – 1 adalah bilangan prima untuk m = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127, dan 257 dan merupakan bilangan komposit untuk m lainnya, dan hingga saat ini jika 2m – 1 merupakan bilangan prima dikatakan sebagai bilangan prima Mersenne. Definisi Jika m adalah bilangan bulat positif, maka Mm = 2m – 1 disebut bilangan Mersenne ke-m; jika p adalah bilangan prima dan Mp = 2p – 1 adalah prima, maka Mp disebut sebagai bilangan prima Mersenne. Teorema Jika p adalah bilangan prima ganjil, maka setiap pembagi dari bilangan Mersenne Mp = 2p - 1 berbentuk 2kp + 1, di mana k adalah bilangan bulat positif. Bukti Ambil q sebagai bilangan prima yang membagi Mp = 2p – 1. Dengan menggunakan teorema Fermat, kita tahu bahwa q | (2q-1 – 1). Karena q merupakan faktor pembagi dari 2p – 1 dan 2q-1 -1, kita tahu bahwa (2p – 1, 2q-1 -1) > 1. Dari yang telah dibuktikan pada teorema 2.3.1 di atas, kita dapatkan p | (q – 1) sehingga ada sebuah bilangan bulat positif m sedemikian sehingga q – 1 = mp. Karena q adalah bilangan ganjil, maka m haruslah bilangan genap, m = 2k, di mana k adalah suatu bilangan bulat positif. Kita dapatkan q = mp + 1 = 2kp + 1. Karena setiap pembagi dari Mp adalah sebuah produk dari pembagi prima dari Mp, setiap pembagi prima dari Mp berbentuk 2kp + 1, dan hasil dari bilangan yang berbentuk seperti ini akan memiliki bentuk yang sama, yaitu bilangan ganjil. (Burton, 2002) Pengembangan Teorema Dalam penelitian dan perancangan algoritma ini, akan dibahas mengenai beberapa teorema uji primalitas yang terbaru. Teorema-teorema ini akan dipergunakan dalam pengembangan algoritma yang akan dirancang. Berikut ini adalah teorema-teorema uji primalitas. Teorema Lucas-Lehmer Terdapat sebuah bilangan prima ganjil p. Mp adalah bilangan prima jika dan hanya jika S ( p − 1) = 0 mod M p di mana S1 = 4 dan S n = S n2− 1 − 2 . ( ) Bukti Misalkan w = 2 + 3 dan v = 2 − 3 . Maka, dengan mudah dapat kita tunjukkan bahwa S n = w2 n −1 n −1 + v 2 . Jadi, Mp membagi Sp-1 berarti terdapat sebuah bilangan bulat positif R sedemikian sehingga w 2 p−2 + v2 p−2 = RM p . Uji Primalitas Lucas-Lehmer …... (Sangadji; Kelly Swandana) 137 w2 Atau, setelah kita kalikan dengan w 2 p −1 w2 p = R ⋅ Mp ⋅ w ( 2 p−2 = R ⋅ M p ⋅ w2 p−2 p−2 dan dikurangi satu, akan kita dapatkan − 1 ……………………………………...(1) dan setelah dikuadratkan ) −1 2 ………………………....................(2) Dengan menggunakan pembuktian secara kontradiksi, kita asumsikan Mp adalah bilangan komposit dan pilih salah satu faktor pembagi primanya q yang tidak lebih besar dari akar kuadratnya. Anggap grup G = Ζ q [ 3 ] terdiri dari semua bilangan dengan bentuk a + b 3 mod q yang memiliki invers, dengan catatan G memiliki paling banyak q 2 − 1 elemen. Melihat w mod q, p −1 = −1 dan w 2 = 1 , menunjukkan bahwa w adalah persamaan (1) dan (2) di atas menjadi w 2 p sebuah elemen dari G dengan order 2 . Karena order dari sebuah elemen dalam suatu grup tidak akan lebih besar dari order grup itu sendiri, sehingga kita dapatkan 2 p ≤ q 2 − 1 < M p = 2 p − 1 p suatu kontradiksi, memenuhi syarat cukup. Untuk memenuhi syarat perlu, sekarang kita asumsikan Mp adalah bilangan prima. Hukum dua arah (resiprok) mengimplikasikan : ⎛ 3 ⎞ ⎛M ⎟ = −⎜ p ⎜ ⎜ 3 ⎜M ⎟ ⎝ ⎝ p⎠ ⎛ −1⎞ ⎜ ⎟ = −1 ⎜M ⎟ p ⎝ ⎠ ⎞ ⎟⎟ = −1 ⎠ Karena M p ≡ 7 mod 12 dengan p adalah bilangan prima ganjil. Sehingga kita tahu bahwa ( G memiliki order 2p dan Si = TrG Ζ q 2 + 3 ) 2i − 1 , i = 1,2,.... Sekarang kita selesaikan dalam G saja, karena ( ⎡ p2−1 1+ ⎢2 ⎣ (2 + 3 ) 2 p −1 ) ⎤ 3⎥ ⎦ 2 ( ( ⎡ p −1 = ⎢2 2 1 + ⎣ Karena 2p = 1 dan teorema binomial, ) = 2 p −1 4 + 2 3 = (p (1 + 3 ) 2p ) ⎤ 3⎥ ⎦ ( ) 1 4+ 2 3 = 2+ 2 2p = 2 ( p − 1)2 p −1 3 sehingga (1 + 3 ) 2p − 1)2 p − 1 ≡ −1 mod p , kita tahu bahwa 2 ( p − 1)2 = 1 + 2p 3 + 2p ( 3) 2 p −1 + p −1 = 1 2 . Juga dengan ( 3) 2p (tiap unit di bagian tengah merupakan sebuah pembagi dari q dalam koefisien binomialnya.) = 1 + 32 138 p −1 ( + 1 + 32 p −1 −1 )3 Jurnal Mat Stat, Vol. 10 No. 2 Juli 2010: 135--143 Berdasarkan hukum dua arah di atas, kita dapat bahwa 3 bukanlah kuadrat sempurna dalam Ζ q , sehingga kita dapat membuat (q − 1) 2 = 2 p − 1 − 1 berpasangan dari 1 sampai q − 1 . Dengan demikian, hasil dari tiap pasangan adalah 3, dan hal ini mengimplikasikan 32 p −1 −1 = (q − 1)! = −1 Dengan Lemma Wilson, kita dapatkan (1 + 3) 2P ( Sehingga 2 + 3 ) 2 p −1 = (1 − 3) + 3(1 − 1) = −2 = −1 dengan persamaan di atas kita dapatkan (2 + 3 ) 2 p−2 Untuk beberapa α ∈Ζq =α 3 dimana hasil kuadratnya adalah -1/3. Sehingga ( a p −1 = TrG / Ζq 2 + 3 ) 2 p−2 = TrG / Ζqα 3 = 0 yang membuktikan pernyataan tersebut. (Niven, Zukerman dan Montgomery, 2001) Contoh : Akan dibuktikan bahwa 27 – 1 adalah bilangan prima : S0 = 4 S1 = (4 * 4 − 2) mod 127 = 14 S 2 = (14 *14 − 2) mod 127 = 67 S 3 = (67 * 67 − 2) mod 127 = 42 S 4 = (42 * 42 − 2) mod 127 = 111 S 5 = (111*111 − 2) mod 127 = 0 Terbukti bahwa S p − 2 = 0 , maka 27 – 1 = 127 merupakan bilangan prima. Teori uji primalitas ini merupakan inisiatif dari Lucas pada akhir tahun 1870 dan disederhanakan oleh Lehmer pada tahun 1930. Setiap barisan Sp dimodulokan 2p - 1 untuk mempercepat perhitungan. Uji ini ideal untuk komputer biner karena pembagian oleh 2p - 1 dapat dilakukan hanya dengan menggunakan perputaran dan penjumlahan saja. METODE PERANCANGAN Untuk menyelesaikan masalah uji primalitas dengan program komputer, terlebih dahulu dilakukan rancangan program seperti yang ditunjukkan dalam modul-modul dan tipe data berikut ini: Tipe Data yang digunakan Untuk dapat menguji bilangan yang cukup besar diperlukan penampung data (tipe data) yang besar pula. Pada metode yang penulis gunakan, terdapat suatu pengujian berdasarkan rumus gcd(a n( n −1) / pi − 1, n) = 1 , di mana n sangat menentukan besar a n( n −1) / pi yang akan ditampung. Nilai Uji Primalitas Lucas-Lehmer …... (Sangadji; Kelly Swandana) 139 a n( n −1) / pi jauh lebih besar dari daya tampung tipe data yang telah tersedia, sehingga hasil perhitungan menjadi tidak akurat. Oleh karena itu diperlukanlah suatu tipe data baru yang dapat menampung hasil perhitungan di atas dan dukungan algoritma – algoritma perhitungan untuk tipe data yang baru tersebut. Tipe data baru yang akan penulis gunakan adalah tipe data String, di mana tipe data ini dapat menampung bilangan yang sangat besar. Supaya tipe data ini dapat kita gunakan dalam perhitungan, maka diperlukanlah modul – modul untuk mengoperasikan tipe data tersebut. Modul dasar operasinya adalah Modul Penjumlahan, Modul Pengurangan, Modul Perkalian dan Modul Pembagian. Kemudian modul – modul ini digunakan sebagai dasar perhitungan dari fungsi – fungsi / modul – modul yang lain. Modul Penjumlahan dan Modul Pengurangan sama seperti dasar algoritma penjumlahan dan pengurangan bilangan. Modul Perkalian dari bilangan a dan b menggunakan Modul Penjumlahan bilangan a diulang sebanyak b kali. Sedangkan Modul Pembagian (a membagi b) menggunakan Modul Pengurangan b dengan a terus menerus hingga b lebih kecil dari a. Jumlah perulangan dari pengurangan terserbut adalah hasil bagi, dan nilai b terakhir yang lebih kecil dari a merupakan sisa. Tahapan yang Digunakan Tahapan yang digunakan untuk menyelesaikan masalah di atas meliputi : Tahap Validasi; pada tahap ini, input yang dimasukkan oleh user akan diperiksa. Input harus berupa bilangan ganjil dan lebih besar dari 1. Jika input tidak memenuhi syarat tersebut, maka akan ditampilkan pesan kesalahan. Tahap Utama Uji Primalitas; tahap Lucas-Lehmer, terdapat 2 tahap pengujian yaitu tahap pengujian dengan kuadrat cepat dan tahap pencarian faktor. Tahap pertama dari Modul Uji Lucas-Lehmer adalah menguji bilangan Mersenne berdasarkan 2 p rumus S n = S n − 1 − 2 mod 2 − 1 . Bilangan Mersenne dihasilkan dari p, dimana p adalah ( ) ( ) bilangan yang diinput. Pengujian bilangan tersebut dilakukan berdasarkan dengan teorema LucasLehmer. Proses pengkuadratan dilakukan dengan cara membagi proses pengkuadratan menjadi dua bagian sama besar kemudian dijalankan proses kuadrat biasa terhadap kedua bagian tersebut, baru kemudian digabungkan kembali dan didapatkan hasil kuadrat dengan waktu dua kali lebih cepat dari pengkuadratan biasa. Sebagai langkah awal pengujian ditetapkan S = 4 , kemudian dilakukan perulangan sebanyak p − 3 kali untuk mendapatkan S p − 2 = 0 . Jika didapatkan S p − 2 = 0 , maka bilangan Mersenne tersebut merupakan bilangan prima. Namun, jika S p − 2 ≠ 0 maka bilangan Mersenne tersebut bukanlah bilangan prima. Tahap kedua adalah pencarian faktor. Tahap ini hanya dilakukan bila bilangan Mersenne, Mn yang diuji dinyatakan sebagai bilangan komposit. Pencarian faktor ini dilakukan untuk membuktikan bahwa bilangan tersebut memang bukan bilangan prima. Faktor yang didapat akan ditampilkan sebagai output. Pemfaktoran Mn – 1 berdasarkan Teorema Fundamental Aritmetika dan Metode Eratosthenes, di mana nilai Mn – 1 diuraikan satu – persatu dimulai dari bilangan prima terkecil, yaitu 2, dengan menggunakan Modul Pembagian sampai dengan M n , hingga didapatlah faktor – faktor primanya. Kemudian dari faktor-faktor prima tersebut didapatkanlah suatu variabel m dan j, di mana p = m ⋅ j , m > M n dan m = p1k1 p2k 2 ... psks . Untuk suatu n = a / b, di mana a ≥ b, nilai n akan semakin kecil jika nilai b semakin besar. Sehingga untuk memperkecil proses perhitungan, nilai m sebagai pembagi dari (Mn – 1), sebaiknya diperoleh dari perkalian faktor – faktor prima Mn – 1 yang terbesar, hingga memenuhi syarat m > Mn (Rosen, 2000). 140 Jurnal Mat Stat, Vol. 10 No. 2 Juli 2010: 135--143 Diagram Alir Modul Utama Diagram alir Modul Lucas-Lehmer menjelaskan pengujian primalitas suatu bilangan Mersenne yang dapat dilihat pada Gambar 1 (Robertson, 2000). Gambar 1 Gambar Diagram Alir Modul Utama Lucas-Lehmer HASIL DAN PEMBAHASAN Adapun hasil dari rancangan program komputer yang telah dibuat dengan bahasa pemrograman Delphi seperti yang ditampilkan pada gambar berikut ini : Modul Utama Pada saat menjalankan UjiPrima.exe, akan tampil Form seperti tampak pada Gambar 2. Modul ini sebagai modul utama dan keseluruhan dari program. Gambar 2 Form Tampilan Utama Uji Primalitas Lucas-Lehmer …... (Sangadji; Kelly Swandana) 141 Pada form ini terdapat judul dan 2 main menus yang menampilkan pilihan untuk dijalankan, yaitu Menu dan Keterangan. Pada bagian Menu terdapat 4 pilihan, yaitu Lucas-Lehmer, Pocklington, Uji Banding, dan Keluar. Sedangkan pada bagian Keterangan terdapat menu About. Gambar 3 Tampilan Uji Lucas-Lehmer Tidak Prima Jika pada bagian Menu dari halaman utama dipilih Lucas-Lehmer, maka akan ditampilkan Uji Lucas-Lehmer. Pada tampilan ini (Gambar 3) terdapat sebuah field , di mana pemakai dapat memasukkan nilai p dari bilangan Mersenne yang akan diuji. Tombol “?Uji” berfungsi untuk memulai proses pengujian berdasarkan teorema Lucas-Lehmer dan akan ditampilkan hasil uji pada Memo di bawahnya. Jika p yang diinput menghasilkan bilangan prima Mersenne, maka akan ditampilkan seperti Gambar 4. Gambar 4 Tampilan Uji Lucas-Lehmer Prima Pembahasan Proses pengujian algoritma berdasarkan lamanya waktu perhitungan terhadap bilangan yang akan diuji, serta ketepatan suatu algoritma dalam mengenali suatu bilangan prima. Tabel 1 berikut ini adalah hasil uji berdasarkan algoritma Lucas-Lehmer. 142 Jurnal Mat Stat, Vol. 10 No. 2 Juli 2010: 135--143 Tabel 1 Analisa Program Lucas-Lehmer dalam Menguji Bilangan yang Diinput dan Hasil Ujinya. (Bilangan yang diinput adalah n, deret Mersenne M n = 2 − 1, n ≥ 1 .) n n Bilangan Jumlah digit Waktu Hasil Uji 2 3 4 5 6 7 8 9 10 11 12 13 17 3 7 15 31 63 127 255 511 1023 2047 4095 8191 131071 1 1 2 2 2 3 3 3 4 4 4 4 6 0 ms 0 ms 0 ms 0 ms 0 ms 0 ms 15 ms 30 ms 77 ms 109 ms 77 ms 828 ms 1 menit, 5 detik, 657 ms Prima Prima 3*5 Prima 3 * 21 Prima 3 * 85 7 * 73 3 * 341 23 * 89 3 * 1365 Prima Prima 19 524287 6 4 menit, 33 detik, 235 ms Prima PENUTUP Berdasarkan evaluasi hasil yang diperoleh pada program ini dapat disimpulkan bahwa dengan adanya program ini maka Uji primalitas Teorema Lucas-Lehmer dapat diselesaikan dengan cepat. Demikian juga untuk beberapa kasus, algoritma Lucas-Lehmer dapat membuktikan primalitas suatu bilangan dengan lebih tepat dengan waktu yang dibutuhkan untuk mengenali suatu bilangan prima yang besar algoritma Lucas-Lehmer relatif membutuhkan waktu yang relatif lebih lama. DAFTAR PUSTAKA Burton, David M.,2002, Elementary Number Theory, Fifth Edition, McGraw-Hill Higher Education, McGraw-Hill Company, New York. Niven, I., H. Zuckerman, and H. Montgomery, 2001,An Introduction to the Theory of Numbers, six Edition, John Wiley & Sons Inc., New York. Rivest, R., Shamir, A., dan Adleman L. (1978) A Method for Obtaining Digital Signatures and PublicKey Cryptosystems. Communications of the ACM 21 (2): 120–126. doi:10.1145/359340.359342. Robertson, L.A., (2000), Simple Program Design: A Step By Step Approach, Third Edition, Course Technology, Cambridge. Rosen, K.H., (2000), Elementary Number Theory and Its Application, Fourth Edition, Addison Wesley Longman, Inc., Massachusetts. Uji Primalitas Lucas-Lehmer …... (Sangadji; Kelly Swandana) 143