uji primalitas lucas-lehmer menggunakan program komputer

advertisement
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
Download