Teknik Pemecahan Kunci Privat Elgamal dengan Algoritma Baby Step Giant Step

(1)

ALGORITMA BABY STEP GIANT STEP

SKRIPSI

GUNALAN ANGGIRASA 101401038

PROGRAM STUDI S1 ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2015


(2)

ALGORITMA BABY STEP GIANT STEP

SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah Sarjana Ilmu Komputer

GUNALAN ANGGIRASA 101401038

PROGRAM STUDI S1 ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2015


(3)

PERNYATAAN

TEKNIK PEMECAHAN KUNCI PRIVAT ELGAMAL DENGAN ALGORITMA BABY STEP GIAT STEP

SKRIPSI

Saya mengakui bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.

Medan, 10 Maret 2015

Gunalan Anggirasa 101401038


(4)

PERSETUJUAN

Judul : TEKNIK PEMECAHAN KUNCI PRIVAT ELGAMAL DENGAN ALGORITMA BABY STEP GIANT STEP

Kategori : SKRIPSI

Nama : GUNALAN ANGGIRASA

Nomor Induk Mahasiswa : 101401038

Program Studi : SARJANA(S1) ILMU KOMPUTER Fakultas : ILMU KOMPUTER DAN TEKNOLOGI

INFORMASI (Fasilkom-TI)

Komisi Pembimbing:

Dosen Pembimbing II Dosen Pembimbing I

Dian Rachmawati,S.Si,M.Kom M.Andri Budiman,ST,M.Comp.Sc,MEM NIP. 1983 0723 2009 1220 04 NIP. 1975 1008 2008 0110 11

Diketahui/Disetujui oleh

Program Studi S1 IlmuKomputer Ketua,

Dr. Poltak Sihombing, M.Kom NIP. 1962 0317 1991 0210 01


(5)

UCAPAN TERIMA KASIH

Puji dan syukur penulis ucapkan kehadirat Tuhan YME, karena rahmat dan izin-Nya penulis dapat menyelesaikan skripsi ini. Banyak bantuan berupa uluran tangan, budi baik, buah pikiran dan kerjasama yang telah penulis terima selama menempuh studi sampai dengan penyelesaian studi (skripsi) ini. Oleh karena itu, seyogianya penulis menyampaikan ucapan terima kasih kepada pihak-pihak yang telah membantu.

Ucapan terima kasih penulis sampaikan kepada:

1. Bapak Prof. Subhilhar MA, Ph.D selaku Pejabat Rektor Universitas Sumatera Utara.

2. Bapak Prof. Dr. Muhammad Zarlis selaku Dekan Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara.

3. Bapak Dr. Poltak Sihombing, M.Kom. selaku Ketua Program Studi S-1 Ilmu Komputer Universitas Sumatera Utara dan selaku Dosen Pembanding I yang telah memberikan kritik dan saran dalam penyempurnaan skripsi ini.

4. Ibu Maya Silvi Lydia, B.Sc, M.Sc. selaku Sekretaris Program Studi S-1 Ilmu Komputer Universitas Sumatera Utara.

5. Bapak M. Andri Budiman, S.T., M.Comp.Sc., M.E.M. selaku Dosen Pembimbing I dan Dosen Pembimbing Akademik yang telah memberikan bimbingan dan dukungan kepada penulis.

6. Ibu Dian Rachmawati, S.Si., M.Kom. selaku Dosen Pembimbing II yang telah memberikan bimbingan dan dukungan kepada penulis.

7. Bapak Amer Sharif, S.Si., M.Kom selaku Dosen Pembanding II yang telah memberikan kritik dan saran dalam penyempurnaan skripsi ini.

8. Ayahanda Dr. Suba Jaido Naidu dan Ibunda Dr. B. Teinmalar, serta adik-adik saya Rai Wegudani dan Lovelyn Partiba yang selalu memberikan kasih sayang dan dukungannya kepada penulis.

9. Seluruh tenaga pengajar dan pegawai pada Fakultas Ilmu Komputer dan Teknologi Informasi USU, terkhususnya di Program Studi S-1 Ilmu Komputer.


(6)

10. Rekan-rekan senior khususnya abangda Angga Ricardo Malau S. Kom, Johannes Hutabarat S. Kom, Octavianus Sianturi, Septian Dwi Cahya Panjaitan, Septian Maihadi, Samuel Tarigan S. Kom, Johnri Sibarani S.Kom dan yang lainya yang selalu memberikan semangat dan dorongan dan motivasi kepada penulis selama menyelesaikan skripsi ini.

11. Rekan-rekan kuliah Timothy, Johanes P. Saragih , Lorent Oliver Barus, Rivai H Purba, Kurniawan Wardani Hutagaol, Hengky Prayson Gulo, Yansen Boston Simatupang, Arifin dan yang lainnya yang selalu memberikan semangat dan dorongan, serta motivasi kepada penulis selama menyelesaikan skripsi ini. 12. Rekan-rekan Duelist Medan, AC3, ILKOM USU COC, IMILKOM, RHF,

IKLC, RTIK SUMUT dan lainya yang tidak bisa disebutkan satu persatu, yang selalu memberikan semangat dan dorongan kepada penulis selama menyelesaikan skripsi ini.

Semoga Tuhan YME melimpahkan berkah dan kasih sayang-Nya kepada semua pihak yang telah memberikan bantuan, semangat, dukungan dan perhatian kepada penulis dalam menyelesaikan skripsi ini. Semoga skripsi ini bermanfaat bagi penulis, pendidikan, masyarakat, organisasi atau negara.

Medan, 10 Maret 2015


(7)

TEKNIK PEMECAHAN KUNCI PRIVAT ELGAMAL DENGAN ALGORITMA BABY STEP GIANT STEP

ABSTRAK

Algoritma kriptografi ElGamal merupakan sistem kriptografi asimetrik dimana terdapat dua pasang kunci yaitu kunci publik (p, α, αa) dan kunci privat (a). Kunci untuk enkripsi bersifat umum dan dapat digunakan semua orang sehingga dinamakan kunci publik. Sedangkan kunci untuk dekripsi bersifat rahasia dan hanya dimiliki oleh penerima pesan, oleh karena itu dinamakan kunci privat. Keuntungan algoritma ElGamal terletak pada keamanannya yang bergantung pada sulitnya memecahkan perhitungan logaritma diskrit dan kerugiannya adalah pada ciphertext-nya yang mempunyai panjang dua kali lipat dari plaintext-nya. Untuk menguji keamanan dari algoritma kriptografi ElGamal penulis akan melakukan pemecahan kunci yang bertujuan untuk melihat seberapa aman algoritma ElGamal bertahan dari serangan terhadap perhitungan logaritma diskritnya. Pada penelitian ini, digunakan algoritma Baby-step Giant-step untuk memecahkan kunci privat ElGamal. Dalam pengujiannya, akan digunakan uji coba data untuk melihat efektivitas dan efisiensi dari algoritma Baby-step Giant-step dalam memecahkan kunci privat ElGamal berdasarkan lama waktu prosesnya. Hasil dari pengujian menunjukkan bahwa semakin banyak faktor prima sebuah bilangan, maka akan semakin lama proses pembangkitan kuncinya. Pada proses pemecahan kunci publik 10 digit dengan p = 1570736149 , α = 806863671 , dan αa = 55171560 lama waktu proses adalah 172817 ms. Sedangkan pada proses pemecahan kunci publik 11 digit mencapai waktu hingga lebih dari 1 jam dikarenakan pencarian invers modulo yang sangat lama.

Kata kunci: Kriptografi, Kriptanalisis, Logaritma Diskrit, Hacking, ElGamal, Baby-step Giant-step.


(8)

ELGAMAL PRIVATE KEY SOLVING TECHNIQUE WITH BABY STEP GIANT STEP ALGORITHM

ABSTRACT

ElGamal cryptography algorithm is an asymetric cryptography system where there are two pair of keys which are public key and private key. Encryption key is made public so everyone can use it; therefore it is named public key. While decryption key is made secret that the only one that can use it is only the receiver; therefore it is named private key. The advantage of ElGamal algorithm is in its security that depends on the difficulty in solving discrete logarithm calculation and the disadvantage is in the ciphertext which have twice the original size from the plaintext. To test Elgamal cryptography algorithm security, the writer will do the key solving process which the purpose is to see how safe the algorithm in withstanding the attack to the discrete logarithm calculation. In this research, Baby-step Giant-step algorithm used to solve ElGamal private key. In testing, data testing will be used to see the effectivity and eficiency of Baby-step Giant-step algorithm in solving ElGamal private key base on its process time. The test result shows that the more prime factor a number has, the longer the process would be in generating key. In 10 digits hacking process with p = 1570736149 , α = 806863671 , dan αa = 55171560 the processing time took 172.817 ms. While in 11 digits hacking process, the processing time took more than an hour because of inverse modulo searching process that took a long time.

Kata kunci: Cryptography, Cryptanalysis, Discrete Logarithm, Hacking, ElGamal, Baby-step Giant-step.


(9)

DAFTAR ISI

PERSETUJUAN ii

PERNYATAAN iii

UCAPAN TERIMA KASIH iv

ABSTRAK vi

ABSTRACT vii

DAFTAR ISI viii

DAFTAR TABEL x

DAFTAR GAMBAR xi

BAB 1 PENDAHULUAN

1.1 Latar Belakang 1

1.2 Rumusan Masalah 2

1.3 Batasan Masalah 2

1.4 Tujuan Penelitian 3

1.5 Manfaat Penelitian 3

1.6 Metodologi Penelitian 4

1.7 Sistematika Penulisan 5

BAB 2 TINJAUAN PUSTAKA

2.1 Kriptografi 6

2.2 Keamanan Data 9

2.3 Bilangan Prima dan Komposit 9

2.4 Bilangan Prima Aman 9

2.5 Faktor Persekutuan Terbesar (Greatest Common Divisor) 10

2.6 Relatif Prima 10

2.7 Kekongruenan 11

2.8 Fungsi Euler 11

2.9 Ordo Modulo 11

2.10 Modulo Invers 12

2.11 Akar Primitif (Primitive Roots) 12

2.12 Metode Pembangkit Bilangan Prima Lehmann 13

2.13 Algoritma ElGamal 15

2.14 Pembentukan Kunci 15

2.15 Proses Pembentukan Kunci 16

2.16 Enkripsi 16

2.17 Dekripsi 19

2.18 Baby-step Giant-step 20

2.19 Penelitian yang Relevan 22

BAB 3 ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Sistem 24


(10)

3.1.2 Analisis Kebutuhan 25

3.1.2.1 Kebutuhan Fungsional 25

3.1.2.2 Kebutuhan Non-Fungsional 26

3.2 Pemodelan 27

3.2.1 Use Case Diagram 27

3.2.2 Sequence Diagram 31

3.2.3 Activity Diagram 32

3.3 Pseudocode dan Flowchart Program 33

3.3.1 Pseudocode dan Flowchart Lehmann Primality Test 33 3.3.2 Pseudocode dan Flowchart Primitive Roots 36 3.3.3 Pseudocode dan Flowchart Enkripsi ElGamal 37 3.3.4 Pseudocode dan Flowchart Dekripsi ElGamal 41 3.3.5 Pseudocode dan Flowchart Modulo Inverse 44 3.3.6 Pseudocode dan Flowchart Baby-step Giant-step 45

