BAB III
HASIL DAN PEMBAHASAN
Pada bab ini akan dijelaskan hal-hal yang berhubungan dengan masalah logaritma diskret pada (2) dan bagaimana mengeksplorasinya dengan menggunakan algoritme Exhaustive Search, Baby-Step Giant-Step, Pollard’s rho, Pohlig-Hellman, dan Index Calculus.
3.1
MASALAH LOGARITMA DISKRET PADA FINITE FIELD ( )3.1.1 FINITE FIELD ( )
Galois Field adalah nama populer untuk field dengan jumlah elemen terbatas (finite). Disebut Galois Field, sebagai penghargaan terhadap Evariste Galois yang menemukan hubungan antara grup dan persamaan polinomial. Galois Field dinotasikan ( ), berorder , dengan prima dan integer positif. Jika = 1, maka menurut Teorema 2.3.28 ( )(atau bisa juga dinotasikan ℤ ) adalah integer modulo p berbentuk field berorder . Setiap operasi aritmetikanya dilakukan dalam modulo agar hasilnya tetap berada dalam daerah ( ). Selanjutnya pembahasan akan difokuskan pada (2).
Berdasarkan Teorema 2.3.31 (2) adalah perluasan field ℤ . Berdasarkan Definisi 2.3.20 ℤ [x] adalah himpunan semua polinomial dalam peubah x dengan koefisien dalam ℤ merupakan sebuah ring di bawah operasi penjumlahan dan perkalian polinomial. Misalkan ( )polinomial tak konstan atas ℤ [ ], maka berdasarkan Teorema 2.3.32 ada ∈ (2) sedemikian sehingga ( ) = 0. Jika ada seperti ini, maka disebut algebraic atas ℤ (Definisi 2.3.33). Selanjutnya berdasarkan Teorema 2.3.43, jika deg( , ℤ) = , maka ℤ ( ) merupakan ruang vektor atas ℤ berdimensi- dengan basis { , , , … . , , }.
ℤ adalah field. Misalkan ( ) ∈ ℤ[ ]adalah polinomial irredusibel atas ℤ berderajad , maka menurut Teorema 2.3.14 〈 ( )〉 adalah suatu ideal,
dengan 〈 ( )〉= { ( ) ( )| ( ) ∈ ℤ[ ]}. Selanjutnya, berdasarkan Teorema 2.3.34ℤ [ ]/〈 ( )〉 adalah finite field berorder 2 , dengan operasi penjumlahan dan perkalian polinomial dilakukan dalam modulo ( ).
Dari uraian di atas dan berdasarkan Teorema 2.3.37 dan Teorema 2.3.38, jika diberikan polinomial irredusibel ( ) ∈ ℤ[ ]berderajad dan ( ) = 0,
maka setiap ∈ ℤ( ) dapat dinyatakan secara unik dalam bentuk
= + + + ⋯ + , dimana ∈ ℤ , 0 ≤ ≤ − 1, dan
(2 ) ≅ ℤ [ ]/〈 ( )〉 ≅ ℤ ( ) ≅{ + + ⋯ + | ∈ ℤ untuk semua }.
Contoh 1 (Finite Field ( ))
( ) = + + 1 adalah polinomial irredusibel berderajad 4 atas ℤ , dan ( ) = 0 ⟺ + + 1 = 0 ⟺ = + 1, maka
(2 ) = ℤ [ ]/〈 ( )〉
= { , , , , , , , , , , , , , , , } = {0,1, , , , 1 + , + , + , 1 + + , 1 + , + ,
1 + + , + + , 1 + + + , 1 + + , 1+ } Dari uraian di atas, ada beberapa cara yang dapat dilakukan untuk merepresentasikan elemen-elemen (2), diantaranya adalah dengan representasi grup siklik, representasi polinomial, representasi vektor dan representasi himpunan.
1) Representasi grup siklik : 0, 0, 1, ..., , dengan adalah generator (2)∗, dimana (2)∗= (2 ) − {0}.
2) Representasi polinomial dalam peubah : + + + ⋯ + , dimana ∈ ℤ , 0 ≤ ≤ − 1.
3) Representasi vektor : [ , , , ...], dengan ∈ ℤ 4) Representasi himpunan : { , , , ...}, dengan ≥ 0.
Cara merepresentasikan elemen-elemen (2 ) dengan representasi himpunan mengacu pada tesis Rosdiana 2009. Representasi himpunan selanjutnya diperlukan pada saat komputasi untuk menentukan masalah logaritma diskret. Pada contoh 1 di atas cara merepresentasikan elemen-elemen (2) adalah
dengan representasi grup siklik dan representasi polinomial. Tabel 3.1.1 berikut memperlihatkan elemen-elemen (2) dalam beberapa representasi.
Tabel 3.1.1 Elemen-elemen ( ) No Representasi Himpunan Representasi Vektor Representasi Grup Siklik Representasi Polinomial 1 {} [0,0,0,0] 0 0 2 {0} [1,0,0,0] 1 1 3 {1} [0,1,0,0] 1 1 4 {2} [0,0,1,0] 2 2 5 {3} [0,0,0,1] 3 3 6 {0,1} [1,1,0,0] 4 1 + 7 {1,2} [0,1,1,0] 5 + 2 8 {2,3} [0,0,1,1] 6 + 3 9 {0,1,3} [1,1,0,1] 7 1 + + 3 10 {0,2} [1,0,1,0] 8 1 + 2 11 {1,3} [0,1,0,1] 9 + 3 12 {0,1,2} [1,1,1,0] 10 1 + + 2 13 {1,2,3} [0,1,1,1] 11 + + 3 14 {0,1,2,3} [1,1,1,1] 12 1 + + + 3 15 {0,2,3} [1,0,1,1] 13 1 + + 3 16 {0,3} [1,0,0,1] 14 1 + 3
Setiap operasi aritmetika (2) dilakukan terhadap polinom yang tidak dapat direduksi lagi (irredusibel) dalam ℤ . Secara umum dapat dituliskan sebagai berikut. Misalkan ( )adalah polinomial irredusibel atas ℤ berderajad , maka operasi penjumlahan dan perkalian dalam (2) dapat didefinisikan sebagai berikut : 1. Penjumlahan Jika = + + + ⋯ + , = + + + ⋯ + ∈ (2). Maka + =, dimana = + + + ⋯ + dengan ≡ + (mod 2). 2. Perkalian
Jika = + + + ⋯ + , = + + + ⋯ + ∈ (2). Maka . =, dimana s= + + + ⋯ + dengan = ∑ (mod 2), 0 ≤ ≤ − 1.
Penjumlahan dan perkalian dalam (2) ini dihitung dengan menggunakan algoritme standar untuk integer dan aritmetika polinomial. Unsur identitas penjumlahannya adalah polinomial 0, dan unsur identitas perkaliannya
adalah polinomial 1. Pengurangan adalah invers dari penjumlahan; jika ∈ (2) maka invers penjumlahan dari (dinotasikan (− ))pada (2)
adalah solusi unik untuk persamaan + = 0dalam (2). Selanjutnya, pembagian adalah invers dari perkalian; jika ∈ (2) maka invers perkalian dari (dinotasikan ) pada (2) adalah solusi unik untuk persamaan . = 1pada (2). Invers perkalian dalam (2) dapat dihitung secara efisien dengan menggunakan Algoritme Euclidean yang Diperluas.
Dalam pembahasan selanjutnya akan dibahas (2) tanpa elemen {0}, dinotasikan dengan (2)∗, membentuk grup di bawah operasi perkalian (Definisi 2.3.29).
3.1.2 MASALAH LOGARITMA DISKRET PADA ( )∗
Berdasarkan Teorema 2.3.30, (2)∗ adalah grup siklik yang berorder = 2 − 1. Karena (2)∗ merupakan grup siklik maka terdapat suatu generator yang membangun (2)∗ yang disebut elemen primitif. Jika diberikan elemen primitif dari (2)∗ dan diketahui order dari (2)∗ adalah , maka ℴ( ) = (Teorema 2.3.9), sehingga :
(2)∗= 〈 〉 = { , , , … , }
dan berdasarkan Teorema 2.3.6 , , , … , semuanya berbeda.
Berdasarkan Definisi 2.4.1 dan Definisi 2.4.4, jika diberikan grup siklik (2)∗ berorder , generator (2)∗, ∈ (2)∗, dan ( ) adalah polinomial irredusibel atas ℤ . Logaritma diskret dengan basis adalah integer unik , 0 ≤ ≤ − 1, sedemikian sehingga :
dan bagaimana menentukan disebut masalah logaritma diskret. Nilai pada rentang 0 ≤ ≤ − 1yang merupakan solusi masalah logaritma diskret
≡ (mod ( )) dijamin ada (Teorema 2.4.6).
Menentukan masalah logaritma diskret menjadi sulit apabila order grup multiplikatif (2)∗ besar. Karena itu diperlukan suatu teknik tertentu untuk menyelesaikannya. Beberapa teknik yang dapat digunakan untuk menentukan masalah logaritma diskret ini adalah Algoritme Exhaustive Search, Baby-Step Giant-Step, Pollard’s rho, Pohlig Hellman, dan Index Calculus. Dalam Menezes et el. (1997) kelima algoritme tersebut dikenakan pada grup siklik G umum, sedangkan pada tulisan ini dikenakan pada sistem aritmatik grup multiplikatif
(2)∗.
3.2 SOLUSI MASALAH LOGARITME DISKRET PADA ( )∗
Untuk menentukan masalah logaritma diskret diatas ada beberapa algoritme yang bisa digunakan, diantaranya adalah Algoritme Exhaustive Search, Baby-Step Giant-Step, Pollard’s rho, Pohlig-Hellman dan Index Calculus. Algoritme untuk menentukan masalah logaritma diskret dalam Menezes et al. (1997) dijelaskan secara umum dalam grup siklik berhingga berorder dengan generator , dan untuk pendekatan yang lebih konkrit dipilih grup multiplikatif ℤ ∗ berorder − 1dimana operasi grupnya adalah operasi perkalian modulo . Pada tulisan ini algoritme-algoritme tersebut dieksplorasi untuk menentukan masalah logaritma diskret pada (2)∗.
3.2.1 Solusi Masalah Logaritma Diskret pada ( )∗ dengan Algoritme
Exhaustive Search
Ide dasar Algoritme Exhaustive Search adalah Definisi Masalah Logaritma Diskret (Definisi 2.4.4).Misalkan ( )adalah polinomial irredusibel atas ℤ dan algebraic atas ℤ , maka (2)∗= 〈 〉 = {1, , , … , = , … , }. Menentukan masalah logaritma diskret pada (2)∗sehingga = dengan Algoritme Exhaustive Search adalah dengan mencoba semua kemungkinan nilai , 0 ≤ ≤ 2 − 2, sampai ditemukan yang benar, artinya jika dipangkatkan
akan sama dengan dalam mod ( )dinotasikan ≡ (mod ( )). Atau dengan bahasa sederhana untuk menentukan masalah logaritma diskret , kalikan dengan sampai ditemukan . Banyaknya langkah dalam proses perkalian ini adalah , 0 ≤ ≤ 2 − 2. . = . = . = . = ⋮ . = = (2) Selama proses perkalian jika ditemukan ≥ , maka direduksi ke mod ( ) dan dalam proses reduksi berlaku aturan penjumlahan dan perkalian dalam
(2). Selanjutnya dari (1) dan (2) diperoleh : =
= log = log
= Jadi = ≡ (mod ( )).
Berikut Algoritme Exhaustive Search yang dieksplorasi dari Definisi Masalah Logaritma Diskret secara umum (Definisi 2.4.4)
Algoritme 3.2.1
Algoritme Exhaustive Search untuk menentukan masalah logaritma diskret pada (2)∗
Input : generator grup multiplikatif (2)∗berorder = 2 − 1, ∈ (2)∗, dan ( )polinomial irredusibel atas ℤ berderajad . Output : logaritma diskret ≡ log (mod ( )).
1) Untuk setiap , 0 ≤ ≤ − 1, hitung nilai (mod ( )).
2) Setelah langkah ke- dimana ≡ (mod ( )), maka proses berhenti. 3) Solusi dari ≡ (mod ( )) adalah ≡ (mod ).
Dalam Menezes et al. (1997) nilai harapan kompleksitas waktu Algoritme Exhaustive Search adalah (2 ). Algoritme Exhaustive Search ini diimplementasikan dengan bantuan sofware Maple 11, dapat dilihat pada Lampiran 3.1
Contoh 2 (Menentukan masalah logaritma diskret pada grup multiplikatif (2)∗dengan Algoritme Exhaustive Search)
Diketahui : adalah generator grup multiplikatif (2)∗, = + + + 1 ∈ (2)∗, dan
( ) = + + 1. Tentukan ≡ log (mod ( )). Solusi :
Grup multiplikatif (2)∗ dibangun oleh suatu polinomial ( )berderajad 7 irredusibel atas ℤ . Diketahui adalah generator grup multiplikatif (2)∗. Perkalian dari elemen-elemen (2)∗ adalah perkalian dalam modulo ( ), sehingga
( ) ≡ 0(mod ( ))
+ + 1 ≡ 0 mod ( )
≡ − − 1 ≡ + 1(mod( )), sebab 1 ≡ −1 dalam ℤ .
Grup multiplikatif (2)∗ berorder = 2 − 1 = 127, artinya ada 127 kemungkinan nilai , 0 ≤ ≤ 126, yang memenuhi ≡ (mod ( )).
Dengan Algoritme Exhaustive Search, akan dicari nilai sedemikian sehingga ≡ + + + 1(mod ( )).
Kita akan coba untuk setiap kemungkinan nilai , 0 ≤ ≤ 126, sampai ditemukan nilai yang benar yang memenuhi ≡ (mod ( )).
Tabel 3.2.1 Representasi Polinomial ( (mod ( ))untuk (2)∗dengan = + + + 1
mod ( )
0 1
mod ( ) 2 3 4 5 6 7 + 1 8 + 9 + 10 + 11 + 12 + 13 + + 1 14 + 1 15 + 16 + 17 + 18 + 19 + + 1 20 + + 21 + + + 1
Pada saat = 21, diperoleh kongruensi ≡ 3+ 2+ + 1 ≡ (mod ( )).
Dengan demikian diperoleh solusi dari ≡ log (mod ( )) adalah ≡ (mod ) ≡ 21 (mod 127).
Karena Algoritme Exhaustive Search ini metodenya yaitu dengan mencoba semua kemungkinan solusi yang ada, maka solusi yang tepat secara pasti akan ditemukan. Namun kelemahannya adalah kompleksitas waktu yang besar sehingga tidak efisien digunakan untuk menyelesaikan masalah logaritma diskret dalam (2)∗ berorder besar. Oleh karena itu diperlukan metode lain agar penyelesaian masalah logaritma diskret pada (2)∗menjadi lebih efisien untuk kasus yang relatif besar.
3.2.2 Solusi Masalah Logaritma Diskret pada ( )∗ dengan Algoritme
Baby-Step Giant-Step
Algoritme Baby-Step Giant-Step pertama kali dipublikasikan oleh Shanks pada tahun 1971. Algoritme ini merupakan time-memory trade-off dari Algoritme Exhaustive Search yakni situasi dimana memori komputer digunakan untuk mengurangi biaya dan waktu eksekusi program (Menezes et al. 1997).
Berikut analisis Algoritme Baby-Step Giant-Step untuk (2)∗ yang dieksplorasi dari Algoritme Baby-Step Giant-Step untuk grup siklik umum.
Misalkan adalah sebuah generator grup siklik (2)∗, dengan order (2)∗ adalah , ∈ (2)∗ dan ( )polinomial irredusibel berderajad atas ℤ . Masalah logaritma diskret adalah menentukan , 0 ≤ ≤ − 1,
sedemikian sehingga ≡ log (mod ( )). Untuk menentukan ≡ log (mod ( )), dengan Algoritme Baby-Step Giant-Step ada dua fase
yang harus dilewati yaitu fase baby-step dan fase giant-step. Ide dasarnya adalah membagi dengan , = √ , sampai ditemukan dalam himpunan {1, , , … , }.
Langkah pertama menentukan nilai = √ dimaksudkan untuk menentukan batas minimal banyaknya representasi polinomial yang akan disimpan dalam memori komputer.
Langkah kedua adalah membentuk tabel dengan pasangan ( , (mod ( )), 0 ≤ < − 1, dimaksudkan untuk menentukan representasi polinomial sebanyak yang akan disimpan di memori komputer, yakni { , , , … , }. Untuk membentuk tabel pasangan ( , (mod ( )) dapat digunakan Algoritme Exhaustive Search. Selanjutnya representasi polinomial– polinomial disimpan dalam memori komputer. Penyimpanan representasi polinomial–polinomial ini disebut fase baby-step.
Langkah ketiga Algoritme Baby-Step Giant-Step adalah menentukan nilai dan sedemikian sehingga ≡ (mod ( )), untuk suatu ≥ 1. Caranya adalah dengan membagi dengan representasi polinomial sampai ditemukan yang merupakan salah satu anggota { , , , … , }. Banyak
langkah dalam proses pembagian ini adalah . Dalam proses pembagian ini berlaku aturan penjumlahan dan perkalian polinomial dalam (2).
∶ = : = ∶ = ⋮ ( )∶ = ( ) ( )∶ = = (1) Untuk menentukan nilai dan dengan cara membagi dengan representasi polinomial sama artinya dengan mengalikan dengan polinomial . Kalau cara kedua ini yang digunakan maka langkah pertama adalah menentukan dengan menggunakan Algoritme Euclidean yang Diperluas. Selanjutnya kalikan dengan representasi polinomial sampai diperoleh = . Proses menghitung nilai ini disebut fase giant-step.
Jika sudah ditemukan nilai dan , maka selanjutnya dapat ditentukan nilai logaritma diskret . Berdasarkan Definisi Logaritma Diskret :
≡ log mod ( ) ⇔ ≡ mod ( ) (2) Sehingga dari (1) dan (2) diperoleh :
= = = log = log − = = +
Jadi solusi dari ≡ mod ( ) adalah = + ≡ log mod ( ) . Algoritme 3.2.2
Algoritme Baby-Step Giant-Step untuk menentukan masalah logaritma diskret pada (2)∗
Input : generator grup siklik (2)∗ berorder = 2 − 1, dan ∈ (2)∗, dan ( )polinomial irredusibel atas ℤ berderajad .
1) Menetapkan nilai = √
2) Bentuk tabel dengan pasangan ( , mod ( ) ), dimana 0 ≤ ≤ − 1. 3) Hitung , kemudian tetapkan nilai = .
Bentuk tabel dengan pasangan ( , mod ( ) ), ≥ 0, sampai diperoleh nilai dari = .
4) Solusi dari ≡ (mod ( )) adalah ≡ + (mod ).
Dalam Menezes et al. (1997) nilai harapan kompleksitas waktu Algoritme Baby-Step Giant-Step adalah (√2 ). Implementasinya dengan bantuan sofware Maple 11 dapat dilihat pada Lampiran 3.3.
Contoh 3 (Menentukan masalah logaritma diskret pada grup multiplikatif (2)∗dengan Baby-Step Giant-Step)
Diketahui : adalah generator grup multiplikatif (2)∗, = + + + + 1 ∈ (2)∗, dan ( ) = + + 1.
Tentukan ≡ log (mod ( )). Penyelesaian :
1. Order dari (2)∗adalah = 2 − 1 = 127
Jadi = √127 = 12. Artinya banyaknya representasi polinomial yang akan disimpan di memori komputer minimal adalah 12, 0 ≤ ≤ 11, yakni { , , , … , }
2. ( ) = + + 1 polinomial irredusibel atas ℤ , dengan generator (2)∗sehingga :
( ) ≡ 0 mod ( ) ⟹ + + 1 ≡ 0 mod ( ) ⟹ ≡ + 1 mod ( )
Tabel 3.2.2 Representasi Polinomial ( (mod ( ))untuk (2)∗dengan = + + + + 1 Representasi polinomial mod ( ) 0 1 1 2 3 4 5 6 7 + 1 8 + 9 + 10 + 11 +
Pada Tabel 3.2.2 ini terlihat jika ≥ 7, maka polinomial direduksi ke mod ( ).
3. Menentukan nilai , = 0,1,2, … yang memenuhi kongruensi ≡ (mod ( )). Agar mudah tentukan terlebih dahulu mod ( ). Untuk menentukan gunakan Algoritme Euclidean
Diperluas : + + 1 0 + 1 + 1 + 1 + + 1 + 1 + + 1 + 1 1 + + + 1 0 Jadi mod ( ) = + + + 1.
Tabel 3.2.3 Hasil Perhitungan , : mod ( ) , ≥ 0untuk (2 )∗ dengan = + + + + 1. Representasi Polinomial ≡ : mod ( ) 0 + + + + 1 1 + + + 1 2 + + + 3 +
Pada saat = 3, diperoleh nilai = = + , dengan = 11. 4. Jadi solusi = log mod ( ) = + = 3.12 + 11 = 47
Tiga algoritme berikut (Algoritme Baby-Step Giant-Step 2, Algoritme Baby-Step Giant-Step 3, Algoritme Naif Square) juga dieksplorasi dari Algoritme Baby-Step Giant-Step untuk grup siklik umum.
3.2.3 Solusi Masalah Logaritma Diskret pada ( )∗ dengan Algoritme
Baby-Step Giant-Step 2
Misalkan adalah sebuah generator grup siklik (2)∗, dengan order (2)∗ adalah , ∈ (2)∗ dan ( )polinomial irredusibel berderajad atas ℤ . Masalah logaritma diskret adalah menentukan , 0 ≤ ≤ − 1,
sedemikian sehingga ≡ log (mod ( )). Untuk menentukan ≡ log (mod ( )), dengan Algoritme Baby-Step Giant-Step 2 juga ada dua
fase yang harus dilewati yaitu fase baby-step dan fase giant-step. Ide dasarnya adalah membagi dengan , sampai ditemukan dalam himpunan {1, , , … , }.
Langkah pertama menentukan nilai = √ dimaksudkan untuk menentukan batas minimal banyaknya representasi polinomial yang akan disimpan dalam memori komputer. Sebenarnya tidak harus sama dengan √ ,
boleh kurang atau lebih dari √ tergantung dari kapasitas memori komputer yang digunakan, tetapi pada tulisan ini untuk komputasi diambil nilai = √ .
Langkah kedua adalah membentuk tabel dengan pasangan ( , (mod ( )), 0 ≤ < − 1, dimaksudkan untuk menentukan polinomial sebanyak yang akan disimpan di memori komputer, yakni { , , , … , }. Untuk membentuk tabel pasangan ( , (mod ( )) dapat digunakan Algoritme Exhaustive Search. Selanjutnya representasi polinomial–polinomial disimpan dalam memori komputer. Penyimpanan polinomial–polinomial ini disebut fase baby-step.
Langkah ketiga Algoritme Baby-Step Giant-Step adalah menentukan nilai dan sedemikian sehingga ≡ (mod ( )), untuk suatu ≥ 1. Caranya adalah dengan membagi dengan representasi polinomial sampai ditemukan yang merupakan salah satu anggota { , , , … , }. Banyak langkah dalam proses pembagian ini adalah . Dalam proses pembagian ini berlaku aturan penjumlahan dan perkalian polinomial dalam (2).
∶ = : = ∶ = ⋮ ( )∶ = ( ) ( )∶ = = (1) Proses menghitung nilai ini disebut fase giant-step.
Jika sudah ditemukan nilai dan , maka selanjutnya dapat ditentukan nilai logaritma diskret . Berdasarkan Definisi Logaritma Diskret :
≡ log mod ( ) ⇔ ≡ mod ( ) (2) Sehingga dari (1) dan (2) diperoleh :
= = = log = log − = = +
Algoritme 3.2.3
Algoritme Baby-Step Giant-Step 2 untuk menentukan masalah logaritma diskret pada (2)∗
Input : generator grup multiplikatif (2)∗ berorder = 2 − 1, ∈ (2)∗, dan ( )polinomial irredusibel atas ℤ berderajad .
Output : logaritma diskret ≡ log (mod ( )) 1) Menetapkan nilai = √
2) Bentuk tabel dengan pasangan ( , mod ( ) ), dimana 0 ≤ ≤ − 1. 3) Hitung , kemudian tetapkan nilai = .
Bentuk tabel dengan pasangan ( , mod ( ) ), ≥ 0, sampai diperoleh nilai dari = .
4) Solusi dari ≡ (mod ( )) adalah ≡ + (mod ).
Dalam Menezes et al. (1997) nilai harapan kompleksitas waktu Algoritme Baby-Step Giant-Step adalah (√2 ). Implementasinya dengan bantuan sofware Maple 11 dapat dilihat pada Lampiran 3.4.
Contoh 4 (Menentukan masalah logaritma diskret pada grup multiplikatif (2)∗dengan Baby-Step Giant-Step 2)
Diketahui : adalah generator grup multiplikatif (2)∗, = + + + + 1 ∈ (2)∗, dan ( ) = + + 1.
Tentukan ≡ log (mod ( )). Penyelesaian :
1) Order dari (2)∗adalah = 2 − 1 = 127
Jadi = √127 = 12. Artinya banyaknya representasi polinomial yang akan disimpan di memori komputer minimal adalah 12, 0 ≤ ≤ − 1, yakni { , , , … , }
2) ( ) = + + 1 polinomial irredusibel atas ℤ , dengan generator (2)∗sehingga :
⟹ ≡ + 1 mod ( )
Representasi polinomial yang akan disimpan di memori komputer dapat dilihat pada Tabel 3.2.2 hal 30.
3) Menentukan nilai , = 0,1,2, … yang memenuhi kongruensi ≡ (mod ( )). Agar mudah menentukan terlebih dahulu tentukan
(mod ( )) dengan menggunakan Algoritme Euclidean yang Diperluas :
Jadi ≡ + + + + + (mod ( )).
Tabel 3.2.4 Hasil Perhitungan ( , : mod ( ) ), ≥ 0untuk (2)∗
dengan = + + + + 1. Representasi Polinomial ≡ : mod ( ) 0 + + + + 1 1 α + α + α + α 2 + + 3 + + + 4 + + 1 5 + 6
Pada saat = 6, diperoleh nilai = = , dengan = 5. 4) Jadi solusi = log mod ( ) = + = 6.7 + 5 = 47.
+ + 1 0
+ + + + + = + 1 1
+ 1 1 + + + + +
3.2.4 Solusi Masalah Logaritma Diskret pada ( )∗ dengan Algoritme
Baby-Step Giant-Step 3
Misalkan adalah sebuah generator grup multiplikatif (2)∗, dengan order (2)∗ adalah , ∈ (2)∗ dan ( ) polinomial irredusibel berderajad atas ℤ . Masalah logaritma diskret adalah menentukan , 0 ≤ ≤ − 1, sedemikian sehingga ≡ log (mod ( )). Untuk menentukan ≡ log (mod ( )) seperti halnya pada Algoritme Step Giant-Step dan Algoritme Step Giant-Step 2, Algoritme Baby-Step Giant-Baby-Step 3 juga harus melewati fase baby-step dan fase giant-step. Ide dasarnya adalah membagi dengan sampai ditemukan ; = 2, 0 ≤ < , 0 ≤ ≤ − 1, integer positif, 0 ≤ < , dengan adalah salah satu anggota himpunan {1, , , … , , … , }.
Langkah pertama menentukan nilai = 2, 0 ≤ < , dimaksudkan untuk menentukan batas minimal banyaknya representasi polinomial , 0 ≤ ≤ − 1. yang akan disimpan di memori komputer.
Langkah kedua adalah membentuk tabel dengan pasangan ( , mod ( ) ), ∀ , dimana 0 ≤ ≤ − 1, dimaksudkan untuk menentukan representasi polinomial yang akan disimpan di memori komputer, yakni { , , , … , }. Sama seperti pada algoritme Baby-Step Giant-Step, untuk membentuk tabel pasangan ( , (mod ( ))) juga dapat digunakan Algoritme Exhaustive Search. Fase ini disebut fase baby-step.
Langkah ketiga Algoritme Baby-Step Giant-Step 3 adalah menentukan nilai , dan sedemikian sehingga ≡ (mod ( )), untuk suatu 0 ≤ < , ≥ 0. Caranya adalah membagi dengan representasi polinomial
sampai ditemukan , dimana merupakan salah satu anggota { , , , … , }. Dalam proses pembagian ini berlaku aturan penjumlahan dan perkalian polinomial dalam (2). Banyak langkah dalam proses pembagian ini adalah .
∶ =
∶ = ⋮
( )∶ = ( )
( )∶ = = (1) Proses menghitung nilai ini disebut fase giant-step.
Jika sudah ditemukan nilai , dan , maka selanjutnya dapat ditentukan nilai logaritma diskret . Berdasarkan Definisi Logaritma Diskret :
≡ log mod ( ) ⇔ ≡ mod ( ) (2) Sehingga dari (1) dan (2) diperoleh :
= = = log = log − = + = + +
Jadi solusi dari ≡ mod ( ) adalah = + + ≡
log mod ( ) . Algoritme 3.2.4
Algoritme Baby-Step Giant-Step 3 untuk menentukan masalah logaritma diskret pada (2)∗
Input : generator grup multiplikatif (2)∗berorder = 2 − 1, ∈ (2)∗, dan ( )polinomial irredusibel atas ℤ berderajad . Output : logaritma diskret ≡ log (mod ( )).
1) Tetapkan nilai = 2, 0 ≤ < .
2) Bentuk tabel dengan pasangan ( , mod ( ) ), ∀ , dimana 0 ≤ ≤ − 1.
3) Mencari nilai , dan , sedemikian sehingga ≡ (mod ( )), untuk suatu 0 ≤ < dan ≥ 0.
Nilai harapan kompleksitas waktu Algoritme Baby-Step Giant-Step 2 adalah (√2 ) (Menezes et al. 1997). Implementasinya dengan bantuan sofware Maple 11 dapat dilihat pada Lampiran 3.5.
Contoh 5 (Menentukan masalah logaritma diskret pada grup siklik = (2)∗ dengan Baby-Step Giant-Step 3)
Diketahui : adalah generator grup multiplikatif (2)∗, = + + + + 1 ∈ (2)∗, dan ( ) = + + 1.
Tentukan ≡ log (mod ( )). Penyelesaian :
( ) = + + 1irredusibel atas ℤ . Ambil = √ = √2− 1 = 12. Jadi banyaknya representasi polinomial yang akan disimpan di memori komputer sebanyak =12 yaitu { , , … , }, generator, maka
( ) = 0 ⟹ + + 1 = 0 ⟹ = + 1
Representasi polinomial yang akan disimpan di memori komputer dapat dilihat pada Tabel 3.2.2 hal 30.
Selanjutnya menentukan nilai dan , yang memenuhi kongruensi ≡ (mod ( )). Agar mudah menentukan dan terlebih dahulu tentukan (mod ( )). Ambil = 3, Sehingga diperoleh = 2 = 8. Untuk menentukan gunakan Algoritme Euclidean yang Diperluas :
Jadi mod ( ) = + + + + + 1
Selanjutnya tentukan terlebih dahulu ≡ ( ) (mod ( )), untuk ≥ 0.
+ + 1 0
+ + + + + 1 = + 1
+ 1 + + + + + 1
Tabel 3.2.5 Hasil Perhitungan ( , : mod ( ) ), ≥ 0untuk (2)∗ dengan = + + + + 1. ( ) ≡ : (mod ( )) 0 = + + + + 1 1 + + + = ( + + + 1) 2 + + 1 3 + + + = ( + + + 1) 4 + = ( + 1) 5 + 1 = =
Pada saat = 5, diperoleh kongruensi :
( ) ≡ + 1 ≡ ≡ (mod ( )); = 8, = 7, dan = 0. Sehingga : ≡ + + (mod )
⟹ ≡ 5 × 8 + 7 + 0 (mod 127) ≡ 47 (mod 127)
Pada contoh ini banyaknya proses pembagian hingga ditemukan ada 6 langkah. Langkah ini lebih banyak jika dibandingkan dengan banyaknya langkah pada contoh 4 yang menggunakan Algoritme Baby-Step Giant-Step. Dari contoh ini terlihat bahwa jika representasi polinomial yang disimpan di memori komputer besar, maka proses pembagian sampai diperoleh representasi polinomial , ∈ {0,1,2,3, … }, akan lebih cepat (banyaknya langkah lebih sedikit), begitu juga sebaliknya.
3.2.5 Solusi Masalah Logaritma Diskret pada ( )∗ dengan Algoritme
Naif Square
Misalkan adalah sebuah generator grup siklik (2)∗, dengan order (2)∗ adalah , ∈ (2)∗ dan ( )polinomial irredusibel berderajad atas ℤ . Masalah logaritma diskret adalah menentukan , 0 ≤ ≤ − 1,
sedemikian sehingga ≡ log (mod ( )). Untuk menentukan ≡ log (mod ( )) seperti halnya pada Algoritme Baby-Step Giant-Step,
Algoritme Baby-Step Giant-Step 2 dan Algoritme Baby-Step Giant-Step 3, Algoritme Naif Square juga harus melewati fase baby-step dan fase giant-step. Ide
dasarnya adalah mengalikan dengan sampai ditemukan , 0 ≤ < √ dalam himpunan 1, , , … , , … , √ .
Langkah pertama menentukan nilai = √ , dimaksudkan untuk menentukan batas minimal banyaknya representasi polinomial , 0 ≤ ≤ − 1. yang akan disimpan di memori komputer.
Langkah kedua adalah membentuk tabel dengan pasangan ( , mod ( ) ), ∀ , dimana 0 ≤ ≤ − 1, dimaksudkan untuk menentukan representasi polinomial yang akan disimpan di memori komputer, yakni { , , , … , }. Sama seperti pada Algoritme Baby-Step Giant-Step, Algoritme Baby-Step Giant-Step 2 dan Baby-Step Giant-Step 3 untuk membentuk tabel pasangan ( , (mod ( ))) pada Algoritme Naif Square juga dapat digunakan Algoritme Exhaustive Search. Fase ini disebut fase baby-step.
Langkah ketiga Algoritme Naif Square adalah menentukan nilai sedemikian sehingga ≡ (mod ( )), untuk suatu ≥ 1. Caranya adalah dengan mengalikan dengan sampai ditemukan yang merupakan salah satu anggota { , , , … , }. Dalam proses perkalian ini berlaku aturan penjumlahan dan perkalian polinomial dalam (2). Banyak langkah dalam proses perkalian ini adalah .
= = = ⋮ = = = (1) Proses menghitung nilai ini disebut fase giant-step.
Jika sudah ditemukan nilai , maka selanjutnya dapat ditentukan nilai logaritma diskret . Berdasarkan Definisi Logaritma Diskret :
≡ log mod ( ) ⇔ ≡ mod ( ) (2) Sehingga dari (1) dan (2) diperoleh :
= ( ) =
( ) = ( ) = ( )
= ×
Jadi solusi dari ≡ mod ( ) adalah = × ≡ log mod ( ) . Menentukan (mod ) caranya dengan menggunakan Algoritme Euclidean yang Diperluas.
Algoritme 3.2.5
Algoritme Naif Square untuk menentukan masalah logaritma diskret pada (2)∗
Input : generator grup multiplikatif (2)∗ berorder = 2 − 1, ∈ (2)∗, dan ( )polinomial irredusibel atas ℤ berderajad . Output : logaritma diskret ≡ log (mod ( ))
1) Bentuk tabel dengan pasangan ( , mod ( ) ), dimana 0 ≤ ≤ − 1.
2) Mencari nilai , sedemikian sehingga ≡ (mod ( )), untuk suatu ≥ 1.
3) Menentukan (mod ).
4) Solusi dari ≡ (mod ( )) adalah ≡ × (mod ).
Dalam Menezes et al. 1997 nilai harapan kompleksitas waktu Algoritme Naif Square adalah (√2 ). Implementasinya dengan bantuan sofware Maple 11 dapat dilihat pada Lampiran 3.6.
Contoh 6 (Menentukan masalah logaritma diskret pada grup siklik = (2)∗ dengan Naif Square)
Diketahui : generator grup multiplikatif (2)∗, = + + + + 1 ∈ (2)∗, dan ( ) = + + 1.
Tentukan ≡ log (mod ( )). Penyelesaian :
Order dari (2)∗ adalah = 2 − 1 = 127. Diketahui ( ) = + + 1, dan generator. Karena pada (2)∗berlaku aturan penjumlahan dan perkalian dalam mod ( ), maka ( ) = 0 ⟹ + + 1 = 0 ⟹ = + 1.
Representasi polinomial yang akan disimpan di memori komputer dapat dilihat pada Tabel 3.2.2 hal 30, dengan ( , (mod ( ))= ( , mod ( ) ).
Selanjutnya menentukan .
Tabel 3.2.6 Hasil Perhitungan( , mod ( ) ), ≥ 0untuk (2)∗dengan = + + + + 1. Representasi polinomial ≡ (mod ( )) 1 + + + + 1 2 + + + 1 3 + 1 4 + + + 1 5 + + 1 6 + 1 7 + + + 8 + + + + + 1 9 + + + 1 10 + + + 1 11 +
Jadi ≡ mod ( ) diperoleh pada saat = 9 dan = 11. Sehingga : = × (mod 127)
= 9 × 11 (mod 127) = 9 × 104 (mod 127) = 47.
Pada algoritme ini, banyaknya langkah perhitungan yang diperlukan untuk memperoleh relatif besar jika dibandingkan dengan banyaknya langkah pada Algoritme Baby-Step Step, Baby-Step Step 2 dan Baby-Step Giant-Step 3. Kelebihannya adalah Naif Square tidak serumit Baby-Giant-Step Giant-Giant-Step,
Baby-Step Giant-Step 2 dan Baby-Step Giant-Step 3, karena hanya memerlukan invers integer tidak memerlukan invers himpunan.
Kelemahan Algoritme Baby-Step Giant-Step, Baby-Step Giant-Step 2, Baby-Step Giant-Step 3 dan Naif Square adalah memerlukan banyak memori ketika grup berorder besar. Metode Pollard’s rho menyederhanakannya dengan algoritme probabilistik dengan perkiraan kompleksitas waktu yang sama tetapi memerlukan memori penyimpanan yang lebih sedikit.
3.2.6 Solusi Masalah Logaritma Diskret pada ( )∗ dengan Algoritme
Pollard’s rho
Algoritme Pollard’s rho adalah algoritme untuk memecahkan masalah logaritma diskret dan masalah faktorisasi integer, ditemukan oleh John Pollard pada tahun 1975. Efektif digunakan untuk pemfaktoran bilangan komposit dengan faktor kecil. Algoritme ini didasarkan pada Algoritme Floyd’s Cycle-Finding dan pada pengamatan bahwa (seperti pada Birthday Paradox Problem) dua bilangan dan adalah kongruen modulo dengan peluang 0,5 setelah langkah ke √ √2 ln 2.
Agar lebih mudah untuk memahami Algoritme Pollard’s rho, terlebih dahulu akan kita kaji tentang Algoritme Floyd’s Cycle-Finding dan Birthday Paradox.
Floyd’s Cycle-Finding
Algoritme Floyd’s Cycle-Finding ditemukan oleh Robert W. Floyd pada tahun 1967. Algoritme Floyd’s Cycle-Finding digunakan untuk menemukan cycle dalam barisan { , , , … , } dengan membandingkan elemen-elemen sampai sehingga pasangan = ditemukan.
Lemma 2.4.8 menjelaskan hubungan antara Algoritme Floyd’s Cycle-Finding dengan Algoritme Pollard’s rho. Lemma tersebut menunjukkan bahwa dalam barisan bilangan yang dibangkitkan oleh sebuah fungsi yang memetakan sebuah himpunan hingga ke himpunan hingga menjamin adanya satu atau lebih bilangan yang sama. Dalam barisan bilangan yang dibangkitkan tersebut terjadi pengulangan modulo.
Floyd’s Cycle Finding digunakan untuk menemukan dan sedemikian sehingga ≡ (mod ).
Birthday Paradox
Diasumsikan bahwa dalam 1 tahun terdiri dari 365 hari. Berapa banyak orang yang harus ada sehingga peluang 2 orang memiliki hari ulang tahun yang sama adalah ? Pertanyaan tersebut menjadi dasar dari Birthday Paradox.
Kunci untuk memahami permasalahan ini adalah dengan berpikir bahwa peluang tidak ada 2 orang yang memiliki ulang tahun yang sama adalah peluang bahwa orang ke-1 akan memiliki ulang tahun yang berbeda dengan orang ke-2 dan akan berbeda dengan orang ke-3 dan seterusnya. Semakin banyak orang yang dilibatkan, maka peluang tidak adanya 2 orang dengan tanggal ulang tahun yang sama akan semakin kecil.
Untuk menghitung peluang ini, kita abaikan variasi tahun kabisat, terdapat orang kembar, dan asumsi bahwa 365 tanggal akan memiliki kemungkinan yang sama.
Misalkan banyaknya hari dalam satu tahun adalah = 365hari. Pertama akan dihitung peluang ( )∗ yaitu peluang orang tidak akan memiliki tanggal ulang tahun yang sama.
( )∗ = 1 1 − 1 365 1 − 2 365 … 1 − − 1 365 =365.364.363 … (365 −365 + 1) =(365 − )! 365 365!
Orang ke-2 memiliki tanggal ulang tahun yang berbeda dengan orang ke-1 dengan peluang kejadian , orang ke-3 harus memiliki tanggal ulang tahun yang berbeda dengan 2 orang pertama dengan peluang kejadian , dan seterusnya.
Peluang setidaknya 2 orang dari kelompok tersebut memiliki tanggal ulang tahun yang sama adalah komplemen dari peluang tanggal ulang tahun semua orang akan berbeda, yaitu :
Misalkan ( , )adalah peluang bahwa dari banyaknya orang akan menghasilkan sedikitnya 2 tanggal hari ulang tahun yang sama. Dapat dilihat bahwa (365, 1) = 1 −365365 = 0 (365, 2) = 1 −365365 .364365 = 1 −364365 ( , 2) = 1 − .( − 1) = 1 −( − 1) ( , 3) = 1 − .( − 1).( − 2)= 1 −( − 1).( − 2) ( , ) = 1 − .( − 1)…( − + 1) ( ) = 1 − ( )∗= 1 − 365! (365 − )! 365
Dengan menggunakan rumus di atas ternyata nilai ( )akan melebihi 50% ketika = 23, perhitungannya dapat dilihat di tabel berikut :
Tabel 3.2.7 Hasil Perhitungan Birthday Paradox ( ) 10 0.1169 20 0.4114 23 0.5073 30 0.7063 40 0.8912 50 0.9704 60 0.9941 70 0.9992 80 0.9999 90 0.9999 100 1.0000 150 1.0000
Jadi dalam teori probabilitas, birthday paradox menyatakan bahwa dari suatu kelompok dengan anggota 23 orang yang dipilih secara acak, maka peluang setidaknya ada 2 orang yang memiliki tanggal ulang tahun yang sama adalah lebih dari 50%. Semakin besar semakin meningkat tajam peluang yang diperolehnya. Pada percobaan orang yang ke-100 saja peluangnya sudah mencapai 1. Padahal secara umum peluang percobaan untuk menghasilkan sedikitnya 2 tanggal hari ulang tahun yang sama dijamin akan bernilai satu ketika banyaknya percobaan tersebut sama atau lebih besar dari input yang ada. Dalam kasus ini besarnya input adalah 365. Karena peluang ini lebih besar dari yang diperkirakan oleh sebagian besar orang maka disebut sebagai paradox. Hal inilah yang menjadi motivasi dari Birthday Paradox.
Dari uraian di atas dapat disimpulkan bahwa Birthday Paradox digunakan untuk menjamin bahwa mulai adanya satu atau lebih bilangan yang sama dalam barisan bilangan sedikitnya setelah langkah ke-√ √2 ln 2 dengan peluang lebih dari setengah.
Berikut analisis Algoritme Pollard’s rho untuk (2)∗yang dieksplorasi dari Algoritme Pollard’s rho untuk grup siklik umum.
Misalkan (2)∗ adalah grup multiplikatif dibawah operasi perkalian berorder = 2 − 1, generator (2)∗, ∈ (2)∗, dan ( )polinomial irredusibel berderajad atas ℤ . Ide dari Algoritme Pollard’s rho untuk menentukan masalah logaritma diskret ≡ log (mod ( )) adalah menemukan = pada barisan { } untuk ≥ 0.
Langkah pertama adalah mempartisi grup multiplikatif (2)∗ menjadi 3 partisi (subset) yang kira-kira berukuran sama, (2)∗= ∪ ∪ . Berikut contoh pendefinisian keanggotaan himpunan , = 1,2,3. Misal adalah himpunan semua polinomial derajadnya kelipatan 3 sisa 1, adalah himpunan semua polinomial derajadnya kelipatan 3 sisa 2, adalah himpunan semua polinomial derajadnya kelipatan 3 sisa 0. Pendefinisian keanggotaan yang tepat penting untuk menghindari ketidakmerataan pendistribusian anggota (2)∗ke dalam subset-subsetnya. Karena jika pendistribusiannya tidak merata akan mengakibat hasil komputasi logaritma diskret yang diperoleh salah, atau bahkan yang lebih parah tidak akan ditemukan = pada barisan { }. Selain
contoh tersebut masih ada 5 kemungkinan kombinasi pendefinisian yang bisa digunakan. Lebih jelas bisa dilihat di tabel berikut :
Tabel 3.2.8 Beberapa Kemungkinan Pendefinisian Keanggotaan Himpunan ⊆ (2)∗, = 1,2,3untuk Algoritme Pollard’s rho
No
Sisa dari derajad polinomial kelipatan tiga untuk
1 1 2 0 2 1 0 2 3 2 1 0 4 2 0 1 5 0 1 2 6 0 2 1
Selanjutnya berdasarkan Algoritme Floyd’s Cycle-Finding, kita bangkitkan barisan , , … secara acak dengan iterasi menggunakan fungsi (dengan : (2)∗→ (2)∗ sampai ditemukan = . Karena (2)∗ berhingga, maka barisan { } akhirnya menjadi periodik membentuk siklus, yakni ada index terkecil sehingga = untuk beberapa ≥ 1, kemudian =
untuk semua ≥ + (seperti pada gambar berikut) (Hankerson 2004).
disebut tail length dan disebut cycle length dari barisan.
Kita definisikan fungsi : (2)∗× ℤ × ℤ → (2)∗× ℤ × ℤ sebagai berikut :
( , , ) =
( , , + 1) jika ∈ ( , 2 , 2 ) jika ∈ ( , + 1, ) jika ∈ dengan integer.
Selanjutnya, setiap tripel ( , , ) harus memenuhi bentuk = . Dimulai dengan mendefinisikan tripel awal, yakni untuk = 0,(0, 0, 0), maka
( , , ) = (0, 0, 0) jika = 0(( , , ) jika ≥ 1
Bandingkan tripel ( , , ) dan ( , , ) sampai ditemukan suatu nilai ≥ 1sedemikian sehingga = . Jika sudah ditemukan = , maka :
= (∗) Diketahui = log , artinya = , maka persamaan (∗) menjadi
( ) = ( )
= (∗∗) Karena berorder , maka dari (∗∗)
+ = + (mod )
( − ) = − (mod )
Jika gcd( − , ) = 1, maka ( − ) mempunyai invers, sehingga diperoleh solusi sebagai berikut :
=( − )( − ) (mod )
Algoritme 3.2.6
Algoritme Pollard’s rho untuk menentukan masalah logaritma diskret pada (2)∗
Input : generator grup multiplikatif (2)∗, ≥ 1, (2)∗ berorder = 2 − 1, ∈ = (2)∗, ( )polinomial irredusibel atas ℤ berderajad .
Output : logaritma diskret ≡ log (mod ( ))
1) Bagi grup multiplikatif (2)∗ menjadi 3 partisi himpunan yaitu , dan .
2) Bentuk barisan , , , …, barisan , , , …, dan barisan , , , … dengan iterasi menggunakan fungsi yang didefinisikan :
( , , ) = ( , , + 1) jika ∈ ( , 2 , 2 ) jika ∈ ( , + 1, ) jika ∈ 3) Untuk = 0, definisikan = 1, = 0, = 0. ( , , ) = (0, 0, 0) jika = 0( , , ) jika ≥ 1
4) Bandingkan nilai dari ( , , ) dan ( , , ) sedemikian sehingga diperoleh = atau ( ) = ( ) .
5) Kemudian dengan aturan perkalian dan aturan logaritma dengan basis , persamaan di atas menjadi = ( ) sehingga diperoleh
( − ) log =( − )(mod ).
6) Jika = − (mod ) maka persamaan menjadi r log β = ( − ) (mod ) sehingga didapatkan log = ( − )(mod )dan solusi logaritma diskret adalah :
= log = ( − )(mod )
Dalam Menezes et al. (1997) nilai harapan kompleksitas waktu Algoritme Pollard’s rho ini adalah (√2 ). Implementasinya dengan bantuan sofware Maple 11 dapat dilihat pada Lampiran 3.7.
Contoh 7 (Menentukan masalah logaritma diskret pada grup multiplikatif (2)∗dengan Pollard’s rho)
Diketahui : generator grup multiplikatif (2)∗, = + + ∈ (2)∗, dan ( ) = + + 1
Tentukan ≡ log (mod ( )). Penyelesaian :
(2)∗dipartisi menjadi 3 himpunan yaitu , , dan ; = himpunan semua polinomial derajadnya kelipatan tiga sisa 1. = himpunan semua polinomial derajadnya kelipatan tiga sisa 2. = himpunan semua polinomial derajadnya kelipatan tiga sisa 0. Misalkan ambil = 1, sehingga = .
= ( ) ≝ . (mod ( )), (mod ( )), jika ∈jika ∈
. (mod ( )) , jika ∈ , untuk ≥ 0 = 2 mod , jika ∈ , jika ∈
+ 1 mod , jika ∈ = 2 mod , jika ∈+ 1 mod , jika ∈
, jika ∈ yang memenuhi persamaan = , dimana ≥ 0.
Nilai-nilai untuk , , , , , , dengan = 1, = = 0 dapat dilihat pada tabel berikut.
Tabel 3.2.9 Hasil Perhitungan , , , , , , pada (2)∗ dengan
= + + dan = . 1 1 0 + + + 1 1 1 2 + + + 1 1 1 + + 2 2 3 + + 1 1 2 + + + 1 2 4 4 + + 2 2 + 3 5 5 + 1 2 3 + 4 6 6 + + + 1 2 4 5 7 7 + + + 3 4 + + 1 6 8 8 + 3 5 + + 6 10 9 + 4 5 + + + 1 7 11 10 + 4 6 + + 8 12 11 + 5 6 8 14 12 5 7 + 8 16 13 6 7 + + 9 17 14 + + 1 6 8 + + 1 9 19 15 + 6 9 + + 1 10 20 16 + + 6 10 + + 1 10 22 17 + + 7 10 + + 10 24 18 + + + 1 7 11 + + + 1 11 25
Diperoleh :
= = + + + 1,
= ( − ) (mod 31) = (11 − 25) mod 31 = 17, = 17 mod 31 = 11,
= ( − ) mod 31 = 1(11)(11 − 7) mod 31 = 13. Jadi = log (mod ( ))= 13.
Contoh 8
Diketahui : generator grup multiplikatif (2)∗, dan
= + + ∈ (2)∗, ( ) = + + 1.
Tentukan ≡ log (mod ( )). Penyelesaian :
Cara penyelesaiannya sama seperti pada Contoh 7, tetapi dengan mengambil = 5, sehingga = = + 1.
Tabel 3.2.10 Hasil Perhitungan , , , , , , pada (2)∗dengan = + + dan = = + 1. 1 + 1 1 0 + 1 2 0 2 + 1 2 0 + + 3 1 3 + + + 1 2 1 + + + 1 3 3 = = + + + 1, = ( − ) mod 31= (1 − 3) mod 31= 29, = 29 mod 31 = 15, = ( − ) mod 31 = 5(15)(3 − 2) mod 31 = 13. Jadi = log (mod ( )) = 13.
Contoh 9
Diketahui : generator grup multiplikatif (2)∗, = + + ∈ (2)∗, dan ( ) = + + 1.
Penyelesaian :
Cara penyelesaiannya sama seperti pada Contoh 7 dan 8, tetapi dengan mengambil = 15, sehingga = = + + + + 1.
Tabel 3.2.11 Hasil Perhitungan , , , , , , pada (2)∗dengan = + + dan = = + + + + 1. 1 + + + + 1 1 0 + + 1 1 2 + + 1 1 + + + 1 1 3 3 + 1 1 2 + 2 4 4 + + + 1 1 3 + + 1 3 5 5 + 2 3 + + 3 7 6 + 2 4 + + 1 5 7 7 3 4 10 15 = = 4, = ( − ) mod 31= (4 − 15) mod 31= 20, = 20 mod 31 = 14, = ( − ) mod 31 = 15(14)(10 − 3) mod 31 = 13. Contoh 10
Diketahui : generator grup multiplikatif (2)∗, = + ∈ (2)∗, dan
( ) = + + 1. Tentukan ≡ log (mod ( )). Penyelesaian :
Sama seperti pada Contoh 7 (2)∗ dipartisi menjadi 3 himpunan yaitu , , dan ;
= himpunan semua polinomial derajadnya kelipatan tiga sisa 1. = himpunan semua polinomial derajadnya kelipatan tiga sisa 2. = himpunan semua polinomial derajadnya kelipatan tiga sisa 0. Misalkan ambil = 4, sehingga = = + 1.
Didefinisikan :
= ( ) ≝ . ,, jika ∈jika ∈
. , jika ∈ , untuk ≥ 0 = 2 mod n, jika x ∈ S , jika x ∈ S
+ 1 mod n, jika x ∈ S dan
= 2 mod , jika ∈+ 1 mod , jika ∈ , jika ∈
yang memenuhi persamaan = ( ) , dimana ≥ 0.
Nilai-nilai untuk , , , , , , dengan = 1, = = 0 dapat dilihat pada tabel berikut.
Tabel 3.2.12 Hasil Perhitungan , , , , , , pada (2)∗dengan = + dan = = + 1. i 1 + 1 1 0 + + 1 1 1 2 + + 1 1 1 + 1 4 2 3 2 1 5 3 Diperoleh : = = , = − (mod 15) = 1 − 3 (mod 15) = 13, = 13 (mod 15) = 7, = ( − )mod 15 = 4(7)(5 − 2)mod 15 = 9. Jadi = log (mod ( )) = 9.
Contoh 11
Diketahui : generator grup multiplikatif (2)∗, = + ∈ (2)∗, dan
( ) = + + 1. Tentukan ≡ log (mod ( )).
Misalkan ambil = 7, sehingga = = + + 1.
Tabel 3.2.13 Hasil Perhitungan , , , , , , pada (2)∗dengan = + dan = = + + 1. i 1 + + 1 1 0 + 1 2 0 2 + 1 2 0 + + 1 4 0 3 + 3 0 + + 1 10 0 4 + + 1 4 0 + + 1 10 0 5 + 5 0 + + 1 10 0 6 + + 1 10 0 + + 1 10 0 = = + + 1, = − (mod 15) = 0 − 0 (mod 15) = 0,
Karena = 0, maka tidak mempunyai invers modulo. Sehingga dalam kasus ini tidak bisa ditentukan yang benar.
Contoh 12
Diketahui : generator grup multiplikatif (2)∗,
= + ∈ (2)∗, dan ( ) = + + 1. Tentukan ≡ log (mod ( )).
Penyelesaian :
Cara penyelesaiannya sama seperti pada Contoh 11 dan 12. Misalkan ambil = 1, sehingga = .
Tabel 3.2.14 Hasil Perhitungan , , , , , , pada (2)∗dengan = + dan = . i 1 1 0 + + 1 1 1 2 + + 1 1 1 + + 1 4 4 = = + + 1, = − (mod 15) = 1 − 4 (mod 15) = 12.
Karena gcd (12,15) ≠ 1, maka tidak mempunyai invers modulo. Sehingga dalam kasus ini tidak bisa ditentukan yang benar.
Dari Contoh 10, 11 dan 12, terlihat bahwa penentuan ( adalah pangkat dari generator ) akan sangat berpengaruh pada keberhasilan untuk menentukan logaritma diskret yang benar. Tetapi jika kita lihat Contoh 7, 8, dan 9, pengambilan yang berbeda tidak mempengaruhi keberhasilan dalam menentukan logaritma diskret . Ini sebenarnya berhubungan dengan order grup siklik (2)∗ ; = 2 − 1. Jika (2)∗ berorder prima, maka walaupun dengan berbeda tetap akan diperoleh hasil yang tepat, dan sebaliknya jika
(2)∗berorder komposit maka memilih harus berhati-hati agar ditemukan yang benar. Berikut beberapa kemungkinan yang dapat terjadi akibat dari ketidaktepatan pemilihan generator pada grup (2)∗berorder komposit.
1) = 0. Jika = 0, maka tidak mempunyai invers modulo. Sehingga tidak bisa ditentukan logaritma diskret yang benar.
2) gcd ( , ) ≠ 1; adalah order grup (2)∗. Jika gcd ( , ) ≠ 1, maka tidak mempunyai invers modulo. Sehingga tidak bisa ditentukan logaritma diskret yang benar atau logaritma diskret yang diperoleh tidak tepat.
Selain pemilihan pangkat generator ( ), hal penting yang juga harus diperhatikan dalam Algoritme Pollard’s rho ini adalah cara mempartisi grup siklik (2)∗ menjadi 3 himpunan bagian. Pembagian grup harus seacak mungkin, agar pendistribusian anggota tidak menumpuk pada satu himpunan bagian, karena akan berpengaruh untuk keberhasilan penentuan logaritma diskret yang tepat. Perhatikan bahwa himpunan bagian ini tidak harus subgrup dari grup multiplikatif (2)∗.
3.2.7 Solusi Masalah Logaritma Diskret pada ( )∗dengan Algoritme
Pohlig-Hellman
Algoritme Pohlig-Hellman adalah sebuah algoritme yang digunakan untuk mengkomputasi logaritma diskret dalam sebuah kelompok multiplikatif yang pangkatnya bukan merupakan bilangan prima yang aman. Algoritme ini didasari oleh Teorema Sisa Cina.
Berikut analisis Algoritme Pohlig-Hellman untuk (2)∗ yang dieksplorasi dari Algoritme Pohlig-Hellman untuk grup siklik umum.
Misalkan (2)∗ adalah grup siklik dibawah operasi perkalian berorder = 2 − 1. generator (2)∗, ∈ (2)∗, dan ( ) polinomial irredusibel berderajad atas ℤ .
Berdasarkan Teorema Dasar Aritmetika, dapat difaktorkan atas kuasa prima :
= (1) dimana adalah bilangan prima berbeda dan ≥ 1.
Ide dari Algoritme Pohlig Hellman untuk menentukan masalah logaritma diskret ≡ log (mod ( )) adalah menemukan mod , dengan terlebih dahulu menentukan mod , untuk setiap , 1 ≤ ≤ , menggunakan Teorema Sisa Cina. Artinya komputasi dilakukan pada subgrup berorder prima berpangkat integer positif ( ).
Perhatikan masalah logaritma diskret pada grup (2) berikut : ≡ mod ( ) .
adalah solusi dari masalah tersebut, sehingga menurut Definisi Masalah Logaritma Diskret y dinyatakan dalam modulo , dinotasikan y mod .
mod = mod (2)
Karena adalah bilangan prima berbeda, maka berdasarkan Teorema Sisa Cina diperoleh sistem kongruensi berikut :
= mod (3) untuk setiap , 1 ≤ ≤ .
Selanjutnya untuk menentukan nilai , maka terlebih dahulu ditentukan nilai . Misal = dan = , maka (3) menjadi :
= mod (4) dimana 0 ≤ ≤ − 1.
= (5) dimana 0 ≤ ≤ − 1, untuk 0 ≤ ≤ − 1.
Perhatikan persamaan (4), juga dapat diekspresikan sebagai = + , untuk beberapa integer . Sehingga diperoleh :
= +
Selanjutnya menghitung . Nilai diperoleh dari :
= mod ( ) (6) dengan menggunakan Algoritme Exhaustive Search atau Baby-Step Giant-Step. Bukti persamaan (6) : ≡ mod ( ) ⟺ = ( ) mod ( ) = ⋯ (mod ( )) = . ⋯ (mod ( )) = . ( ) ⋯ (mod ( )) = . 1 ⋯ (mod ( )) = mod ( ) ∎
Adalah mudah untuk menghitung dengan menggunakan persamaan (6). Jika = 1, maka diperoleh = . Jika > 1, setelah nilai diketahui, maka langkah selanjutnya adalah menentukan , , … , dan kemudian hitung dengan menggunakan persamaan (5).
Cara untuk menentukan , , … , sama seperti menentukan . Tetapkan = dan definisikan
= ⋯
untuk 1 ≤ ≤ − 1. Kemudian untuk menghitung , , … , gunakan perumuman persamaan (6) berikut :
= mod ( ) (7) Bukti persamaan (7) : = ⋯ mod ( ) = ⋯ mod ( ) = ⋯ mod ( ) = ⋯ ⋯ ⋯ (mod ( )) = ⋯ mod ( ) = . ⋯ (mod ( ) = . ⋯ mod ( ) = ( ) ⋯ mod ( ) = (1) ⋯ mod ( ) = mod ( ) ∎
Perhatikan bahwa dapat dihitung dari , dengan diketahui :
= (8) Oleh karena itu, , , , , … , , dapat dihitung secara bergantian dengan menggunakan (6) dan (8).
Setelah semua nilai diketahui, maka diperoleh kongruensi ≡ (mod ), 1 ≤ ≤ . Selanjutnya dengan menggunakan Algoritme
Gauss diperoleh ≡ log (mod ( )). Algoritme 3.2.7
Algoritme Pohlig Hellman untuk menentukan masalah logaritma diskret pada (2)∗
Input : generator grup siklik (2)∗ berorder = 2 − 1, ∈ (2)∗), dan ( )polinomial irredusibel berderajad atas ℤ .
Output : logaritma diskret ≡ log (mod ( ))
1. Cari faktorisasi prima dari , yaitu = … , dimana ≥ 1, 1 ≤ ≤ .
2. Untuk setiap , 1 ≤ ≤ , tentukan nilai dengan = + + + ⋯ + . Untuk menentukan nilai maka
terlebih dahulu tentukan koefisien , , … , dengan langkah-langkah berikut:
2.1 Masukkan nilai = dan = .
2.2 Menentukan = (mod ( )), untuk 0 ≤ ≤ − 1. 2.3 Definisikan = .
2.4 Untuk setiap , 0 ≤ ≤ − 1, hitung nilai = (mod ( )). Kemudian tentukan nilai sedemikian sehingga = . Sehingga diperoleh = . Selanjutnya definisikan
≡ (mod ( ))
2.5 Untuk setiap , 1 ≤ ≤ , hitung ; = + + + ⋯ + .
3. Gunakan Algoritme Gauss untuk menghitung integer sehingga ≡ (mod ) dimana 1 ≤ ≤ dan 0 ≤ ≤ − 1.
4. Ambil sebagai hasil.
Dalam Menezes et al. (1997) nilai harapan kompleksitas waktu Algoritme Pohlig Hellman adalah (∑ (log 2 + ). Implementasinya dengan bantuan sofware Maple 11 dapat dilihat pada Lampiran 3.8.
Contoh 13 (Menentukan masalah logaritma diskret pada grup multiplikatif (2 )∗dengan Pohlig-Hellman)
Diketahui : generator grup multiplikatif (2 )∗, = + + + + 1 ∈ (2 )∗, dan
( ) = + + + + 1.
Penyelesaian :
Grup (2 )∗berorder , dengan = 2 − 1 = 4095 = 3 . 5.7.13
Selanjutnya akan ditentukan dimana ≡ (mod 9), ≡ (mod 5), ≡ (mod 7) dan ≡ (mod 13). Sebelumnya harus ditentukan terlebih
dahulu = + + + ⋯ + ; 1 ≤ ≤ 4. Definisikan = = + + + + 1. Untuk = 1, = 3, dan = 2 ≡ (mod ( )). 0 ≤ ≤ − 1 = 1. = 0 ≡ ≡ 1 (mod ( )). = ⇒ ≡ 1 (mod ( )).
Dengan menggunakan Algoritme Exhaustive Search diperoleh : = = 0 , dan ≡ (mod ( )) ≡ .
= 1
≡ ≡ + + + + (mod ( )).
= ⇒ ≡ + + + + (mod ( )).
Dengan menggunakan Algoritme Exhaustive Search diperoleh :
= = 1
Jadi : = + = 0 + 1.3 = 3
dan ≡ 3(mod 9) (i) Untuk = 2 = 5, dan = 1 ≡ (mod ( )). 0 ≤ ≤ − 1 = 0, berarti = 0. = 0 ≡ ≡ + + + + + + (mod ( )).
= ⇒ ≡ + + + + + + (mod ( )).
Dengan menggunakan Algoritme Exhaustive Search diperoleh :
= = 1
Jadi : = = 1
dan ≡ 1(mod 5) (ii) Untuk = 3 = 7, dan = 1 ≡ (mod ( )). 0 ≤ ≤ − 1 = 0, berarti = 0. ≡ ≡ + + + + + + + + + (mod ( )). = ⇒ ≡ + + + + + + + + + (mod ( ))
Dengan menggunakan Algoritme Exhaustive Search diperoleh :
= = 6
Jadi : = = 6
dan ≡ 6(mod 7) (iii) Untuk = 4 = 13, dan = 1 ≡ (mod ( )). 0 ≤ ≤ − 1 = 0, berarti = 0. ≡ ≡ + + + + (mod ( )). = ⇒ ≡ + + + + (mod ( )).
Dengan menggunakan Algoritme Exhaustive Search diperoleh :
= = 7
Jadi : = = 7
Dari (i), (ii), (iii) dan (iv) diperoleh sistem kongruensi: ≡ 3(mod 9)
≡ 1(mod 5) ≡ 6(mod 7) ≡ 7(mod 13)
Selanjutnya menyelesaikan sistem kongruensi di atas dengan menggunakan Teorema Sisa Cina dan Algoritme Gauss.
= 3, = 1, = 6, = 7. = 9, = 5, = 7, = 13 = = 455, = = 819, = = 585, = = 315. 455 ≡ 1(mod 9), maka = 2 819 ≡ 1(mod 5), maka = 4 585 ≡ 1(mod 7), maka = 2 315 ≡ 1(mod 13), maka = 9 ≡ + + + (mod 4095) ≡ 3.2.455 + 1.4.819 + 6.2.585 + 7.9.315 (mod 4095) ≡ 111 (mod 4095)
Jadi = log (mod ( )) = 111.
Contoh 14 (Menentukan masalah logaritma diskret pada grup siklik = (2)∗dengan Pohlig Hellman)
Diketahui : generator grup multiplikatif (2 )∗, = + + ∈ (2)∗, dan
( ) = + + 1.
Tentukan = log (mod ( )). Penyelesaian :
Grup berorder , dengan = 2 − 1 = 262143 = 3 . 7.19.73
Selanjutnya akan ditentukan dimana ≡ (mod 27), ≡ (mod 7), ≡ (mod 19) dan ≡ (mod 73). Sebelumnya harus ditentukan terlebih
dahulu = + + + ⋯ + ; 1 ≤ ≤ 4.
Definisikan = = + + . Untuk = 1,
= 3, dan = 3 ≡ (mod ( )). 0 ≤ ≤ − 1 = 2. = 0 ≡ ≡ 1 (mod ( )). = ⇒ ≡ 1 (mod ( )).
Diperoleh = = 0 , dan ≡ (mod ( )) ≡ .
= 1
≡ ≡ + + + + + + + + +
+ + + 1 (mod ( )).
= ⇒ ≡ + + + + + + +
+ + + + + 1 (mod ( )). Jadi diperoleh = = 1, dan ≡ (mod ( )) ≡ + . = 2 ≡ ≡ 1 (mod ( )). = ⇒ ≡ 1 (mod ( )) Diperoleh = = 0. Jadi : = + + = 0 + 1.3 + 0. 3 = 3
dan ≡ 3(mod 27) (i) Untuk = 2 = 7, dan = 1 ≡ (mod ( )). 0 ≤ ≤ − 1 = 0, berarti = 0. = 0 ≡ ≡ + + + + + (mod ( )). = ⇒ ≡ + + + + + (mod ( )).
Diperoleh = = 2. Jadi : = = 2
dan ≡ 2(mod 7) (ii) Untuk = 3 = 19, dan = 1 ≡ (mod ( )). 0 ≤ ≤ − 1 = 0, berarti = 0. ≡ ≡ + + + + + + + + + + 1 (mod ( )). = ⇒ ≡ + + + + + + + + + + 1 (mod ( )) Diperoleh = = 11. Jadi : = = 11
dan ≡ 11(mod 19) (iii) Untuk = 4 = 73, dan = 1 ≡ (mod ( )). 0 ≤ ≤ − 1 = 0, berarti = 0. ≡ ≡ + + + + + + + + + + + (mod ( )). = ⇒ ≡ + + + + + + + + + + + (mod ( )). Diperoleh = = 30. Jadi : = = 30
dan ≡ 30(mod 73) (iv) Dari (i), (ii), (iii) dan (iv) diperoleh sistem kongruensi:
≡ 3(mod 27) ≡ 2(mod 7)
≡ 11(mod 19) ≡ 30(mod 73)
Selanjutnya menyelesaikan sistem kongruensi di atas dengan menggunakan Teorema Sisa Cina dan Algoritme Gauss.
= 3, = 2, = 11, = 30. = 27, = 7, = 19, = 73 = = 9709, = = 37449, = = 13797, = = 3591. 9709 ≡ 1(mod 27), maka = 22 37449 ≡ 1(mod 7), maka = 6 13797 ≡ 1(mod 19), maka = 13 9709 ≡ 1(mod 73), maka = 47 ≡ + + + (mod 262143) ≡ 3.22.9709 + 2.6.37449 + 11.13.13797 + 30.47.3591 (mod 262143) ≡ 30 (mod 262143)
Jadi = log (mod ( )) = 30.
Contoh 15 (Menentukan masalah logaritma diskret pada grup multiplikatif (2)∗dengan Pohlig Hellman)
Diketahui : generator grup multiplikatif (2)∗,
= + + 1 ∈ (2)∗, dan ( ) = + + 1. Tentukan = log (mod ( )).
Penyelesaian :
Grup (2)∗berorder , dengan = 2 − 1 = 7
Selanjutnya akan ditentukan dimana ≡ (mod 7). Sebelumnya harus ditentukan terlebih dahulu = + + + ⋯ + .
Definisikan = = + + 1. Untuk = 1,
= 7, dan = 1 ≡ (mod ( )). = 0: