Implementasi aritmatik field prima dengan bahasa c

(1)

ABSTRACT

HARYADI. Implementation of Prime-field Arithmetic Using C Programming. Supervised by SUGI GURITMAN.

Cryptography is the science of keeping message secure. Cryptography involves encryption and decryption of messages. Encryption is the process of converting a plaintext into chipertext and decryption is the process of getting back the encrypted message. Cryptographic systems can be divided into two kinds: symmetric-key cryptography and asymmetric-key cryptography (public-key cryptography). The major advantage of symmetric-(public-key cryptography is high efficiency, but it has a number of drawbacks like key distribution and the provision of non-repudiation. Public-key cryptography provides solution to the problems in symmetric-key cryptography. Unfortunately, public-key operations are significantly slower than symmetric-key operation. It is caused by using a big number in its operations. The biggest problem of the big number is how to compute it in constrained machines like computer. A computer’s hardware can only perform operations on integers smaller than the machine word-size W. If bigger numbers are needed, the programmer has to provide routines for representation and manipulation of big number.

In this research, big number is representated with base 2 W. This base is efficient in memory-space. Arithmetic of big number is constrained in prime-field. The big number that is used in this arithmetic is up to 1024 bit. Operations of this arithmetic are addition, subtraction, multiplication, division, and exponentiation. The result of this research shows that operations of big number can be executed fast in 32-bit computer .


(2)

IMPLEMENTASI ARITMATIK

FIELD

PRIMA

DENGAN BAHASA C

HARYADI

DEPARTEMEN ILMU KOMPUTER

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

INSTITUT PERTANIAN BOGOR

BOGOR

2011


(3)

IMPLEMENTASI ARITMATIK

FIELD

PRIMA

DENGAN BAHASA C

HARYADI

Skripsi

sebagai salah satu syarat untuk memperoleh gelar

Sarjana Komputer pada

Departemen Ilmu Komputer

DEPARTEMEN ILMU KOMPUTER

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

INSTITUT PERTANIAN BOGOR

BOGOR

2011


(4)

ABSTRACT

HARYADI. Implementation of Prime-field Arithmetic Using C Programming. Supervised by SUGI GURITMAN.

Cryptography is the science of keeping message secure. Cryptography involves encryption and decryption of messages. Encryption is the process of converting a plaintext into chipertext and decryption is the process of getting back the encrypted message. Cryptographic systems can be divided into two kinds: symmetric-key cryptography and asymmetric-key cryptography (public-key cryptography). The major advantage of symmetric-(public-key cryptography is high efficiency, but it has a number of drawbacks like key distribution and the provision of non-repudiation. Public-key cryptography provides solution to the problems in symmetric-key cryptography. Unfortunately, public-key operations are significantly slower than symmetric-key operation. It is caused by using a big number in its operations. The biggest problem of the big number is how to compute it in constrained machines like computer. A computer’s hardware can only perform operations on integers smaller than the machine word-size W. If bigger numbers are needed, the programmer has to provide routines for representation and manipulation of big number.

In this research, big number is representated with base 2 W. This base is efficient in memory-space. Arithmetic of big number is constrained in prime-field. The big number that is used in this arithmetic is up to 1024 bit. Operations of this arithmetic are addition, subtraction, multiplication, division, and exponentiation. The result of this research shows that operations of big number can be executed fast in 32-bit computer .


(5)

Judul Skripsi : Implementasi Aritmatik Field Prima dengan Bahasa C

Nama : Haryadi

NIM : G64062658

Menyetujui: Pembimbing

Dr. Sugi Guritman NIP. 19620927 199203 1 004

Mengetahui:

Ketua Departemen Ilmu Komputer

Dr. Ir. Sri Nurdiati, M.Sc NIP. 19601126 198601 2 001


(6)

PRAKATA

Puji dan syukur penulis panjatkan kepada Allah SWT atas segala curahan rahmat dan karunia-Nya sehingga skripsi ini dapat diselesaikan. Skripsi ini merupakan hasil penelitian yang dilakukan dari bulan Februari sampai bulan Desember 2010 dengan bidang kajian Implementasi Aritmatik Field Prima dengan Bahasa C.

Ucapan terima kasih penulis sampaikan kepada pihak yang telah membantu penyelesaian tugas akhir ini antara lain:

1. Bapak Dr. Sugi Guritman selaku pembimbing atas bimbingan, arahan, dan nasihat yang diberikan selama pengerjaan tugas akhir ini.

2. Bapak Endang Purnama Giri, S.Kom, M.Kom dan Ibu Shelvie Nidya Neyman, S.Kom, M.Si selaku penguji atas waktu, masukan, dan koreksi yang telah diberikan.

3. Ibu, kakak, dan adik tercinta yang selalu memberikan kasih sayang, doa, dan dukungan moral.

4. Departemen Ilmu Komputer, staf, dan dosen yang telah banyak membantu baik selama penelitian maupun pada masa perkuliahan.

5. Rekan-rekan satu bimbingan, rekan-rekan ILKOM 43, dan rekan-rekan Al Izzah yang telah banyak membantu penulis selama menjalani waktu di Departemen Ilmu Komputer IPB.

Penulis menyadari masih banyak kekurangan dalam penelitian ini. Oleh karena itu, kritik dan saran sangat penulis harapkan untuk perbaikan di masa mendatang, semoga penelitian ini dapat bermanfaat, Amin.

Bogor, Januari 2011


(7)

RIWAYAT HIDUP

Penulis lahir di Kebumen pada tanggal 8 Sepetember 1988. Penulis merupakan anak kedua dari tiga bersaudara dengan ayah bernama Dasuki (Alm) dan Ibu bernama Sudarsih.

Pada tahun 2006 penulis lulus dari SMA Negeri 1 Gombong dan pada tahun yang sama penulis lulus seleksi masuk Institut Pertanian Bogor (IPB) melalui jalur Seleksi Penerimaan Mahasiswa Baru (SPMB). Pada tahun 2007 penulis diterima di Departemen Ilmu Komputer Fakultas Matematika dan Ilmu Pengetahuan Alam. Pada tahun 2009 Penulis menjalankan Praktik Kerja Lapangan (PKL) di Rajawali Citra Televisi Indonesia (RCTI) selama kurang lebih dua bulan.


(8)

DAFTAR ISI

Halaman

DAFTAR TABEL... vi

PENDAHULUAN Latar Belakang... 1

Tujuan... 1

Ruang Lingkup ... 1

TINJAUAN PUSTAKA Field... 1

Field Prima ... 1

Algoritme Perkalian... 2

Algoritme Invers Perkalian... 2

Algoritme Reduksi ... 2

Algoritme Eksponensial ... 2

Pengujian Blackbox ...2

METODE PENELITIAN Studi Literatur... 3

Analisis ... 3

Implementasi ... 3

Lingkungan Pengembangan ... 3

Pengujian ... 3

HASIL DAN PEMBAHASAN Analisis ... 3

Implementasi ... 4

Pengujian ... 11

KESIMPULAN DAN SARAN Kesimpulan... 12

Saran ... 13

DAFTAR PUSTAKA ... 13


(9)

DAFTAR TABEL

Halaman

1 Tipe data dalam bahasa C ... 4

2 Return value pada fungsi ... 5

3 Tanda hasil fungsi mp_add ... 7

4 Tanda hasil fungsi mp_sub ... 8

5 Total waktu eksekusi fungsi penjumlahan pada field prima ... 11

6 Total waktu eksekusi fungsi pengurangan pada field prima ... 12

7 Total waktu eksekusi fungsi perkalian pada field prima... 12

8 Total waktu eksekusi fungsi pembagian pada field prima ... 12


(10)

PENDAHULUAN

Latar Belakang

Kriptografi merupakan ilmu pengetahuan yang menggunakan persamaan matematis untuk melakukan proses enkripsi dan dekripsi data. Teknik ini digunakan untuk mengubah data ke dalam kode-kode tertentu dengan tujuan agar informasi yang disimpan tidak dapat dibaca oleh siapapun kecuali orang yang berhak.

Algoritme dalam kriptografi ada dua macam yaitu algoritme simetris dan algoritme asimetris. Algoritme simetris adalah algoritme yang menggunakan kunci yang sama pada proses enkripsi dan dekripsinya, sedangkan algoritme asimetris adalah algoritme yang menggunakan kunci publik pada proses enkripsi dan kunci private pada proses dekripsinya. Algoritme simetris mempunyai kecepatan yang tinggi dalam proses enkripsi dan dekripsinya sehingga sangat cocok untuk diimplementasikan pada mesin kecil seperti smartcard. Akan tetapi, algoritme ini mempunyai kekurangan, terutama dalam manajemen kuncinya. Oleh karena itu, digunakanlah algoritme asimetris untuk mengatasi masalah tersebut. Akan tetapi, algoritme ini juga mempunyai kekurangan yaitu proses enkripsi dan dekripsinya jauh lebih lama dari algoritme simetris. Hal ini disebabkan penggunaan bilangan besar dalam proses operasi pada algoritme asimetris.

Operasi-operasi bilangan besar dalam bidang kriptografi merupakan operasi modular (perkalian modular, penjumlahan modular, eksponensial modular, invers perkalian modular, dll). Operasi modular ini merupakan operasi suatu field. Salah satu field yang sering digunakan dalam kriptografi adalah field prima. Salah satu algoritme kriptografi yang menggunakan algoritme asimetris adalah RSA. Field yang digunakan oleh RSA adalah field prima. Umumnya, panjang kunci yang digunakan RSA adalah 1024 bit atau setara dengan bilangan 309 digit (Burnett & Paine 2001). Bilangan besar ini tentu tidak dapat dikomputasikan oleh mesin dengan kapasitas memori yang terbatas seperti komputer jika hanya menggunakan kemampuan dari mesin tersebut. Sekarang ini kapasitas mesin komputer secara umum adalah 32 bit sehingga komputer tersebut hanya mampu mengomputasikan data yang mempunyai panjang maksimal 32 bit atau setara dengan bilangan 10 digit. Oleh karena itu, diperlukan suatu algoritme tertentu agar komputer tersebut mampu melakukan

komputasi pada bilangan yang jauh lebih besar dari kapasitas komputer tersebut. Algoritme yang digunakan harus efisien baik dari alokasi memori yang digunakan maupun dari waktu eksekusi yang diperlukan. Hal inilah yang mendorong adanya keinginan untuk menerapkan suatu algoritme tertentu agar aritmatik bilangan besar terutama dalam field prima dapat dikomputasikan oleh komputer.

Tujuan

Tujuan penelitian ini adalah:

1. Merepresentasikan bilangan besar ke dalam suatu basis tertentu agar efisien dalam alokasi memorinya.

2. Menerapkan suatu algoritme tertentu agar komputer mampu mengomputasikan operasi-operasi bilangan besar pada field prima dengan benar. Selanjutnya akan diukur kinerja dari algoritme tersebut.

Ruang Lingkup

Ruang lingkup penelitian ini difokuskan pada implementasi operasi penjumlahan, pengurangan, perkalian, pembagian, reduksi, invers perkalian, dan eksponensial pada field prima dengan menggunakan bahasa pemrograman C. Panjang bit bilangan besar yang digunakan adalah maksimal 1024 bit.

TINJAUAN PUSTAKA

Field

Field merupakan abstraksi dari sistem bilangan (seperti bilangan rasional Q, bilangan real R, danbilangan kompleks C). Field terdiri atas satu set F bersama dengan dua operasi, penjumlahan (+) dan perkalian ( ), dengan syarat:

1. (F, +) merupakan grup komutatif dengan nilai identitas 0.

2. (F \{0}, ) merupakan grup komutatif dengan nilai identitas 1.

3. Sifat distributif berlaku: (a + b) c = a c + b c untuk a,b,c

F

(Hankerson et al. 2004 ). Field Prima

Field prima (Fp) merupakan suatu field

yang unsurnya terdiri atas 0 sampai dengan p-1 dengan p bilangan prima. Operasi aritmatik pada field prima merupakan operasi modulo p sehingga hasilnya mempunyai struktur field (Hankerson et al. 2004 ).


(11)

Algoritme Perkalian

Algoritme schoolbook merupakan algoritme umum yang digunakan untuk mengalikan dua polinomial. Sebagai contoh, dua polinomial berderajat d dengan n = d + 1 masing-masing sebagai berikut:

A(x) =

= d i i i

x

a

0

, B(x) =

= d i i i

x

b

0

Hasil perkalian C(x) = A(x)B(x) dihitung sebagai berikut:

C(x) =

∑∑

= = + d i d j j i j i

b

x

a

0 0

Polinomial C(x) diperoleh dari n2 operasi perkalian dan (n-1)2 operasi penjumlahan.

Algoritme Karatsuba merupakan algoritme perkalian yang dikenalkan oleh Karatsuba. Algoritme ini menggunakan teknik divide and conquer dengan membagi bilangan besar menjadi dua. Sebagai contoh, dua polinomial berderajat d dengan n = d + 1 masing-masing sebagai berikut:

A(x) = a1x + a0 , B(x) = b1x + b0

Variabel D0, D1, dan D0,1 merupakan variabel

pembantu dengan

D0= a0b0, D1= a1b1, D0,1= (a0 + a1) (b0 + b1)

Hasil perkalian C(x) = A(x)B(x) dihitung sebagai berikut:

C(x) = D1x2 + (D0,1 - D0 - D1)x + D0

(Weimerskirch & Paar 2006 ).

Algoritme Invers Perkalian

Algoritme extended Euclidian merupakan perluasan dari algoritme Euclidian yang digunakan untuk mencari nilai invers perkalian bilangan b pada field prima a dengan mencari nilai x dan y sehingga ax + by = d dengan d = gcd(a,b) = 1. Algoritme invers perkalian lainnya adalah algoritme binary. Algoritme binary merupakan algoritme invers perkalian yang mengganti operasi pembagian pada algoritme extended Euclidian dengan operasi shift dan pengurangan (Hankerson et al. 2004 ).

Algoritme Reduksi

Sebuah bilangan a dikatakan direduksi oleh bilangan b dengan mencari nilai sisa dari pembagian a/b. Proses reduksi merupakan proses mencari nilai r pada persamaan a=bq + r dengan q =

a

/

b

. Hasil r dikatakan kongruen dengan a dalam modulo b atau dapat

ditulis r a (mod b). Tujuan dari reduksi adalah untuk membuat suatu field.

Terdapat beberapa algoritme reduksi seperti algoritme klasik, algoritme Barret, dan algoritme Montgomery. Algoritme klasik menggunakan operasi pembagian dalam melakukan reduksi, sedangkan algoritme Barret dan Montgomery mengganti operasi pembagian tersebut dengan operasi yang less-expensive (Denis 2006).

Algoritme Eksponensial

Salah satu algoritme eksponensial adalah algoritme left to right exponentiation. Proses algoritme ini dimulai dari bit paling signifikan sampai ke bit paling tidak signifikan. Algoritme left to right exponentiation adalah sebagai berikut:

Input : a dan b Output : c = a b 1. c 1

2. For i from k-1 to 0 do c c2

c c abi 3. Return c ( Denis 2006).

Pengujian Blackbox

Pengujian blackbox memfokuskan pada keperluan fungsional dari software sehingga metode ini memungkinkan pengembang software untuk membuat himpunan kondisi input yang akan melatih seluruh syarat-syarat fungsional suatu program. Pengujian blackbox berusaha untuk menemukan kesalahan dalam beberapa kategori, yaitu:

1. Kesalahan fungsi 2. Kesalahan interface 3. Kesalahan struktur data 4. Kesalahan kinerja

5. Kesalahan inisialisasi dan terminasi

Salah satu metode pengujian blackbox adalah comparison testing. Dalam beberapa situasi dimana keandalan suatu software amat kritis, beberapa aplikasi sering menggunakan software dan hardware ganda. Ketika software ganda dibuat, tim pengembang software lainnya membangun versi independen dari aplikasi dengan spesifikasi yang sama. Setiap versi dapat diuji dengan data uji yang sama untuk memastikan seluruhnya menyediakan output yang sama. Kemudian seluruh versi dieksekusi secara paralel dengan perbandingan hasil real-time untuk memastikan konsistensi (Pressman 2001).


(12)

METODE PENELITIAN

Penelitian ini dilakukan dalam beberapa tahap. Tahapan-tahapan tersebut dapat dilihat pada Gambar 1 di bawah ini.

.

Gambar 1 Metodologi Penelitian.

Studi Literatur

Studi literatur merupakan tahap paling awal dalam metodologi penelitian ini. Tahapan ini diperlukan untuk mempelajari prinsip dasar aritmatik field prima dan kajian umum lain yang berkaitan dengan field prima tersebut.

Analisis

Pada tahap ini dilakukan analisis bagaimana cara merepresentasikan bilangan besar dalam komputer dengan kapasitas yang jauh lebih kecil dari bilangan tersebut sehingga efisien dalam alokasi memorinya. Setelah itu dilakukan analisis bagaimana komputer dapat melakukan komputasi terhadap operasi penjumlahan, pengurangan, perkalian, pembagian, reduksi, invers perkalian, dan eksponensial pada bilangan besar dengan waktu yang cepat dan hasil yang benar.

Hankerson et al. (2004) mengemukakan bahwa untuk dapat melakukan operasi penjumlahan, pengurangan, perkalian, reduksi, dan invers perkalian pada bilangan p yang sangat besar, setiap anggota pada field prima (Fp) dapat dipandang sebagai integer multi-kata

dengan basis 2W, W adalah ukuran mesin dalam W-bit. Dalam pemrograman, suatu a

Fp

diekspresikan sebagai suatu array dengan array paling kanan merupakan array paling signifikan. Setelah itu dapat dilakukan operasi-operasi pada bilangan tersebut dengan

menggunakan algoritme tertentu. Sebagai contoh, untuk operasi penjumlahan dilakukan dengan menjumlahkan masing-masing array yang dimulai dari array paling tidak signifikan.

Implementasi

Tahap ini mencakup bagaimana merepresentasikan bilangan besar dalam basis 2W dengan W adalah ukuran mesin dalam W-bit dengan menggunakan bahasa C. Selanjutnya dilakukan proses implementasi algoritme penjumlahan, pengurangan, perkalian, pembagian, invers perkalian, reduksi, dan eksponensial pada bilangan tersebut.

Lingkungan Pengembangan

Sistem dibangun dan diuji dengan menggunakan hardware dan software dengan spesifikasi tertentu. Hardware yang digunakan berupa personal computer (PC) dengan spesifikasi:

1. Prosesor AMD Sempron 902 MHz 2. RAM 512 MB

Software yang digunakan yaitu: 1. Sistem Operasi Windows XP 2. Bloodshed Dev-C++ 4.9.9.2 3. Maple 12

Pengujian

Pengujian pada penelitian ini dilakukan dengan menggunakan metode blackbox. Pengujian dilakukan dengan membandingkan antara output yang dihasilkan sistem pada penelitian ini dan output yang dihasilkan software penguji sehingga dapat diketahui nilai kebenaran dari output tersebut. Selanjutnya dari masing-masing operasi dihitung nilai kecepatan eksekusinya untuk mengukur kinerja dari algoritme yang digunakan. Operasi-operasi yang akan diuji yaitu penjumlahan, pengurangan, perkalian, pembagian, dan eksponensial. Panjang bit bilangan besar yang diuji yaitu 256 bit, 512 bit, dan 1024 bit untuk masing-masing operasi.

HASIL DAN PEMBAHASAN

Analisis

Mesin yang digunakan pada penelitian ini adalah sebuah komputer 32 bit. Oleh karena itu, basis yang digunakan untuk merepresentasikan bilangan besar dalam komputer adalah 232. Akan tetapi, basis dasar dari bilangan besar adalah 10 sehingga perlu dilakukan proses perubahan basis/konversi dari basis 10 ke dalam basis 232. Proses konversi tersebut dilakukan dengan cara membagi bilangan besar dalam Studi Literatur

Analisis

Implementasi


(13)

basis 10 tersebut dengan 232 secara berulang-ulang sampai hasil baginya bernilai 0. Dari setiap proses pembagian tersebut dihasilkan nilai sisa bagi. Nilai sisa bagi inilah yang merupakan hasil representasi bilangan besar tersebut dalam basis 232. Untuk lebih jelasnya dapat dilihat pada algoritme di bawah ini. Input : (a)10

Output : (b)2 32

= (a)10

1. n 0

2. While a ≠ 0 do bn a mod 232

a a / 232 n n +1

3. Return (b0 b1 b2 . . . bn-1 )

Secara matematis representasi bilangan besar adalah sebagai berikut:

b = b0 + 232 b1 +...+ 2(n-1) (32) bn-1, dengan

bi

{0, 1, 2,..., 232-1}untuk i = 0, 1, ..., (n-1).

Representasi ini menunjukkan bahwa digit array paling kanan (bn-1) merupakan digit array

paling signifikan. Hal ini bertujuan memudahkan proses komputasi terutama ketika terjadi carry atau penambahan digit array yang paling signifikan.

Representasi bilangan besar dengan basis 232 mempunyai keuntungan yaitu efisien dalam alokasi memori yang terlihat dari banyaknya digit array yang digunakan. Untuk merepresentasikan bilangan 1024 bit hanya dibutuhkan 32 digit array. Semakin sedikit digit array yang digunakan tentu akan mempercepat proses komputasi pada bilangan tersebut. Selain efisien dalam alokasi memori, hasil representasi tersebut merupakan nilai bit dari bilangan besar. Nilai bit ini akan berguna dalam operasi eksponensial terutama yang menggunakan algoritme left to right exponentiation.

Tipe data yang digunakan untuk merepresentasikan bilangan besar dalam basis 232 adalah mp_int. Struktur mp_int dalam bahasa C dapat dilihat di bawah ini.

typedef struct {

int used, alloc, sign; unsigned long *dp; } mp_int;

Struktur mp_int tersebut dapat dijelaskan sebagai berikut:

• Variabel used menggunakan tipe data int. Variabel ini menunjukkan banyaknya digit array dp yang telah digunakan. Nilai used

harus berupa bilangan positif dan tidak boleh melebihi jumlah nilai variabel alloc.

• Variabel alloc menggunakan tipe data int. Variabel ini menunjukkan banyaknya digit array dp yang tersedia dan siap digunakan. Ketika nilai used melebihi nilai alloc maka terjadi penambahan ukuran array dp sehingga dapat merepresentasikan bilangan multipresisi.

• Variabel sign menggunakan tipe data int.

Variabel ini menunjukkan tanda suatu bilangan mp_int. Nilai variabel ini hanya ada dua yaitu 0 (MP_ZPOS) dan 1 (MP_NEG). MP_ZPOS menandakan bilangan positif dan MP_NEG menandakan bilangan negatif. • Variabel dp menggunakan tipe data unsigned

long dan merupakan sebuah pointer. Variabel ini dapat mengalokasikan digit array secara dinamis (dapat mengalami penambahan) sehingga dapat merepresentasikan bilangan multipresisi.

Implementasi

Operasi-operasi bilangan besar pada aritmatik field prima diimplementasikan dalam bahasa C. Jenis-jenis tipe data dalam bahasa C dapat dilihat pada Tabel 1 di bawah ini.

Tabel 1Tipe data dalam bahasa C

Tipe Data Panjang Bit

char 8

short 16

long 32

long long 64

Tabel 1 di atas menunjukkan bahwa bahasa C mempunyai tipe data long long yang mempunyai panjang 64 bit. Tipe data ini berguna dalam merepresentasikan bilangan besar dalam basis 232. Tipe data ini digunakan dalam proses perkalian yaitu sebagai variabel sementara untuk menyimpan hasil perkalian.

Bahasa C merupakan bahasa prosedural sehingga operasi-operasi bilangan besar pada aritmatik field prima diimplementasikan dalam bentuk librari yang berisi fungsi-fungsi. Masing-masing fungsi mempunyai return value yang berguna untuk mendeteksi kesalahan. Jenis-jenis return value yang ada dapat dilihat pada Tabel 2 di bawah ini.


(14)

Tabel 2 Return value pada fungsi Return Value Keterangan

MP_OKAY (0) Jika fungsi berhasil MP_MEM (-2) Jika fungsi melebihi

memori

MP_VAL (-3) Jika nilai input tidak valid

Librari dalam penelitian ini mempunyai beberapa fungsi yang menjadi dasar dalam proses komputasi. Fungsi-fungsi tersebut yaitu:

a.init

Fungsi init digunakan untuk melakukan inisialisasi terhadap bilangan mp_int. Proses insialisasi ini akan memberikan nilai default pada variabel-variabel yang ada pada tipe data

mp_int. Algoritme fungsi init adalah sebagai berikut:

Input : mp_inta

Output : alokasi memori a sebanyak 10 digit array

1. Alokasi memori untuk 10 digit 2. Jika gagal , return (MP_MEM) 3. For n from 0 to 9 do

an 0

4. a.sign MP_ZPOS 5. a.used 0

6. a.alloc 10

7. Return ( MP_OKAY )

Algoritme fungsi init di atas menunjukkan bahwa fungsi tersebut akan mengalokasikan memori sebanyak 10 digit array atau setara dengan bilangan 320 bit. Jika terjadi kegagalan, maka fungsi tersebut akan mengembalikan nilai MP_MEM. Fungsi ini memberikan nilai default pada variabel-varibel yang ada dengan a.sign=MP_ZPOS, a.used=0, a.alloc=10, dan an = 0, untuk n=0,1,...,9.

b.mp_free_mem

Fungsi mp_free_mem merupakan kebalikan dari fungsi init.Fungsi ini digunakan untuk mengembalikan memori yang telah dialokasikan ke kondisi semula sehingga memori tersebut dapat digunakan kembali. Algoritme fungsi mp_free_mem adalah sebagai berikut:

Input : mp_int a

Output: memori a didealokasi 1. For n from 0 to a.used-1 do an 0

2. Free alokasi memori pada a 3. a.used 0

4. a.alloc 0

5 a. sign MP_ZPOS 6. Return ( MP_OKAY )

Algoritme fungsi mp_free_mem di atas menunjukkan bahwa fungsi tersebut akan mengembalikan memori yang telah terpakai. Selanjutnya fungsi tersebut akan memberikan nilai pada variabel-varibel yang ada dengan a.sign = MP_ZPOS, a.used = 0, dan a.alloc =0.

c. mp_grow

Fungsi mp_grow digunakan untuk menambah digit array ketika memori yang akan dipakai melebihi memori yang telah dialokasikan (alloc < used). Algoritme fungsi

mp_grow adalah sebagai berikut: Input : mp_int a dan int b

Output : alokasi memori a ditambahkan sampai b digit array

1. If a.alloc < b

Realokasikan digit array amenjadi b For n from a.used to b do

an 0

a.alloc b

2. Return ( MP_OKAY )

Algoritme fungsi mp_grow di atas menunjukkan bahwa fungsi tersebut akan memeriksa banyaknya memori yang dialokasikan terlebih dahulu. Jika banyaknya memori yang ingin ditambahkan lebih besar dari memori yang telah dialokasikan, maka fungsi tersebut akan mengalokasikan kembali memori sebanyak memori yang ingin ditambahkan.

d. mp_clear_zero

Fungsi mp_clear_zero digunakan untuk menghilangkan semua nilai 0 pada digit array paling signifikan yang merupakan nilai tidak penting. Algoritme fungsi mp_clear_zero

adalah sebagai berikut: Input : mp_int a

Output : semua nilai 0 yang tidak penting pada a dhilangkan

1. If aa.used-1 = 0

While a.used ≠ 0 and aa.used-1 = 0

aa.used aa.used - 1

2. If a.used = 0 a.sign MP_ZPOS 3. Return ( MP_OKAY )

Algoritme fungsi mp_clear_zero di atas menunjukkan bahwa fungsi tersebut akan


(15)

memeriksa nilai pada digit array paling signifikan. Jika bernilai 0, maka fungsi tersebut akan melakukan proses looping sampai digit array tidak bernilai 0. Selama proses looping, nilai a.used berkurang 1.

Librari dalam penelitian ini mempunyai beberapa fungsi yang digunakan sebagai operasi dasar dalam proses komputasi. Fungsi-fungsi tersebut yaitu:

a. mp_copy

Fungsi mp_copy digunakan sebagai operasi “sama dengan” (=) pada bilangan mp_int. Fungsi ini akan melakukan proses copy dari suatu bilangan mp_int ke bilangan mp_int

yang lainnya. Algoritme fungsi mp_copy

adalah sebagai berikut:

Input : mp_int a dan mp_int b Output : b = a

1. If b.alloc < a.used mp_grow ( b, a.used) 2. For n from 0 to a.used bn an

3. b.used a.used 4. b.alloc a.alloc 5 b.sign a.sign

Algoritme fungsi mp_copy di atas menunjukkan bahwa fungsi tersebut akan memeriksa jumlah alokasi memori pada bilangan bterlebih dahulu. Jika alokasi memori pada b lebih kecil dari a, maka dilakukan proses penambahan alokasi memori pada b sampai sebanyak a.used. Selanjutnya semua variabel yang ada pada b diberikan nilai yang sama dengan a.

b. mp_zero

Fungsi mp_zero digunakan untuk memberikan nilai 0 pada bilangan mp_int. Algoritme fungsi mp_zero adalah sebagai berikut:

Input : mp_int a Output : a = 0 1. a.used = 0

2. For n from 0 to a.used an 0

3 a. sign MP_ZPOS

c. mp_cmp

Fungsi mp_cmp digunakan untuk membandingkan dua bilangan mp_int. Fungsi ini mempunyai tiga return value. Ketiga return value tersebut yaitu MP_LT (-1) untuk menyatakan “lebih kecil”, MP_GT (1) untuk menyatakan “lebih besar”, dan M’P_EQ (0)

untuk menyatakan “sama dengan”. Algoritme fungsi mp_cmp adalah sebagai berikut:

Input : mp_int a dan mp_int b

Output : nilai perbandingan antara |a| dan |b| 1. If a.used > b.used

Return ( MP_GT ) 2. Else if a.used < b.used Return ( MP_LT ) 3. Else

For n from a.used-1 to 0 If an > bn

Return ( MP_GT ) Else if an < bn

Return ( MP_LT ) Return ( MP_EQ )

Algoritme fungsi mp_cmp di atas menunjukkan bahwa fungsi tersebut akan membandingkan jumlah memori yang digunakan oleh a dan b . Jika memori yang digunakan a lebih banyak dari memori yang digunakan b, maka a > b dan sebaliknya jika memori yang digunakan b lebih banyak dari memori yang digunakan a, maka a < b. Jika memori yang digunakan keduanya sama, maka akan dibandingkan dari digit array paling signifikan antara keduanya. Jika semua nilai digit array sama, maka a = b.

Librari dalam penelitian ini mempunyai beberapa operasi aritmatik dalam field prima. Operasi-operasi tersebut yaitu:

a. Penjumlahan

Operasi penjumlahan yang terdapat dalam librari dibagi menjadi beberapa fungsi. Fungsi-fungsi tersebut yaitu:

1. s_mp_add

Fungsi s_mp_add digunakan untuk melakukan proses penjumlahan dua bilangan mutlak mp_int. Algoritme yang digunakan seperti yang diajarkan di sekolah dasar. Fungsi ini melakukan proses penjumlahan antar digit array sebanyak n sehingga kompleksitasnya adalah O(n) dengan n adalah banyaknya digit array. Algoritme fungsi s_mp_add adalah sebagai berikut:

Input : mp_int a dan mp_int b Output : c = |a| + |b|

1. If a.used > b.used min b.used max a.used x a


(16)

2. Else

min a.used max b.used x b

3 If c.alloc < max +1 mp_grow(c,max +1) 4. u 0

5. For n from 0 to min-1 cn ( an + bn + u) mod basis

u ( an + bn + u) / basis

6. For n from min to max-1 cn (xn + u) mod basis

u (xn + u) / basis

7. If u > 0 cn u

c.used max +1 8. Else

c.used max 9. Return ( MP_OKAY )

Algoritme fungsi s_mp_add di atas menunjukkan bahwa fungsi tersebut akan melakukan proses penjumlahan antar digit array yang dimulai dari digit array paling tidak signifikan. Jika hasil penjumlahannya melebihi basis yang digunakan, maka akan menghasilkan nilai carry 1. Nilai carry ini akan ditambahkan ke penjumlahan digit array berikutnya.

2. mp_add

Fungsi mp_add merupakan fungsi penjumlahan dua bilangan mp_int dengan melihat tanda dari bilangan tersebut. Beberapa kemungkinan tanda yang dihasilkan dari penjumlahan dua bilangan

mp_int dapat dilihat pada Tabel 3. Algoritme fungsi mp_add adalah sebagai berikut:

Input : mp_int a dan mp_int b Output : c = a + b

1. If a.sign = b.sign c.sign a.sign

c |a| + |b| (s_mp_add) 2. Else

If | a | < | b | c.sign b.sign c |b| - |a| (s_mp_sub) Else if | a | > | b |

c.sign a.sign c |a| - |b| (s_mp_sub) Else

c.sign MP_ZPOS c 0 (mp_zero) 3. Return ( MP_OKAY )

Algoritme fungsi mp_add di atas menunjukkan bahwa fungsi tersebut akan

melakukan penjumlahan dua bilangan

mp_int dengan melihat tanda dari kedua bilangan tersebut. Jika kedua bilangan mempunyai tanda yang sama, maka operasi yang dilakukan adalah penjumlahan dan hasil yang diperoleh mempunyai tanda yang sama dengan bilangan yang ditambahkan. Akan tetapi, jika kedua bilangan mempunyai tanda yang berbeda, maka operasi yang dilakukan adalah operasi pengurangan dan tanda dari hasil yang diperoleh bergantung pada perbandingan kedua bilangan tersebut. Tabel 3 Tanda hasil fungsi mp_add

Tanda

a b Ket Operasi

Tanda

c

+ + c = a + b + - - c = a + b - + - a < b c = b - a - - + a < b c = b - a + + - a > b c = a - b + - + a > b c = a- b - + - a = b c = 0 + - + a = b c = 0 +

3. mp_add_mod

Fungsi mp_add_mod merupakan fungsi penjumlahan yang digunakan dalam field prima dimana hasil yang diperoleh harus merupakan anggota field tersebut. Jika hasil penjumlahan yang diperoleh bukan merupakan anggota dalam field prima tersebut, maka hasil tersebut harus dilakukan proses reduksi dengan bilangan p. Algoritme fungsi mp_add_mod adalah sebagai berikut:

Input : mp_int a, mp_int b dan mp_int p Output : c = (a + b) mod p

1. c a + b (mp_add) 2. If c = p

c 0 (mp_zero) 3. Else if c > p c c – p (mp_sub) 4. Return ( MP_OKAY )

b. Pengurangan

Operasi pengurangan yang terdapat dalam librari dibagi menjadi beberapa fungsi. Fungsi-fungsi tersebut yaitu:


(17)

1. s_mp_sub

Fungsi s_mp_sub digunakan untuk melakukan proses pengurangan dua bilangan mutlak mp_int. Fungsi ini melakukan pengurangan antar digit array sebanyak n sehingga kompleksitasnya adalah O(n) dengan n adalah banyaknya digit array. Algoritme fungsi s_mp_sub

adalah sebagai berikut:

Input : mp_int a dan mp_int b Output : c = |a| - |b|

1. min b.used 2. max a.used 3. If c.alloc < max mp_grow(c,max ) 4. u 0

5. For n from 0 to min-1 If an ≥ bn + u

cn an - bn - u

u 0 Else

cn an+ basis - bn – u

u 1

6. For n from min to max-1 If an ≥ u

cn an - u

u 0 Else

cn an+ basis – u

u 1 7. c.used max 8. mp_clear_zero ( c ) 9. Return ( MP_OKAY )

Algoritme fungsi s_mp_sub di atas menunjukkan bahwa fungsi tersebut akan melakukan proses pengurangan antar digit array yang dimulai dari digit array paling tidak signifikan. Jika nilai digit array a lebih besar dari digit array b ditambah carry, maka akan menghasilkan nilai carry 1. Nilai carry ini akan digunakan untuk mengurangi digit array a berikutnya.

2. mp_sub

Fungsi mp_sub merupakan fungsi pengurangan dua bilangan mp_int dengan melihat tanda dari bilangan tersebut. Beberapa kemungkinan tanda yang dihasilkan dari pengurangan dua bilangan

mp_int dapat dilihat pada Tabel 4. Algoritme fungsi mp_sub adalah sebagai berikut:

Input : mp_int a dan mp_int b Output : c = a – b

1. If a.sign ≠ b.sign c.sign a.sign

c |a| + |b| (s_mp_add) 2. Else

If | a | < | b |

c.sign ~ a.sign c |b| - |a| (s_mp_sub) Else if | a | > | b |

c.sign a.sign c |a| - |b| (s_mp_sub) Else

c.sign MP_ZPOS c 0 (mp_zero) 3. Return ( MP_OKAY )

Algoritme fungsi mp_sub di atas menunjukkan bahwa fungsi tersebut akan melakukan pengurangan dua bilangan

mp_int dengan melihat tanda dari kedua bilangan tersebut. Jika kedua bilangan mempunyai tanda yang berbeda, maka operasi yang dilakukan adalah penjumlahan dan hasil yang diperoleh mempunyai tanda yang sama dengan bilangan yang dikurangi. Akan tetapi, jika kedua bilangan mempunyai tanda yang sama, maka operasi yang dilakukan adalah operasi pengurangan dan tanda dari hasil yang diperoleh bergantung pada perbandingan kedua bilangan tersebut.

Tabel 4 Tanda hasil fungsi mp_sub

Tanda

a b Ket Operasi

Tanda

c

+ - c = a + b + - + c = a + b - + + a < b c = b - a - - - a < b c = b - a + + + a > b c = a - b + - - a > b c = a- b - + + a = b c = 0 + - - a = b c = 0 +

3. mp_sub_mod

Fungsi mp_sub_mod merupakan fungsi pengurangan yang digunakan dalam field prima dimana hasil yang diperoleh harus merupakan anggota field tersebut. Jika hasil yang diperoleh bukan merupakan anggota dalam field prima tersebut, maka hasil tersebut harus dilakukan proses reduksi dengan bilangan p. Algoritme


(18)

fungsi mp_sub_mod adalah sebagai berikut:

Input : mp_int a, mp_int b dan mp_int p Output : c = (a - b) mod p

1. c a - b (mp_sub) 2. Else if c.sign = MP_NEG c c + p (mp_add) 3. Return ( MP_OKAY )

c. Perkalian

Operasi perkalian yang terdapat dalam librari dibagi menjadi beberapa fungsi. Fungsi-fungsi tersebut yaitu:

1. s_mp_mul

Fungsi s_mp_mul merupakan fungsi perkalian dua bilangan mutlak mp_int

yang menggunakan algoritme schoolbook. Jika dua bilangan mp_int a dan b mempunyai digit array yang sama sebanyak n, maka banyaknya perkalian antar digit array adalah n2 dan banyaknya penjumlahan adalah (n-1)2 (Weimerskirch & Paar 2006). Algoritme fungsi s_mp_mul

adalah sebagai berikut:

Input : mp_int a dan mp_int b Output : c = |a| |b|

1. Inisialisasi x dan y 2. For n from 0 to b.used-1 u 0

For m from 0 to a.used-1 xm+n (ambn+ u) mod basis

u (ambn+ u) / basis

If u > 0 xm+n u

x.used m + n +1 Else

x.used m + n y y + x (mp_add) x 0 (mp_zero)

3. c y

4. Bersihkan variabel sementara 5. Return ( MP_OKAY )

Algoritme fungsi s_mp_mul di atas menunjukkan bahwa fungsi tersebut melakukan perkalian bilangan a dengan seluruh digit array b dimana setiap perkalian menghasilkan bilangan x. Hasil akhir dari fungsi ini merupakan penjumlahan seluruh bilangan x yang dihasilkan.

2. s_mp_sqr

Fungsi s_mp_sqr merupakan fungsi kuadrat atau fungsi perkalian khusus

dimana nilai multiplicand sama dengan nilai multiplier. Untuk bilangan n-digit array, diperlukan (n2 + n)/ 2 perkalian tunggal. Hal ini tentu akan lebih baik jika dibandingkan dengan perkalian biasa yang memerlukan n2 perkalian tunggal. Algoritme fungsi s_mp_sqr adalah sebagai berikut:

Input : mp_int a Output : b = a2 1. Inisialisasi c (init) 2. c.used 2 a.used 3. For i from 0 to a.used-1

r c2i + ai2

c2i r mod basis

u r / basis k 1

For j from i + 1 to a.used-1 r 2 ai aj + u+ c2i + k c2i + k r mod basis

u r / basis k k +1 While u > 0 do r u+ c2i + k

c2i + k r mod basis

u r / basis k k +1 4. mp_clear_zero(c) 5. b c

6. Bersihkan variabel sementara 7. Return ( MP_OKAY )

3. mp_mul

Fungsi mp_mul merupakan fungsi perkalian dua bilangan mp_int dengan melihat tanda dari kedua bilangan tersebut. Algoritme fungsi mp_mul adalah sebagai berikut:

Input : mp_int a dan mp_int b Output : c = a b

1. c = |a| |b| (s_mp_mul) 2. If a.sign = b.sign c.sign MP_ZPOS 3. Else

If c= 0

c.sign MP_ZPOS Else

c.sign MP_NEG 4. Return ( MP_OKAY )

Algoritme fungsi mp_mul di atas menunjukkan bahwa fungsi tersebut akan mengalikan dua bilangan mp_int dengan melihat tanda dari kedua bilangan tersebut. Jika kedua bilangan mempunyai tanda yang sama, maka hasil yang diperoleh bernilai


(19)

positif. Akan tetapi, jika kedua bilangan mempunyai tanda yang berbeda maka hasil yang diperoleh bernilai negatif tetapi jika salah satu bilangannya bernilai 0 maka hasil yang diperoleh bernilai positif.

4. mp_mul_mod

Fungsi mp_mul_mod merupakan fungsi perkalian yang digunakan dalam field prima dimana hasil yang diperoleh harus merupakan anggota field tersebut. Jika hasil yang diperoleh bukan merupakan anggota dalam field tersebut, maka hasil tersebut harus dilakukan proses reduksi. Algoritme fungsi mp_mul_mod adalah sebagai berikut:

Input : mp_int a, mp_int b, dan mp_int p Output : c =( a b) mod p

1. c = a b (mp_mul) 2. If c = a

c 0 ( mp_zero) 3. Else if c > p

c c mod p (mp_mod) 4. Return ( MP_OKAY )

d. Pembagian

Operasi pembagian yang terdapat dalam librari dibagi menjadi beberapa fungsi. Fungsi-fungsi tersebut yaitu:

1. mp_div

Fungsi mp_div digunakan untuk melakukan operasi pembagian antara bilangan mutlak mp_int a dan bilangan mutlak mp_int b. Fungsi ini akan menghasilkan nilai hasil bagi dan sisa bagi. Algoritme yang digunakan pada fungsi ini adalah algoritme pembagian klasik seperti yang diajarkan di sekolah dasar hanya saja sebelum dilakukan proses pembagian terdapat proses normalisasi. Proses normalisasi dilakukan agar nilai digit array paling signifikan b lebih besar atau sama dengan basis/2 (bnbasis/2) dengan

mengalikan suatu konstanta k pada a dan b. Nilai k sebaiknya merupakan kelipatan 2 sehingga operasinya hanya shift. Dengan adanya proses normalisasi ini, nilai perkiraan hasil bagi (q’) akan mendekati nilai hasil bagi sebenarnya (q). Jika digit array a = digit array b + 1 maka nilai q’ diperoleh dari persamaan :

+

=

,

1

min

'

1 1

B

b

a

B

a

q

n n n

B adalah basis yang digunakan. Jika pada persamaan di atas nilai bn-1 a / b, maka q’-2 q q(Knuth 1998, diacu dalam Welschenbach 2005). Dengan asumsi bahwa nilai bn-1 mendekati nilai B,

maka nilai q’ adalah q’-2 ≤ q ≤ q’. Proses normalisasi pada fungsi mp_div

hanya akan mengubah nilai sisa bagi pada proses pembagian tanpa mengubah nilai hasil bagi. Oleh karena itu, untuk mendapatkan nilai sisa bagi yang sebenarnya diperlukan proses denormalisasi yaitu dengan membagi sisa bagi dengan k. Algoritme fungsi mp_div

dapat dilihat pada Lampiran 1.

2. mp_div_mod

Fungsi mp_div_mod merupakan fungsi pembagian yang digunakan dalam field prima dimana pembagian suatu bilangan a oleh b merupakan perkalian bilangan a dengan b-1. Jika hasil yang diperoleh bukan merupakan anggota dalam field tersebut , maka hasil tersebut harus dilakukan proses reduksi. Algoritme fungsi mp_div_mod

adalah sebagai berikut:

Input : mp_int a, mp_int b, dan mp_int p Output : c =( a / b) mod p

1. Inisialisasi d

2. d b-1 (mp_invmod) 3. c a b-1 (mp_mul) 4. If c = a

c 0 ( mp_zero) 5. Else if c > a

c c mod p (mp_mod) 6. Return ( MP_OKAY )

e. Reduksi

Reduksi merupakan operasi yang dilakukan untuk mencari nilai sisa bagi dari pembagian dua bilangan mp_int sehingga hasil yang diperoleh merupakan anggota field prima. Fungsi dalam librari yang digunakan untuk melakukan operasi reduksi yaitu:

mp_mod

Algoritme fungsi mp_mod menggunakan algoritme pembagian klasik sama seperti pada fungsi mp_div dimana output dari fungsi mp_div adalah nilai hasil bagi dan nilai sisa bagi. Nilai sisa bagi inilah yang diperlukan oleh fungsi mp_mod.


(20)

f. Invers Perkalian

Invers perkalian suatu bilangan mp_int a adalah a-1 dengan a a-1 = 1. Nilai invers tersebut diperlukan dalam operasi pembagian pada field prima. Fungsi dalam librari yang digunakan untuk melakukan operasi invers perkalian yaitu:

mp_invmod

Fungsi mp_invmod digunakan untuk mencari nilai invers perkalian pada suatu bilangan mp_int a pada field prima p. Algoritme yang digunakan fungsi ini adalah extended Euclidean. Algoritme ini menggunakan operasi pembagian dalam prosesnya sehingga membutuhkan cost yang cukup tinggi. Algoritme fungsi

mp_invmod adalah sebagai berikut: Input : mp_int a dan mp_int p Output : c = a-1

1.Inisialisasi q, r, y1, y2, mul, y, ta, dan tb

2. ta p

3. tb a

4. y2 1

5. If b=0

Return (MP_VAL) 6. While tb≠ 0

q ta / tb

r ta mod tb

y y1 – q y2

ta tb

tb r

y1 y2

y2 y

7. c y1 mod p

8. Bersihkan variabel sementara 9. Return ( MP_OKAY )

g. Eksponensial

Operasi eksponensial merupakan operasi yang berperan penting dalam kriptografi kunci asimetrik. Operasi ini digunakan dalam proses enkripsi dan dekripsi. Fungsi dalam librari yang digunakan untuk melakukan operasi eksponensial yaitu:

mp_exp_mod

Fungsi mp_exp_mod merupakan fungsi eksponensial yang digunakan pada field prima. Algoritme yang digunakan pada fungsi ini adalah left to right exponentiation. Algoritme ini bekerja dengan menggunakan nilai biner dari bilangan pemangkatnya (b). Algoritme ini melakukan proses perkalian multipresisi sebanyak n + t dengan n adalah panjang bit b dan t adalah banyaknya bit b yang

bernilai 1. Algoritme fungsi mp_exp_mod

adalah sebagai berikut:

Input : mp_int a, mp_int b, dan mp_int p Output : c = abmod p

1. c 1

2. x 1 << bitlength(basis) -1 3. For i from b.used-1 to 0 temp bi

For j from 0 to bitlength(basis)-1 c c2 mod p

If temp & x ≠ 0 c (c a) mod p temp temp << 1 4. Return ( MP_OKAY )

Pengujian

Pengujian dilakukan dengan cara membandingkan output yang dihasilkan sistem dengan output yang dihasilkan oleh software pembanding sehingga dapat diketahui nilai kebenaran dari output tersebut. Software yang digunakan sebagai pembanding adalah MAPLE 12. Pengujian dilakukan sebanyak 10 kali untuk masing-masing operasi dan dihasilkan output yang benar. Untuk mengetahui kinerja sistem, dihitung nilai total waktu eksekusinya. Total waktu eksekusi dari hasil pengujian terhadap masing-masing fungsi aritmatik field prima dapat dilihat pada tabel-tabel di bawah ini. Tabel 5 Total waktu eksekusi fungsi

penjumlahan pada field prima

Bit

Total Waktu Konversi

Basis (s)

Waktu Operasi

( s)

Total Waktu (s)

256 0.000472 0.0000028 0.000475 512 0.001963 0.0000028 0.001966 1024 0.010542 0.0000036 0.010545

Tabel 5 di atas menunjukkan bahwa total waktu konversi basis (dari basis 10 ke basis 232 kemudian dikonversi kembali dari basis 232 ke basis 10) jauh lebih besar dari waktu operasi penjumlahan. Oleh karena itu, proses konversi basis sangat mempengaruhi total waktu eksekusi operasi penjumlahan.


(21)

Tabel 6 Total waktu eksekusi fungsi pengurangan pada field prima

Bit

Total Waktu Konversi

Basis (s)

Waktu Operasi

( s)

Total Waktu (s)

256 0.000472 0.0000029 0.000475 512 0.001963 0.0000035 0.001967 1024 0.010542 0.0000041 0.010546

Tabel 6 di atas menunjukkan bahwa total waktu eksekusi operasi pengurangan sama seperti operasi penjumlahan. Hal ini dikarenakan banyaknya proses pada operasi pengurangan dan operasi penjumlahan adalah sama atau dengan kata lain kedua proses ini memiliki kompleksitas yang sama.

Tabel 7 Total waktu eksekusi fungsi perkalian pada field prima

Bit

Total Waktu Konversi

Basis (s)

Waktu Operasi

( s)

Total Waktu (s)

256 0.000472 0.0000353 0.000507 512 0.001963 0.0000977 0.002061 1024 0.010542 0.0003669 0.010909

Tabel 7 di atas menunjukkan bahwa total waktu eksekusi operasi perkalian tidak berbeda jauh dengan operasi penjumlahan dan pengurangan. Hal ini disebabkan perbandingan antara total waktu konversi basis dan waktu operasi sangat besar. Akan tetapi, jika dilihat pada waktu operasinya, waktu operasi pada perkalian jauh lebih besar dari operasi penjumlahan dan pengurangan.

Tabel 8 Total waktu eksekusi fungsi pembagian pada field prima

Bit

Total Waktu Konversi

Basis (s)

Waktu Operasi

( s)

Total Waktu (s)

256 0.000472 0.0043139 0.004786 512 0.001963 0.0065998 0.008563 1024 0.010542 0.0190874 0.029629

Tabel 8 di atas menunjukkan bahwa total waktu konversi basis pada operasi pembagian lebih kecil dari pada waktu operasinya tetapi perbedaannya tidak terlalu signifikan. Akan tetapi, jika hanya dilihat pada waktu operasinya, operasi pembagian memerlukan waktu yang jauh lebih besar dari operasi perkalian. Hal ini disebabkan jumlah proses pada operasi pembagian jauh lebih banyak dari operasi perkalian dimana pada operasi pembagian terdapat proses invers dan juga perkalian. Tabel 9 Total waktu eksekusi fungsi

eksponensial pada field prima

Bit

Total Waktu Konversi

Basis (s)

Waktu Operasi

( s)

Total Waktu (s)

256 0.000472 0.0121269 0.012599 512 0.001963 0.0614644 0.063428 1024 0.010542 0.4215481 0.432090

Tabel 9 di atas menunjukkan bahwa waktu operasi pada operasi eksponensial jauh lebih besar dari total waktu konversi basisnya. Hal itu menyebabkan total waktu eksekusi operasi eksponensial tidak berbeda jauh dengan waktu operasinya.

KESIMPULAN DAN SARAN

Kesimpulan

Bilangan besar direpresentasikan dalam basis 232 pada komputer 32 bit. Representasi ini akan membutuhkan jumlah digit array paling sedikit bila dibandingkan dengan representasi lainnya sehingga efisien dalam penggunaan memori. Untuk bilangan 1024 bit hanya dibutuhkan 32 digit array. Semakin sedikit digit array yang dibutuhkan untuk merepresentasikan bilangan besar, maka semakin cepat komputasi pada bilangan besar tersebut.

Dari pengujian yang dilakukan sebanyak 10 kali untuk masing-masing operasi pada field prima, sistem menghasilkan output yang benar. Pada bilangan 1024 bit, operasi penjumlahan membutuhkan waktu eksekusi sebesar 0.010545s, operasi pengurangan membutuhkan waktu eksekusi sebesar 0.010546 s, operasi perkalian membutuhkan waktu eksekusi sebesar 0.010909 s, operasi pembagian membutuhkan waktu eksekusi sebesar 0.029629s, dan operasi pengurangan membutuhkan waktu eksekusi sebesar 0.432090s.


(22)

Saran

Penelitian ini dapat dikembangkan lebih lanjut dengan menggunakan algoritme lain yang lebih baik. Untuk operasi perkalian, dapat digunakan algoritme Karatsuba. Jika dilihat dari kompleksitasnya, algoritme Karatsuba mempunyai kompleksitas yang lebih baik dari algoritme schoolbook sehingga diharapkan dapat mempercepat operasi perkalian. Untuk operasi reduksi, dapat digunakan algoritme Montgomery. Algoritme Montgomery merupakan algoritme reduksi yang mengganti operasi pembagian pada algoritme klasik dengan operasi lain yang less-expensive sehingga diharapkan dapat mempercepat proses reduksi.

DAFTAR PUSTAKA

Burnett S, Paine S. 2001. RSA Security’s Official Guide to Cryptography. New York: McGraw-Hill.

Denis TS. 2006. BigNum Math: Implementing Cryptographic Multiple Precision Arithmetic. Canada: Syngress Publishing, Inc.

Hankerson D, Menezes A, Vanstone S. 2004. Guide to Elliptic Curve Cryptography. New York: Springer.

Knuth D. 1998. The Art of Computer Programming. Addison-Wesley, Reading, MA.

Pressman R. 2001. Software Engineering: a Practitioner’s Approach. New York: McGraw-Hill.

Weimerskirch A, Paar C. 2006. Generalizations of the Karatsuba Algorithm for Efficient Implementations. http://www.crypto.rub.de/ imperia/md/content/texte/publications/tecrep orts/kaweb.pdf [3 November 2010].

Welschenbach M. 2005. Cryptography in C and C++. New York: Springer.


(23)

(24)

Lampiran 1 Algoritme fungsi mp_div Input : mp_int a dan mp_int b Output : c =

a

/

b

dan d = a – bq 1. Inisialisasi tb, q, r, t1, tempq, dan tempb 2. If b=0

Return (MP_VAL) 3. If a < b

c 0 d a

Return ( MP_OKAY )

Proses Normalisasi

4. temp bb.used-1

5. If temp < basis/2 While temp < basis /2 temp = 2 temp norm ++ 6. r 2 norm a 7. tb 2 norm b 8. While r ≥ tb

sumzr r.used-tb.used If rr.used-1≥ tbtb.used-1 tq 1

t1 tb (basis sumzr) If t1 > r

sumzr --

temp (rr.used-1 basis + rr.used-2) / tbtb.used-1 tq min(temp,basis-1)

t1 tb tq (basis sumzr)

If t1 > r

tempb tb (basis sumzr) While t1 > r

tq-- t1 t1 – tempb

Else

sumzr --

temp (rr.used-1 basis + rr.used-2) / tbtb.used-1 tq min(temp,basis-1)

t1 tb tq (basis sumzr)

If t1 > r

tempb tb (basis sumzr) While t1 > r

tq--

t1 t1 – tempb r r – t1

tempq tq (basis sumzr) q q + tempq

9. c q 10. d r / 2 norm

11. Bersihkan variabel sementara 12. Return ( MP_OKAY )


(25)

PENDAHULUAN

Latar Belakang

Kriptografi merupakan ilmu pengetahuan yang menggunakan persamaan matematis untuk melakukan proses enkripsi dan dekripsi data. Teknik ini digunakan untuk mengubah data ke dalam kode-kode tertentu dengan tujuan agar informasi yang disimpan tidak dapat dibaca oleh siapapun kecuali orang yang berhak.

Algoritme dalam kriptografi ada dua macam yaitu algoritme simetris dan algoritme asimetris. Algoritme simetris adalah algoritme yang menggunakan kunci yang sama pada proses enkripsi dan dekripsinya, sedangkan algoritme asimetris adalah algoritme yang menggunakan kunci publik pada proses enkripsi dan kunci private pada proses dekripsinya. Algoritme simetris mempunyai kecepatan yang tinggi dalam proses enkripsi dan dekripsinya sehingga sangat cocok untuk diimplementasikan pada mesin kecil seperti smartcard. Akan tetapi, algoritme ini mempunyai kekurangan, terutama dalam manajemen kuncinya. Oleh karena itu, digunakanlah algoritme asimetris untuk mengatasi masalah tersebut. Akan tetapi, algoritme ini juga mempunyai kekurangan yaitu proses enkripsi dan dekripsinya jauh lebih lama dari algoritme simetris. Hal ini disebabkan penggunaan bilangan besar dalam proses operasi pada algoritme asimetris.

Operasi-operasi bilangan besar dalam bidang kriptografi merupakan operasi modular (perkalian modular, penjumlahan modular, eksponensial modular, invers perkalian modular, dll). Operasi modular ini merupakan operasi suatu field. Salah satu field yang sering digunakan dalam kriptografi adalah field prima. Salah satu algoritme kriptografi yang menggunakan algoritme asimetris adalah RSA. Field yang digunakan oleh RSA adalah field prima. Umumnya, panjang kunci yang digunakan RSA adalah 1024 bit atau setara dengan bilangan 309 digit (Burnett & Paine 2001). Bilangan besar ini tentu tidak dapat dikomputasikan oleh mesin dengan kapasitas memori yang terbatas seperti komputer jika hanya menggunakan kemampuan dari mesin tersebut. Sekarang ini kapasitas mesin komputer secara umum adalah 32 bit sehingga komputer tersebut hanya mampu mengomputasikan data yang mempunyai panjang maksimal 32 bit atau setara dengan bilangan 10 digit. Oleh karena itu, diperlukan suatu algoritme tertentu agar komputer tersebut mampu melakukan

komputasi pada bilangan yang jauh lebih besar dari kapasitas komputer tersebut. Algoritme yang digunakan harus efisien baik dari alokasi memori yang digunakan maupun dari waktu eksekusi yang diperlukan. Hal inilah yang mendorong adanya keinginan untuk menerapkan suatu algoritme tertentu agar aritmatik bilangan besar terutama dalam field prima dapat dikomputasikan oleh komputer.

Tujuan

Tujuan penelitian ini adalah:

1. Merepresentasikan bilangan besar ke dalam suatu basis tertentu agar efisien dalam alokasi memorinya.

2. Menerapkan suatu algoritme tertentu agar komputer mampu mengomputasikan operasi-operasi bilangan besar pada field prima dengan benar. Selanjutnya akan diukur kinerja dari algoritme tersebut.

Ruang Lingkup

Ruang lingkup penelitian ini difokuskan pada implementasi operasi penjumlahan, pengurangan, perkalian, pembagian, reduksi, invers perkalian, dan eksponensial pada field prima dengan menggunakan bahasa pemrograman C. Panjang bit bilangan besar yang digunakan adalah maksimal 1024 bit.

TINJAUAN PUSTAKA

Field

Field merupakan abstraksi dari sistem bilangan (seperti bilangan rasional Q, bilangan real R, danbilangan kompleks C). Field terdiri atas satu set F bersama dengan dua operasi, penjumlahan (+) dan perkalian ( ), dengan syarat:

1. (F, +) merupakan grup komutatif dengan nilai identitas 0.

2. (F \{0}, ) merupakan grup komutatif dengan nilai identitas 1.

3. Sifat distributif berlaku: (a + b) c = a c + b c untuk a,b,c

F

(Hankerson et al. 2004 ). Field Prima

Field prima (Fp) merupakan suatu field

yang unsurnya terdiri atas 0 sampai dengan p-1 dengan p bilangan prima. Operasi aritmatik pada field prima merupakan operasi modulo p sehingga hasilnya mempunyai struktur field (Hankerson et al. 2004 ).


(26)

PENDAHULUAN

Latar Belakang

Kriptografi merupakan ilmu pengetahuan yang menggunakan persamaan matematis untuk melakukan proses enkripsi dan dekripsi data. Teknik ini digunakan untuk mengubah data ke dalam kode-kode tertentu dengan tujuan agar informasi yang disimpan tidak dapat dibaca oleh siapapun kecuali orang yang berhak.

Algoritme dalam kriptografi ada dua macam yaitu algoritme simetris dan algoritme asimetris. Algoritme simetris adalah algoritme yang menggunakan kunci yang sama pada proses enkripsi dan dekripsinya, sedangkan algoritme asimetris adalah algoritme yang menggunakan kunci publik pada proses enkripsi dan kunci private pada proses dekripsinya. Algoritme simetris mempunyai kecepatan yang tinggi dalam proses enkripsi dan dekripsinya sehingga sangat cocok untuk diimplementasikan pada mesin kecil seperti smartcard. Akan tetapi, algoritme ini mempunyai kekurangan, terutama dalam manajemen kuncinya. Oleh karena itu, digunakanlah algoritme asimetris untuk mengatasi masalah tersebut. Akan tetapi, algoritme ini juga mempunyai kekurangan yaitu proses enkripsi dan dekripsinya jauh lebih lama dari algoritme simetris. Hal ini disebabkan penggunaan bilangan besar dalam proses operasi pada algoritme asimetris.

Operasi-operasi bilangan besar dalam bidang kriptografi merupakan operasi modular (perkalian modular, penjumlahan modular, eksponensial modular, invers perkalian modular, dll). Operasi modular ini merupakan operasi suatu field. Salah satu field yang sering digunakan dalam kriptografi adalah field prima. Salah satu algoritme kriptografi yang menggunakan algoritme asimetris adalah RSA. Field yang digunakan oleh RSA adalah field prima. Umumnya, panjang kunci yang digunakan RSA adalah 1024 bit atau setara dengan bilangan 309 digit (Burnett & Paine 2001). Bilangan besar ini tentu tidak dapat dikomputasikan oleh mesin dengan kapasitas memori yang terbatas seperti komputer jika hanya menggunakan kemampuan dari mesin tersebut. Sekarang ini kapasitas mesin komputer secara umum adalah 32 bit sehingga komputer tersebut hanya mampu mengomputasikan data yang mempunyai panjang maksimal 32 bit atau setara dengan bilangan 10 digit. Oleh karena itu, diperlukan suatu algoritme tertentu agar komputer tersebut mampu melakukan

komputasi pada bilangan yang jauh lebih besar dari kapasitas komputer tersebut. Algoritme yang digunakan harus efisien baik dari alokasi memori yang digunakan maupun dari waktu eksekusi yang diperlukan. Hal inilah yang mendorong adanya keinginan untuk menerapkan suatu algoritme tertentu agar aritmatik bilangan besar terutama dalam field prima dapat dikomputasikan oleh komputer.

Tujuan

Tujuan penelitian ini adalah:

1. Merepresentasikan bilangan besar ke dalam suatu basis tertentu agar efisien dalam alokasi memorinya.

2. Menerapkan suatu algoritme tertentu agar komputer mampu mengomputasikan operasi-operasi bilangan besar pada field prima dengan benar. Selanjutnya akan diukur kinerja dari algoritme tersebut.

Ruang Lingkup

Ruang lingkup penelitian ini difokuskan pada implementasi operasi penjumlahan, pengurangan, perkalian, pembagian, reduksi, invers perkalian, dan eksponensial pada field prima dengan menggunakan bahasa pemrograman C. Panjang bit bilangan besar yang digunakan adalah maksimal 1024 bit.

TINJAUAN PUSTAKA

Field

Field merupakan abstraksi dari sistem bilangan (seperti bilangan rasional Q, bilangan real R, danbilangan kompleks C). Field terdiri atas satu set F bersama dengan dua operasi, penjumlahan (+) dan perkalian ( ), dengan syarat:

1. (F, +) merupakan grup komutatif dengan nilai identitas 0.

2. (F \{0}, ) merupakan grup komutatif dengan nilai identitas 1.

3. Sifat distributif berlaku: (a + b) c = a c + b c untuk a,b,c

F

(Hankerson et al. 2004 ). Field Prima

Field prima (Fp) merupakan suatu field

yang unsurnya terdiri atas 0 sampai dengan p-1 dengan p bilangan prima. Operasi aritmatik pada field prima merupakan operasi modulo p sehingga hasilnya mempunyai struktur field (Hankerson et al. 2004 ).


(27)

Algoritme Perkalian

Algoritme schoolbook merupakan algoritme umum yang digunakan untuk mengalikan dua polinomial. Sebagai contoh, dua polinomial berderajat d dengan n = d + 1 masing-masing sebagai berikut:

A(x) =

= d i i i

x

a

0

, B(x) =

= d i i i

x

b

0

Hasil perkalian C(x) = A(x)B(x) dihitung sebagai berikut:

C(x) =

∑∑

= = + d i d j j i j i

b

x

a

0 0

Polinomial C(x) diperoleh dari n2 operasi perkalian dan (n-1)2 operasi penjumlahan.

Algoritme Karatsuba merupakan algoritme perkalian yang dikenalkan oleh Karatsuba. Algoritme ini menggunakan teknik divide and conquer dengan membagi bilangan besar menjadi dua. Sebagai contoh, dua polinomial berderajat d dengan n = d + 1 masing-masing sebagai berikut:

A(x) = a1x + a0 , B(x) = b1x + b0

Variabel D0, D1, dan D0,1 merupakan variabel

pembantu dengan

D0= a0b0, D1= a1b1, D0,1= (a0 + a1) (b0 + b1)

Hasil perkalian C(x) = A(x)B(x) dihitung sebagai berikut:

C(x) = D1x2 + (D0,1 - D0 - D1)x + D0

(Weimerskirch & Paar 2006 ).

Algoritme Invers Perkalian

Algoritme extended Euclidian merupakan perluasan dari algoritme Euclidian yang digunakan untuk mencari nilai invers perkalian bilangan b pada field prima a dengan mencari nilai x dan y sehingga ax + by = d dengan d = gcd(a,b) = 1. Algoritme invers perkalian lainnya adalah algoritme binary. Algoritme binary merupakan algoritme invers perkalian yang mengganti operasi pembagian pada algoritme extended Euclidian dengan operasi shift dan pengurangan (Hankerson et al. 2004 ).

Algoritme Reduksi

Sebuah bilangan a dikatakan direduksi oleh bilangan b dengan mencari nilai sisa dari pembagian a/b. Proses reduksi merupakan proses mencari nilai r pada persamaan a=bq + r dengan q =

a

/

b

. Hasil r dikatakan kongruen dengan a dalam modulo b atau dapat

ditulis r a (mod b). Tujuan dari reduksi adalah untuk membuat suatu field.

Terdapat beberapa algoritme reduksi seperti algoritme klasik, algoritme Barret, dan algoritme Montgomery. Algoritme klasik menggunakan operasi pembagian dalam melakukan reduksi, sedangkan algoritme Barret dan Montgomery mengganti operasi pembagian tersebut dengan operasi yang less-expensive (Denis 2006).

Algoritme Eksponensial

Salah satu algoritme eksponensial adalah algoritme left to right exponentiation. Proses algoritme ini dimulai dari bit paling signifikan sampai ke bit paling tidak signifikan. Algoritme left to right exponentiation adalah sebagai berikut:

Input : a dan b Output : c = a b 1. c 1

2. For i from k-1 to 0 do c c2

c c abi 3. Return c ( Denis 2006).

Pengujian Blackbox

Pengujian blackbox memfokuskan pada keperluan fungsional dari software sehingga metode ini memungkinkan pengembang software untuk membuat himpunan kondisi input yang akan melatih seluruh syarat-syarat fungsional suatu program. Pengujian blackbox berusaha untuk menemukan kesalahan dalam beberapa kategori, yaitu:

1. Kesalahan fungsi 2. Kesalahan interface 3. Kesalahan struktur data 4. Kesalahan kinerja

5. Kesalahan inisialisasi dan terminasi

Salah satu metode pengujian blackbox adalah comparison testing. Dalam beberapa situasi dimana keandalan suatu software amat kritis, beberapa aplikasi sering menggunakan software dan hardware ganda. Ketika software ganda dibuat, tim pengembang software lainnya membangun versi independen dari aplikasi dengan spesifikasi yang sama. Setiap versi dapat diuji dengan data uji yang sama untuk memastikan seluruhnya menyediakan output yang sama. Kemudian seluruh versi dieksekusi secara paralel dengan perbandingan hasil real-time untuk memastikan konsistensi (Pressman 2001).


(28)

METODE PENELITIAN

Penelitian ini dilakukan dalam beberapa tahap. Tahapan-tahapan tersebut dapat dilihat pada Gambar 1 di bawah ini.

.

Gambar 1 Metodologi Penelitian.

Studi Literatur

Studi literatur merupakan tahap paling awal dalam metodologi penelitian ini. Tahapan ini diperlukan untuk mempelajari prinsip dasar aritmatik field prima dan kajian umum lain yang berkaitan dengan field prima tersebut.

Analisis

Pada tahap ini dilakukan analisis bagaimana cara merepresentasikan bilangan besar dalam komputer dengan kapasitas yang jauh lebih kecil dari bilangan tersebut sehingga efisien dalam alokasi memorinya. Setelah itu dilakukan analisis bagaimana komputer dapat melakukan komputasi terhadap operasi penjumlahan, pengurangan, perkalian, pembagian, reduksi, invers perkalian, dan eksponensial pada bilangan besar dengan waktu yang cepat dan hasil yang benar.

Hankerson et al. (2004) mengemukakan bahwa untuk dapat melakukan operasi penjumlahan, pengurangan, perkalian, reduksi, dan invers perkalian pada bilangan p yang sangat besar, setiap anggota pada field prima (Fp) dapat dipandang sebagai integer multi-kata

dengan basis 2W, W adalah ukuran mesin dalam W-bit. Dalam pemrograman, suatu a

Fp

diekspresikan sebagai suatu array dengan array paling kanan merupakan array paling signifikan. Setelah itu dapat dilakukan operasi-operasi pada bilangan tersebut dengan

menggunakan algoritme tertentu. Sebagai contoh, untuk operasi penjumlahan dilakukan dengan menjumlahkan masing-masing array yang dimulai dari array paling tidak signifikan.

Implementasi

Tahap ini mencakup bagaimana merepresentasikan bilangan besar dalam basis 2W dengan W adalah ukuran mesin dalam W-bit dengan menggunakan bahasa C. Selanjutnya dilakukan proses implementasi algoritme penjumlahan, pengurangan, perkalian, pembagian, invers perkalian, reduksi, dan eksponensial pada bilangan tersebut.

Lingkungan Pengembangan

Sistem dibangun dan diuji dengan menggunakan hardware dan software dengan spesifikasi tertentu. Hardware yang digunakan berupa personal computer (PC) dengan spesifikasi:

1. Prosesor AMD Sempron 902 MHz 2. RAM 512 MB

Software yang digunakan yaitu: 1. Sistem Operasi Windows XP 2. Bloodshed Dev-C++ 4.9.9.2 3. Maple 12

Pengujian

Pengujian pada penelitian ini dilakukan dengan menggunakan metode blackbox. Pengujian dilakukan dengan membandingkan antara output yang dihasilkan sistem pada penelitian ini dan output yang dihasilkan software penguji sehingga dapat diketahui nilai kebenaran dari output tersebut. Selanjutnya dari masing-masing operasi dihitung nilai kecepatan eksekusinya untuk mengukur kinerja dari algoritme yang digunakan. Operasi-operasi yang akan diuji yaitu penjumlahan, pengurangan, perkalian, pembagian, dan eksponensial. Panjang bit bilangan besar yang diuji yaitu 256 bit, 512 bit, dan 1024 bit untuk masing-masing operasi.

HASIL DAN PEMBAHASAN

Analisis

Mesin yang digunakan pada penelitian ini adalah sebuah komputer 32 bit. Oleh karena itu, basis yang digunakan untuk merepresentasikan bilangan besar dalam komputer adalah 232. Akan tetapi, basis dasar dari bilangan besar adalah 10 sehingga perlu dilakukan proses perubahan basis/konversi dari basis 10 ke dalam basis 232. Proses konversi tersebut dilakukan dengan cara membagi bilangan besar dalam Studi Literatur

Analisis

Implementasi


(1)

12 Tabel 6 Total waktu eksekusi fungsi

pengurangan pada field prima

Bit

Total Waktu Konversi

Basis (s)

Waktu Operasi

( s)

Total Waktu (s)

256 0.000472 0.0000029 0.000475 512 0.001963 0.0000035 0.001967 1024 0.010542 0.0000041 0.010546

Tabel 6 di atas menunjukkan bahwa total waktu eksekusi operasi pengurangan sama seperti operasi penjumlahan. Hal ini dikarenakan banyaknya proses pada operasi pengurangan dan operasi penjumlahan adalah sama atau dengan kata lain kedua proses ini memiliki kompleksitas yang sama.

Tabel 7 Total waktu eksekusi fungsi perkalian pada field prima

Bit

Total Waktu Konversi

Basis (s)

Waktu Operasi

( s)

Total Waktu (s)

256 0.000472 0.0000353 0.000507 512 0.001963 0.0000977 0.002061 1024 0.010542 0.0003669 0.010909

Tabel 7 di atas menunjukkan bahwa total waktu eksekusi operasi perkalian tidak berbeda jauh dengan operasi penjumlahan dan pengurangan. Hal ini disebabkan perbandingan antara total waktu konversi basis dan waktu operasi sangat besar. Akan tetapi, jika dilihat pada waktu operasinya, waktu operasi pada perkalian jauh lebih besar dari operasi penjumlahan dan pengurangan.

Tabel 8 Total waktu eksekusi fungsi pembagian pada field prima

Bit

Total Waktu Konversi

Basis (s)

Waktu Operasi

( s)

Total Waktu (s)

256 0.000472 0.0043139 0.004786 512 0.001963 0.0065998 0.008563 1024 0.010542 0.0190874 0.029629

Tabel 8 di atas menunjukkan bahwa total waktu konversi basis pada operasi pembagian lebih kecil dari pada waktu operasinya tetapi perbedaannya tidak terlalu signifikan. Akan tetapi, jika hanya dilihat pada waktu operasinya, operasi pembagian memerlukan waktu yang jauh lebih besar dari operasi perkalian. Hal ini disebabkan jumlah proses pada operasi pembagian jauh lebih banyak dari operasi perkalian dimana pada operasi pembagian terdapat proses invers dan juga perkalian. Tabel 9 Total waktu eksekusi fungsi

eksponensial pada field prima

Bit

Total Waktu Konversi

Basis (s)

Waktu Operasi

( s)

Total Waktu (s)

256 0.000472 0.0121269 0.012599 512 0.001963 0.0614644 0.063428 1024 0.010542 0.4215481 0.432090

Tabel 9 di atas menunjukkan bahwa waktu operasi pada operasi eksponensial jauh lebih besar dari total waktu konversi basisnya. Hal itu menyebabkan total waktu eksekusi operasi eksponensial tidak berbeda jauh dengan waktu operasinya.

KESIMPULAN DAN SARAN

Kesimpulan

Bilangan besar direpresentasikan dalam basis 232 pada komputer 32 bit. Representasi ini akan membutuhkan jumlah digit array paling sedikit bila dibandingkan dengan representasi lainnya sehingga efisien dalam penggunaan memori. Untuk bilangan 1024 bit hanya dibutuhkan 32 digit array. Semakin sedikit digit array yang dibutuhkan untuk merepresentasikan bilangan besar, maka semakin cepat komputasi pada bilangan besar tersebut.

Dari pengujian yang dilakukan sebanyak 10 kali untuk masing-masing operasi pada field prima, sistem menghasilkan output yang benar. Pada bilangan 1024 bit, operasi penjumlahan membutuhkan waktu eksekusi sebesar 0.010545 s,operasi pengurangan membutuhkan waktu eksekusi sebesar 0.010546 s, operasi perkalian membutuhkan waktu eksekusi sebesar 0.010909 s, operasi pembagian membutuhkan waktu eksekusi sebesar 0.029629 s, dan operasi pengurangan membutuhkan waktu eksekusi sebesar 0.432090 s.


(2)

13 Saran

Penelitian ini dapat dikembangkan lebih lanjut dengan menggunakan algoritme lain yang lebih baik. Untuk operasi perkalian, dapat digunakan algoritme Karatsuba. Jika dilihat dari kompleksitasnya, algoritme Karatsuba mempunyai kompleksitas yang lebih baik dari algoritme schoolbook sehingga diharapkan dapat mempercepat operasi perkalian. Untuk operasi reduksi, dapat digunakan algoritme Montgomery. Algoritme Montgomery merupakan algoritme reduksi yang mengganti operasi pembagian pada algoritme klasik dengan operasi lain yang less-expensive sehingga diharapkan dapat mempercepat proses reduksi.

DAFTAR PUSTAKA

Burnett S, Paine S. 2001. RSA Security’s Official Guide to Cryptography. New York: McGraw-Hill.

Denis TS. 2006. BigNum Math: Implementing Cryptographic Multiple Precision Arithmetic. Canada: Syngress Publishing, Inc.

Hankerson D, Menezes A, Vanstone S. 2004. Guide to Elliptic Curve Cryptography. New York: Springer.

Knuth D. 1998. The Art of Computer Programming. Addison-Wesley, Reading, MA.

Pressman R. 2001. Software Engineering: a Practitioner’s Approach. New York: McGraw-Hill.

Weimerskirch A, Paar C. 2006. Generalizations of the Karatsuba Algorithm for Efficient Implementations. http://www.crypto.rub.de/ imperia/md/content/texte/publications/tecrep orts/kaweb.pdf [3 November 2010].

Welschenbach M. 2005. Cryptography in C and C++. New York: Springer.


(3)

IMPLEMENTASI ARITMATIK

FIELD

PRIMA

DENGAN BAHASA C

HARYADI

DEPARTEMEN ILMU KOMPUTER

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

INSTITUT PERTANIAN BOGOR

BOGOR

2011


(4)

13 Saran

Penelitian ini dapat dikembangkan lebih lanjut dengan menggunakan algoritme lain yang lebih baik. Untuk operasi perkalian, dapat digunakan algoritme Karatsuba. Jika dilihat dari kompleksitasnya, algoritme Karatsuba mempunyai kompleksitas yang lebih baik dari algoritme schoolbook sehingga diharapkan dapat mempercepat operasi perkalian. Untuk operasi reduksi, dapat digunakan algoritme Montgomery. Algoritme Montgomery merupakan algoritme reduksi yang mengganti operasi pembagian pada algoritme klasik dengan operasi lain yang less-expensive sehingga diharapkan dapat mempercepat proses reduksi.

DAFTAR PUSTAKA

Burnett S, Paine S. 2001. RSA Security’s Official Guide to Cryptography. New York: McGraw-Hill.

Denis TS. 2006. BigNum Math: Implementing Cryptographic Multiple Precision Arithmetic. Canada: Syngress Publishing, Inc.

Hankerson D, Menezes A, Vanstone S. 2004. Guide to Elliptic Curve Cryptography. New York: Springer.

Knuth D. 1998. The Art of Computer Programming. Addison-Wesley, Reading, MA.

Pressman R. 2001. Software Engineering: a Practitioner’s Approach. New York: McGraw-Hill.

Weimerskirch A, Paar C. 2006. Generalizations of the Karatsuba Algorithm for Efficient Implementations. http://www.crypto.rub.de/ imperia/md/content/texte/publications/tecrep orts/kaweb.pdf [3 November 2010].

Welschenbach M. 2005. Cryptography in C and C++. New York: Springer.


(5)

(6)

15 Lampiran 1 Algoritme fungsi mp_div

Input : mp_int a dan mp_int b Output : c =

a

/

b

dan d = a – bq 1. Inisialisasi tb, q, r, t1, tempq, dan tempb 2. If b=0

Return (MP_VAL) 3. If a < b

c 0 d a

Return ( MP_OKAY ) Proses Normalisasi 4. temp bb.used-1

5. If temp < basis/2 While temp < basis /2 temp = 2 temp norm ++ 6. r 2 norm a 7. tb 2 norm b 8. While r ≥ tb

sumzr r.used-tb.used If rr.used-1≥ tbtb.used-1 tq 1

t1 tb (basis sumzr) If t1 > r

sumzr --

temp (rr.used-1 basis + rr.used-2) / tbtb.used-1 tq min(temp,basis-1)

t1 tb tq (basis sumzr)

If t1 > r

tempb tb (basis sumzr) While t1 > r

tq-- t1 t1 – tempb

Else

sumzr --

temp (rr.used-1 basis + rr.used-2) / tbtb.used-1 tq min(temp,basis-1)

t1 tb tq (basis sumzr)

If t1 > r

tempb tb (basis sumzr) While t1 > r

tq--

t1 t1 – tempb r r – t1

tempq tq (basis sumzr) q q + tempq

9. c q 10. d r / 2 norm

11. Bersihkan variabel sementara 12. Return ( MP_OKAY )