3.4 Perancangan Antarmuka (Interface) 48

3.4.1 Form Utama 48

3.4.2 Form Enkripsi 49

3.4.3 Form Baby-step Giant-step 50

3.4.4 Form Dekripsi 51

3.4.5 Form Tentang 52

3.4.6 Form Bantuan 52

BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1 Implementasi Sistem 54

4.1.1 Form Utama 54

4.1.2 Form Enkripsi 55

4.1.3 Form Baby-step Giant-step 56

4.1.4 Form Dekripsi 57

4.1.5 Form Tentang 59

4.1.6 Form Bantuan 60

4.2 Pengujian 60

4.2.1 Pengujian Sistem Algoritma ElGamal Aplikasi 61 4.2.2 Pengujian Proses Bangkit Kunci Algoritma ElGamal 67 4.2.3 Pengujian Proses Enkripsi Algoritma ElGamal 68 4.2.4 Pengujian Proses Dekripsi Algoritma ElGamal 70 4.2.5 Pengujian Proses Baby-step Giant-step 71 BAB 5 KESIMPULAN DAN SARAN

5.1 Kesimpulan 73

5.2 Saran 74

DAFTAR PUSTAKA 75


(11)

DAFTAR TABEL

Tabel 2.1 Konversi Blok-blok Karakter Pesan ke Kode ASCII 18

Tabel 2.2 Proses Enkripsi 18

Tabel 2.3 Proses Dekripsi 20

Tabel 2.4 Proses Baby-step [1] 21

Tabel 2.4 Proses Baby-step [2] 22

Tabel 2.5 Proses Giant-step 22

Tabel 3.1 Narrative Use-Case Bangkitkan Kunci 28

Tabel 3.2 Narrative Use-Case Enkripsi 29

Tabel 3.3 Narrative Use-Case Dekripsi Pesan [1] 29

Tabel 3.3 Narrative Use-Case Dekripsi Pesan [2] 30

Tabel 3.4 Narrative Use-Case Pemecahan Kunci 30

Tabel 4.1 Pengujian Lama Proses Algoritma ElGamal

Terhadap Panjang Kunci 67

Tabel 4.2 Pengujian Lama Proses Enkripsi

Terhadap Rentang Bilangan Acak b 69

Tabel 4.3 Pengujian Lama Proses Pemecahan Kunci Privat


(12)

DAFTAR GAMBAR

Gambar 2.1 Proses Enkripsi dan Dekripsi Algoritma Simetris 7 Gambar 2.2 Proses Enkripsi dan Dekripsi Algoritma Asimetris 7

Gambar 3.1 Diagram Ishikawa 25

Gambar 3.2 Diagram Use-Case 27

Gambar 3.3 Diagram Sequence untuk ElGamal User 31

Gambar 3.4 Diagram Sequence untuk Hacker 31

Gambar 3.5 Diagram Activity untuk ElGamal User 32

Gambar 3.6 Diagram Activity untuk Hacker 33

Gambar 3.7 Flowchart Lehmann Primality Test 35

Gambar 3.8 Flowchart Primitive Roots 37

Gambar 3.9 Flowchart Enkripsi ElGamal 40

Gambar 3.10 Flowchart Dekripsi ElGamal 43

Gambar 3.11 Flowchart Modulo Inverse 44

Gambar 3.12 Flowchart Baby-step Giant-step 47

Gambar 3.13 Rancangan Form Utama Aplikasi 48

Gambar 3.14 Rancangan Encryption Form 49

Gambar 3.15 Rancangan Form BSGS Aplikasi 50

Gambar 3.16 Rancangan Decryption Form Aplikasi 51

Gambar 3.17 Rancangan About Form Aplikasi 52

Gambar 3.18 Rancangan Help Form Aplikasi 53

Gambar 4.1 Form Utama 55

Gambar 4.2 Form Enkripsi 56

Gambar 4.3 Form Baby-step Giant-step 57

Gambar 4.4 Form Dekripsi 58

Gambar 4.5 Form Bantuan 59

Gambar 4.6 Form Tentang 60

Gambar 4.7 Isi Pesan Plaintext yang Diuji Algoritma ElGamal 62 Gambar 4.8 Proses Pembangkitan Kunci Publik dan Kunci Privat 63 Gambar 4.9 Proses Enkripsi Pesan dengan Algoritma ElGamal 63

Gambar 4.10 Pesan Enkripsi Berhasil 64

Gambar 4.11 Hasil Enkripsi Plaintext 64

Gambar 4.12 Proses Pemecahan Kunci dengan Algoritma Baby-step Giant-step 65 Gambar 4.13 Proses Dekripsi Pesan dengan Algoritma ElGamal 65 Gambar 4.14 Hasil Dekripsi Pesan dengan Algoritma ElGamal 66 Gambar 4.15 Grafik Panjang Digit Kunci dengan Waktu Proses Bangkit Kunci 67 Gambar 4.16 Grafik Panjang Digit Kunci dengan Waktu Proses Enkripsi 68 Gambar 4.17 Grafik Panjang Digit Kunci dengan Waktu Proses Dekripsi 70 Gambar 4.18 Grafik Panjang Digit Kunci dengan


(13)

TEKNIK PEMECAHAN KUNCI PRIVAT ELGAMAL DENGAN ALGORITMA BABY STEP GIANT STEP

ABSTRAK

Algoritma kriptografi ElGamal merupakan sistem kriptografi asimetrik dimana terdapat dua pasang kunci yaitu kunci publik (p, α, αa) dan kunci privat (a). Kunci untuk enkripsi bersifat umum dan dapat digunakan semua orang sehingga dinamakan kunci publik. Sedangkan kunci untuk dekripsi bersifat rahasia dan hanya dimiliki oleh penerima pesan, oleh karena itu dinamakan kunci privat. Keuntungan algoritma ElGamal terletak pada keamanannya yang bergantung pada sulitnya memecahkan perhitungan logaritma diskrit dan kerugiannya adalah pada ciphertext-nya yang mempunyai panjang dua kali lipat dari plaintext-nya. Untuk menguji keamanan dari algoritma kriptografi ElGamal penulis akan melakukan pemecahan kunci yang bertujuan untuk melihat seberapa aman algoritma ElGamal bertahan dari serangan terhadap perhitungan logaritma diskritnya. Pada penelitian ini, digunakan algoritma Baby-step Giant-step untuk memecahkan kunci privat ElGamal. Dalam pengujiannya, akan digunakan uji coba data untuk melihat efektivitas dan efisiensi dari algoritma Baby-step Giant-step dalam memecahkan kunci privat ElGamal berdasarkan lama waktu prosesnya. Hasil dari pengujian menunjukkan bahwa semakin banyak faktor prima sebuah bilangan, maka akan semakin lama proses pembangkitan kuncinya. Pada proses pemecahan kunci publik 10 digit dengan p = 1570736149 , α = 806863671 , dan αa = 55171560 lama waktu proses adalah 172817 ms. Sedangkan pada proses pemecahan kunci publik 11 digit mencapai waktu hingga lebih dari 1 jam dikarenakan pencarian invers modulo yang sangat lama.

Kata kunci: Kriptografi, Kriptanalisis, Logaritma Diskrit, Hacking, ElGamal, Baby-step Giant-step.


(14)

ELGAMAL PRIVATE KEY SOLVING TECHNIQUE WITH BABY STEP GIANT STEP ALGORITHM

ABSTRACT

ElGamal cryptography algorithm is an asymetric cryptography system where there are two pair of keys which are public key and private key. Encryption key is made public so everyone can use it; therefore it is named public key. While decryption key is made secret that the only one that can use it is only the receiver; therefore it is named private key. The advantage of ElGamal algorithm is in its security that depends on the difficulty in solving discrete logarithm calculation and the disadvantage is in the ciphertext which have twice the original size from the plaintext. To test Elgamal cryptography algorithm security, the writer will do the key solving process which the purpose is to see how safe the algorithm in withstanding the attack to the discrete logarithm calculation. In this research, Baby-step Giant-step algorithm used to solve ElGamal private key. In testing, data testing will be used to see the effectivity and eficiency of Baby-step Giant-step algorithm in solving ElGamal private key base on its process time. The test result shows that the more prime factor a number has, the longer the process would be in generating key. In 10 digits hacking process with p = 1570736149 , α = 806863671 , dan αa = 55171560 the processing time took 172.817 ms. While in 11 digits hacking process, the processing time took more than an hour because of inverse modulo searching process that took a long time.

Kata kunci: Cryptography, Cryptanalysis, Discrete Logarithm, Hacking, ElGamal, Baby-step Giant-step.


(15)

1.1 Latar Belakang

Perkembangan jaringan komputer di masa kini memungkinan kita untuk melakukan pengiriman pesan melalui jaringan komputer. Untuk menjaga kerahasiaan dan keutuhan pesan tersebut, dibutuhkan sebuah penyandian terhadap pesan yang akan dikirim. Enkripsi merupakan suatu cara penyandian pesan yang akan mengubah pesan yang kita kirim (plaintext) menjadi pesan yang berisi deretan simbol atau tulisan yang tidak beraturan. Salah satu algoritma yang digunakan untuk melakukan penyandian tersebut adalah Algoritma ElGamal.

Algoritma ElGamal merupakan sistem kriptografi asimetrik dimana terdapat dua pasang kunci yatu kunci yang digunakan untuk enkripsi dan kunci untuk melakukan dekripsi. Kunci untuk enkripsi bersifat publik, sehingga dinamakan kunci publik (public key). Sedangkan kunci untuk dekripsi bersifat rahasia, sehingga dinamakan kunci privat (private key). Algoritma ElGamal terdiri dari tiga proses, yaitu proses pembentukan kunci, proses enkripsi, dan proses dekripsi. Proses pembentukan kunci didasarkan pada perhitungan ��mod � , dimana ��, �, dan � adalah kunci publik. Sedangkan a adalah kunci privat. Keuntungan keamanan Algoritma ElGamal bergantung pada sulitnya memecahkan perhitungan logaritma diskrit. Sedangkan kerugiannya adalah pada ciphertext-nya yang mempunyai panjang dua kali lipat dari plaintext-nya.

Pemecahan (hacking) kunci pada keamanan pesan dapat memiliki tujuan yang baik dan buruk. Dalam hal ini penulis ingin melakukan pemecahan kunci untuk menguji seberapa aman Algoritma ElGamal untuk bertahan dari serangan terhadap perhitungan logaritma diskritnya. Pada proses pembangkitan kunci, dihitung ��mod �, a adalah kunci privat yang akan dipecahkan dalam hal ini. Salah satu metode untuk melakukan serangan ini adalah metode Baby-step Giant-step.


(16)

Metode Baby-step Giant-step dilakukan dengan cara membuat dua buah daftar perhitungan yang bertujuan untuk mendapatkan hasil yang sama. Daftar yang pertama meningkatkan eksponen sebanyak satu setiap waktu (Baby-step). Sedangkan daftar yang kedua meningkatkan eksponen sebanyak kelipatan N dimana p - 1 < N2. a adalah jumlah dari eksponen di daftar pertama dan eksponen di daftar kedua yang memiliki hasil yang sama. Setelah a (kunci privat) didapatkan maka kemudian akan digunakan untuk melakukan proses dekripsi untuk mendapatkan plaintext.

Berdasarkan latar belakang yang telah penulis uraikan, maka dilakukan

