for n  i – i2 + 1 to i 14. c end for 16. c end if 18. end for if k m maka 2. n  0 for i  m to k – 1 do 4. if = 2 maka else 7. end if 9. n  n + 1 while n 0 do 4. c  c

9 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. D

i  a i b i mod p

3. end for 4. for i  0 to k – 1 do

5. for j  i+1 to k – 1 6. D i,j  a i + a j b i + b j mod p

7. end for 8. end for

9. c  D 10. i  1 11. for i  0 to 2k – 3 do

12. c

i  0

13. if i ganjil, maka 14. for n  i – i2 to i

15. l  i – n 16. c

i  c i + D l,n - D l – D n

17. end for 18. else

19. for n  i – i2 + 1 to i 20. l  i – n 21. c i  c i + D l,n - D l – D n

22. end for 23. c

i  c i + D i2

24. end if 25. end for

26. c 2k – 2  D k-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 = T mul T add T mul = waktu operasi kali T add = waktu operasi tambah kompleksitas waktu algoritme Schoolbook T SB = 9T mul + 4T add = 9r + 4 T add Sedangkan kompleksitas algoritme Karatsuba T KA = 6T mul + 13T add = 6r + 13 T add Agar algoritme Karatsuba lebih cepat, maka T SB T KA 9r + 4 T add 6r + 13 T add 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 az = + + bz = + + = = + + + + + + + + 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 : = a 2

1. for i  0 to k – 1 do 2. D

i  a i b i mod p

3. end for 4. c

 D 5. i  1

6. for i  0 to 2k – 3 do 7. c

i  0

8. if i ganjil, maka 9. for n  i – i2 to i

10. c i  c i + c l c n 1 mod p

11. end for 12. else

13. for n  i – i2 + 1 to i 14. c i  c i + c l c n 1 mod p

15. end for 16. c

i  c i + D i2 10

17. end if 18. end for

19. c

2k – 2  D k-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 cz ∈ . 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  c

2 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. t 1  11 4. b  t 1

5. if div 1 lakukan 6. t

2  t 1 . a mod f

7. while div 1 do 8. t