ALGORITMA BABY STEP GIANT STEP
SKRIPSI
GUNALAN ANGGIRASA
101401038
PROGRAM STUDI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
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
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
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,
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.
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
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.
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.
DAFTAR ISI
PERSETUJUAN ii
PERNYATAAN iii
UCAPAN TERIMA KASIH iv
ABSTRAK vi
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
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
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
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
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.
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.
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.
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.
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.
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
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
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
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
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
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”)
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.
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 :
� :
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).
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).
Apakah 2 dan 4 merupakan akar primitif dari 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 :
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%.
= 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
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):
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
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. 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
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)
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
Daftar Baby-step : �jmod p untuk 0 ≤ j ≤ N.
Daftar Giant-step : � �-Nkmod p untuk 0 ≤ k≤ N.
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).
Tabel 2.4. Proses Baby-step
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
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,
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
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
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
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
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.
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.
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
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
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.
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
1. function random_with_N_digits(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
-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.
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):
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 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)
5. y = generate_key()
6.
7. converted_message = []
8. for i in message:
21. alpha_exp_b.append(alpha^b[i] mod p)
22.
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
Berikut flowchart algoritma enkripsi ElGamal yang dapat ditunjukkan dari
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():
25. decrypt.append(alpha_exp_b[i]^p_min_a mod p)
26.
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
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.
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
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
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.
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.