penelitian dengan judul “Teknik Pemecahan Kunci Privat ElGamal dengan Algoritma Baby-step Giant-step”.

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, maka rumusan masalah yang dapat diambil adalah sebagai berikut :

1. Bagaimana suatu pesan yang disandikan menggunakan algoritma ElGamal dapat terpecahkan kunci privatnya menggunakan metode Baby-step Giant-step dengan hanya memperoleh informasi kunci publik.

2. Bagaimana efektivitas dan efisiensi perhitungan logaritma diskrit, khususnya metode Baby-step Giant-step dalam menguji keamanan algoritma ElGamal ditinjau dari panjang digit bilangan prima dan parameter waktu.

1.3 Batasan Masalah

Batasan masalah yang dapat diambil dari latar belakang di atas adalah

1. File yang dienkripsi dan didekripsi hanya berfokus pada algoritma kriptografi ElGamal menggunakan teks dengan karakter ASCII dan disimpan dalam format *.txt dan *.doc.

2. Metode penguji bilangan prima yang digunakan adalah Lehmann Primality Test. 3. Panjang kunci publik yang diterapkan pada algoritma ini tidak lebih dari 80 bit.


(17)

4. Aplikasi berbasis dekstop dan bahasa pemograman yang digunakan untuk membangun aplikasi adalah bahasa Python untuk melakukan pengujian bilangan prima serta perhitungan matematis dan bahasa Java sebagai user interface.

5. Proses yang dilakukan pada penelitian ini adalah melakukan perhitungan logaritma diskrit x dengan mengetahui informasi ��, �, dan � dari rumus ��mod � yang kemudian hasilnya digunakan untuk mendekripsikan ciphertext menjadi plaintext kembali menggunakan algoritma ElGamal.

6. Untuk mengukur efisiensi dan efektivitas dari metode Baby-step Giant-step adalah dengan mencari lama waktu proses yang dibutuhkan untuk melakukan perhitungan logaritma diskrit terhadap panjang digit bilangan prima.

1.4 Tujuan Penelitian

Tujuan penelitian ini antara lain:

1. Menguji keamanan kunci algoritma ElGamal sekaligus melakukan proses pemecahan kunci untuk memperoleh plaintext dari ciphertext yang ada, untuk menjadi referensi dalam menggunakan algoritma kriptografi yang baik kedepannya.

2. Menguji sejauh mana efisiensi dan efektivitas metode Baby-step Giant-step dalam memecahkan kunci algoritma ElGamal dilihat dari parameter waktu dan panjang digit bilangan prima minimal 3 digit dan maksimal 10 digit.

1.5 Manfaat Penelitian

1. Mengetahui seberapa efisien dan efektif metode Baby-step Giant-step dalam menguji keamanan algoritma ElGamal.

2. Mengetahui panjang kunci yang dibutuhkan agar algoritma ElGamal dapat dikatakan masih aman digunakan.


(18)

1.6 Metodologi Penelitian 1. Studi Literatur

Peninjauan terhadap buku-buku, artikel-artikel, jurnal-jurnal maupun hasil penelitian terdahulu yang terkait dengan algoritma pengujian bilangan prima Lehmann, cryptosystem, algoritma kunci publik ElGamal.

2. Analisis dan Perancangan

Dengan adanya rumusan dan batasan masalah, kebutuhan perancangan dianalisis disertai pembuatan flowchart, diagram Unified Modeling Language(UML),design interface, dan pseudocode.

3. Implementasi

Implementasi dilakukan guna menguji keamanan ElGamal dimana user berlaku sebagai pengirim mengenkripsikan pesan dengan metode ElGamal dan juga berlaku sebagai eavesdropper dimana mempunyai data kunci publik (��, , p) dan dihitung kunci privat a menggunakan metode Baby-step Giant-step sehingga dapat mendekripsikan pesan dengan dekripsi ElGamal.

4. Pengujian

Aplikasi diuji berdasarkan hasil analisis dan perancangan.

5. Dokumentasi dan Laporan Akhir

Setelah implementasi, maka penulis akan membuat dokumentasi atau laporan tiap tahap dari program yang penulis rancang.


(19)

1.7 Sistematika Penulisan

Agar pembahasan lebih sistematis, maka tulisan ini dibuat dalam lima bab, yaitu :

BAB 1 PENDAHULUAN

Bab ini akan menjelaskan mengenai latar belakang penilitian judul

skripsi “Teknik Pemecahan Kunci Privat ElGamal Dengan Algoritma Baby-step Giant-step.”, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, metode penelitian, tinjauan pustaka, dan sistematika penulisan skripsi.

BAB 2 LANDASAN TEORI

Berisi tentang penjelasan singkat mengenai definisi kriptografi, keamanan data, algoritma ElGamal, bilangan prima dan komposit, bilangan prima aman, GCD, bilangan relatif prima, kekongruenan, fungsi Euler, ordo modulo, modulo invers, akar primitif dan metode pembangkit bilangan prima Lehmann, dan metode Baby-step Giant-step.

BAB 3 ANALISIS DAN PERANCANGAN

Berisi tentang uraian analisis mengenai proses kerja dari metode ElGamal dan Baby-step Giant-step yang terdiri dari flowchart, pseudocode, Unified Modeling Language (UML) serta perancangan dari aplikasi.

BAB 4 IMPLEMENTASI DAN PENGUJIAN

Pada tahap ini dilakukan pembuatan sistem dan coding sesuai dengan analisis dan perancangan. Kemudian melakukan pengujian sistem.

BAB 5 KESIMPULAN DAN SARAN

Bab terakhir akan memuat kesimpulan isi dari keseluruhan uraian dari bab-bab sebelumnya dan saran-saran dari hasil yang diperoleh yang diharapkan dapat bermanfaat dalam pengembangan selanjutnya.


(20)

2.1. Kriptografi

Kriptografi secara etimologi berasal dari bahasa Yunani kryptos yang artinya

tersembunyi dan graphien yang artinya menulis, sehingga kriptografi merupakan

metode pembelajaran untuk mengirimkan pesan secara rahasia. (Mollin, 2007).

Menurut Katz (2007), kriptografi adalah studi ilmiah atau teknik untuk mengamankan informasi digital, transaksi, dan komputasi yang terdistribusi.

Kriptografi memiliki beberapa istilah atau terminologi, antara lain (Schneier,1996) :

1. Pengirim dan Penerima

Misalkan seorang pengirim ingin mengirim pesan pada penerima. Kemudian, pengirim ingin mengirim pesan secara aman. Pengirim ingin menjamin bahwa penyadap tidak bisa membaca pesannya.

2. Pesan dan Enkripsi

Sebuah pesan disebut pesan murni (plaintext) atau pesan yang akan dikirim. Proses untuk menyamarkan pesan untuk menyembunyikan maksudnya disebut enkripsi(encryption). Pesan yang dienkripsi disebut ciphertext. Proses untuk mengembalikan ciphertext menjadi plaintext disebut dekripsi(decryption).

3. Algoritma dan Kunci

Algoritma kriptografi disebut juga cipher, adalah fungsi matematis yang

digunakan untuk enkripsi dan dekripsi. Kunci digunakan sebagai pengenal antara proses enkripsi dan dekripsi.


(21)

4. Algoritma Simetris

Ada dua tipe algoritma yang berbasis kunci yaitu simetris dan asimetris. Algoritma simetris kadang-kadang disebut juga algoritma konvensional, adalah algoritma dimana kunci enkripsi dapat dihitung dari kunci dekripsi dan sebaliknya. Di kebanyakan algoritma simetris, kunci enkripsi dan dekripsi adalah sama. Algoritma ini juga disebut algoritma kunci rahasia, algoritma kunci tunggal, atau algoritma satu kunci, membutuhkan persetujuan antara pengirim dan penerima sebelum mereka bisa melakukan komunikasi secara aman. Proses Enkripsi dan Dekripsi algoritma simetris dapat dilihat pada Gambar 2.1.

Gambar 2.1. Proses Enkripsi dan Dekripsi Algoritma Simetris(Paar et all, 20010)

5. Algoritma Asimetris

Algoritma kunci publik didesain agar kunci yang digunakan untuk enkripsi berbeda dengan kunci yang digunakan untuk dekripsi. Algoritma ini dikatakan kunci publik karena kunci enkripsi dapat dibuat publik. Seseorang yang tidak bersangkutan dapat menggunakan kunci enkripsi untuk melakukan enkripsi, tetapi hanya orang-orang tertentu saja yang dapat melakukan dekripsi. Kunci enkripsi sering disebut kunci publik, dan kunci dekripsi sering disebut kunci privat. Proses enkripsi dan dekripsi algoritma asimetris dapat dilihat pada Gambar 2.2.


(22)

Gambar 2.2. Proses Enkripsi dan Dekripsi Algoritma Asimetris(Paar et all, 2010)

6. Kriptanalisis

Keseluruhan tujuan dari kriptografi adalah untuk menjaga plaintext dan

kunci agar tidak diketahui oleh penyadap. Penyadap diasumsikan memiliki akses penuh untuk komunikasi antara pengirim dan penerima.

Kriptanalisis adalah ilmu untuk memulihkan plaintext dari sebuah

pesan tanpa akses ke kunci. Kriptanalisis yang berhasil mampu

memulihkan plaintext atau kuncinya. Dapat juga menemukan kelemahan

dari sebuah kriptosistem.

7. Keamanan Algoritma

Algoritma yang berbeda dapat menawarkan tingkat keamanan yang berbeda, tergantung pada seberapa rumit untuk dipecahkan. Jika harga yang dibutuhkan untuk memecahkan algoritma lebih besar dari nilai data yang dienkripsi, maka kemungkinan pesan tersebut kemungkinan aman. Jika waktu yang dibutuhkan untuk memecahkan algoritma lebih lama dari lamanya data tersebut harus rahasia, maka pesan tersebut juga kemungkinan aman. Jika jumlah data yang dienkripsi dengan sebuah kunci lebih kecil dari data yang dibutuhkan untuk memecahkan algoritma tersebut, maka pesan kemungkinan aman.


(23)

2.2. Keamanan Data

Menurut Schneier (1996) selain menyediakan kerahasiaan, kriptografi sering diminta untuk melakukan pekerjaan lain yaitu :

1. Autentikasi, pesan harus memungkinkan penerima untuk bisa

memastikan asalnya.

2. Integritas, pesan harus memungkinkan penerima untuk

memverifikasi pesan tersebut tidak dimodifikasi sewaktu proses pengiriman.

3. Non-repudiasi, pengirim tidak bisa menyangkal bahwa dia adalah

pengirim pesan.

2.3. Bilangan Prima dan Komposit

Misalkan ada bilangan bulat positif 1, 2, 3, 4, ... Di antara bilangan tersebut ada bilangan prima dan bilangan komposit. Bilangan komposit adalah bilangan yang

memiliki faktor ≠ 1, seperti 15 = 3,5; atau 16 = 2,8. Karakteristik bilangan prima

adalah hanya memiliki faktor sebanyak 1 (Riesel, 2011).

2.4. Bilangan Prima Aman

Bilangan prima aman adalah bilangan prima berbentuk p = 2q + 1 dimana q adalah

prima (Menezes et all, 1996). Langkah-langkah untuk menentukan suatu bilangan prima aman atau tidak adalah sebagai berikut :

