Dalam aritmetika OEF, hal yang paling penting adalah penentuan parameter yang digunakan, yaitu n, c, m dan . Hankerson et al. (2004) dan Cohen et al. (2006) menyebutkan bahwa keamanan kunci kriptografi kurva elips 160 bit setara dengan kunci RSA konvensional 1024 bit. Oleh karena itu, dilakukan pemilihan parameter sehingga nm mendekati 160.
Pada tahap ini, dilakukan analisis mencakup penentuan nilai parameter n, c, m dan yang akan dipakai. Kemudian, akan ditentukan cara merepresentasikan OEF tersebut.
Implementasi
Tahap ini mencakup implementasi operasi-operasi aritmetika dalam OEF. Operasi-operasi-operasi yang diimplementasikan adalah penjumlahan, pengurangan, perkalian, kuadrat, reduksi, pemangkatan dan invers pada aritmetika OEF menggunakan bahasa pemrograman C.
Lingkungan Pengembangan
Sistem dibangun dan diuji dengan menggunakan hardware dan software dengan spesifikasi tertentu. Hardware yang digunakan berupa netbook dengan spesifikasi:
1. Prosesor Intel Atom N450 1,66 GHz 2. RAM 1 GB
Software yang digunakan yaitu: 1. Sistem Operasi Windows 7 2. Bloodshed Dev-C++ 4.9.9.2 3. Notepad++
4. Winmerge Pengujian
Pengujian pada penelitian ini dilakukan dengan metode black box. Pengujian dilakukan dengan membandingkan output yang dihasilkan dengan output yang seharusnya. Karena setelah dicari, belum ditemukan software yang melakukan perhitungan serupa, output yang benar dicari secara hitung manual. Selain itu, dari pengujian ini akan dihitung kecepatan eksekusi dari masing-masing operasi. Operasi-operasi yang akan diuji adalah penjumlahan, pengurangan, perkalian, kuadrat, reduksi, pemangkatan dan invers.
HASIL DAN PEMBAHASAN Analisis
Dalam implementasi OEF, hal pertama yang harus dilakukan adalah menentukan parameter
n, c, m dan yang akan digunakan. Pada penelitian ini, konfigurasi p yang digunakan adalah p = 2n – c dengan n, c > 0. OEF yang akan diimplementasikan adalah dengan panjang 8 bit dan 16 bit sehingga yang dicari adalah nilai n dan c yang membentuk p < 28 dan p < 216.
Untuk pemilihan m, syaratnya adalah membentuk polinomial tak teruraikan xm – . m
dapat dibentuk dari faktor-faktor (p-1). Selain itu, syarat yang lain adalah m jika dikalikan dengan n hasilnya mendekati 160. Nilai 160 dipilih karena jika menggunakan nilai tersebut, tingkat keamanan sistem kriptografi kurva elips yang dihasilkan dapat setara dengan 1024 bit. Untuk pemilihan , dipilih yang merupakan elemen primitif (primitive root modulo p) dalam
.
Dalam penelitian ini, parameter yang digunakan untuk OEF 8 bit adalah
n = 7, c = 1, m = 21, = 3 Tipe I, nm = 147
n = 6, c = 3, m = 30, = 2 Tipe II, nm = 180
sedangkan untuk OEF 16 bit
n = 14 , c = 3, m = 12 , = 2 Tipe II, nm = 168 n = 13 , c = 1, m = 13 , = 2 Tipe I/II, nm = 169 Studi Literatur Analisis Implementasi Pengujian
dapat dilihat pada Gambar 1. Penjelasan untuk masing-masing langkah adalah sebagai berikut : Studi Literatur
Tahapan ini diperlukan untuk mempelajari prinsip dasar aritmetika optimal extension field. Selain itu, juga mempelajari algoritme serta kajian umum lain yang berkaitan dengan field
tersebut.
Gambar 1 Metodologi Penelitian Analisis
Dalam aritmetika OEF, hal yang paling penting adalah penentuan parameter yang digunakan, yaitu n, c, m dan . Hankerson et al. (2004) dan Cohen et al. (2006) menyebutkan bahwa keamanan kunci kriptografi kurva elips 160 bit setara dengan kunci RSA konvensional 1024 bit. Oleh karena itu, dilakukan pemilihan parameter sehingga nm mendekati 160.
Pada tahap ini, dilakukan analisis mencakup penentuan nilai parameter n, c, m dan yang akan dipakai. Kemudian, akan ditentukan cara merepresentasikan OEF tersebut.
Implementasi
Tahap ini mencakup implementasi operasi-operasi aritmetika dalam OEF. Operasi-operasi-operasi yang diimplementasikan adalah penjumlahan, pengurangan, perkalian, kuadrat, reduksi, pemangkatan dan invers pada aritmetika OEF menggunakan bahasa pemrograman C.
Lingkungan Pengembangan
Sistem dibangun dan diuji dengan menggunakan hardware dan software dengan spesifikasi tertentu. Hardware yang digunakan berupa netbook dengan spesifikasi:
1. Prosesor Intel Atom N450 1,66 GHz 2. RAM 1 GB
Software yang digunakan yaitu: 1. Sistem Operasi Windows 7 2. Bloodshed Dev-C++ 4.9.9.2 3. Notepad++
4. Winmerge Pengujian
Pengujian pada penelitian ini dilakukan dengan metode black box. Pengujian dilakukan dengan membandingkan output yang dihasilkan dengan output yang seharusnya. Karena setelah dicari, belum ditemukan software yang melakukan perhitungan serupa, output yang benar dicari secara hitung manual. Selain itu, dari pengujian ini akan dihitung kecepatan eksekusi dari masing-masing operasi. Operasi-operasi yang akan diuji adalah penjumlahan, pengurangan, perkalian, kuadrat, reduksi, pemangkatan dan invers.
HASIL DAN PEMBAHASAN Analisis
Dalam implementasi OEF, hal pertama yang harus dilakukan adalah menentukan parameter
n, c, m dan yang akan digunakan. Pada penelitian ini, konfigurasi p yang digunakan adalah p = 2n – c dengan n, c > 0. OEF yang akan diimplementasikan adalah dengan panjang 8 bit dan 16 bit sehingga yang dicari adalah nilai n dan c yang membentuk p < 28 dan p < 216.
Untuk pemilihan m, syaratnya adalah membentuk polinomial tak teruraikan xm – . m
dapat dibentuk dari faktor-faktor (p-1). Selain itu, syarat yang lain adalah m jika dikalikan dengan n hasilnya mendekati 160. Nilai 160 dipilih karena jika menggunakan nilai tersebut, tingkat keamanan sistem kriptografi kurva elips yang dihasilkan dapat setara dengan 1024 bit. Untuk pemilihan , dipilih yang merupakan elemen primitif (primitive root modulo p) dalam
.
Dalam penelitian ini, parameter yang digunakan untuk OEF 8 bit adalah
n = 7, c = 1, m = 21, = 3 Tipe I, nm = 147
n = 6, c = 3, m = 30, = 2 Tipe II, nm = 180
sedangkan untuk OEF 16 bit
n = 14 , c = 3, m = 12 , = 2 Tipe II, nm = 168 n = 13 , c = 1, m = 13 , = 2 Tipe I/II, nm = 169 Studi Literatur Analisis Implementasi Pengujian
Untuk memudahkan penyebutan dalam tulisan ini, OEF yang menggunakan parameter :
- n = 7, c = 1, m = 21 , = 3
selanjutnyaakandisebut OEF nomor 1
- n = 6, c = 3, m = 30 , = 2
selanjutnyaakandisebut OEF nomor 2
- n = 14, c = 3, m = 12, = 2
selanjutnyaakandisebut OEF nomor 3
- n = 13, c = 1, m = 13, = 2
selanjutnyaakandisebut OEF nomor 4 Anggota adalah polinomial, misalkan
a(z) ∈ maka a(z) dapat ditulis sebagai berikut ( ) = = + ⋯ + + + dengan ai = 0, 1, 2, ..., p i = 0, 1, 2, ..., m-1 dan p = 2n – c
Dalam implementasinya, a(z) dapat direpresentasikan dalam suatu array yang berisi nilai koefisien representasi dengan i
bersesuaian dengan indeks dari array tersebut. Representasi diilustrasikan pada Gambar 2.
Indeks m-1 ... 2 1 0
Isi ...
Gambar 2 Representasi pada array
Implementasi
Operasi-operasi aritmetika pada optimal extension field ini diimplementasikan dalam bahasa pemrograman C. Bahasa pemrograman C merupakan bahasa prosedural sehingga dalam pengimplementasiannya berbentuk fungsi. Beberapa jenis tipe data dalam bahasa pemrograman C dapat dilihat pada Tabel 1. Tabel 1 Tipe data dalam bahasa pemrograman
C
Tipe Data Panjang Bit
char 8
short 16
long 32
Untuk merepresentasikan nilai-nilai dari suku polinomial OEF, digunakan tipe data long unsigned yang mempunyai panjang 32 bit. Dalam penelitian ini, yang diimplementasikan adalah OEF 8 bit dan 16 bit. Oleh karena itu,
tipe data tersebut sudah dapat menampung hasil perkalian dalam aritmetika subfield yang nilai maksimalnya (216 - 1) (216 - 1) < (232 - 1). Dalam implementasinya, polinomial OEF direpresentasikan dengan tipe data struct sebagai berikut
typedef struct {
long unsigned *num;
int length;
} fpm;
Operasi aritmetika optimal extension field
ini diimplementasikan dalam bentuk fungsi-fungsi. Beberapa fungsi-fungsi dasar yang digunakan adalah :
a. copy_fpm
Fungsi ini digunakan sebagai operasi sama dengan (=) pada fpm. Fungsi ini akan menyalin nilai koefisien suku-suku polinomial dari suatu fpm ke fpm yang lain. Algoritme dari fungsi copy_fpm adalah sebagai berikut
Input : fpm b dan a
Output : b = a
1. Alokasi memory untuk b sebesar a.length
2. n 0 3. while n < a.length do 4. bn an 5. n n + 1 6. end while 7. b.length n
Dari algoritme tersebut terlihat bahwa fungsi copy_fpm akan mengalokasikan memori untuk
b sebesar a.length. Kemudian, semua variabel yang ada pada b diberikan nilai yang sama dengan a.
b. cmp_fpm
Fungsi ini digunakan untuk membandingkan nilai antara dua fpm. Fungsi ini mempunyai tiga kemungkinan return value (nilai kembali). Misal masukan pertama a dan masukan kedua
b, ketiga kemungkinan return value dari fungsi cmp_fpm dapat dilihat pada Tabel 2.
Tabel 2 Return value fungsi cmp_fpm Return Value Keterangan
(-1) a < b
0 a = b
Algoritme dari fungsi cmp_fpm adalah sebagai berikut :
Input : fpm a dan b
Output : Nilai perbandingan antara a dan b 1. if a.length > b.length 2. return 1 3. else 4. if b.length > a. length 5. return (-1) 6. else 7. for n a.length-1 to 0 8. if an > bn 9. return 1 10. end if 11. if an < bn 12. return (-1) 13. end if 14. end for 15. end if 16. end if 17. return 0
Dari algoritme tersebut terlihat bahwa fungsi cmp_fpm akan membandingkan jumlah tempat di array yang digunakan pada a dan b. Jika a
lebih banyak daripada b maka a > b dan sebaliknya jika b lebih banyak daripada a maka
a < b. Jika array yang digunakan keduanya sama, maka akan dibandingkan mulai dari digit
array paling signifikan antara keduanya. Jika semua nilai digit array sama, maka a = b. Aritmetika pada subfield
Sebelum masuk ke algoritme optimal extension field , akan dijelaskan terlebih dahulu mengenai aritmetika pada subfield . Anggota direpresentasikan sebagai polinomial yang suku-sukunya mempunyai nilai koefisien. Operasi aritmetika yang digunakan pada suku-suku polinomial tersebut adalah aritmetika field prima . Dalam OEF, aritmetika field prima terhadap koefisien-koefisien polinomial ini biasa disebut sebagai aritmetika pada subfield.
Misal a(z) dan b(z) ∈ , maka a(z) dan
b(z) dapat ditulis sebagai berikut
a(z) = + ··· + + +
b(z) = + ··· + + + Aritmetika yang digunakan pada a(z) dan b(z) secara keseluruhan adalah aritmetika optimal extension field. Akan tetapi, aritmetika yang digunakan pada operasi antar koefisien elemen-elemen a(z) dan b(z) yaitu ai dan bi adalah aritmetika field prima .
Operasi-operasi aritmetika subfield yang digunakan pada aritmetika adalah sebagai berikut :
a. Penjumlahan
Operasi penjumlahan dalam adalah jumlah modulo p
c = (a + b) mod p
Nilai a, b < p maka (a + b) < 2p. Oleh karena itu, langkah reduksi yaitu modulo p dapat dengan mudah dilakukan dengan
(a + b) – p jika (a + b) > p
Dengan begitu, dapat dipastikan bahwa c∈ . Aritmetika OEF mendapat keuntungan dengan operasi ini karena tidak menyebabkan adanya
carry.
b. Pengurangan
Operasi pengurangan dalam juga merupakan operasi kurang modulo p
c = (a - b) mod p
Nilai a , b < p maka (a - b) > -p. Oleh karena itu, langkah modulo p dapat dengan mudah dilakukan dengan
p - b + a jika a < b
Dengan begitu, dapat dipastikan bahwa c ∈ . c. Perkalian
Operasi perkalian dalam adalah kali modulo p
c = (a . b) mod p
Misal panjang bit ai , bi adalah w, maka panjang bit a.b < 2w. Oleh karena itu, langkah reduksi modulo p yang dilakukan akan memastikan c∈
dan membuat panjang bit c menjadi w
kembali. Dalam penelitian ini, operasi modulo dalam dilakukan dengan suatu fungsi khusus.
d. Reduksi
Operasi a mod b bila dijalankan secara konvensional adalah mengurangkan a dengan b
sampai a < b. Akan tetapi, dengan menggunakan algoritme reduksi cepat yang dikemukakan Baley (2000) berikut, operasi modulo dapat dilakukan dengan lebih efisien. Algoritmenya adalah sebagai berikut
Input : n, c, p = 2n – c, x < p2
Output : r = x modulo p 1. q0 x >> n
3. r r0 4. i 0 5. while qi > 0 do 6. qi+1 q0c >> n 7. ri+1 q0c – (qi+1c << n) 8. i i + 1 9. r r + ri 10. end while 11. while r > p do 12. r r – p 13. end while e. Invers
Misalkan a ∈ , maka g ∈ yang membuat
(g. ) mod p = 1 atau bisa ditulis dengan
(g. ) ≡ 1(mod p)
disebut dengan invers a dalam atau notasinya g = . Ada dua macam algoritme invers dalam yang diimplementasikan dalam penelitian ini, yaitu algoritme invers Extended
Euclidean dan algoritme Binary Invers. Algoritme Extended Euclidean Input : a∈ , a > 0 Output : g = ∈ 1. u a, v p 2. 1, 0 3. while u > 1 do 4. quo v / u 5. rem v mod u 6. x = − x1.quo 7. v u 8. u rem 9. x1 10. x 11. end while 12. g mod p
Algoritme Binary Invers Input : a∈ , a > 0 Output : g = ∈ 1. u a, v p 2. 1, 0 3. while ( u ≠ 1 dan v ≠ 1) do 4. while u genap do 5. u u >> 1 6. if genap maka 7. >> 1 8. else 9. ( + ) >> 1 10. end if 11. end while 12. while v genap do 13. v v >> 1 14. if genap maka 15. >> 1 16. else 17. ( + ) >> 1 18. end if 19. end while 20. if u > v maka 21. – 22. – 23. else 24. – 25. – 26. end if 27. end while 28. if u == 1 maka 29. g mod p 30. else 31. g mod p 32. end if Aritmetika pada
Operasi-operasi aritmetika pada yang diimplementasikan adalah :
a. Penjumlahan
Fungsi ini melakukan proses penjumlahan dua anggota . Rumusnya adalah sebagai berikut misalkan ( ) = dan ( ) = anggota , maka ( ) + ( ) = ( ) = dengan = ( + ) mod p.
Algoritmenya adalah sebagai berikut Input : a dan b dengan m koefisien Output : a + b = c∈ 1. for i 0 to m – 1 do 2. = + 3. if > p maka 4. = – 5. end if 6. end for
Dengan melihat algoritme tersebut, dapat diketahui bahwa algoritme penjumlahan untuk dilakukan dengan menjumlahkan koefisien-koefisien representasi polinomial yang bersesuaian. Kemudian jika diperlukan,
hasil tiap penjumlahan direduksi dengan cara mengurangkannya dengan p.
b. Pengurangan
Fungsi ini melakukan proses pengurangan dua anggota . Rumus dan algoritmenya hampir sama dengan penjumlahan sebagai berikut misalkan ( ) = dan ( ) = anggota , maka ( )− ( ) = ( ) = dengan = ( - ) mod p.
Algoritmenya adalah sebagai berikut Input : a dan b dengan m koefisien Output : a - b = c∈ 1. for i 0 to m – 1 do 2. if > maka 3. = – 4. else 5. = − + 6. end if 7. end for
Dengan melihat algoritme tersebut, dapat diketahui bahwa algoritme pengurangan untuk dilakukan dengan mengurangkan koefisien-koefisien representasi polinomial yang bersesuaian. Kemudian jika diperlukan (ai < bi ), p dikurangkan terlebih dahulu dengan bi kemudian baru ditambah dengan ai.
c. Perkalian
Dalam penelitian ini, diimplementasikan dua algoritme perkalian. Kedua algoritme tersebut adalah algoritme Schoolbook dan algoritme Karatsuba.
Algoritme perkalian Schoolbook
Algoritme Schoolbook adalah metode perkalian yang sudah biasa kita pakai sejak sekolah dasar. Rumusnya :
( ) = ( ) ( ) = ≡ dengan = mod . Contoh a(z) = + + b(z) = + + ( ) = ( ) ( ) ≡ = ( ) + ( + ) + ( + + ) + ( + ) +
Algoritme perkalian Schoolbook adalah sebagai berikut
Input : a dan b dengan m koefisien Output : ab = c 1. for i 0 to 2m – 2 do 2. 0 3. if < m maka 4. i 5. i 6. else 7. m – 1 8. i – m – 1 9. end if 10. for j s to e do 11. + 12. end for 13. end for
Dengan menggunakan algoritme Schoolbook, operasi perkalian dilakukan sebanyak n2 dan penjumlahan sebanyak (n-1)2(Mahfouz 2004). Algoritme perkalian Karatsuba
Waktu untuk melakukan operasi kali lebih lama dibandingkan waktu untuk melakukan operasi jumlah. Metode perkalian Karatsuba mempunyai keunggulan dengan menurunkan jumlah operasi perkalian yang dilakukan. Pada penelitian ini, algoritme Karatsuba yang digunakan adalah algoritme Karatsuba satu iterasi.
Contoh penggunaan algoritme Karatsuba pada polinomial berderajat 1
a(z)b(z) = ( + ) ( + )
= + (( + ) ( + ) –
– )z +
dari contoh tersebut, dapat dilihat bahwa operasi perkalian yang dilakukan hanya sebanyak 3 kali. Bila menggunakan algoritme
Schoolbook, operasi perkalian yang dilakukan adalah 4 kali.
Selain menambah banyaknya operasi jumlah, algoritme ini juga memerlukan variabel yang lebih banyak untuk melakukan perhitungan. Algoritme Karatsuba satu iterasi adalah sebagai berikut
Input : a,b∈ dengan k koefisien, p
Output : = ab 1. for i 0 to k – 1 do 2. Di aibi mod p 3. end for 4. for i 0 to k – 1 do 5. for j i+1 to k – 1 6. Di,j (ai + aj)(bi+ bj) mod p 7. end for 8. end for 9. c0 D0 10. i 1 11. for i 0 to 2k – 3 do 12. ci 0 13. if i ganjil, maka 14. for n i – (i/2) to i 15. l i – n 16. ci ci + Dl,n -Dl– Dn 17. end for 18. else 19. for n i – (i/2) + 1 to i 20. l i – n 21. ci ci + Dl,n -Dl– Dn 22. end for 23. ci ci + Di/2 24. end if 25. end for 26. c2k – 2 Dk-1
Mahfouz (2004) mengatakan bahwa salah satu hal yang mempengaruhi kecepatan algoritme Karatsuba adalah rasio antara waktu eksekusi operasi kali dan waktu eksekusi operasi jumlah. Rasio yang diperlukan agar algoritme ini lebih cepat dibandingkan algoritme Schoolbook adalah lebih besar dari 3. Contoh untuk m = 3
misal r adalah rasio
r = Tmul / Tadd
Tmul = waktu operasi kali
Tadd = waktu operasi tambah kompleksitas waktu algoritme Schoolbook
TSB = 9Tmul + 4Tadd = (9r + 4) Tadd Sedangkan kompleksitas algoritme Karatsuba
TKA = 6Tmul + 13Tadd = (6r + 13) Tadd
Agar algoritme Karatsuba lebih cepat, maka
TSB > TKA (9r + 4) Tadd > (6r + 13) Tadd 9r - 6r > 13 – 4 3r > 9 r > 3 d. Kuadrat
Operasi kuadrat (pemangkatan dua) adalah sebuah bentuk khusus dari perkalian. Operasi kuadrat dapat dituliskan sebagai perkalian
( ) ( ) dengan ( ) = ( ). Operasi ini
didefinisikan secara khusus karena memberikan suatu keuntungan dalam efisiensi operasi. Hasil dari operasi kali polinomial berderajat dua
( )dan ( ) adalah a(z) = + + b(z) = + + ( ) = ( ) ( ) = ( ) + ( + ) + ( + + ) + ( + ) +
Jika ( ) = ( ), maka hasilnya menjadi
( ) = ( ) ( )
= ( ) + ( + ) + ( +
+ ) + ( + ) +
= ( ) +( 2 ) +( 2 + )
+ ( 2 ) +
Perkalian dengan 2 dapat dilakukan dengan pergeseran ke kiri sebanyak 1 bit. Dengan begitu, jumlah operasi kali menjadi lebih sedikit dan waktu operasinya pun menjadi lebih cepat. Implementasi algoritmenya adalah sebagai berikut
Input : a∈ dengan k koefisien, p
Output : = a2 1. for i 0 to k – 1 do 2. Di aibi mod p 3. end for 4. c0 D0 5. i 1 6. for i 0 to 2k – 3 do 7. ci 0 8. if i ganjil, maka 9. for n i – (i/2) to i 10. ci ci + ((cl cn)<<1)mod p 11. end for 12. else 13. for n i – (i/2) + 1 to i 14. ci ci + ((cl cn)<<1)mod p 15. end for 16. ci ci + Di/2
17. end if 18. end for 19. c2k – 2 Dk-1 e. Reduksi
Perkalian dua polinomial berderajat m pada umumnya akan menghasilkan polinomial berderajat 2m. Oleh karena itu, perlu dilakukan reduksi OEF untuk memastikan hasil perkalian
c(z) ∈ . Rumus reduksi dalam aritmetika OEF (reduksi dalam ) adalah
≡ +
( + ) ( )
Algoritme reduksi pada adalah sebagai berikut
Input : c dengan k koefisien, m, Output : = c mod f (memastikan c∈ ) 1. if k > m maka 2. n 0 3. for i m to k – 1 do 4. if = 2 maka 5. + ( << 1) 6. else 7. + ( ) 8. end if 9. n n + 1 10. end for 11. end if f. Pemangkatan
Fungsi ini merupakan fungsi pemangkatan pada OEF. Algoritme yang digunakan pada fungsi ini adalah left to right exponentiation. Algoritme ini bekerja dengan menggunakan nilai biner dari bilangan pemangkatnya (k). Algoritme ini melakukan proses perkalian polinomial sebanyak n dimana n adalah banyaknya bit k yang bernilai 1 dan melakukan operasi kuadrat sebanyak t dimana t adalah panjang bit k. Algoritmenya adalah sebagai berikut
Input : a∈ , m, , k
Output : = mod f
1. c 1
2. n banyaknya bit bilangan k
3. while n > 0 do 4. c c2 mod f 5. if [ ] == 1 maka 6. c c.a mod f 7. end if 8. n n – 1 9. end while
Pada penelitian ini, diimplementasikan dua fungsi pangkat. Pertama adalah fungsi pangkat yang operasi kali-nya menggunakan algoritme
Schoolbook dan kedua adalah fungsi pangkat yang operasi kali-nya menggunakan algoritme Karatsuba.
g. Invers
Invers dari ∈ , a ≠ 0, adalah
menemukan suatu ∈ sehingga ≡
1 (mod f). Hankerson et al. (2004) dan Baley dan Paar (1998) menyebutkan bahwa Metode yang paling cepat dan relatif efisien untuk menemukan invers dari polinomial adalah algoritme Invers Itoh dan Tsujii (ITI). Algoritme ini relatif sederhana untuk diimplementasikan karena hanya memerlukan beberapa operasi perkalian untuk menurunkan invers dalam menjadi invers dalam subfield
.
Algoritme tersebut menghitung = ( ) mod f
dengan
= −1
−1 = + ⋯+ + + 1
( ) ≡ 1 (mod ) maka ∈ Untuk melakukan perhitungan efisien
= ⋯ mod f
digunakan pemetaan Frobenius : → didefinisikan dengan ( ) = . Jika
= + ⋯+ + +
Maka
: → ( ) + ⋯+ +
mod f
Dengan bantuan pemetaan Frobenius tersebut, penghitungan dapat dilakukan secara efisien menggunakan algoritme
addition–chain. Dalam penelitian ini, pemetaan Frobenius hanya dilakukan sampai i = 2. Hal ini ditujukan untuk menyederhanakan algoritme
addition–chain secara umum. Algoritme
addition–chain sendiri adalah sebagai berikut Input : a∈ , p, m, , n, c
Output : b = = ⋯ mod f 1. div m >> 1
2. if m genap lakukan 3. t1
4. b t1 5. if div > 1 lakukan 6. t2 t1.a mod f 7. while div > 1 do 8. t2 9. b t2.b mod f 10. div div – 1 11. end while 12. end if 13. else 14. t1 15. t2 t1.a mod f 16. t2 17. b t2 18. while div > 1 do 19. t2 20. b t2.b mod f 21. div div – 1 22. end while 23. end if
Langkah selanjutnya setelah didapat adalah mencari . dapat dihitung dengan
=
Nilai adalah sebuah bilangan ∈ . Langkah selanjutnya, yaitu mencari invers dari dilakukan menggunakan algoritme invers dalam aritmetika sehingga waktu eksekusinya pun relatif cepat.
Langkah terakhir adalah mengalikan ( )
dengan dan didapatkan
= ( )
Algoritme invers secara lengkap adalah Input : a∈ , a≠ 0
Output : ∈ sehingga ≡1(mod f) 1. Digunakan algoritme addition-chain untuk
mendapatkan , dengan r =( -1)/(p-1) 2. c = a∈
3. dicari sehingga ≡ 1 (mod p) melalui algoritme invers dalam
4. return ( )
Fungsi invers dalam penelitian ini diimplementasikan dalam 4 kombinasi, yaitu
algoritme perkalian menggunakan Karatsuba dan algoritme invers dalam menggunakan Binary Invers
algoritme perkalian menggunakan Karatsuba dan algoritme invers dalam menggunakan Extended Euclidean
algoritme perkalian menggunakan
Schoolbook dan algoritme invers dalam menggunakan Binary Invers
algoritme perkalian menggunakan
Schoolbook dan algoritme invers dalam menggunakan Extended Euclidean. Pengujian
Pengujian dilakukan dengan cara membandingkan output yang dihasilkan sistem dengan output yang dihitung dengan cara manual sehingga dapat diuji kebenaran dari
output tersebut. Pengujian dilakukan sebanyak 10 kali menggunakan koefisien-koefisien polinomial yang ditentukan secara acak. Kemudian, setelah dipastikan nilai kebenarannya, pada masing-masing fungsi aritmetika OEF dihitung nilai rata-rata waktu eksekusinya. Hal tersebut dilakukan lagi sebanyak 10 kali kemudian dihitung waktu rata-rata dari waktu rata-rata-rata-rata hasil pengujian terhadap masing-masing fungsi aritmetika OEF. Invers dalam
Waktu eksekusi operasi invers menggunakan dua algoritme invers tersebut terdapat pada Tabel 3.
Tabel 3 Waktu eksekusi operasi invers dalam PARAM ETER W aktu rata-rata (µs)
n c p Euclidean Binary
7 1 127 3,0019 2,8860
6 3 61 2,9862 2,8052
14 3 16381 3,4328 3,3732
3 1 8191 3,4160 3,3300
Dari Tabel 3 terlihat bahwa kecepatan rata-rata eksekusi menggunakan algoritme Binary Invers
lebih cepat daripada menggunakan algoritme
Extended Euclidean sejalan dengan yang dikemukakan oleh Crandall dan Promerance (2005) bahwa algoritme Binary sering lebih cepat dibandingkan Euclid. Hali ini terjadi karena algoritme Binary Invers menggunakan operasi shift, tambah, dan kurang yang cost-nya lebih kecil dibanding operasi kali dan bagi yang digunakan pada algoritme Extended Euclidean. Penjumlahan
Hasil pengujian untuk fungsi penjumlahan ditampilkan pada Tabel 4.
Tabel 4 Waktu eksekusi operasi jumlah
OEF PARAMETER Waktu rata-rata (µs) n c m
1 7 1 21 3 3,7879
2 6 3 30 2 4,2437
3 14 3 12 2 3,6524
OEF nomor 1 lebih cepat dibanding OEF nomor 2 karena besar m pada OEF nomor 1 lebih kecil dibanding pada OEF nomor 2. Begitu juga OEF nomor 3 lebih cepat daripada OEF nomor 4 karena jumlah m yang lebih kecil.
Pengurangan
Selanjutnya, waktu eksekusi operasi pengurangan ini dapat dilihat pada Tabel 5. Tabel 5 Waktu eksekusi operasi kurang
OEF PARAMETER Waktu rata-rata (µs) n c m
1 7 1 21 3 3,8065
2 6 3 30 2 4,1265
3 14 3 12 2 3,4924
4 13 1 13 2 3,5726
Seperti pada penjumlahan, OEF nomor 1 lebih cepat dibanding OEF nomor 2 karena besar m
pada OEF nomor 1 lebih kecil dibanding pada OEF nomor 2. Begitu juga OEF nomor 3 lebih cepat daripada OEF nomor 4 karena nilai m
yang lebih kecil. Perkalian
Waktu eksekusi operasi perkalian dapat dilihat pada Tabel 6.
Tabel 6 Waktu eksekusi operasi kali
OEF PARAMETER Waktu rata-rata (µs)
n c m Schoolbook Karatsuba
1 7 1 21 3 81,4489 90,5832
2 6 3 30 2 129,8420 138,9630
3 14 3 12 2 53,3200 57,7916
4 13 1 13 2 56,4304 63,6921
Pada operasi kali yang menggunakan algoritme
Schoolbook, waktu eksekusi pada OEF nomor 1 lebih cepat dibanding dengan OEF nomor 2. Begitu juga menggunakan OEF nomor 3 lebih cepat dibanding menggunakan OEF nomor 4. Dari sini juga terlihat bahwa besar m sangat berpengaruh pada operasi kali.
Sama seperti pada algoritme Schoolbook, pada operasi kali yang menggunakan algoritme Karatsuba, waktu eksekusi pada OEF nomor 1 lebih cepat dibanding dengan OEF nomor 2. Begitu juga menggunakan OEF nomor 3 lebih cepat dibanding menggunakan OEF nomor 4. Dari sini juga terlihat bahwa besar m sangat berpengaruh pada operasi kali.
Apabila dibandingkan antara algoritme
Schoolbook dan algoritme Karatsuba, terlihat bahwa waktu eksekusi pada operasi kali yang menggunakan algoritme Schoolbook lebih cepat dibanding jika menggunakan algoritme Karatsuba. Hal ini terjadi karena algoritme
Karatsuba membutuhkan banyak variabel sehingga memerlukan lebih banyak waktu juga untuk mengakses memory. Selain itu, hal ini juga karena rasio (waktu eksekusi operasi kali / waktu operasi tambah) pada mesin yang digunakan kurang dari 3. Rata-rata waktu dari 1000 operasi kali dengan bilangan acak pada komputer yang digunakan pada penelitian ini adalah 3,024 µs sedangkan untuk operasi tambah adalah 2,544 µs. Jadi, rasionya kurang dari 3 yaitu sekitar 1,2.
Kuadrat
Waktu eksekusi operasi kuadrat dapat dilihat pada Tabel 7.
Tabel 7 Waktu eksekusi operasi kuadrat OEF PARAMETER Waktu rata-rata (µs)
n c m kuadrat Schoolbook 1 7 1 21 3 69,4140 78,9976 2 6 3 30 2 98,5839 127,2670 3 14 3 12 2 48,0476 53,3940 4 13 1 13 2 50,2219 55,3466 Waktu operasi menggunakan algoritme kuadrat secara khusus memang lebih cepat dibandingkan menggunakan algoritme perkalian
Schoolbook. Hal ini terjadi karena operasi kali yang dilakukan pada algoritme kuadrat lebih sedikit dibanding jika menggunakan algoritme
Schoolbook. Reduksi
Tabel 8 menunjukkan waktu eksekusi operasi reduksi pada .
Tabel 8 Waktu eksekusi operasi reduksi
OEF PARAMETER Waktu rata-rata (µs) n c m
1 7 1 21 3 5,5863
2 6 3 30 2 5,0998
3 14 3 12 2 4,2744
4 13 1 13 2 4,0465
OEF nomor 2 lebih cepat waktu eksekusinya dibanding OEF nomor 1 karena nilai parameter