1. Pilih bilangan prima p ≥ 5

2. Hitung q = �−

3. Jika q adalah bilangan prima, maka output (“prima aman”)


(24)

Contoh 1 :

1. Pilih bilangan prima p = 13

2. q = − = 6

3. q komposit, maka p = 13 bukan prima aman.

Contoh 2 :

1. Pilih bilangan prima p = 23

2. q = − = 11

3. q adalah prima, makan p = 23 adalah prima aman.

2.5. Faktor Persekutuan Terbesar (Greatest Common Divisor)

Bilangan bulat d yang tidak negatif adalah faktor persekutuan terbesar dari bilangan

bulat a dan b, ditulis d = gcd(a,b), jika :

(i) d adalah faktor persekutuan dari a dan b dan

(ii) jika c|a dan c|b, maka c|d.

Demikian dapat dinyatakan bahwa, gcd(a,b) adalah bilangan bulat positif terbesar

yang membagi a dan b, dengan pengecualian gcd(0,0) = 0 (Menezes et all, 1996).

Contoh :

Faktor persekutuan dari 12 dan 18 adalah {1, 2, 3, 6}, maka gcd(12,18) adalah 6.

2.6. Relatif Prima

Dua angka a dan b dikatakan relatif prima jika angka-angka tersebut tidak memiliki

faktor persekutuan ( gcd(a, b) = 1 ) (Batten, 2013).

Contoh :

19 dan 13 adalah relatif prima dikarenakan gcd(19,13) = 1. 6 dan 8 tidak relatif prima dikarenakan gcd(6,8) = 2.


(25)

2.7. Kekongruenan

Jika a dan b adalah bilangan bulat, maka a dikatakan kongruen ke b modulo n, ditulis

a b (mod n), jika n habis membagi (a b). Bilangan bulat n disebut modulus

kongruen (Menezes et all, 1996).

Contoh :

24 ≡ 4 (mod 5) karena 24 – 4 = 20 dan n = 5 habis membagi 20.

2.8. Fungsi Euler ()

Untuk n ≥ 1, � adalah bilangan bulat < n yang relatif prima dengan n, dengan

ketentuan (Menezes et all, 1996) :

1. Jika p adalah bilangan prima, maka � = p – 1.

2. Jika gcd(m , n) = 1, maka � = � . �

3. Jika n = � , � , ... , �� adalah faktorisasi prima dari n, maka

� = n

� −� ... −��

Contoh :

1. � = − =

2. � = � ∗ = ∗ =

3. � = � = − = =

2.9. Ordo Modulo

Jika gcd(a, n) = 1 maka ordo a modulo n adalah adalah bilangan bulat positif terkecil

e sehingga �� = mod . Dalam hal ini ditulis e = � � (Batten, 2013).

Contoh :

� :

= 9 mod , = mod , = mod , = mod .


(26)

2.10. Modulo Invers

Jika a dan m relatif prima dan m > 1, maka dapat ditemukan invers dari a modulo m.

Invers dari a(mod m), disebut juga invers perkalian, yaitu bilangan bulat a-1 (Menezes

et all, 1996).

Contoh :

1. Diberikan m ≡ 3-4 (mod 7). Tentukan invers modulonya.

2. m ≡ (3-1)4 (mod 7)

3. Tentukan invers modulo dari n ≡ (3-1) (mod 7)

n n . 3 (mod) 7

1 3

2 6

3 3

4 5

5 1

4. n adalah hasil iterasi yang menghasilkan nilai 1. Maka dari itu n = 5.

m ≡ 54 (mod 7) = 2.

2.11. Akar Primitif (Primitive Roots)

Jika m merupakan elemen bilangan bulat, n merupakan elemen bilangan asli dan

ord� = � ,

maka m disebut akar primitif modulo n. Dengan kata lain, m adalah akar primitif jika

m termasuk pada eksponen � modulo n.

Menurut algoritma Gauss, jika m merupakan elemen bilangan asli, 1 < m < p,

hitung mt untuk t = 1,2,... hingga mt ≡1 (mod p). Dengan kata lain, hitung pangkat

hingga nilai ord ditemukan. Jika t = ord = p – 1, maka m adalah akar

primitif (Mollin, 2007). Contoh :


(27)

Apakah 2 dan 4 merupakan akar primitif dari 5? Cek bilangan 2 :

1. Hitung mt ≡1 (mod p):

21 ≡2 (mod 5), 22 ≡4 (mod 5), 23 ≡3 (mod 5), 24 ≡1 (mod 5)

2. Karena nilai t = ord = p – 1, maka 2 merupakan akar primitif modulo 5.

Cek bilangan 4 :

1. Hitung mt ≡1 (mod p):

41 ≡4 (mod 5), 42 ≡1 (mod 5)

Karena nilai t = ordp – 1, maka 4 bukan merupakan akar primitif modulo 5.

Menurut Shoup (2008), terdapat cara menemukan akar primitif yang efisien

dengan menggunakan faktor prima dari p– 1. Langkah-langkahnya adalah sebagai

berikut :

1. Hitung fakor prima dari p-1 hingga setiap faktor memiliki nilai yang berbeda.

2. Untuk setiap faktor (f) hitung mp-1 / f mod p.

3. Jika tidak ada yang menghasilkan nilai 1, maka m adalah bilangan prima.

Contoh :

Menggunakan cara di atas, akan dicari apakah 5 merupakan akar primitif dari 37.

1. Hitung faktor prima dari 37

f = [2, 3]

2. Untuk setiap faktor prima, hitung mp-1 / f mod p

f[2] = 536/2 mod 37 = 36

f[3] = 536/3 mod 37 = 10

Karena tidak ada yang menhasilkan nilai 1, maka 5 merupakan akar primitif dari 37.

2.12. Metode Pembangkit Bilangan Prima Lehmann

Menurut Scheiner(1996), berikut adalah langkah-langkah untuk menentukan apakah p

adalah prima menggunakan pembangkit bilangan prima Lehmann :


(28)

2. Hitung p mod 2, jika p mod 2 = 0 maka p bukanlah bilangan prima. 3. Hitung a(p-1)/2 mod p.

4. Jika a(p-1)/2 ≠ 1 atau -1 (mod p), maka p sudah pasti tidak prima.

5. Jika a(p-1)/2 = 1 atau -1 (mod p), maka kemungkinan bahwa p tidak prima

adalah tidak lebih dari 50%. Contoh 1 :

Diberikan sebuah bilangan p = 7, dipilih a = 2, 3, 4, 5,6.

1. a(p-1)/2 mod p = 2(7 – 1) / 2 mod 7 = 23 mod 7

= 8 mod 7

= 1

Kemungkinan p prima = 50%.

2. a(p-1)/2 mod p = 3(7 – 1) / 2 mod 7 = 33 mod 7

= 27 mod 7 = 6

3. a(p-1)/2 mod p = 4(7 – 1) / 2 mod 7 = 43 mod 7

= 64 mod 7 = 1

Kemungkinan p prima = 50% + 25% = 75%.

4. a(p-1)/2 mod p = 5(7 – 1) / 2 mod 7 = 53 mod 7

= 125 mod 7 = 6

5. a(p-1)/2 mod p = 6(7 – 1) / 2 mod 7 = 63 mod 7


(29)

= 216 mod 7 = 6

Karena kemungkinan p prima adalah 75%, p dapat dikatakan bilangan prima.

Metode pembangkit bilangan prima Lehmann dipilih karen pada prosesnya hanya

perlu melakukan perulangan sebanyak sepuluh kali untuk menentukan sebuah bilangan prima atau tidak.

2.13. Algoritma ElGamal

Algoritma ElGamal ditemukan oleh Taher ElGamal pada tahun 1984. Algoritma ini

pada mulanya digunakan untuk digital signature, namun kemudian dimodifikasi

sehingga juga bisa digunakan untuk enkripsi dan dekripsi. ElGamal digunakan di dalam perangkat lunak sekuriti yang dikembangkan oleh GNU, program PGP dan pada sistem keamanan lainnya, Keamanan algoritma ini terletak pada sulitnya

menghitung logaritma diskrit (Munir, 2006).

Algoritma ini didasarkan pada masalah logaritma diskret dan terdiri dari tiga proses, yaitu proses pembentukan kunci, proses enkripsi, dan proses dekripsi. Algoritma ini merupakan cipher blok, yaitu melakukan proses enkripsi pada blok-blok

palinteks dan menghasilkan blok-blok ciphertext yang kemudian dilakukan proses

dekripsi, dan hasilnya digabungkan kembali menjadi pesan yang utuh dan dapat dimengerti. Untuk membentuk sistem kriptografi ElGamal, dibutuhkan bilangan prima

p dan elemen primitif (Massandy, 2009).

2.14. Pembentukan Kunci

Proses pertama pada algoritma ElGamal adalah pembentukan kunci yang terdiri dari kunci privat dan kunci publik. Pada proses ini dibutuhkan sebuah bilangan prima

aman p, akar primitif � yang, dan sembarang a ∈ {0,1,...,p-2}. Pada proses

pembentukan kunci, panjang digit bilangan prima p sangat berpengaruh pada panjang


(30)

Kunci publik algoritma ElGamal berupa pasangan 3 bilangan, yaitu (� , , p), dengan

� mod

dimana a merupakan kunci rahasia (Batten, 2013).

2.15. Proses Pembentukan Kunci

Langkah-langkah dalam pembentukan kunci adalah sebagai berikut (Menezes et all, 1996):

1. Pilih bilangan prima besar (p > 255) dan elemen primitif � dari bilangan

bulat mod p.

2. Pilih bilangan bulat a, dimana 1 ≤ ap– 2.

3. Hitung � mod .

4. Publikasikan nilai � , �, dan p, serta rahasiakan nilai a.

Pihak yang membuat kunci adalah pihak penerima. Penerima kemudian akan

mengirimkan kunci publik yaitu � , �, dan p untuk digunakan pada proses enkripsi.

Misalkan Alice dan Bob ingin berkomunikasi. Dalam hal ini Bob akan

membuat kunci publik dan kunci privat. Bob memilih bilangan prima p = 257, �= 20,

dan kunci privat a = 5.

� mod = 205 mod 257 = 93

Jadi kunci publik Bob adalah p = 257, �= 20, dan � = 93 dan kunci

privatnya adalah 5. Bob mengirimkan (257, 20, 93) pada Alice dan menyimpan kunci privatnya.

2.16. Enkripsi

Pada proses enkripsi, pesan asli (plaintext) diubah menjadi pesan rahasia (ciphertext).

Pada proses ini digunakan kunci publik (p, � � ). Dalam perhitungannya, algoritma

ElGamal menggunakan bilangan bulat. Oleh karena itu digunakanlah kode

ASCII(American Standard for Information Interchange). Kode ASCII adalah


(31)

Setelah mendapatkan kunci publik, Alice memilih bilangan acak rahasia b

{0,1,...,p-2}. Bilangan acak b sebaiknya berbeda untuk setiap plaintext menghindari

serangan acak bilangan b yang dapat mempengaruhi plaintext lainnya (Sharma et all,

2012). Misalkan m adalah pesan yang akan dikirim. Selanjutnya m diubah ke dalam

blok-blok karakter dan setiap karakter dikonversikan ke dalam kode ASCII, sehingga diperoleh plaintextm1, m2 , m3, ... , mn dengan mi ∈ {1, 2,..., p-1} dan i =1, 2,..., n.

Enkripsi kemudian dilakukan dengan menghitung

� mod

dan

� mod

Algoritma enkripsi pesan :

1. Plaintext disusun menjadi blok-blok m1, m2, ... , mn sehingga setiap blok

merepresentasikan nilai di dalam rentang 0 sampai p – 1 (dengan mengubah

nilai m menjadi kode ASCII).

2. Pilih bilangan acak b dengan rentang 0 < b < p – 1, sehingga b relatif prima

dengan p– 1.

3. Setiap blok m dienkripsi dengan rumus � mod dan � mod .

4. Setelah dienkripsi, blok teks disusun menjadi = � , � ).

Menggunakan kunci publik Bob (p, � � ) = (257, 20, 93), Alice ingin

mengirimkan pesan ”GUNALAN” kepada Bob. Pesan tersebut harus dienkripsi, oleh

karena itu hal yang dilakukan oleh Alice adalah memotong pesan-pesan menjadi blok-blok karakter dan setiap karakter dikonversi menjadi kode ASCII. Dapat dilihat pada Tabel 2.1 :


(32)

Tabel 2.1. Konversi Blok-blok Karakter Pesan ke Kode ASCII

i Karakter Plaintextmi ASCII

1 G m1 71

2 U m2 85

3 N m3 78

4 A m4 65

5 L m5 76

6 A m6 65

7 N m7 78

Dari Tabel 1, diperoleh banyaknya karakter pada pesan tersebut adalah n = 7.

Proses selanjutnya adalah menentukan bilangan acak rahasia bi ∈ {0,1,....,257}.

Kemudian dihitung � mod dan � mod .

Tabel 2.2. Proses Enkripsi

i mi bi � � mod 257 � �mi mod 257

1 71 67 14 187

2 85 10 168 219

3 78 124 44 214

4 65 43 181 226

5 76 234 215 55

6 65 228 92 152


(33)

Berdasarkan Tabel 2.2. diperoleh ciphertext (� , � ), sebagai berikut :

(14, 187) (168,219) (44, 214)

(181, 226) (215, 55)

(92, 152) (202, 9)

Selanjutnya ciphertext dikirim ke Bob.

2.17. Dekripsi

Setelah ciphertext diterima, proses selanjutnya adalah mendekripsikan ciphertext

menggunakan kunci publik (p, � � ) dan kunci privat a. (p, � � ) sebagai kunci

publik dan a sebagai kunci privat, jika diberikan ciphertext (� , � ) maka dihitung :

� − ≡ � �− − mod dan

� − ≡ mod .

dengan m adalah plaintext.

Algoritma dekripsi pesan :

1. Hitung � �− − mod

Hitung �− � ≡ mod

2. Setelah plaintext m diperoleh, konversikan ke dalam karakter yang sesuai

dengan kode ASCII, kemudian hasilnya digabungkan kembali.

Bob telah menerima ciphertext dari Alice, ciphertext yang diperoleh adalah sebagai

berikut :

(14, 187) (168,219) (44, 214)

(181, 226) (215, 55)


(34)

Untuk itu Bob pertama kali menghitung p – 1 – a = 257 – 1 – 5 = 251.

Kemudian menggunakan kunci publik p = 257 dan kunci privat a = 5, Bob melakukan

perhitungan seperti pada tabel 2.3 :

Tabel 2.3. Proses Dekripsi

i � �� � 251

(mod 257) �� � 251(mod257) m

1 14 187 10 71 G

2 168 219 248 85 U

3 44 214 46 78 N

4 181 226 172 65 A

5 215 55 221 76 L

6 92 152 134 65 A

7 202 9 180 78 N

Berdasarkan Tabel 2.3, Diketahui bahwa pesan tersebut adalah “GUNALAN”

2.18. Baby-step Giant-step

Keamanan ElGamal bergantung pada pemecahan masalah logaritma diskrit dengan

modulo yang sangat besar (Sharma et all, 2012). Metode Baby-step Giant-step

merupakan salah satu metode pencarian dengan mencocokkan dua daftar. Metode ini

bertujuan untuk menemukan a dari � mod . Dalam hal ini a disebut logaritma

diskrit.

Jika ingin menemukan a langkah pertama adalah memilih � ≈ √ − + 1

sehingga p –1 ≤ N2. Hal ini dilakukan karena perhitungan akan melakukan hasil yang

sama jika melebihi √ . Kemudian dibuat dua dafta dimana daftar pertama

meningkatkan pemangkatan sebanyak satu, sedangkan daftar kedua meningkatkan


(35)

Daftar Baby-step : �jmod p untuk 0 ≤ j ≤ N. Daftar Giant-step : � �-Nkmod p untuk 0 ≤ kN.

Daftar Baby-step akan diproses sebanyak √ − modulo p dikarenakan �

adalah akar primitif.

Daftar Giant-step mungkin akan diproses sedikit lama dikarenakan proses

berjalan sebanyak perkalian dengan � .

Jika ditemukan hasil yang sama di setiap daftar (akan memakan banyak waktu

jika p bernilai besar) dapat ditulis � ≡ � �−� mod sehingga � +� ≡

� mod , maka ditemukanlah � = + � .

Banyaknya langkah pada algoritma ini sekitar √ dan angka sebanyak N perlu

disimpan (Batten, 2013).

Diberikan 20a mod 257 = 93. a dapat dihitung dengan mengikuti langkah langkah

berikut:

1. Pilih nilai � ≈ ⌈ √ − ⌉ + 1 .

N ≈⌈ √ − ⌉+ 1 = 17.

2. Hitung daftar Baby-step dengan rumus �jmod p untuk 0 ≤ j < N.

Tabel 2.4. Proses Baby-step

j jmod 257

0 1

1 20

2 143

3 33

4 146

5 93

6 61


(36)

j jmod 257

8 242

9 214

10 168

11 19

12 123

13 147

14 113

15 204

16 225

17 131

3. Hitung daftar Giant-step dengan rumus � �-Nk untuk 0 ≤ k < N hinga

ditemukan hasil yang cocok pada daftar Baby-step.

Tabel 2.5. Proses Giant-step

k � ∗ �-17k

0 93

Perhitungan Giant-step dihentikan karena kecocokan yang ditemukan yaitu 205≡ 93 *

200 (mod p), jadi menurut rumus a = j + Nk, a = 5 + 0 = 5. Oleh karena itu diperoleh a

= 5 yang memenuhi perhitungan 205 mod 257 = 93

2.19. Penelitian yang Relevan

1. Pada penelitian yang dilakukan oleh Ratnaningtyas Yoga Wijayanti (2013)

yang berjudul ”Analisis dan Perbandingan Penggunaan Metode Pembangkitan

Bilangan Prima Fermat dan Lucas-Lehmer dalam Kriptografi Elgamal”

menyebutkan bahwa kunci p yang besar dapat mempengaruhi lamanya waktu


(37)

2. Pada penelitian yang dilakukan oleh Anandia Zelvina (2012) yang berjudul

”Perancangan Aplikasi Pembelajaran Kriptografi Kunci Publik ElGamal untuk Mahasiswa” menyebutkan bahwa pada algoritma ElGamal suatu plaintext yang sama akan dienkripsi menjadi ciphertext yang berbeda-beda.

Hal ini dikarenakan pemilihan bilangan k yang acak. Akan tetapi, walaupun

ciphertext yang diperoleh berbeda beda, tetapi pada proses dekripsi akan

diperoleh plaintext yang sama.

3 Pada penelitian yang dilakukan oleh Muhamad Zaki Riyanto (2007) yang

berjudul ”Pengamanan Pesan Rahasia Menggunakan Algoritma Kriptografi

ElGamal atas Grup Pergandaan Zp*” menyebutkan bahwa agar dapat

menentukan elemen primitif grup Zp*, maka penentuan bilangan prima p

sebagai kunci publik sebaiknya harus diketahui faktorisasi prima dari p-1,


(38)

3.1 Analisis Sistem

Analisis sistem adalah tahap-tahap penguraian suatu sistem yang utuh menjadi komponen-komponen dengan maksud untuk mengidentifikasi dan mengevaluasi permasalahan, kesempatan, hambatan yang terjadi dan kebutuhan yang diharapkan sehingga dapat dipelajari dan diketahui bentuk permasalahannya serta rancangan sistem baru yang akan dibuat atau dikembangkan. Analisis sistem ini terdiri dari dua fase. Fase awal adalah fase analisis masalah yang bertujuan untuk mempelajari dan memahami masalah yang akan diselesaikan dengan menggunakan sistem ini. Kemudian dilanjutkan dengan fase analisis kebutuhan yang akan memenuhi kebutuhan dari pengguna.

3.1.1 Analisis Masalah

Masalah yang akan diselesaikan pada penelitian ini adalah efektivitas dan efisiensi dari metode Baby-step Giant-step dalam memecahkan kunci privat algoritma ElGamal yang akan digunakan untuk mendekripsikan ciphertext. Efektivitas dan efisiensi diukur dari lamanya waktu proses pemecahan kunci dan juga panjang digit bilangan prima yang berpengaruh pada pembentukan kunci publik.

Pada penelitian ini, masalah-masalah yang diketahui akan diidentifikasi dalam diagram Ishikawa. Diagram Ishikawa atau diagram sebab akibat merupakan bentuk diagram yang digunakan untuk mengetahui penyebab-penyebab dari suatu masalah. Diagram ini disebut dengan diagram sebab akibat karena menunjukkan hubungan antara sebab dan akibat. Adapun diagram sebab akibat dari penelitian ini ditunjukkan pada gambar 3.1.


(39)

Gambar 3.1 Diagram Ishikawa

Pada gambar 3.1, tiap-tiap permasalahan dikelompokkan menjadi 4 kategori yang lebih terperinci yaitu Mesin (Machine), Manusia (Man), Material, dan Metode (Method). Kategori Mesin menjelaskan permasalahan yang dihadapi sistem dari sisi peralatan perangkat keras (komputer). Kategori Manusia menjelaskan permasalahan terhadap siapa pemakai atau user yang terlibat dalam proses sistem. Kategori Material adalah kategori permasalahan tentang data atau materi yang akan digunakan dalam proses sistem. Dan yang terakhir adalah kategori Metode dimana menjelaskan apa yang menjadi masalah sistem ketika menggunakan metode tertentu untuk melakukan proses.

3.1.2 Analisis Kebutuhan

Analisis kebutuhan bertujuan untuk mengidentifikasi data apa dan proses apa yang dibutuhkan pada sistem serta menentukan kebutuhan fungsional dan non-fungsional sistem.

3.1.2.1 Kebutuhan Fungsional

Kebutuhan fungsional menunjukkan apa yang harus dilakukan oleh sistem. Kebutuhan fungsional juga menunjukkan fasilitas apa yang dibutuhkan serta aktivitas apa saja yang terjadi di dalam sistem. Sistem yang dibuat harus mampu memenuhi kebutuhan fungsional sebagai berikut :


(40)

1. Pengguna dapat membangkitkan kunci publik ElGamal dengan menginput panjang digit bilangan prima p yang kemudian akan diproses menjadi tiga buah kunci publik yaitu p, alpha, dan alphaa.

2. Pengguna dapat melakukan proses enkripsi pesandari plaintext menjadi ciphertext dengan menginput kunci yang telah dibangkitkan atau dapat menginput kunci publik sendiri. Pesan kemudian akan disimpan di sebuah file *.txt

3. Dalam proses pemecahan kunci publik, pengguna diposisikan sebagai peretas (hacker) untuk mendapatkan kunci privat yang tidak diberikan sebelumnya. Kunci private akan dicari menggunakan metode Baby-step Giant-step dengan menggunakan informasi kunci publik.

4. Pengguna dapat mendekripsikan kembali pesannya setelah mendapatkan kunci rahasia. Pengguna mendekripsikan pesan dengan menggunakan informasi bilangan prima dan kunci rahasia.

5. Untuk menganalisa kinerja sistem, sistem akan menampilkan sebuah pencatat waktu untuk menghitung lama kerjanya sistem.

3.1.2.2 Kebutuhan Non-Fungsional

Kebutuhan non-fungsional adalah kebutuhan yang mendeskripsikan sistem dari segi karakterisitik, fitur dan batasan lainnya seperti performa, informasi, kontrol, dan pelayanan. Terdapat beberapa hal yang menjadi syarat kebutuhan non-fungsional antara lain:

1. Performa

Membatasi panjang kunci maksimal yang bisa dikerjakan oleh sistem 2. Informasi

Memberikan informasi tentang proses yang sedang berjalan dan yang telah selesai

3. Kontrol

Menangani masalah yang tidak sesuai dengan persyaratan yang diinginkan dengan memberikan pesan peringatan.


(41)

4. Pelayanan

Sistem yang mudah dipahami oleh pengguna awam disertai dengan fitur bantuan untuk menunjukkan fungsi masing-masing tombol pada sistem.

3.2 Pemodelan Sistem

3.2.1 Use-Case Diagram

Sebuah Use Case adalah model penggambaran sistem yang menjelaskan sifat dari sistem di bawah kondisi yang berbeda dimana sistem tersebut merespon permintaan dari salah satu penggunanya. Dalam arti lain, sebuah Use Case menceritakan bagaimana seorang pengguna berinteraksi dengan sistem dibawah kondisi tertentu. Penceritaan tersebut dapat berupa sebuah kata-kata naratif atau representasi diagram.

Gambar 3.2 Diagram Use-Case

Pada gambar 3.2 terdapat dua actor yang berperan sebagai pengguna elgamal dan sebagai peretas (hacker). Pengguna ElGamal berperan untuk membangkitkan kunci publik dan kemudian menggunakan kunci publik tersebut untuk mengenkripsikan pesan murni (plaintext) menjadi ciphertext. Kemudian menggunakan kunci privat, pengguna dapat mendekripsikan kembali pesannya menjadi plaintext kembali. Peretas berperan untuk memecahkan kunci privat dengan asumsi peretas telah mengetahui


(42)

informasi kunci publik. Peretas kemudian dapat menggunakan kunci privat tersebut untuk mengenkripsi atau mendekripsi pesan tanpa seijin dari pengguna ElGamal.

Berikut ini merupakan tabel narrative use-case yang dapat dilihat pada tabel 3.1, tabel 3.2, tabel 3.3, dan tabel 3.4.

Tabel 3.1 Narrative Use-Case Bangkitkan Kunci Use-case Name Bangkitkan Kunci

Actor ElGamal User

Description Mendeskripsikan jalannya proses pembangkitan kunci dimulai dari pembangkitan bilangan prima dengan Lehmann Primality Test, pencarian akar primitif, pembangkitan kunci rahasia, serta nilai dari αa

Precondition Sistem menerima inputan panjang digit kunci minimal 3 digit Post Condition Sistem menghasilkan tiga buah kunci publik

Success Scenario 1. Pengguna meng-input panjang kunci bilangan prima minimal 3 digit.

2. Pengguna menekan tombol Enter.

3. Sistem akan melakukan komputasi untuk membangkitkan kunci publik dan kunci privat ElGamal

4. Sistem akan menampilkan hasil kalkulasi kunci privat dan kunci publik ElGamal.

Exception 1a. Pengguna memasukkan nilai input panjang kunci publik kurang dari 3 atau kosong.

1a1. Sistem akan memberikan pesan bahwa nilai input kunci yang dimasukkan harus lebih dari 3.

1a2. Sistem akan memberikan pesan bahwa nilai input kunci yang dimasukkan tidak ada atau kosong.


(43)

Tabel 3.2 Narrative Use-Case Enkripsi Use-case Name Enkripsi

Actor ElGamal User dan Hacker

Description Pengguna dan peretas sama-sama dapat melakukan proses enkripsi pesan, yaitu mengubah pesan murni (plaintext) menjadi pesan rahasia (ciphertext)

Precondition Sistem menerima inputan file pesan murni dengan ekstensi file *.doc atau *.txt

Post Condition Sistem menghasilkan file *.txt yang berisikan pesan yang telah dienkripsi

Success Scenario 1. Pengguna atau peretass memilih file teks yang akan dienkripsi.

2. Pengguna atau peretas menginputkan kunci publik pribadi atau yang telah dibangkitkan

3. Pengguna atau peretas menekan tombol Encrypt 4. Sistem akan melakukan proses enkripsi pesan 5. Sistem menampilkan pesan enkripsi berhasil.

6. Sistem menyimpan file ciphertext ke lokasi yang ditentukan Exception 1a. Pengguna memasukkan file teks engan ekstensi yang salah.

1a.1. Sistem akan memberikan pesan untuk memeriksa kembali file yang dimasukkan.

2a. Pengguna memasukan inputan kunci publik yang salah 2a.1. Sistem akan memberikan pesan untuk memeriksa kembali inputan kunci publik

Tabel 3.3 Narrative Use-Case Dekripsi Use-case Name Dekripsi

Actor ElGamal User dan Hacker

Description Pengguna dan peretas sama-sama dapat melakukan proses dekripsi pesan, yaitu mengubah pesan rahasia (ciphertext) menjadi pesan murni (plaintext).

Precondition Sistem menerima inputan file pesan rahasia dengan ekstensi file *.txt

Post Condition Sistem memberikan pesan hasil dekripsi file

Success Scenario 1. Pengguna atau peretas memilih file teks yang akan didekripsikan.

2. Pengguna atau peretas menginputkan kunci publik p (bilangan prima) dan kunci privat pribadi atau yang telah dipecahkan. 3. Pengguna atau peretas menekan tombol Decrypt

4. Sistem akan melakukan proses dekripsi pesan 5. Sistem menampilkan isi pesan yang sudah didekripsi Exception 1a. Pengguna memasukkan file teks engan ekstensi yang salah.

1a.1. Sistem akan memberikan pesan untuk memeriksa kembali file yang dimasukkan.


(44)

Exception 2a. Pengguna memasukan inputan kunci publik yang salah 2a.1. Sistem akan memberikan pesan untuk memeriksa kembali inputan kunci publik

Tabel 3.4 Narrative Use-Case Pemecahan Kunci Use-case Name Pemecahan Kunci

Actor Hacker

Description Peretas dapat memecahkan kunci rahasia milik pengguna hanya dengan memiliki informasi kunci publik yang kemudian akan diproses dengan metode Baby-step Giant-step.

Precondition Sistem menerima inputan berupa kunci publik p, α ,dan αa Post Condition Sistem menampilkan kunci rahasia a

Success Scenario 1. Peretas menginput nilai kunci publik yang telah diketahui. 2. Peretas menekan tombol Find

3. Sistem melakukan proses komputasi untuk menemukan kunci rahasia dengan menggunakan metode Baby-step Giant-step 4. Sistem menampilkan kunci rahasia yang telah ditemukan Exceptions 1a. Pengguna memasukan inputan kunci publik yang salah

2a.1. Sistem akan memberikan pesan untuk memeriksa kembali inputan kunci publik


(45)

3.2.2 Sequence Diagram

Suatu sequence diagram adalah suatu penyajian perilaku yang tersusun sebagai rangkaian langkah-langkah percontohan dari waktu ke waktu. Sequence diagram digunakan untuk menggambarkan arus pekerjaan, pesan yang yang disampaikan, dan bagaimana elemen-elemen di dalamnya bekerja sama dari waktu ke waktu untuk mencapai suatu hasil. Berikut diagram sequence pada penelitian ini dapat dilihat pada Gambar 3.3 dan 3.4.

Gambar 3.3 Sequence Diagram untuk ElGamal User


(46)

3.2.3 Activity Diagram

Activity Diagram adalah sebuah diagram yang berfokus pada aktifitas-aktifitas yang terjadi yang terkait dalam suatu proses tunggal. Dengan kata lain, diagram ini menunjukkan bagaimana aktifitas-aktifitas tersebut bergantung satu sama lain. Activity diagram pada sistem dapat ditunjukkan pada Gambar 3.5 dan 3.6.


(47)

Gambar 3.6 Diagram Activity untuk Hacker

3.3 Pseudocode dan Flowchart Program

3.3.1 Pseudocode dan Flowchart Lehmann Primality Test

Lehmann Primality Test pada penelitian ini digunakan untuk mencari bilangan prima dengan cara mencari nilai dari a(p-1)/2 mod p sebanyak sepuluh kali dan mencatat probabilitasnya. Jika probabilitasnya lebih besar dari 97, maka p adalah bilangan prima. Pseudocode dari Lehmann Primality Test terdiri dari dua fungsi dimana fungsi pertama adalah untuk membangkitkan bilangan acak, dan fungsi kedua adalah untuk menentukan apakah bilangan acak tersebut adalah bilangan prima atau tidak :


(48)

1. function random_with_N_digits(n): 2. range_start = 10^(n-1)

3. range_end = (10^n)-1

4. l = random(range_start, range_end) 5. if l % 2 == 0 or l % 3 == 0:

6. return random_with_N_digits(n) 7. return l

8. function lehman(n):

9. p = random_with_N_digits(n) 10. persen = 50

11. probability = 0 12. for i in range(10): 13. a = random(1,p)

14. if a^(p-1)/2 mod p == 1 or a^(p-1)/2 mod p == -1 : 15. probability += persen 16. persen = persen / 2 17. if probability >= 97 : 18. return l

19. else :

20. return lehman(n):

Fungsi pertama (1) adalah fungsi untuk membangkitkan bilangan acak ganjil yang memiliki kemungkinan prima. Hal yang pertama dilakukan adalah menerima inputan digit n lalu menentukan rentang digit untuk membangkitkan bilangan acak. variabel range_start (2) berfungsi sebagai rentang terkecil, sedangkan variabel range_end (3) berfungsi sebagai rentang terbesar. Kemudian bilangan acak akan dibangkitkan dan disimpan di variabel (4). Jika variabel l di-modkan oleh 2 atau 3 menghasilkan nilai 0 yaitu pada proses (5), maka bilangan tersebut tidak mungkin prima. Oleh karena itu dilakukan fungsi rekursif untuk mengulangi proses pembangkitan angka hingga mendapatkan hasil yang diinginkan.

Proses selanjutnya adalah mencari kemungkinan bilangan tersebut adalah prima atau tidak, dengan menggunakan fungsi (8) . Hal yang pertama dilakukan adalah memanggil fungsi membangkitkan bilangan acak lalu disimpan ke variabel p (9). Lalu proses (10) hingga (20) akan memeriksa probabilitas bilangan tersebut adalah prima atau tidak dengan cara mengecek a^(p-1)/2 mod p apakah menghasilkan nilai 1 atau


(49)

-1. Jika menghasilkan salah satu nilai tersebut maka kemungkinan bilangan acak tersebut prima semakin tinggi.

Berikut flowchart algoritma Lehmann Primality Test yang dapat ditunjukkan dari Gambar 3.7.


(50)

3.3.2 Pseudocode dan Flowchart Primitive Roots

Primitive Roots (Akar Primitif) pada penelitian ini digunakan sebagai salah satu kunci publik yang kemudian akan digunakan untuk mengenkripsi pesan. Akar primitif yang digunakan adalah akar primitif dari bilangan prima yang telah dibangkitkan di fungsi Lehmann Primality Test. Berikut adalah pseudocode untuk mencari akar primitif :

1. function prime_factors(n): 2. i = 2

3. while i * i <= n: 4. if n mod i : 5. i += 1 6. else:

7. n //= i

8. factors.append(i) 9. print i

10. if n > 1:

11. factors.append(n) 12.

13. function primitive_roots(random, p): 14. for i in range(0, len(factors)):

15. a= rand_int^(p-1)/factors[i] mod p 16. if a == 1:

17. return "fail" 18. return rand_int

Fungsi di atas terbagi atas dua bagian. Fungsi yang pertama bertujuan untuk mencari faktor prima dari p – 1. Fungsi yang kedua adalah fungsi yang akan digunakan untuk memeriksa apakah sebuah bilangan acak merupakan akar primitif.

Hal yang pertama kali dilakukan adalah menjalankan fungsi prime_factors

dengan menerima inputan berupa bilangan prima (p). Bilangan prima tersebut akan dicari faktor primanya dari p – 1. Setelah faktor prima didapat, akan dicek akar primitifnya dari bilangan acak yang dibangkitkan dengan menjalankan fungsi

primitive_roots. Jika persamaan (15) terpenuhi, maka bilangan acak yang dibangkitkan merupakan akar primitif

Berikut flowchart algoritma pencarian akar primitif yang dapat ditunjukkan dari Gambar 3.8.


(51)

Gambar 3.8 Flowchart Primitive Roots

3.3.3 Pseudocode dan Flowchart Enkripsi ElGamal

Pada tahap enkripsi, pesan asli diubah menjadi pesan rahasia menggunakan kunci publik yang telah dibangkitkan. Pesan asli akan diubah menjadi deretan kode ASCII sesuai dengan representasi numeriknya. Enkripsi dibagi atas dua bagian, yang pertama adalah perhitungan � mod � dan yang kedua adalah perhitungan �� mod � .

Pseudocode untuk enkripsi ElGamal adalah sebagai berikut :

1. function encryptMessage(): 2. message = readfile(input) 3. p = lehmann(n)


(52)

5. y = generate_key() 6.

7. converted_message = [] 8. for i in message:

9. converted_message.append(ord(i)) 10.

11. alpha_exp_b = [] 12. malpha_exp_b = []

13. n = len(converted_message) 14. b = []

15. result = [] 16.

17. for i in range(0,n):

18. b.append(random_number(p)) 19.

20. for i in range(0,n):

21. alpha_exp_b.append(alpha^b[i] mod p) 22.

23. for i in range(0,n): 24. malpha = (y^b[i]) 25. malpha = malpha *

converted_message[i] 26. malpha_exp_b.append 27. (malpha mod p) 28.

29. for i in range(0,n):

30. result.append(alpha_exp_b[i]) 31. result.append(malpha_exp_b[i])

Pada pseudocode baris (2) sampai (5), sistem menerima inputan berupa pesan asli dan kunci publik. Kemudian pada pseudocode baris (7) sampai (9), pesan dipindahkan ke variabel converted_message dan diubah menjadi representasi numeriknya pada

tabel ASCII. Pada baris (16), dibangkitkan bilangan acak yang kemudian akan digunakan pada perhitungan di baris (18) sampai baris (24), dimana akan dihasilkan dua variabel bersifat array yang menyimpan angka-angka hasil enkripsi dari pesan asli. Lalu variabel tersebut akan disatukan dan disimpan ke dalam variabel result


(53)

Berikut flowchart algoritma enkripsi ElGamal yang dapat ditunjukkan dari Gambar 3.9.


(54)

(55)

3.3.4 Pseudocode dan Flowchart Dekripsi ElGamal

Pada tahap dekripsi, pesan hasil enkripsi (ciphertext) akan dikembalikan lagi ke bentuk aslinya. Pesan akan didekripsikan dengan menerima informasi kunci publik dan kunci privat. Berikut adalah pseudocode dari algoritma dekripsi elgamal :

1. function decryptMessage():

2. message = readfile(ciphertext) 3. message = message.split() 4.

5. messageInt = [] 6. for item in message:

7. messageInt.append(int(item)) 8.

9. alpha_exp_b = [] 10. malpha_exp_b = [] 11.

12. alpha_exp_b = messageInt[0::2] 13. malpha_exp_b = messageInt[1::2] 14.

15. p = public key prime number 16. a = private key

17.

18. p_min_a = p - 1 - a 19.

20. n = len(alpha_exp_b) 21. decrypt = []

22. decrypt_result = [] 23.

24. for i in range(0,n):

25. decrypt.append(alpha_exp_b[i]^p_min_a mod p) 26.

27. for i in range(0,n):

28. times = malpha_exp_b[i] * decrypt[i] 29. decrypt_result.append(times mod p) 30.

31. pesan = join(chr(i) for i in decrypt_result)

Pada pseudocode baris (2) dan (3), sistem menerima inputan pesan ciphertext yang kemudian dipecah menjadi karakater-karakter dan disimpan pada variabel


(56)

messageInt. Lalu karakter karakter ciphertext akan dibagi dua bagian, yang pertama disimpan di variabel alpha_exp_b dan yang kedua disimpan di variabel

malpha_exp_b. Karakter yang disimpan di variabel pertama adalah karakter yang berada di posisi genap, sedangkan karakter di variabel kedua berada di posisi ganjil.

Kemudian sistem menerima inputan berupa bilangan prima dari kunci publik, dan kunci privat ElGamal. Baris (18) sampai (29) menunjukkan proses perhitungan karakter karakter ciphertext diubah kembali menjadi representasi numerik masing-masing karakter. Dan yang terakhir pada baris (31), karakter karakter tersebut akan diubah kembali menjadi representasi alfabetnya masing-masing lalu dikembalikan menjadi satu pesan asli (plaintext).

Berikut flowchart algoritma dekripsi ElGamal yang dapat ditunjukkan dari Gambar 3.10.


(57)

(58)

3.3.5 Pseudocode dan Flowchart Modulo Inverse

Invers modulo pada penelitian ini digunakan untuk membantu perhitungan a pangkat negatif b modulo c yang akan diterapkan pada metode Baby-step Giant-step. Jika a dan c relatif prima, maka invers modulo dapat ditemukan. Berikut pseudocode dari invers modulo.

1. function inverse_modulo(): 2. n = 1

3. while True:

4. if (n * a) mod c == 1: 5. break

6. else: 7. n += 1 8. return n

Baris (3) sampai (7) pada pseudocode akan memeriksa apakah n merupakan

invers modulo dari a-1 mod c. Jika (n * a) mod c == 1 maka perulangan akan dihentikan dan nilai n akan dikembalikan. Jika tidak, nilai n akan ditambahkan hingga persyaratan (n * a) mod c == 1 dipenuhi.

Berikut flowchart algoritma invers modulo yang dapat ditunjukkan dari Gambar 3.11.


(59)

3.3.6 Pseudocode dan Flowchart Baby-step Giant-step

Pada penelitian ini, metode Baby-step Giant-step digunakan untuk mencari kunci rahasia dari algoritma kriptografi ElGamal, dengan berasumsikan hacker telah memiliki informasi kunci publik (p, � , �). Kunci privat akan dicari dengan langkah

pertama yaitu membuat dua buah daftar. Yang pertama adalah daftar Baby-step, dimana daftar tersebut akan menghitung �j mod p untuk 0 ≤ j ≤ N. Lalu daftar kedua akan menghitung daftar Giant-step dengan rumus � �-Nk mod p untuk 0 ≤ k N. N adalah hasil perhitungan dari √� − 1 + 1, dikarenakan langkah yang terjadi pada algoritma ini hanya sekitar √�. Berikut adalah pseudocode dari algoritma Baby-step Giant-step

1. function BSGS():

2. p = public key prime number 3. alpha = public key alpha 4. y = public key alpha^a 5.

6. N = sqrt(p-1) 7. N = N + 1 8.

9. bsList = [] 10. gsList = [] 11.

12. for j in range(0,N+1): 13. value = alpha ^ j mod p 14. bsList.append(value) 15.

16. inv = inverse_modulo(p, alpha) 17.

18. for k in range(0,N+1):

19. power = (inv ^ N*k) mod p 20. value = y*power mod p 21. gsList.append(value) 22.

23. x1,x2 =0,0

24. for r in bsList: 25. if r == value:


(60)

27. x2 = N*k 28. break 29.

30. if x1 + x2 != 0: 31. break

32. 33. a = x1 + x2

Pada baris (2) sampai (4), sistem menerima inputan berupa kunci publik. Kemudian di baris (13) hingga (15) sistem melakukan perhitungan terhadap daftar dari Baby-step dan menyimpannya ke dalam sebuah list. Pada baris (17), sistem melakukan perhitungan invers modulo dari kunci publik p dan alpha. Dan yang terakhir pada baris (19) hingga (32), sistem melakukan perhitungan terhadap daftar dari Giant-step dan disimpan juga ke dalam sebuah list sekaligus dicari kecocokan nilai dengan list dari Baby-step. Jika kecocokan ditemukan, maka perhitungan akan dihentikan, dan nilai index dari Baby-step dan nilai dari N*k akan dijumlahkan.

Berikut flowchart algoritma Baby-step Giant-step yang dapat ditunjukkan dari Gambar 3.12.


(61)

(62)

3.4 Perancangan Antarmuka (Interface)

Perancangan antarmuka dibutuhkan untuk mempermudah interaksi antara user dan system. Hal ini ditujukan pada kemudahan menjalankan instruksi-instruksi yang ada sehingga fungsi yang ada pada sistem dapat berjalan secara optimal. Dalam penelitian ini digunakan dua bahasa pemrograman yaitu Python dan Java.

3.4.1 Form Utama

Pada penelitian ini Form Utama adalah tampilan awal pada aplikasi dan dapat digunakan oleh user ataupun hacker. Form utama memiliki fitur untuk membangkitkan kunci publik dan kunci privat ElGamal, tombol untuk membuka form enkripsi, form dekripsi, dan form Baby-step Giant-step. Lalu memiliki menu File yang berisikan menu bantuan (help) dan menu tentang (about). Tampilan Form Utama dapat ditunjukkan pada Gambar 3.13.

Gambar 3.13 Rancangan Form Utama Aplikasi

Elemen-elemen yang terdapat pada Form Utama adalah :

1. Empat buah textbox dimana satu textbox dapat menerima inputan panjang digit bilangan prima, dan tiga textbox lainnya mengeluarkan output berupa kunci publik.

2. Empat buah button, yang pertama button enter berfungsi untuk menjalankan fungsi menghitung kunci publik, lalu button Enkripsi, BSGS, dan Dekripsi yang berfungsi untuk membuka masing-masing form-nya.

Form Utama File

Enkripsi

BSGS

Dekripsi ENTER

Kunci Publik Digit Prima Alpha P Alpha^A


(63)

3. Lima buah label yang memberikan informasi seperti kunci publik dan panjang digit.

4. Sebuah menu bar yang berisi dua menu yaitu menu bantuan dan menu tentang. 5. Sebuah label Waktu yang akan menampilkan waktu proses.

3.4.2 Form Enkripsi

Form Enkripsi adalah form yang digunakan oleh user sebagai antarmuka untuk melakukan proses enkripsi pesan asli. Form Enkripsi dapat dibuka dari button Encryption pada form utama. Tampilan Form Enkripsi dapat ditunjukkan pada Gambar 3.14.

Gambar 3.14 Rancangan Form Enkripsi

Elemen elemen yang terdapat pada Form Enkripsi adalah:

1. Empat buah textbox dimana textbox plaintext memuat informasi tentang lokasi file yang akan dienkripsikan dan tiga buah textbox sebagai tempat untuk input kunci publik yang akan digunakan

2. Dua buah button, dimana button Browse berfungsi untuk menentukan lokasi file yang akan dienkripsi, sedangkan button Enkripsi akan menjalankan proses enkripsi apabila semua textbox sudah berisikan informasi yang dibutuhkan.

Form Enkripsi

Browse Enkripsi

Plaintext

Alpha P Aplha^A

Enkripsi Kunci Publik


(64)

3. Enam buah label yang memberikan informasi seperti kunci publik dan lokasi file, dan enkripsi file.

4. Sebuah label Waktu yang akan menampilkan waktu proses.

3.4.3 Form Baby-step Giant-step (BSGS)

Form BSGS adalah form yang digunakan oleh hacker untuk memperoleh informasi kunci privat dengan berasumsikan hacker telah memiliki informasi kunci publik. Form BSGS dapat dibuka dari button BSGS pada form utama. Tampilan Form BSGS dapat ditunjukkan pada Gambar 3.15.

Gambar 3.15 Rancangan Form BSGS Aplikasi

Elemen-elemen yang terdapat pada Form BSGS adalah:

1. Empat buah textbox dimana tiga textbox pertama berfungsi untuk meminta inputan informasi kunci publik dan hasil perhitungan kunci privat akan ditampilkan di textbox A.

2. Sebuah button Find yang berfungsi untuk menjalankan fungsi mencari kunci privat.

3. Enam buah label yang memberikan informasi seperti kunci publik dan kunci privat.

4. Sebuah label Time yang akan menampilkan waktu proses.

Form BSGS

Input Kunci Publik

Kunci Privat Alpha

P Aplha^A

A

Temukan Waktu :


(65)

3.4.4 Form Dekripsi

Form Dekripsi adalah form yang berfungsi sebagai antarmuka untuk melakukan proses dekripsi ciphertext. Form ini akan meminta inputan berupa lokasi file ciphertext, kunci publik bilangan prima p, dan kunci privat a. Tampilan Form Dekripsi dapat ditunjukkan pada Gambar 3.16.

Gambar 3.16 Rancangan Form DekripsiAplikasi

Keterangan:

1. Tiga buah textbox dimana textbox pertama berfungsi sebagai inputan lokasi ciphertext yang akan didekripsi. Sedangkan textbox kedua dan ketiga berfungsi untuk menerima inputan kunci publik p dan kunci privat a.

2. Dua buah button dimana button Browse berfungsi untuk menentukan lokasi file ciphertext. Sedangkan button Dekripsi berfungsi untuk menjalankan fungsi dekripsi ElGamal.

3. Lima buah label yang memberikan informasi seperti lokasi file dan kunci yang digunakan untuk melakukan dekripsi.

4. Sebuah label Waktu yang akan menampilkan waktu proses.

Form Dekripsi

Dekripsi

P Ciphertext

Input Kunci

A

Browse

Waktu :


(66)

3.4.5 Form Tentang

Form Tentang adalah tampilan aplikasi yang menampilkan identitas penulis dan judul dari penelitian. Tampilan Form Tentang dapat ditunjukkan pada Gambar 3.20.

Gambar 3.17 Rancangan Form TentangAplikasi

Elemen-elemen yang terdapat pada Form Tentang adalah: 1. adalah label yang menunjukkan nama aplikasi. 2. adalah label yang menerangkan identitas penulis. 3. adalah label yang menunjukkan logo universitas.

4. adalah label yang menunjukkan indentitas program studi dan instansi penulis.

3.4.6 Form Bantuan

Form Bantuan bertujuan sebagai antarmuka untuk membantu user agar lebih memahami cara penggunaan aplikasi. Form bantuan akan menjelaskan fungsi dari masing-masing form beserta fungsi dari masing-masing tombol maupun textbox-nya. Tampilan Form Bantuan dapat ditunjukkan pada Gambar 3.18.

JUDUL APLIKASI

NAMA

NIM

LOGO UNIVERSITAS

PROGRAM STUDI FAKULTAS UNIVERSITAS

KOTA TAHUN

1

2

3


(1)

#hitung p-1-a

p_min_a = p - 1 - a

n = len(alpha_exp_b) decrypt = []

decrypt_result = []

#find alpha exp b exp p min a for i in range(0,n):

decrypt.append(pow(alpha_exp_b[i],p_min_a,p))

#find malpha exp b * decrypt mod p for i in range(0,n):

times = malpha_exp_b[i] * decrypt[i] decrypt_result.append(pow(times,1,p))

print decrypt_result

pesan = ''.join(chr(i) for i in decrypt_result) end = timeit.default_timer()

textTime.text = str((end - start) * 1000) #print pesan

frameDR.visible = True textArea.text = pesan

#Decryption form panel = JPanel() panel.setLayout(None)

#panel.setBackground(Color(66,66,66)) frameDe.getContentPane().add(panel)

dec = JLabel("Decryption") dec.setBounds(35,0,100,100)

dec.setFont(Font("Times New Roman",Font.BOLD,14)) panel.add(dec)

inputCT = JLabel("Ciphertext") inputCT.setBounds(5,25,100,100)


(2)

panel.add(inputCT)

textFL = JTextField()

textFL.setBounds(85,65,140,20) panel.add(textFL)

buttonBrowse = JButton("Browse", actionPerformed = browseFile) buttonBrowse.setBounds(230,65,100,20)

panel.add(buttonBrowse)

labelPK = JLabel("Input Your Key") labelPK.setBounds(35,75,150,100)

labelPK.setFont(Font("Times New Roman",Font.BOLD,14)) panel.add(labelPK)

labelPrime = JLabel("P")

labelPrime.setBounds(5,100,100,100)

labelPrime.setFont(Font("Times New Roman",Font.BOLD,12)) panel.add(labelPrime)

textPrime = JTextField()

textPrime.setBounds(85,140,140,20) panel.add(textPrime)

buttonDecrypt = JButton("Decrypt", actionPerformed = decryptMessage)

buttonDecrypt.setBounds(230,150,100,20) panel.add(buttonDecrypt)

labelA = JLabel("A")

labelA.setBounds(5,125,100,100)

labelA.setFont(Font("Times New Roman",Font.BOLD,12)) panel.add(labelA)

textA = JTextField()

textA.setBounds(85,165,140,20) panel.add(textA)


(3)

labelTime.setBounds(5,200,100,100)

labelTime.setFont(Font("Times New Roman",Font.BOLD,12)) panel.add(labelTime)

textTime = JTextField()

textTime.setBounds(85,240,140,20) textTime.editable = False

panel.add(textTime)

rot = ImageIcon("one_piece_anime_key_art.jpg") rotLabel = JLabel(rot)

rotLabel.setBounds(0, 0, rot.getIconWidth(), rot.getIconHeight())

panel.add(rotLabel)

7.

Baby-step Giant-step

(BSGS.py)

from javax.swing import * from java.awt.event import * from java.lang import * from java.awt import * import timeit

import math

#create frame

frameBSGS = JFrame("Baby-step Giant-step Form", size=(350,300))

#baby step giant step algorithm def hack(event):

start = timeit.default_timer() p = int(textPrime.text)

alpha = int(textAlpha.text) y = int(textY.text)

x = 0


(4)

def inverse_modulo(): n = 1

while x == 0:

if (n * alpha) % p == 1: break

else: n += 1 return n

N = int(math.ceil(math.sqrt(p-1))) N = N + 1

#print N

A = [] B = []

for j in range(0,N+1): value = pow(alpha,j,p) A.append(value)

inv = inverse_modulo() for k in range(0,N+1): power1 = pow(inv,N*k,p) value = pow(y*power1,1,p) B.append(value)

x1,x2 =0,0 for r in A:

if r == value:

x1 = A.index(r) x2 = N*k

print x1,x2 break

if x1 + x2 != 0: break

end = timeit.default_timer()

textTime.text = str((end - start) * 1000)


(5)

textA.text = str(A)

print end - start

JOptionPane.showMessageDialog(frameBSGS, "Hack Done!", "Info", JOptionPane.INFORMATION_MESSAGE)

#Decryption panel = JPanel() panel.setLayout(None)

frameBSGS.getContentPane().add(panel)

labelPK = JLabel("Input Your Public Key") labelPK.setBounds(35,0,150,100)

labelPK.setFont(Font("Times New Roman",Font.BOLD,14)) panel.add(labelPK)

labelAlpha = JLabel("Alpha")

labelAlpha.setBounds(5,25,100,100)

labelAlpha.setFont(Font("Times New Roman",Font.BOLD,12)) panel.add(labelAlpha)

textAlpha = JTextField()

textAlpha.setBounds(85,65,140,20) panel.add(textAlpha)

labelPrime = JLabel("P")

labelPrime.setBounds(5,50,100,100)

labelPrime.setFont(Font("Times New Roman",Font.BOLD,12)) panel.add(labelPrime)

textPrime = JTextField()

textPrime.setBounds(85,90,140,20) panel.add(textPrime)

labelY = JLabel("Alpha^A") labelY.setBounds(5,75,100,100)

labelY.setFont(Font("Times New Roman",Font.BOLD,12)) panel.add(labelY)


(6)

textY = JTextField()

textY.setBounds(85,115,140,20) panel.add(textY)

buttonDecrypt = JButton("Find", actionPerformed = hack) buttonDecrypt.setBounds(230,200,100,20)

panel.add(buttonDecrypt)

labelSK = JLabel("Private Key") labelSK.setBounds(35,100,150,100)

labelSK.setFont(Font("Times New Roman",Font.BOLD,14)) panel.add(labelSK)

labelA = JLabel("A")

labelA.setBounds(5,125,100,100)

labelA.setFont(Font("Times New Roman",Font.BOLD,12)) panel.add(labelA)

textA = JTextField() textA.editable = False

textA.setBounds(85,165,140,20) panel.add(textA)

labelTime = JLabel("Time")

labelTime.setBounds(5,200,100,100)

labelTime.setFont(Font("Times New Roman",Font.BOLD,12)) panel.add(labelTime)

textTime = JTextField()

textTime.setBounds(85,240,140,20) textTime.editable = False

panel.add(textTime)

rot = ImageIcon("one_piece_anime_key_art.jpg") rotLabel = JLabel(rot)

rotLabel.setBounds(0, 0, rot.getIconWidth(), rot.getIconHeight())