Simulasi Pencarian Kunci Privat dengan Algoritma Silver-Pohlig-Hellaman pada Algoritma Kriptografi Elgamal

(1)

SIMULASI PENCARIAN KUNCI PRIVAT DENGAN ALGORITMA SILVER-POHLIG-HELLMAN PADA ALGORITMA

KRIPTOGRAFI ELGAMAL

DRAFT SKRIPSI

ARIFIN 101401024

PROGRAM STUDI S-1 ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2015


(2)

SIMULASI PENCARIAN KUNCI PRIVAT DENGAN ALGORITMA SILVER-POHLIG-HELLMAN PADA ALGORITMA

KRIPTOGRAFI ELGAMAL

DRAFT SKRIPSI

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

ARIFIN 101401024

PROGRAM STUDI S-1 ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2015


(3)

PERSETUJUAN

Judul : SIMULASI PENCARIAN KUNCI PRIVAT

DENGAN ALGORITMA

SILVER-POHLIG-HELLMAN PADA ALGORITMA KRIPTOGRAFI ELGAMAL

Kategori : SKRIPSI

Nama : ARIFIN

Nomor Induk Mahasiswa : 101401024

Program Studi : SARJANA (S1) ILMU KOMPUTER

Departemen : ILMU KOMPUTER

Fakultas : ILMU KOMPUTER DAN TEKNOLOGI

INFORMASI (FASILKOM-TI)

Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

M. Andri Budiman, ST, M.Comp.Sc, MEM Dr. Elviawaty Muisa Zamzami, ST, MT, MM

NIP.197510082008011011 NIP.197007162005012002

Diketahui/Disetujui oleh

Program Studi S1 Ilmu Komputer Ketua,

Dr. Poltak Sihombing, M.Kom NIP.196203171991021001


(4)

PERNYATAAN

SIMULASI PENCARIAN KUNCI PRIVAT DENGAN ALGORITMA SILVER POHLIG HELLMAN PADA ALGORITMA

KRIPTOGRAFI ELGAMAL

SKRIPSI

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

Medan, April 2015

Arifin 101401024


(5)

PENGHARGAAN

Segala puji dan syukur bagi Allah SWT, atas segala limpahan rahmat dan karunia-Nya penulis dapat menyelesaikan penyusunan skripsi ini, sebagai syarat untuk memperoleh gelar Sarjana Komputer, pada Program Studi S1 Ilmu Komputer Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara. Tidak lupa juga shalawat dan salam kepada tauladan umat Rasululloh Muhammad SAW.

Ucapan terima kasih penulis sampaikan kepada:

1. Ibu Dr. Elviawaty Muisa Zamzami, ST, MT, MM selaku dosen pembimbing I yang telah memberikan bimbingan, kritik, dan saran kepada penulis dalam menyelesaikan skripsi ini

2. Bapak M. Andri Budiman, ST, M.Comp.Sc, MEM selaku dosen pembimbing II yang memberikan bimbingan, kritik, saran dan dukungan kepada penulis mulai dari tahap pengambilan judul skripsi hingga penulis menyelesaikan skripsi ini. 3. Ibu Maya Silvi Lydia, B.Sc, M.Sc selaku Sekretaris Program Studi S1 Ilmu

Komputer Universitas Sumatera Utara, dosen pembanding I, dan dosen pembimbing akademik yang telah memberikan kritik dan saran guna memperbaiki kesalahan yang ada pada skripsi ini

4. Ibu Dian Rachmawati, S.Si, M.Kom selaku dosen pembanding II yang telah memberikan kritik dan saran guna memperbaiki kesalahan yang ada pada skripsi ini.

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

6. Bapak Dr. Poltak Sihombing, M.Kom selaku Ketua Program Studi S1 Ilmu Komputer Universitas Sumatera Utara.

7. Ibunda Rostina yang karenanya penulis bisa menjalani kehidupan hingga tahap ini dan Ayahanda Alm. Ari Suis Rawan, seorang ayah yang sangat bertanggung jawab dan telah menjadi penopang kehidupan keluarga hingga akhir hayatnya. 8. Seluruh dosen dan pegawai Program studi S1 Ilmu Komputer Fasilkom-TI USU. 9. Sahabat-sahabat terdekat 2010 Sutandi, Samsul, Azizah, Uun, Yayang, Wahyu, Gunalan, Saddam, Yudha, Edo, dan Adit yang selalu menemani penulis dalam perkuliahan.


(6)

10. Rekan-rekan asisten laboratorium khususnya Eko Verdianto, Ramruddin, Al Mizfar, Angga, Agung, Cholik, Asrul, Nihe, Risky, Heru, Andhika, Mifta, Gina, Dina, Indri yang telah lama menemani penulis dalam menjalani aktivitas laboratorium.

11. Keluarga IKLC, dan UKMI Al-Khuwarizmi yang telah memberikan tempat bagi penulis untuk diterima dan selalu memberikan semangat dalam menjalani perkuliahan.

12. Adik-adik praktikkan khususnya Lala, Fikri, Azwar, Ikhsan, Ismail, Tari, Nurul, Bunga, Kh Nisa dan lainnya yang telah berbagi canda tawa kepada penulis semasa kegiatan praktikum.

Semoga Allah SWT melimpahkan berkah kepada semua pihak yang telah memberikan bantuan, perhatian, serta dukungan kepada penulis dalam menyelesaikan skripsi ini. Penulis menyadari bahwa skripsi ini masih jauh dari sempurna untuk itu penulis menerima kritik dan saran yang membangun agar dapat menyempurnakan skripsi ini. Akhirnya, semoga skripsi ini bermanfaat bagi pribadi, keluarga, masyarakat, organisasi dan negara.

Medan, April 2015


(7)

ABSTRAK

Algoritma kriptografi ElGamal merupakan salah satu algoritma kriptografi asimetris yang menggunakan sepasang kunci, yaitu kunci publik yang digunakan dalam proses enkripsi pesan, dan kunci privat yang digunakan dalam proses dekripsi pesan. Kunci publik dapat diketahui oleh siapa saja yang ingin mengirimkan pesan secara terenkripsi kepada pemilik kunci, sedangkan kunci privat harus dirahasiakan sehingga pemilik kunci adalah satu-satunya orang yang dapat mendekripsi pesan yang telah terenkripsi. Keamanan algoritma kriptografi ElGamal didasarkan pada sulitnya memecahkan logaritma diskrit dalam sebuah grup perkalian yang besar. Algoritma Silver-Pohlig-Hellman merupakan salah satu algoritma yang digunakan untuk menyelesaikan permasalahan logaritma diskrit. Pada penelitian ini, penulis akan melakukan uji coba penggunaan algoritma Silver-Pohlig-Hellman dalam memecahkan kunci privat ElGamal berdasarkan kunci publik yang telah diketahui. Dalam penelitian ini, dilakukan pengujian pemecahan kunci privat terhadap kunci publik dengan panjang yang berbeda. Hasil dari pengujian menunjukkan bahwa semakin panjang kunci publik yang digunakan, maka akan semakin lama waktu yang dibutuhkan untuk memecahkan kunci privat menggunakan algoritma Silver-Pohlig-Hellman.

Kata kunci : Kriptografi, Kriptanalisis, Logaritma Diskrit, Hacking, ElGamal, Silver-Pohlig-Hellman.


(8)

SIMULATION OF PRIVATE KEY SEARCHING USING SILVER-POHLIG-HELLMAN ALGORITHM ON ELGAMAL CRYPTOGRAPHY ALGORITHM

ABSTRACT

ElGamal cryptography algorithm is one of the asymmetric cryptographic algorithm which uses a pair of keys; public key used in the message encryption process and private key used in the message decryption process. The public key can be known by anyone who wants to send an encrypted message to the key owner, while the private key must be kept secret so that the key owner is the only person that can decrypt the message which has been encrypted. Security of ElGamal cryptography algorithm is based on the difficulty of solving the discrete logarithm in a large group multiplication. Silver-Pohlig-Hellman Algorithm is one of the algorithms used to solve the discrete logarithm problem. In this study, the authors will do the test of the use of Silver-Pohlig-Hellman algorithm in solving the ElGamal private key based on the known public key. In the test, used the private key solving data collection from the different public key length. The results of the test showed that the longer the public key used, the longer it takes to solve the private key using the Silver-Pohlig-Hellman algorithm.

Keyword: Cryptography, Cryptanalisis, Discrete Log, Hacking, ElGamal, Silver-Pohlig-Hellman


(9)

DAFTAR ISI

PERSETUJUAN ... iii

PERNYATAAN ... iv

PENGHARGAAN ... v

ABSTRAK ... vii

ABSTRACT ... viii

DAFTAR ISI ... ix

DAFTAR TABEL ... xii

DAFTAR GAMBAR ... xiii

DAFTAR LAMPIRAN ... xv

BAB 1 ... 1

1.1 Latar Belakang ... 1

1.2 Rumusan Masalah ... 2

1.3 Batasan Masalah ... 2

1.4 Tujuan Penelitian ... 2

1.5 Manfaat Penelitian ... 2

1.6 Metodologi Penelitian ... 3

1.7 Sistematika Penulisan ... 4

BAB 2 ... 5

2.1 Kriptografi ... 5

2.2 Sistem Kriptografi ... 5

2.3 Jenis Sistem Kriptografi Berdasarkan Kunci yang Digunakan ... 5

2.3.1 Sistem Kriptografi Kunci Simetris ... 6

2.3.2 Sistem Kriptografi Kunci Asimetris ... 6

2.4 Matematika untuk Sistem Kriptografi Asimetris ... 7

2.4.1 Greatest Common Divisor (GCD) dan Algoritma Euclid ... 8

2.4.2. Relatif Prima ... 8

2.4.3 Aritmatika Modular dan Kongruensi ... 8


(10)

2.4.5 Grup Perkalian ... 9

2.4.6 Bilangan Prima ... 9

2.4.7 Fermat‟s Little Theorem ... 9

2.4.8 Fungsi ϕ Euler ... 10

2.4.9 Akar Primitif ... 10

2.4.10. Algoritma Miller-Rabin ... 10

2.4.11 Discrete Log Problem ... 11

2.4.12 Chinese Remainder Theorem ... 11

2.5 Sistem Kriptografi ElGamal ... 11

2.5.1 Algoritma ElGamal ... 12

2.5.2 Contoh Penerapan Algoritma Kriptografi ElGamal ... 13

2.6 Kriptanalisis ... 14

2.7 Algoritma Silver-Pohlig-Hellman ... 15

2.8 Tinjauan Penelitian yang Relevan ... 18

BAB 3 ... 19

3.1. Analisis Sistem ... 19

3.1.1. Analisis Masalah ... 19

3.1.2. Analisis Kebutuhan Sistem ... 20

3.1.3 Analisis Pemodelan Sistem... 21

3.2 Perancangan Sistem ... 30

3.2.1. Rancangan Perancangan Graphical User Interface. ... 30

3.2.2. Pseudocode ... 37

BAB 4 ... 45

4.1 Implementasi Sistem ... 45

4.1.1 Tab Bangkitkan Kunci ... 45

4.1.2 Tab Enkripsi... 46

4.1.3 Tab Dekripsi ... 47

4.1.4 Tab Hack ... 48

4.2. Pengujian Sistem ... 48

4.2.1 Pengujian Proses Pembangkitan Kunci ... 49

4.2.2 Pengujian Proses Enkripsi Pesan ... 50

4.2.3 Pengujian Proses Dekripsi Pesan ... 51


(11)

4.3 Perbandingan Panjang Digit Kunci dengan Lama Waktu Hack ... 55

4.3.1. Grafik Rata-rata Waktu Pemecahan Kunci terhadap Panjang Kunci p ... 58

BAB 5 ... 60

5.1 Kesimpulan ... 60

5.2 Saran ... 60


(12)

DAFTAR TABEL

Tabel 2.1 Kode ASCII dari plaintext ... 13

Tabel 2.2 Ciphertext 2, hasil enkripsi dari plaintext „mundur‟ ... 14

Tabel 2.3 Hasil dekripsi dari ciphertext ... 14

Tabel 4.1 Hasil enkripsi pesan „utara‟ ... 51

Tabel 4.2 Hasil dekripsi ciphertext ... 52

Tabel 4.3 Pengujian pemecahan kunci dengan panjang kunci 4 digit ... 55

Tabel 4.4 Pengujian pemecahan kunci dengan panjang kunci 6 digit ... 56

Tabel 4.5 Pengujian pemecahan kunci dengan panjang kunci 8 digit ... 56

Tabel 4.6 Pengujian pemecahan kunci dengan panjang kunci 10 digit ... 57

Tabel 4.7 Pengujian pemecahan kunci dengan panjang kunci 12 digit ... 57


(13)

DAFTAR GAMBAR

Gambar 2.1 Diagram sistem kriptografi kunci simetris ... 6

Gambar 2.2 Diagram sistem kriptografi kunci asimetris ... 7

Gambar 2.3 Diagram proses sistem kriptografi ElGamal ... 12

Gambar 3.1 Diagram Ishikawa Masalah Penelitian ... 19

Gambar 3.2 Model Sistem ... Error! Bookmark not defined. Gambar 3.3 Use case diagram. ... Error! Bookmark not defined. Gambar 3.4 Sequence diagram bangkitkan kunci ... Error! Bookmark not defined. Gambar 3.5 Sequence diagram Enkripsi Pesan ... Error! Bookmark not defined. Gambar 3.6 Sequence diagram Dekripsi Pesan ... Error! Bookmark not defined. Gambar 3.7 Sequence diagram Hack ... Error! Bookmark not defined. Gambar 3.8 Diagram Aktivitas Bangkitkan Kunci ... Error! Bookmark not defined. Gambar 3.9 Diagram Aktivitas Enkripsi Pesan ... Error! Bookmark not defined. Gambar 3.10 Diagram Aktivitas Dekripsi Ciphertext . Error! Bookmark not defined. Gambar 3.11 Diagram Aktivitas Pecahkan Kunci Privat ... Error! Bookmark not defined. Gambar 3.12 Rancangan Tampilan Tab Bangkitkan Kunci ... Error! Bookmark not defined. Gambar 3.13 Rancangan Tampilan Tab Enkripsi ... 34

Gambar 3.14 Rancangan Tampilan Tab Dekripsi ... 35

Gambar 3.15 Rancangan Tampilan Tab Hack ... 36

Gambar 4.1 Tab Generate Key ... 45

Gambar 4.2 Tab Enkripsi ... 46

Gambar 4.3 Tab Dekripsi ... 47

Gambar 4.4 Tab Hack ... 48

Gambar 4.5 Pengujian pembangkitan kunci ElGamal ... 49

Gambar 4.6 Pengujian enkripsi pesan ElGamal... 50

Gambar 4.7 Pengujian dekripsi pesan ElGamal... 52

Gambar 4.8 Pengujian hack kunci ElGamal ... 53

Gambar 4.9 Grafik Waktu Pembangkitan Kunci ... 58


(14)

(15)

DAFTAR LAMPIRAN

A. Listing Program A-1


(16)

ABSTRAK

Algoritma kriptografi ElGamal merupakan salah satu algoritma kriptografi asimetris yang menggunakan sepasang kunci, yaitu kunci publik yang digunakan dalam proses enkripsi pesan, dan kunci privat yang digunakan dalam proses dekripsi pesan. Kunci publik dapat diketahui oleh siapa saja yang ingin mengirimkan pesan secara terenkripsi kepada pemilik kunci, sedangkan kunci privat harus dirahasiakan sehingga pemilik kunci adalah satu-satunya orang yang dapat mendekripsi pesan yang telah terenkripsi. Keamanan algoritma kriptografi ElGamal didasarkan pada sulitnya memecahkan logaritma diskrit dalam sebuah grup perkalian yang besar. Algoritma Silver-Pohlig-Hellman merupakan salah satu algoritma yang digunakan untuk menyelesaikan permasalahan logaritma diskrit. Pada penelitian ini, penulis akan melakukan uji coba penggunaan algoritma Silver-Pohlig-Hellman dalam memecahkan kunci privat ElGamal berdasarkan kunci publik yang telah diketahui. Dalam penelitian ini, dilakukan pengujian pemecahan kunci privat terhadap kunci publik dengan panjang yang berbeda. Hasil dari pengujian menunjukkan bahwa semakin panjang kunci publik yang digunakan, maka akan semakin lama waktu yang dibutuhkan untuk memecahkan kunci privat menggunakan algoritma Silver-Pohlig-Hellman.

Kata kunci : Kriptografi, Kriptanalisis, Logaritma Diskrit, Hacking, ElGamal, Silver-Pohlig-Hellman.


(17)

SIMULATION OF PRIVATE KEY SEARCHING USING SILVER-POHLIG-HELLMAN ALGORITHM ON ELGAMAL CRYPTOGRAPHY ALGORITHM

ABSTRACT

ElGamal cryptography algorithm is one of the asymmetric cryptographic algorithm which uses a pair of keys; public key used in the message encryption process and private key used in the message decryption process. The public key can be known by anyone who wants to send an encrypted message to the key owner, while the private key must be kept secret so that the key owner is the only person that can decrypt the message which has been encrypted. Security of ElGamal cryptography algorithm is based on the difficulty of solving the discrete logarithm in a large group multiplication. Silver-Pohlig-Hellman Algorithm is one of the algorithms used to solve the discrete logarithm problem. In this study, the authors will do the test of the use of Silver-Pohlig-Hellman algorithm in solving the ElGamal private key based on the known public key. In the test, used the private key solving data collection from the different public key length. The results of the test showed that the longer the public key used, the longer it takes to solve the private key using the Silver-Pohlig-Hellman algorithm.

Keyword: Cryptography, Cryptanalisis, Discrete Log, Hacking, ElGamal, Silver-Pohlig-Hellman


(18)

BAB 1 PENDAHULUAN

1.1 Latar Belakang

Pada masa sekarang teknologi tidak hanya berfungsi sebagai sarana pertukaran informasi-informasi umum, namun juga berperan penting dalam berjalannya sebuah bisnis. Mulai dari penyimpanan data inventaris perusahaan yang bisa diakses dari semua cabang sampai pada transaksi-transaksi penting yang dipermudah dengan keberadaan teknologi.

Kerahasiaan dalam pengiriman data agar tidak jatuh ke tangan orang yang tidak berhak menjadi kebutuhan yang sangat penting. Pada bagian ini, kriptografi mengambil bagiannya dalam menyandikan pesan agar hanya dapat dibaca oleh pihak -pihak yang memiliki hak.

Ilmu Kriptologi dapat dikategorikan ke dalam dua cabang, yang pertama yaitu cabang yang mempelajari bagaimana caranya merahasiakan pesan, disebut dengan kriptografi. Dan cabang yang mempelajari teknik untuk memecahkan pesan yang telah dirahasiakan dengan kriptografi, disebut dengan kriptanalisis.

Sistem kriptografi saat ini dapat dikategorikan ke dalam dua jenis, yang pertama yaitu sistem kriptografi klasik dimana pengirim dan penerima pesan rahasia memiliki kunci yang sama sehingga kunci yang digunakan untuk menyandikan pesan sama dengan kunci yang digunakan untuk mengembalikan pesan ke bentuk semula. Jenis yang kedua adalah sistem kriptografi kunci publik, dimana kunci untuk menyandikan pesan dan kunci untuk mengembalikannya seperti semula berbeda.

Sistem kriptografi ElGamal adalah sebuah algoritma enkripsi asimetris untuk kriptografi kunci publik yang keamanannya didasarkan pada kesulitan pemecahan Discrete Log Problem, ditemukan oleh Taher ElGamal pada tahun 1984. Algoritma ElGamal menggunakan sepasang kunci, yaitu kunci publik dan kunci privat yang didapat dari hasil sebuah perhitungan matematika.


(19)

Keamanan algoritma ElGamal didasarkan pada sulitnya memecahkan kunci privat dengan dasar permasalahan discrete log. Namun telah diketahui beberapa algoritma untuk memecahkan discrete log dari sebuah bilangan, diantaranya adalah Algoritma Silver-Pohlig-Hellman. Oleh sebab itu penulis ingin membuat implementasi algoritma Silver-Pohlig-Hellman dalam pencarian discrete log untuk pemecahan kunci privat ElGamal.

Berdasarkan latar belakang yang telah disebutkan, maka penulis akan mencoba membuat penelitian dengan judul “Simulasi Pencarian Kunci Privat dengan Algoritma Silver-Pohlig-Hellman pada Algoritma Kriptografi ElGamal”.

1.2 Rumusan Masalah

Berdasarkan latar belakang masalah yang telah disebutkan, rumusan masalah yang akan dibahas dalam penelitian ini adalah bagaimana algoritma Silver-Pohlig-Hellman dapat memecahkan kunci privat ElGamal berdasarkan kunci publik yang telah diketahui.

1.3 Ruang Lingkup Penelitian

Ruang lingkup di dalam penelitian ini adalah sebagai berikut: 1. Ukuran panjang kunci publik adalah 4 sampai 16 digit.

2. Pembangkitan bilangan prima menggunakan algoritma Miller-Rabin. 3. Enkripsi dan dekripsi hanya dilakukan pada file text.

4. Bahasa pemrograman yang digunakan adalah Python.

1.4 Tujuan Penelitian

Tujuan dari penelitian ini adalah membuat sebuah aplikasi yang dapat membangkitkan kunci, mengenkripsi pesan, mendekripsi pesan, dan menemukan kunci privat berdasarkan kunci publik ElGamal menggunakan algoritma Silver-Pohlig-Hellman. 1.5 Manfaat Penelitian

Penelitian ini diharapkan dapat memberikan pengetahuan tentang karakteristik dan batas panjang minimal kunci privat ElGamal yang aman dari serangan Algoritma Silver-Pohlig-Hellman.


(20)

1.6 Metodologi Penelitian

Tahapan yang dilakukan dalam penelitian ini adalah: 1. Studi Literatur

Pada tahap ini penulisan dimulai dengan studi kepustakaan yaitu proses pengumpulan bahan-bahan referensi baik dari buku-buku, artikel-artikel, maupun dari hasil penelitian mengenai sistem kriptografi ElGamal dan Algoritma Silver -Pohlig-Hellman.

2. Analisis dan Perancangan

Masalah akan dianalisis untuk dimodelkan secara konseptual dengan mengidentifikasi seluruh elemen yang dibutuhkan dan batasan masalah dalam mencapai tujuan. Kemudian perancangan sistem dilakukan dengan mendesain user interface, flowchart, dan UML sebagai gambaran sistem yang akan dibuat.

3. Implementasi

Pada tahap ini sistem akan dibangun dengan menggunakan bahasa pemrograman Python.

4. Pengujian Sistem

Sistem yang telah dibuat akan diuji dengan membangkitkan banyak kunci dengan panjang yang berbeda pada algoritma ElGamal lalu melihat ketepatan dan kecepatan sistem yang dibangun dalam memecahkan kunci privat menggunakan algoritma Silver-Pohlig-Hellman.

5. Dokumentasi

Proses dokumentasi hasil penelitian dilakukan selaman penelitian dengan menyusun laporan dalam bentuk skripsi.


(21)

1.7 Sistematika Penulisan

Sistematika penulisan skripsi ini terdiri dari beberapa bagian utama yaitu:

Bab 1 dijelaskan latar belakang judul skripsi “Simulasi Pencarian Kunci Privat dengan Algoritma Silver-Pohlig-Hellman pada Algoritma Kriptografi ElGamal”, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, metodologi penelitian, dan sistematika penulisan.

Bab 2 diisi dengan penjelasan dari teori dasar matematika yang berhubungan dengan sistem kriptografi ElGamal dan Algoritma Silver-Pohlig-Hellman, kemudian dilanjutkan dengan penjelasan kriptografi ElGamal dan contoh penggunaannya beserta proses hacking kunci privat dengan algoritma Silver-Pohlig-Hellman.

Pada Bab 3 dibahas analisis terhadap masalah penelitian dan perancangan dari sistem yang akan dibangun. Analisis masalah akan dimodelkan dengan Flowchart dan UML, disertai dengan rancangan dari tampilan software yang akan dibangun.

Bab 4 berisi implementasi sistem yang telah dirancang pada Bab 3, kemudian dilakukan pengujian untuk melihat apakah sistem berjalan dengan semestinya atau tidak. Selanjutnya dilakukan pengumpulan dari data pengujian dengan panjang kunci privat yang berbeda.

Pada Bab 5 dimuat kesimpulan dari keseluruhan uraian bab-bab sebelumnya dan saran berdasarkan hasil pengujian yang diharapkan dapat bermanfaat untuk pengembangan selanjutnya.


(22)

BAB 2

LANDASAN TEORI

2.1 Kriptografi

Kriptografi adalah ilmu yang mempelajari bagaimana mengirim pesan secara rahasia sehingga hanya orang yang dituju saja yang dapat membaca pesan rahasia tersebut. Pesan asli disebut sebagai plaintext, dan pesan yang telah dirahasiakan disebut sebagai ciphertext. Proses dalam mengubah plaintext menjadi ciphertext disebut sebagai encryption (enkripsi). Proses sebaliknya, untuk mengembalikan ciphertext menjadi plaintext di sisi penerima pesan disebut sebagai decryption (dekripsi).

2.2 Sistem Kriptografi

Sistem kriptografi terdiri dari 5 bagian, yaitu (Sadikin, 2012):

a. Plaintext: pesan atau data dalam bentuk aslinya yang dapat terbaca. Plaintext adalah masukan bagi algoritma enkripsi.

b. Secret Key: secret key atau kunci rahasia juga merupakan masukan bagi algoritma enkripsi merupakan nilai yang bebas terhadap teks asli dan menentukan hasil keluaran algoritma enkripsi.

c. Ciphertext: ciphertext adalah keluaran algoritma enkripsi. Ciphertext dapat dianggap sebagai pesan dalam bentuk tersembunyi. Algoritma enkripsi yang baik akan menghasilkan ciphertext yang terlihat acak.

d. Algoritma Enkripsi: algoritma enkripsi memiliki 2 masukan teks asli dan kunci rahasia. Algoritma enkripsi melakukan transformasi terhadap teks asli sehingga menghasilkan ciphertext.

e. Algoritma Dekripsi: algoritma dekripsi memiliki 2 masukan yaitu ciphertext dan kunci rahasia. Algoritma dekripsi memulihkan kembali teks sandi menjadi teks asli bila kunci rahasia yang dipakai algoritma dekripsi sama dengan kunci rahasia yang dipakai algoritma enkripsi.

2.3 Jenis Sistem Kriptografi Berdasarkan Kunci yang Digunakan

Sistem kriptografi dapat digolongkan ke dalam dua jenis yaitu sistem kriptografi kunci simetris dan sistem kriptografi kunci asimetris.


(23)

2.3.1 Sistem Kriptografi Kunci Simetris

Sistem kriptografi kunci simetris menggunakan kunci yang sama untuk mengenkripsi plaintext dan mendekripsi ciphertext, Diagram sistem kriptografi kunci simetris dapat dilihat pada Gambar 2.1.

Gambar 2.1 Diagram Sistem Kriptografi Kunci Simetris Arti simbol:

: Data : Proses : Aliran

Pada Gambar 2.1 dapat dilihat bahwa kunci yang digunakan untuk mengenkripsi dan mendekripsi sama yaitu K. Sistem kriptografi ini aman selama kunci rahasia dipastikan hanya diketahui oleh kedua pihak yang saling berkirim pesan. Namun cara untuk mengirim kunci menjadi masalah lain yang sulit untuk diamankan terutama dalam jalur publik seperti internet.

2.3.2 Sistem Kriptografi Kunci Asimetris

Berbeda dengan sistem kriptografi kunci simetris, sistem kriptografi asimetris atau disebut juga sistem kriptografi kunci publik menggunakan kunci yang berbeda untuk mengenkripsi dan mendekripsi pesan. Kunci untuk mengenkripsi akan didistribusikan sehingga siapapun yang ingin mengirim pesan secara rahasia dapat menggunakan kunci tersebut, dan kunci untuk mendekripsi dirahasiakan sehingga hanya pemilik


(24)

kunci yang dapat mendekripsi ciphertext yang telah dienkripsi dengan kunci publik. Diagram sistem kriptografi asimetris dapat dilihat pada Gambar 2.2.

Gambar 2.2 Diagram Sistem Kriptografi Kunci Asimetris

Pada Gambar 2.2., kunci yang digunakan untuk mengenkripsi dan mendekripsi pesan berbeda, dimana Arifin menggunakan kunci X untuk mengenkripsi pesan menjadi ciphertext, lalu Eric sebagai penerima ciphertext akan mendekripsi pesan menggunakan kunci Y. Ciphertext tidak dapat dikembalikan menjadi plaintext jika Y tidak diketahui. Disini X disebut sebagai public key dan Y disebut sebagai private key. Public key harus didistribusikan kepada siapapun yang ingin mengirim pesan secara rahasia kepada pemilik kunci sedangkan private key harus tetap disimpan secara rahasia.

Sistem kriptografi ini memiliki keunggulan dimana pengiriman kunci bukan lagi menjadi masalah karena kunci publik tidak akan menjadi masalah jika diketahui oleh siapapun.

2.4 Matematika untuk Sistem Kriptografi Asimetris

Sistem kriptografi asimetris bekerja dengan dasar berbagai perhitungan matematika terutama persoalan teori bilangan. Bagian ini akan membahas beberapa topik matematika yang akan digunakan dalam sistem kriptografi asimteris.


(25)

2.4.1 Greatest Common Divisor (GCD) dan Algoritma Euclid

Jika a dan b adalah bilangan bulat, maka Greatest Common Divisor (GCD) dari a dan b adalah sebuah bilangan positif terbesar yang dapat membagi habis kedua bilangan tersebut.

Sebagai contoh, GCD dari 12 dan 18 adalah 6 karena 6 dapat membagi 12 dan 18 dan tidak ada bilangan yang lebih besar dari 6 yang dapat membagi 12 dan 18. Dapat ditulis:

GCD , =

Salah satu cara untuk mendapatkan GCD dari dua buah bilangan adalah dengan menggunakan Algoritma Euclid. Teorema Euclid menyatakan:

jika a = qb + r maka GCD(a,b) = GCD(b,r) 2.4.2. Relatif Prima

Dua buah bilangan a dan b dikatakan relatif prima jika GCD(a, b) = 1. Sebagai contoh 4 dan 7 adalah relatif prima karena GCD(4, 7) = 1.

2.4.3 Aritmatika Modular dan Kongruensi

Ketika masih kecil kita mempelajari „aritmatika jam‟ dimana angka berikutnya setelah 12 adalah 1 sehingga kita menuliskan (Hoffstein, 2008):

+ = dan − =

ini masuk akal karena 7 jam setelah jam 8 adalah jam 3. Yang kita lakukan sebenarnya adalah menghitung 8 + 7 = 15 kemudian menguranginya 12 sehingga menghasilkan 3. Dan dengan cara yang sama 5 jam sebelum jam 2 adalah jam 9 dengan menghitung 2 – 5 = -3 kemudian menambahkannya dengan 12.

Konsep ini disebut sebagai dengan teori kongruensi. Kita katakan a dan b kongruen m jika selisih a – b dapat dibagi dengan m. Ditulis sebagai berikut:

mod

untuk mengetahui a dan b kongruen, m disebut sebagai modulus. Dari contoh perhitungan jam diatas, maka dapat ditulis:


(26)

+ mod dan − mod 2.4.4 Inversi Modulo

Jika dua buah bilangan a dan m relatif prima, maka dapat dipastikan terdapat sebuah bilangan b yang memenuhi:

. mod

pada kongruensi diatas, b disebut sebagai invers modulo dari a modulo m. 2.4.5 Grup Perkalian

Sebuah grup perkalian (G, ×) dengan G merupakan himpunan simbol dan × adalah sebuah operator perkalian yang memenuhi kondisi (Sadikin, 2012):

1. ∀ , ∈ ∶ × ∈ (Closure)

2. ∀ , , ∈ ∶ × × = × × (Asosiatif)

3. ∃ yang unik ∈ ∶ ∀ ∈ ∶ × = × = Elemen e disebut sebagai elemen identitas.

4. ∀ ∈ : ∃ − ∈ : × − = − × = (Invers) 2.4.6 Bilangan Prima

Bilangan prima adalah sebuah bilangan yang hanya dapat dibagi habis oleh 1 dan bilangan itu sendiri. Bilangan yang dapat dibagi habis oleh selain 1 dan bilangan itu sendiri disebut sebagai bilangan komposit. Semua bilangan positif integer n dapat dituliskan sebagai hasil product dari bilangan prima seperti berikut:

= � �

��� = ∏ � � =

2.4.7 Fermat’s Little Theorem

Teori fermat merupakan fondasi dari banyak pengetesan bilangan prima (Riesel, 2012). Jika p merupakan sebuah bilangan prima dan GCD(a, p) = 1, maka


(27)

dan sebaliknya jika n adalah sebuah bilangan komposit dan GCD(a, p) = 1, maka �−

2.4.8 Fungsi ϕ Euler

Fungsi ϕ Euler atau yang disebut juga fungsi totien euler, dilambangkan dengan ϕ(n) adalah banyaknya bilangan m yang relatif prima terhadap n dimana m < n (Mollin, 2007). Sebagai contoh jika p adalah bilangan prima, maka untuk semua ∈ � dengan

< pasti relatif prima terhadap p, maka ϕ(p) = p – 1.

Sebagai contoh beberapa hasil fungsi ϕ(n) adalah (Sadikin, 2012): 1. ϕ(1) = 0

2. ϕ(p) = p – 1 jika p adalah bilangan prima. Sebab semua elemen merupakan prima relatif dengan p.

3. ϕ(m × n) = ϕ(m) × ϕ(n) jika m merupakan prima relatif dengan n. 4. ϕ( ) = − − dengan p adalah bilangan prima.

2.4.9 Akar Primitif

Jika p adalah bilangan prima, maka terdapat sebuah elemen � ∈ �∗ yang jika dipangkatkan dengan setiap elemen di dalam (Hoffstein, 2008), misalkan:

�∗= , �, � , � , … , ��− .

elemen dengan properti ini disebut dengan akar primitif dari atau generator dari . Elemen tersebut merupakan elemen dari memiliki order p – 1.

2.4.10. Algoritma Miller-Rabin

Algoritma Miller-Rabin merupakan algoritma probabilistik yang menguji keprimaan sebuah bilangan yang diberikan berdasarkan pada Fermat’s LittleTheorem. Algoritma Miller-Rabin menghitung deret berikut secara berulang : ⋯

. Pada perhitungan dilakukan pengujian Fermat dan pengujian kepemilikan akar kuadrat untuk i = 0, 1, 2, …, k . Jika pengujian akar kuadrat ialah positif, n dideklarasikan sebagai bilangan komposit. Jika pengujian Fermat ialah positif, maka n mungkin bilangan prima.


(28)

2.4.11 Discrete Log Problem

Jika g merupakan akar primitif dari dan h merupakan sebuah elemen yang tidak nol pada . Discrete Log Problem merupakan sebuah masalah dalam menemukan x yang memenuhi persamaan berikut (Hoffstein, 2008):

�� ℎ mod

Pada persamaan diatas, x disebut sebagai logaritma diskrit dari h untuk basis g dan ditulis sebagai log� ℎ .

2.4.12 Chinese Remainder Theorem

Chinese Remainder Theorem (CRT) diformulasikan sebagai penyelesaian permasalahan kongruen dengan modulus yang berbeda. Secara formal CRT menyelesaikan sistem persamaan kongruen berikut ini:

mod mod

. . . mod

dengan nilai , , … , dan , , … , diketahui, dan x adalah bilangan yang perlu ditemukan.

Berikut adalah algoritma untuk menemukan x: a. Hitung = × × … ×

b. Hitung = , = , … , =

c. Temukan invers modulo untuk setiap − , − , … , − terhadap , , … , d. Temukan x dengan menghitung

= × × − + ⋯ + × ×

2.5 Sistem Kriptografi ElGamal

Sistem kriptografi ElGamal adalah sistem kriptografi dengan kunci asimetris yang ditemukan oleh Taher ElGamal pada tahun 1984. Sistem kriptografi ini bersandar pada kesulitan persoalan logaritma diskrit. Diagram proses sistem kriptografi ElGamal dapat dilihat pada Gambar 2.3.


(29)

Gambar 2.3 Diagram Proses Sistem Kriptografi ElGamal

Sistem kriptografi ElGamal bekerja pada sebuah grup perkalian ( ,×) yang pada grup itu persoalan logaritmik diskrit sulit untuk dipecahkan. Grup perkalian G dapat berupa grup perkalian siklik dengan α adalah akar primitif pada Zp dengan p merupakan bilangan prima. (Sadikin, 2012)

2.5.1 Algoritma ElGamal

Algoritma kriptografi ElGamal adalah sebagai berikut: a. Pembangkit kunci ElGamal

1. Pilih bilangan prima p yang cukup besar sebagai basis grup perkalian ( ∗,×) 2. Pilih α sebagai akar primitif pada grup ( ∗,×)

3. Pilih d yang memenuhi 1 ≤ dp – 2 4. Hitung β = mod p

5. Kunci publik : (p, α, β) 6. Kunci privat : d

Setelah kunci publik dan kunci privat didapatkan, kunci publik akan didistribusikan kepada siapapun yang perlu untuk mengirimkan pesan secara rahasia (dienkripsi), sedangkan kunci privat dijaga kerahasiaannya untuk mendekripsi pesan yang telah dienkripsi dengan kunci publik.

b. Enkripsi Pesan

Orang yang menerima kunci publik dapat mengirimkan pesan secara rahasia kepada pemberi kunci, dengan langkah sebagai berikut:


(30)

2. Output : � , � ∈

3. r ∗ {r dipilih secara acak} 4. � = �mod p

5. � = P × �mod p c. Dekripsi Pesan

Setelah ciphertext diterima, maka pemegang kunci privat dapat mendekripsi pesan dengan cara sebagai berikut:

1. Input : ��� = d, , � ∈ ∗ 2. Output : P

3. � = � × � − mod

2.5.2 Contoh Penerapan Algoritma Kriptografi ElGamal

Berikut ini adalah contoh penerapan dari algoritma kriptografi ElGamal, Misalkan Adit memiliki kunci ElGamal sebagai berikut:

Kunci publik : α = 345, β = 223, p = 379, Kunci privat : d = 43

Kemudian Adit mendistribusikan kunci publik kepada siapa saja yang mau mengirim pesan kepadanya. Arifin yang juga mendapatkan kunci publik key milik Adit akan mengenkripsi pesan menggunakan kunci publik yang diketahui sebagai berikut: Plaintext : mundur

Kode ascii dari plaintext adalah:

Tabel 2.1 Kode ASCII dari Plaintext Huruf Kode Ascii

m 109

u 117

n 110

d 100

u 117

r 114

Berikut tahap-tahap yang akan dilakukan oleh Arifin untuk mengenkripsi pesan: 1. Memilih nilai r secara acak, didapati


(31)

2. Menghitung nilai C1 = � mod , sehingga didapati C1 = 10

3. Untuk setiap huruf dalam plaintext, dilakukan pengubahan nilai � = P × �mod , sehingga didapati:

Tabel 2.2 Ciphertext 2, Hasil Enkripsi dari Plaintext‘mundur’

Huruf P = P× mod p

m 109 257

u 117 255

n 110 162

d 100 354

u 117 255

r 114 161

Setelah pesan terenkripsi, Arifin mengirim ciphertext 1 dan ciphertext 2 kepada Adit. Lalu Adit akan mendekripsi ciphertext tersebut kembali menjadi plaintext menggunakan kunci privat sebagai berikut:

Tabel 2.3 Hasil Dekripsi dari Ciphertext

Ciphertext P=[ × ( )] Plaintext

255 109 m

162 117 u

354 110 n

255 100 d

161 117 u

255 114 r

2.6 Kriptanalisis

Kriptanalisis adalah ilmu yang mempelajari cara untuk mendekripsi ciphertext tanpa memiliki akses terhadap kunci rahasia dengan cara menemukan kelemahan pada sistem kriptografi yang digunakan. Ada banyak teknik yang bisa dilakukan dalam kriptanalisis, tergantung dari apa saja akses yang bisa didapat terhadap sistem kriptografi dan kunci yang digunakan.


(32)

Di dalam penelitian ini, penulis mengetahui algoritma kriptografi apa yang digunakan dan kunci publik yang telah didistribusikan. Dari itu diketahui bahwa ada algoritma yang dapat digunakan untuk memecahkan kunci privat. Sehingga teknik yang akan digunakan adalah membuat sebuah ciphertext dari kunci publik yang diketahui, lalu mencoba memecahkan kunci privatnya berdasarkan kunci publik dan ciphertext yang telah dibuat.

2.7 Algoritma Silver-Pohlig-Hellman

Algoritma Silver-Pohlig-Hellman (SPH) adalah sebuah algoritma untuk menghitung logaritma diskrit dari sebuah grup perkalian. Cara kerja algoritma Silver-Pohlig -Hellman dijabarkan sebagai berikut:

a. Diketahui α adalah generator ∗, β ∗ , dan kita memiliki faktorisasi berikut:

− = ∏ � =

∈ N

dimana adalah distinct primes. Cara untuk menghitung mod adalah dengan menghitung e modulo untuk j = 1, 2, … , r, lalu gunakan Chinese Remainder Theorem.

b. Untuk menghitung setiap nilai e modulo kita harus menentukan e dengan basis :

= ∑ − =

untuk menghitung , kita lakukan hal berikut. b.1 Set =

b.2Temukan dengan cara sebagai berikut:

Hitunglah �− � untuk setiap k = 0, 1, …, sampai kita dapati:

�− � �−


(33)

Pada kondisi diatas, k =

b.3 Hitunglah untuk i = 1, 2, …, − seperti berikut. Tentukan :

= − ∑−= �

Hitunglah nilai �− � mod untuk setiap k = 0, 1, …, sampai kita dapati:

�− �+ �−� mod Setelah k didapatkan, isi nilai ←

c. Temukan e dengan menggunakan Chinese Remainder Theorem .

Di bawah ini contoh dari penggunaan algoritma Silver-Pohlig-Hellman dalam memecahkan kunci privat ElGamal, Berdasarkan contoh pada penerapan kriptografi ElGamal, diketahui bahwa p = 379, α = 345 dan = = . Kita ingin mencari kunci privat = log . Pada perhitungan dibawah, semua persamaan berikut diasumsikan sebagai modulo 379.

Kita dapati − = = . . = Untuk = :

�− � = =

k 0 1

�− � 1 =

Disini kita dapati = . Maka kita dapati representasi basis 2 dari

log adalah:

∑ − =

= . mod

Untuk = :


(34)

k 0 1

�− � 1

i 0 1 2

223 339 255

�− �+

1 2 1

Disini kita dapati = , = , = . Maka kita dapati representasi basis 3

dari log adalah:

∑ − =

= . + . + . mod

Untuk = :

�− � =

k 0 1

�− � 1

Disini kita dapati = . Maka kita dapati representasi basis 7 dari

log adalah:

∑ − =

= . mod

Lalu kita akan mencari nilai e dengan menggunakan Chinese Remainder Theorem untuk setiap nilai pada basis . Dan kita dapati bahwa e = 43, jika nilai e disubstitusikan pada persamaan awal, maka:

mod

Sehingga kita dapati bahwa kunci privat ElGamal berhasil dipecahkan dengan nilai d = 43.


(35)

2.8 Tinjauan Penelitian yang Relevan

Berikut adalah penelitian yang membahas seputar algoritma kriptografi ElGamal: a. Andrian. Y. (2013) membuat penelitian yang berfokus pada penggunaan elemen

primitif dan elemen non-primitif pada kunci publik ElGamal. Hasil penelitian menunjukkan bahwa Elemen primitif maupun elemen non-primitif tidak mempengaruhi proses enkripsi, proses dekripsi, dan besarnya file hasil enkripsi. b. Asmar. N. D. (2008) membentuk sebuah sistem yang mengamankan data dan

informasi dengan menggunakan Algoritma ElGamal. Hasil penelitian mengungkapkan bahwa Algoritma kriptografi asimetris seperti ElGamal sangat baik digunakan untuk mengatasi masalah distribusi kunci.

c. Wijayanti. R. Y. (2013) membuat penelitian yang berfokus pada analisa metode pembangkitan bilangan prima yang lebih baik dalam membuat kunci pada algoritma ElGamal. Hasil penelitian mengungkapkan bahwa waktu enkripsi dengan menggunakan metode Lucas-Lehmer lebih cepat daripada metode Fermat. d. Putra, E. (2013) mengkaji bagaimana menyederhanakan perhitungan pada kriptografi kurva eliptik dan berusaha mempersingkat waktu proses tanpa mengurangi tingkat keamanan dengan menggunakan metode enkripsi Algoritma ElGamal, implementasi juga melibatkan pembangkitan kunci dengan metode pembangkitan bilangan prima Rabin-Miller. Hasil pengujian menunjukkan bahwa dengan membatasi nilai a dan b menjadi 1 pada fungsi kurva eliptik serta membatasi bilangan prima sebanyak dua digit, berhasil mempersingkat waktu proses, enkripsi juga berlangsung dengan baik dan cepat.


(36)

BAB 3

ANALISIS DAN PERANCANGAN

3.1. Analisis Sistem

Analisis sistem bertujuan untuk memecah sistem ke dalam komponen-komponen subsistem yang lebih kecil untuk mengetahui hubungan setiap komponen tersebut dalam mencapai tujuan. (Whitten, 2007)

3.1.1. Analisis Masalah

Masalah yang diangkat dalam penulisan skripsi ini adalah pembuatan sistem kriptografi untuk merahasiakan pesan menggunakan algoritma ElGamal, dan pemecahan kunci privat menggunakan algoritma Silver-Pohlig-Hellman. Secara umum masalah dalam penelitian dapat dilihat pada Gambar 3.1 yang dirancang dalam bentuk Diagram Ishikawa.

Gambar 3.1 Diagram Ishikawa Masalah Penelitian

Skenario dari penggunaan sistem dimulai dari pemilik kunci membangkitkan kunci, lalu mendistribusikan kunci publik dan merahasiakan kunci privat. Kemudian pengirim pesan mengirimkan pesan yang telah dienkripsi menggunakan kunci publik yang diberikan oleh pemilik kunci. Kunci publik yang diberikan oleh pemilik kunci


(37)

tidak hanya diketahui oleh pengirim pesan, namun juga pihak lain yang mencoba untuk mengetahui pesan yang akan dikirimkan dengan cara mencoba membongkar kunci privat dengan modal kunci publik yang tersedia menggunakan algoritma Silver-Pohlig-Hellman. Oleh karena itu sistem ini akan melakukan proses hacking pada kunci publik yang diketahui untuk menemukan kunci privat yang dirahasiakan. Setelah kunci privat berhasil diketahui, pesan terenkripsi akan didekripsi kembali ke bentuk awal.

3.1.2. Analisis Requirement

Analisis requirement meliputi analisis functional requirement dan non fuctional requirement. Functional requirement mendeskripsikan fungsi-fungsi yang harus dilakukan oleh sebuah sistem untuk mencapai tujuan. Sedangkan non functional requirement mendeskripsikan fitur lain seperti karakteristik, batasan sistem, performa, dokumentasi dan yang lainnya agar sistem berjalan sukses.

a. Analisis functional requirement

Untuk dapat melakukan pencarian kunci privat menggunakan algoritma Silver-Pohlig-Hellman pada algoritma kriptografi ElGamal, functional requirement yang harus dipenuhi adalah perangkat lunak dapat:

1. Membangkitkan kunci mulai dari 4-digit sampai 16-digit bilangan prima. 2. Membaca masukan berupa file text sebagai kunci, plaintext dan ciphertext. 3. Melakukan enkripsi plaintext dengan kunci publik yang diberikan.

4. Memecahkan kunci privat berdasarkan kunci publik yang diberikan.

5. Mendekripsi ciphertext menjadi plaintext berdasarkan kunci privat yang diberikan.

6. Menyimpan Kunci, Plaintext dan ciphertext ke dalam file teks.

7. Menghitung berapa lama waktu yang dibutuhkan untuk pembangkitan kunci dan pemecahan kunci privat.

b. Analisis non functional requirement

Nonfunctional requirement yang harus dipenuhi oleh sistem adalah sebagai berikut: 1. Waktu pemrosesan kunci, enkripsi, dan dekripsi pesan dapat dilakukan dengan


(38)

2. Antarmuka sistem dapat dimengerti dan digunakan dengan mudah oleh pengguna.

3. Sistem yang dibangun memiliki panduan penggunaan. 3.1.3 Analisis Pemodelan Perangkat Lunak

Pemodelan sistem bertujuan untuk menampilkan kebutuhan dari sebuah perangkat lunak. Salah satu jenis pemodelan kebutuhan sistem adalah model berbasis skenario, model ini menggambarkan spesifikasi kebutuhan perangkat lunak dari berbagai sudut pandang aktor di dalam perangkat lunak (Pressman, 2010). Perangkat lunak yang akan dibangun di dalam penelitian ini dimodelkan dengan diagram Use Case.

Use case mendeskripsikan suatu skenario penggunaan yang bersifat spesifik dalam bahasa yang jelas dari sudut pandang aktor dengan sistem (Pressman, 2010).

Aktor yang berinteraksi dengan sistem ini yaitu: pemilik kunci, pengenkripsi pesan, dan kriptanalis. Use case diagram yang menggambarkan interaksi aktor dengan sistem disajikan pada Gambar 3.2.


(39)

Spesifikasi untuk use case Bangkitkan Kunci disajikan pada Tabel 3.1 Tabel 3.1 Spesifikasi Use Case Bangkitkan kunci.

Use Case Bangkitkan Kunci

Aktor Utama Pemilik Kunci

Sasaran Konteks Membangkitkan kunci publik dan kunci privat yang nantinya akan digunakan untuk mengenkripsi dan mendekripsi pesan menggunakan algoritma kriptografi elgamal.

Prakondisi .

Pemicu Pengguna meng-klik tombol „Generate!‟

Skenario penggunaan perangkat lunak 1. Pengguna memilih panjang kunci yang ingin dibangkitkan antara 4 sampai 16 digit.

2. Pengguna menekan tombol „Generate‟ 3. Perangkat lunak membangkitkan kunci

publik dan kunci privat, lalu menampilkannya pada kolom „Kunci Publik‟ dan „Kunci Privat‟.

4. Jika pengguna mau meng-eksport kunci yang telah dibangkitkan, maka pengguna akan menekan tombol „Eksport‟ pada bagian kunci publik dan kunci privat.

Prioritas Penting.

Diagram aktivitas


(40)

(41)

Spesifikasi untuk use case Enkripsi Pesan disajikan pada Tabel 3.2. Tabel 3.2 Spesifikasi Use Case Enkripsi Pesan

Use Case Enkripsi Pesan

Aktor Utama Pengirim Pesan

Sasaran Konteks Mengenkripsi pesan asli (plaintext) ke dalam ciphertext menggunakan kunci publik yang diperoleh dari pemilik kunci dan menampilkannya di kolom „Ciphertext‟. Prakondisi Pengguna memiliki kunci publik dan pesan

yang akan dienkripsi.

Pemicu Pengguna meng-klik tombol „Enkripsi‟.

Skenario penggunaan perangkat lunak 1. Pengguna menginput kunci publik dengan cara meng-import atau mengetikkan secara manual ke kolom „Kunci Publik‟.

2. Pengguna menginput pesan ke kolom „Pesan‟ dengan cara meng-import atau mengetikkan secara manual.

3. Pengguna meng-klik tombol „Enkripsi‟ 4. Perangkat lunak mengenkripsi pesan ke

dalam ciphertext dan menampilkannya pada kolom „Ciphertext‟

5. Jika pengguna mau meng-eksport ciphertext yang telah didapat, maka pengguna akan menekan tombol „Eksport‟.

Prioritas Menengah, akan diimplementasikan setelah

fungsi „Bangkitkan Kunci‟ diimplementasikan.

Diagram aktivitas


(42)

(43)

Spesifikasi untuk use case Dekripsi Pesan disajikan pada Tabel 3.3. Tabel 3.3 Spesifikasi Use Case Dekripsi Pesan

Use Case Dekripsi Pesan

Aktor Utama Pemilik Kunci

Sasaran Konteks Mendekripsi ciphertext kembali menjadi pesan asli (plaintext) menggunakan kunci privat yang dimiliki oleh pemilik kunci dan menampilkannya di kolom „Plaintext‟.

Prakondisi Pengguna memiliki kunci privat untuk

ciphertext yang akan didekripsi.

Pemicu Pengguna meng-klik tombol „Dekripsi‟.

Skenario penggunaan perangkat lunak 1. Pengguna menginput kunci privat dengan cara meng-import atau mengetikkan secara manual ke kolom „Kunci Privat‟.

2. Pengguna menginput ciphertext ke kolom „Ciphertext dengan cara meng -import atau mengetikkan secara manual. 3. Pengguna meng-klik tombol „Dekripsi‟. 4. Perangkat lunak mendekripsi ciphertext

kembali menjadi plaintext dan menampilkannya pada kolom „Plaintext‟ 5. Jika pengirim pesan mau meng-eksport

plaintext yang telah didapat, maka pengirim pesan akan menekan tombol „Eksport‟.

Prioritas Menengah, akan diimplementasikan setelah

fungsi „Bangkitkan Kunci‟, dan „Enkripsi‟ diimplementasikan.

Diagram aktivitas


(44)

(45)

Spesifikasi untuk use case Pecahkan Kunci Privat disajikan pada Tabel 3.4. Tabel 3.4 Spesifikasi Use Case Pecahkan Kunci Privat

Use Case Pecahkan Kunci Privat

Aktor Utama Kriptanalis

Sasaran Konteks Menemukan kunci privat dari kunci publik yang telah diketahui.

Prakondisi Pengguna memiliki kunci publik.

Pemicu Pengguna meng-klik tombol „Hack‟.

Skenario penggunaan perangkat lunak 1. Pengguna menginput kunci publik dengan cara meng-import atau mengetikkan secara manual ke kolom „Kunci Publik‟.

2. Pengguna mencoba menemukan kunci privat dengan meng-klik tombol „Hack‟. 3. Perangkat lunak mencoba menemukan

kunci privat berdasarkan kunci publik yang diberikan.

4. Setelah kunci privat ditemukan, perangkat lunak akan menampilkannya pada kolom „Kunci Privat‟ dan menampilkan waktu yang dibutuhkan untuk pemecahan kunci pada label „Waktu pemecahan kunci‟.

5. Jika pengguna mau meng-eksport kunci privat yang telah ditemukan, maka pengguna akan menekan tombol „Eksport‟.

Prioritas Menengah, akan diimplementasikan setelah

fungsi „Bangkitkan Kunci‟ diimplementasikan.

Diagram aktivitas


(46)

(47)

3.2 Perancangan Perangkat Lunak

Perancangan sistem merupakan spesifikasi dari solution berbasis komputer secara detail, disebut juga dengan physical design. Perancangan sistem menekankan pada implementasi sistem secara teknis (Whitten, 2007).

Berawal dari saat spesifikasi kebutuhan perangkat lunak telah dianalisis dan dimodelkan, perancangan perangkat lunak merupakan tindakan rekayasa perangkat lunak yang terakhir di dalam aktivitas pemodelan dan kemudian merupakan landasan yang sangat penting bagi aktivitas konstruksi (penulisan kode) perangkat lunak (Pressman, 2010).

Perangkat lunak akan dibangun dengan bahasa pemrograman Python menggunakan library Tkinter sebagai Graphical User Interface-nya. Berikut ini akan dijelaskan rancangan dan pseudocode dari perangkat lunak yang akan dibuat.

3.2.1. Sequence Diagram.

Sequence diagram adalah salah satu dari diagram UML yang digunakan untuk memodelkan aspek dinamika sistem. Sequence diagram menggambarkan interaksi, yang berisi sekumpulan objek dan relasinya, termasuk didalamnya message yang yang dikirimkan diantara objek. Sequence diagram menegaskan urutan message yang dikirimkan antara objek (Booch, dkk., 2000). Berikut akan ditampilkan sequence diagram dari sistem.


(48)

a. Sequence diagram bangkitkan kunci

Sequence diagram dari proses enkripsi pesan ditunjukkan pada Gambar 3.7

Gambar 3.7 Sequence diagram bangkitkan kunci b. Sequence diagram Enkripsi Pesan

Sequence diagram dari proses enkripsi pesan ditunjukkan pada Gambar 3.8.


(49)

c. Sequence diagram Dekripsi Pesan

Sequence diagram dari proses dekripsi ciphertext ditunjukkan pada Gambar 3.9.

Gambar 3.9 Sequence diagram Dekripsi Pesan d. Sequence diagram Hack

Sequence diagram dari proses hack ditunjukkan pada Gambar 3.10.


(50)

3.2.2. Perancangan Antarmuka Perangkat Lunak.

Perangkat lunak akan memiliki empat bagian utama yaitu pembangkitan kunci, enkripsi, dekripsi, dan hack kunci privat. Berikut ini adalah rancangan antarmuka dari perangkat lunak yang akan dibangun.

a. Tab Bangkitkan Kunci

Rancangan antarmuka perangkat lunak pada tab Bangkitkan kunci disajikan pada Gambar 3.11.

Gambar 3. 11 Rancangan Tampilan Tab Bangkitkan Kunci

Tab ini digunakan ketika user ingin membangkitkan kunci ElGamal, elemen-elemen yang terdapat di dalamnya yaitu:

1. Combobox pemilihan panjang kunci digunakan untuk memilih bilangan prima yang digunakan dalam kunci yang akan dibangkitkan.

2. Button „Generate!‟ digunakan untuk membangkitkan kunci ElGamal.

3. Textbox „p‟, „a‟, dan „b‟ digunakan untuk menampilkan hasil kunci publik yang telah dibangkitkan.

1 2

3

4

5

6 7


(51)

4. Button „Export‟ pada panel kunci publik digunakan untuk menyimpan kunci publik yang telah didapat ke dalam sebuah file.

5. Textbox „p‟ dan „d‟ digunakan untuk menampilkan hasil kunci privat yang telah dibangkitkan.

6. Button „Export‟ pada panel kunci privat digunakan untuk menyimpan kunci privat yang telah didapat ke dalam sebuah file.

7. Label waktu pembangkitan kunci akan digunakan untuk menampilkan lama pembangkitan kunci.

b. Tab Enkripsi

Rancangan antarmuka perangkat lunak pada tab enkripsi disajikan pada Gambar 3.12.

Gambar 3.12 Rancangan Tampilan Tab Enkripsi

Tab ini digunakan ketika user ingin mengenkripsi pesan, elemen-elemen yang terdapat di dalamnya yaitu:

1. Button Import digunakan untuk mengimpor kunci publik dari sebuah file. 1

2

3 4

5

6


(52)

2. Textbox „p‟, „a‟, dan „b‟ digunakan untuk menampilkan kunci publik yang telah diimpor atau diketikkan oleh user.

3. Text Area pesan digunakan untuk memasukkan pesan / Plaintext yang akan dienkripsi.

4. Button Import’ digunakan untuk mengimpor pesan dari file.

5. Button „Enkripsi‟ digunakan untuk mengenkripsi pesan yang telah diimpor atau diketikkan.

6. Text Area Ciphertext‟ digunakan untuk menampilkan Ciphertext hasil enkripsi.

7. Button Export’ digunakan untuk mengekspor ciphertext ke dalam sebuah file. c. Tab Dekripsi

Rancangan antarmuka perangkat lunak pada tab Dekripsi disajikan pada Gambar 3.13.

Gambar 3.13 Rancangan Tampilan Tab Dekripsi

Tab ini digunakan ketika user ingin mengenkripsi pesan, elemen-elemen yang terdapat di dalamnya yaitu:

1

2

3 4

5

6


(53)

1. Button Import digunakan untuk mengimpor kunci privat dari sebuah file. 2. Textbox „p‟ dan „d‟ digunakan untuk menampilkan kunci privat yang telah

diimpor atau diketikkan oleh user.

3. Button Import’ digunakan untuk mengimpor Ciphertext dari file. 4. Text Area Ciphertext‟ digunakan untuk menampilkan Ciphertext.

5. Button „Dekripsi‟ digunakan untuk mendekripsi pesan yang telah diimpor atau diketikkan.

6. Text Area Plaintext digunakan untuk menampilkan pesan asli/ Plaintext hasil dekripsi.

7. Button Export‟ digunakan untuk menyimpan pesan asli ke dalam sebuah file. d. Tab Hack Key

Rancangan antarmuka perangkat lunak pada tab Hack disajikan pada Gambar 3.14.

Gambar 3.14 Rancangan Tampilan Tab Hack

Tab ini digunakan ketika user ingin menemukan kunci privat berdasarkan kunci publik yang diketahui, elemen-elemen yang terdapat di dalamnya yaitu:

1. Button ‘Import’ digunakan untuk mengimpor kunci publik dari sebuah file.

1 2

3

4 5


(54)

2. Textbox „p‟, „a‟ dan „b‟ digunakan untuk menginputkan kunci publik atau menampilkan kunci publik yang diimport.

3. Button ‘Hack’ digunakan untuk menemukan kunci privat dari kunci publik yang telah diketahui menggunakan algoritma Silver-Pohlig-Hellman.

4. Textbox ‘p‟ dan „d‟ digunakan untuk menampilkan kunci privat yang telah ditemukan.

5. Button ‘Export’ digunakan untuk mengekspor kunci privat yang telah didapat ke dalam sebuah file.

6. Label panjang kunci dan label waktu pemecahan kunci digunakan untuk menampilkan panjang kunci dan lama waktu pemecahan kunci privat.

3.2.3. Pseudocode

Pseudocode adalah urutan langkah-langkah algoritma yang disajikan dalam bentuk mirip seperti kode pemrograman untuk mempermudah pemahaman terhadap prinsip sebuah algoritma. Berikut ini akan dideskripsikan pseudocode yang akan digunakan di dalam perangkat lunak.

Notasi Algoritmik untuk menuliskan fungsi adalah (Munir, 2001):

function NAMA_FUNGSI (input daftar parameter formal) → tipe hasil

{ spesifikasi fungsi, menjelaskan apa yang dilakukan dan dikembalikan

oleh fungsi }

DEKLARASI

{ Semua nama yang dipakai di dalam algoritma fungsi dideklrasikan di

sini. Nama yang didefinisikan di dalam DEKLARASI lokal hanya dikenal

dan dipakai di dalam fungsi ini saja }

DESKRIPSI

{ badan fungsi, berisi instruksi-instruksi untuk menghasilkan

nilai yang akan dikembalikan oleh fungsi }

return hasil { pengembalian nilai yang dihasilkan fungsi }

a. Pseudocode pembangkitan kunci ElGamal


(55)

function GENERATE_KEY(input panjangKunci: integer) → array of integer

DEKLARASI

p : integer { bilangan prima }

a : integer { primitive root }

b : integer { bilangan acak }

d : integer { hasil perhitungan modulo exponensial }

function PRIME(input p: integer ) → integer

{ mengembalikan bilangan prima dengan panjang p }

function PRIM_ROOT(input p: integer ) → integer

{ mengembalikan primitive root dari p }

function RANDOM(input x1, x2: integer ) → integer

{ mengembalikan nilai bilangan acak antara x1 dan x2 }

function MOD_EXP( a, b, n : integer } → integer

{ mengembalikan nilai a pangkat b mod n }

DESKRIPSI

p  PRIME(panjangKunci)

a  PRIM_ROOT(p)

d  RANDOM(1, p-2) {bilangan acak antara 1 and p-2}

b  MOD_EXP(a, d, p)

publickey  {p, a, b}

privatekey  d

return [publicKey, privateKey]

Dalam pencarian bilangan prima pada kunci publik p dilakukan dengan membangkitkan bilangan acak dan melakukan pengecekan keprimaan bilangan tersebut menggunakan algoritma Miller-Rabin, berikut adalah pseudocode Algoritma Miller-Rabin dalam pengecekan apakah sebuah bilangan merupakan prima atau tidak.

function RABIN_MILLER_TEST(input n: integer) → boolean

DEKLARASI

certainty : integer { jumlah iterasi pengetesan }

randomNumber : integer { bilangan acak }


(56)

{ mengembalikan nilai bilangan acak antara x1 dan x2 }

function MOD_EXP( a, b, n : integer } → integer

{ mengembalikan nilai a pangkat b mod n }

DESKRIPSI

nmin1  n-1

xmin1  n-1

s  0

while((xmin1 mod 2 = 0) and (xmin1 > 0)):

xmin1  xmin1 / 2

s  s + 1

d  nmin1 / power(2, s)

certainty  length(n)

i  0

while(i < certainty)

nmin2  n - 2

if(nmin2 < 2)

nmin2  2

{ bilangan acak antara 2 dan nmin 2 }

randomNumber  RANDOM(2, nmin2)

x  MOD_EXP(randomNumber, d, n)

if((x = 1) or (x = n-1))

i  i + 1

next step

j  0

while (j < s - 1)

x  MODEXP(x, 2, n)

if(x = 1)

return false if(x = nmin1)

j  j + 1

next step j  j + 1


(57)

Untuk membangkitkan kunci publik a, dilakukan pencarian akar primitif dari p yang telah ditemukan, berikut adalah pseudocode pencarian akar primitif dari p.

function PRIM_ROOT(input p: integer) → integer

DEKLARASI

p : integer { bilangan prima }

s : integer { bilangan prima – 1 }

testlist : list of integer { deret bilangan yang akan ditest } primitiveRoot : integer { primitive root yang akan dikembalikan }

function FIND_DISTINCT_FACTOR(input s: integer ) → array of

integer

{ mengembalikan deret faktorisasi bilangan prima yang berbeda dari

s }

function MOD_EXP( a, b, n : integer } → integer

{ mengembalikan nilai a pangkat b mod n }

DESKRIPSI

s  prime – 1

distinctPrimes = FIND_DISTINCT_FACTOR(s)

p  distinctPrimes[“p”]

power  distinctPrimes["power"]

testlist  empty_list of integer

for item in p:

testlist.append(s mod item)

primitiveRoot  2

passed  False

while(not passed)

passed  True

for each item in testlist

temp  MOD_EXP(pr, item, prime)

if(temp = 1)

primitiveRoot  primitiveRoot + 1

passed  False

stop


(58)

b. Pseudocode algoritma enkripsi ElGamal

Berikut pseudocode yang digunakan dalam enkripsi pesan ElGamal:

function ENKRIPSI(input plainText: string, publicKey : array of

integer) → string

DEKLARASI

plainText : string

publicKey : array of integer C1 : integer

C2 : string

cipherText : string

function MOD_EXP( a, b, n : integer } → integer

{ mengembalikan nilai a pangkat b mod n }

function ASCII( x : char } → integer

{ mengembalikan nilai ASCII dari x }

function NUMTOCHAR( x : integer } → char

{ mengembalikan char dengan nilai ASCII x }

function RANDOM(input x1, x2: integer ) → integer

{ mengembalikan nilai bilangan acak antara x1 dan x2 }

DESKRIPSI

r  RANDOM(publicKey[p] – 1)

C2  “”

C1  MOD_EXP(publickey[a], r, publicKey[p])

pengali  MOD_EXP(publickey[b], r, publicKey[p])

foreach character in plaintext

charcode  ASCII(character)

charcode  charcode * pengali mod publicKey[p]

C2  C2 + NUMTOCHAR(charcode)

cipherText  C2 + C1

return cipherText

c. Pseudocode algoritma dekripsi ElGamal

Berikut adalah pseudocode dari algoritma dekripsi ciphertext ElGamal

function elgamalDecrypt(privKey: array of integer, cipherText:

string) → string

DEKLARASI

cipherText : string

privateKey : array of integer C1 : integer


(59)

C2 : string

plainText : string

function NUMTOCHAR( x : integer } → char

{ mengembalikan char dengan nilai ASCII x }

function INVERS_MOD( a, b, p : integer } → char

{ mengembalikan inversi modulo dari a mod p }

DESKRIPSI

plaintext  “”

invMod  INVERS_MOD(ciphertext[C1], publicKey[p])

foreach character in ciphertext[C2]

charCode  ASCII(character)

charCode  charCode * invMod mod publicKey[p]

plainTextChar  NUMTOCHAR(charcode)

plainText  plainText + plainTextChar

return plainText

d. Pseudocode algoritma Silver-Pohlig-Hellman untuk pencarian kunci privat ElGamal

function sphDiscreteLog(base, B, prime : integer) → integer

DEKLARASI

distinctPrimes : array of integer 2 dimension pj : array of integer

aj : array of integer b : array of integer

function FIND_DISTINCT_FACTOR(input s: integer ) → array of

integer

{ mengembalikan deret faktorisasi bilangan prima yang berbeda dari

s }

function MOD_EXP( a, b, n : integer } → integer

{ mengembalikan nilai a pangkat b mod n }

function INVERS_MOD( a, b, p : integer } → char

{ mengembalikan inversi modulo dari a mod p }

DESKRIPSI

distinctPrimes  FIND_DISTINCT_FACTOR(prime - 1)

pj  distinctPrimes['pj']

aj  distinctPrimes['aj']

Barray  array of integer

j  0

foreach item in pj

j  j + 1

Barray[0]  B


(60)

if (i = 0)

k  0

pangkatBase  (p-1) * k / item

pangkatB  (p-1) / item

tempA  MOD_EXP(base, pangkatBase, prime)

tempB  MOD_EXP(B, pangkatB, prime)

while(tempA != tempB)

k  k + 1

pangkatBase  (p-1) * k / item

tempA  MOD_EXP(base, pangkatBase, prime)

b[i]  k

else

sigma  0

for k in range(0, i-1)

sigma  sigma + pow(b[k], j) * pow(item, k)

pangkatBase  INVERS_MOD(sigma)

Barray[i]  B * pow(base, pangkatBase)

k  0

pangkatBase  (p-1) * k / item

pangkatB  (p-1) / pow(item, (i + 1))

tempA  MOD_EXP(base, pangkatBase, prime)

tempB  MOD_EXP (B, pangkatB, prime)

while(tempA != tempB)

k  k + 1

pangkatBase  (p-1) * k / item

tempA  pow(base, pangkatBase) mod prime

b[i]  k

e  0

for i in range(0, aj[j])

e  e + pow(b[i], j) * pow (item , i)

temp  e mod (pow(item, aj[j]))

ej.append(temp)

ejm.append(pow(item, aj[j]))

x  CRT(ej, ejm)

x  x mod LCM(ejm)

return x

Pada tahap akhir algoritma Silver-Pohlig-Hellman, digunakan Chinese Remainder Theorem untuk mencari nilai akhir. Berikut adalah pseudocode dari algoritma Chinese Remainder Theorem.

function CRT(a, m : array of integer) → integer

DEKLARASI x : integer M : integer

listM : array of integer listInvM : array of integer


(61)

function INVERS_MOD( a, b, p : integer } → char

{ mengembalikan inversi modulo dari a mod p }

DESKRIPSI

M  1

for i in range(1, length(m))

M  M * m[i-1]

listM  int[]

for i in range(1, length(m))

listM[i-1]  M / m[i-1]

listInvM  int[]

for i in range(1, count(listM))

listInvM[i-1]  inversMod(listM[i - 1], m[i - 1])

x  0

for i in range(1, count(a))

x  x + a[i-1] * listM[i-1] * listInvM[i-1]


(62)

BAB 4

IMPLEMENTASI DAN PENGUJIAN

4.1 Implementasi Sistem

Sistem dibangun dengan bahasa pemrograman python dengan Tkinter sebagai library untuk menyajikan Graphical User Interface terhadap user. Terdapat empat tab utama yaitu tab Bangkitkan Kunci, Enkripsi, Dekripsi, dan Hack yang bekerja sesuai dengan nama tab masing-masing.

4.1.1 Tab Bangkitkan Kunci

Tab ini digunakan untuk membangkitkan kunci ElGamal, tampilan dari tab Bangkitkan Kunci dapat dilihat pada Gambar 4.1.


(63)

Untuk membangkitkan kunci ElGamal, user akan memilih panjang digit bilangan prima yang diinginkan melalui dropdown list panjang kunci yang telah disediakan, kemudian menekan tombol „Generate!‟, dan kunci ElGamal akan ditampilkan pada text box dibawahnya. Setelah kunci dibangkitkan, user dapat menyimpan kunci publik dan kunci privat tersebut ke dalam sebuah file dengan menekan tombol „Export‟. 4.1.2 Tab Enkripsi

Tab ini digunakan untuk mengenkripsi pesan dengan menggunakan kunci publik ElGamal yang telah diketahui, tampilan dari tab Enkripsi dapat dilihat pada Gambar 4.2.

Gambar 4.2 Tab Enkripsi

Untuk mengenkripsi pesan, user akan menginput kunci publik dengan cara import dari file dengan menekan tombol „Import‟ atau mengetikkannya secara manual. Pesan yang akan dienkripsi akan diketikkan di Text Area Plaintext atau dapat juga meng-import dari file dengan menekan tombol import. Untuk mengenkripsi pesan, user tinggal menekan tombol „Enkripsi‟, lalu Ciphertext hasil enkripsi akan ditampilkan di


(64)

dalam Text Area Ciphertext. User dapat menyimpan Ciphertext ke dalam file dengan menekan tombol „Eksport‟.

4.1.3 Tab Dekripsi

Tab ini digunakan untuk mengenkripsi pesan dengan menggunakan kunci privat ElGamal yang telah diketahui, tampilan dari tab Dekripsi dapat dilihat pada Gambar 4.3.

Gambar 4.3 Tab Dekripsi

Untuk mengenkripsi ciphertext, user akan menginput kunci privat dengan cara import dari file dengan menekan tombol „Import‟ atau mengetikkannya secara manual. Ciphertext yang akan didekripsi akan di-import dari file dengan menekan tombol import. Untuk mendekripsi ciphertext, user tinggal menekan tombol „Dekripsi‟, lalu Plaintext hasil dekripsi akan ditampilkan di dalam Text Area Plaintext. User dapat menyimpan Plaintext ke dalam file dengan menekan tombol „Eksport‟.


(65)

4.1.4 Tab Hack

Tab ini digunakan untuk memecahkan kunci privat berdasarkan kunci publik yang diketahui.

Gambar 4.4 Tab Hack

Untuk mencari kunci privat, user akan menginput kunci publik dengan cara import dari file dengan menekan tombol „Import‟ atau mengetikkannya secara manual. Lalu user tinggal menekan tombol „Hack!‟, lalu program akan menampilkan hasil pemecahan kunci pada Text area d.

4.2. Pengujian Perangkat Lunak

Pengujian perangkat lunak dilakukan untuk melihat keberhasilan dan ketepatan sistem dalam proses pembangkitan kunci, enkripsi, dekripsi, dan menemukan kunci privat algoritma ElGamal, serta untuk mengetahui batas panjang kunci yang mampu dipecahkan oleh algoritma Silver-Pohlig-Hellman.


(66)

4.2.1 Pengujian Proses Pembangkitan Kunci

Untuk melakukan pembangkitan kunci, user harus mengakses tab Bangkitkan kunci, menentukan panjang digit kunci yang diinginkan lalu menekan tombol „Generate!‟. Hasil proses pembangkitan kunci dapat dilihat pada Gambar 4.5.

Gambar 4.5 Pengujian Pembangkitan Kunci ElGamal Pembangkitan kunci ElGamal dilakukan dalam empat tahap, yaitu:

a. Memilih bilangan prima p. Pada hasil pengujian diatas, p yang didapat dari hasil pengecekan dengan algoritma Miller-Rabin adalah p = 4871.

b. Memilih α sebagai akar primitif pada grup perkalian ∗. Pada hasil pengujian diatas, didapati bahwa α = 11.

c. Memilih d sebagai bilangan acak dengan syarat − . Pada hasil pengujian diatas, d yang dipilih adalah d = 2034.

d. Memilih β sebagai hasil perhitungan = . Pada hasil pengujian diatas, didapati bahwa β = 3124.


(67)

- Kunci publik : p = 4871, α = 11, β = 3124. - Kunci privat : d = 2034

Setelah kunci didapat, user dapat menyimpan kunci tersebut ke dalam file dengan menekan tombol „Export‟ pada panel kunci publik dan kunci privat.

4.2.2 Pengujian Proses Enkripsi Pesan

Untuk melakukan enkripsi pesan menjadi ciphertext, user akan memasukkan kunci publik yang telah diketahui dan pesan yang akan dienkripsi baik dengan mengimportnya dari file maupun dengan mengetikkannya secara manual. Hasil proses enkripsi dapat dilihat pada Gambar 4.6.


(1)

frame.pack(fill=BOTH, expand=1, padx=5, pady=5)

groupPT.pack(fill=X, padx = 5, pady = 5, ipadx = 5, ipady = 5) # packing grup.

notebook.setnaturalsize() def bookHack(self, notebook):

pageHack = notebook.add('Hack')

# Membuat grup yang berisi content page, parent nya page pageGenkey

groupPubKey = Pmw.Group(pageHack, tag_text='Kunci Publik') frame = Frame(groupPubKey.interior())

btnImportPubKey = Button(frame, text="Import", command = self.importKunciPublikHack)

btnImportPubKey.pack(side=LEFT, padx=5, pady=5) frame.pack(side=LEFT, padx=5, pady=5)

frame = Frame(groupPubKey.interior())

Label(frame, text='p ').pack(padx=5, pady=5, side=LEFT) self.entryHackpVar = StringVar()

self.entryHackp = Entry(frame, width=25,

textvariable = self.entryHackpVar) self.entryHackp.pack(side=LEFT)

frame.pack(side=LEFT, padx=5, pady=5) frame = Frame(groupPubKey.interior())

Label(frame, text='a ').pack(padx=5, pady=5, side=LEFT) self.entryHackaVar = StringVar()

self.entryHacka = Entry(frame, width=25,

textvariable = self.entryHackaVar) self.entryHacka.pack(side=LEFT)

frame.pack(side=LEFT, padx=5, pady=5) frame = Frame(groupPubKey.interior())

Label(frame, text='b ').pack(padx=5, pady=5, side=LEFT) self.entryHackbVar = StringVar()

self.entryHackb = Entry(frame, width=25,

textvariable = self.entryHackbVar) self.entryHackb.pack(side=LEFT)

frame.pack(side=LEFT, padx=5, pady=5)

groupPubKey.pack(fill=X, padx = 5, pady = 5, ipadx = 5, ipady = 5) # packing grup.

groupHackButton = Pmw.Group(pageHack, tag_pyclass=None) frame = Frame(groupHackButton.interior())

btnHack = Button(frame, text="Hack!",

command = self.hack) btnHack.pack(side=LEFT, padx=5, pady=5) frame.pack(side=LEFT, padx=5, pady=5)

groupHackButton.pack(fill=X, padx = 5, pady = 5, ipadx = 5, ipady = 5) # packing grup.

# Membuat grup yang berisi content page, parent nya page pageGenkey


(2)

frame = Frame(groupPrivKey.interior())

btnexportpubk = Button(frame, text="Eksport", command =

self.eksportHackedKunciPrivat)

btnexportpubk.pack(side=LEFT, padx=5, pady=5) frame.pack(side=LEFT, padx=5, pady=5)

frame = Frame(groupPrivKey.interior())

Label(frame, text='p ').pack(padx=5, pady=5, side=LEFT) self.entryHackPrivp = Entry(frame, width=25,

textvariable = self.entryHackpVar)

self.entryHackPrivp .pack(side=LEFT) frame.pack(side=LEFT, padx=5, pady=5) frame = Frame(groupPrivKey.interior())

Label(frame, text='d ').pack(padx=5, pady=5, side=LEFT) self.entryHackdVar = StringVar()

self.entryHackd = Entry(frame, width=25,

textvariable = self.entryHackdVar) self.entryHackd.pack(side=LEFT)

frame.pack(side=LEFT, padx=5, pady=5)

groupPrivKey.pack(fill=X, padx = 5, pady = 5, ipadx = 5, ipady = 5) # packing grup.

# Membuat grup yang berisi content page, parent nya page pageGenkey

groupTime = Pmw.Group(pageHack, tag_pyclass=None)

frame = Frame(groupTime.interior()) self.lblpjkeyVar = StringVar() self.lblpjkey = Label(frame,

textvariable=self.lblpjkeyVar).pack(padx=5, pady=5, side=LEFT) frame.pack(fill = X, padx=5, pady=5)

self.lblpjkeyVar.set('Panjang Kunci: ') frame = Frame(groupTime.interior()) self.lbltimehackVar = StringVar() self.lbltimehack = Label(frame,

textvariable=self.lbltimehackVar).pack(padx=5, pady=5, side=LEFT) frame.pack(side=LEFT, padx=5, pady=5)

self.lbltimehackVar.set('Waktu Pemecahan Kunci: ')

groupTime.pack(fill=X, padx = 5, pady = 5, ipadx = 5, ipady = 5) # packing grup.

notebook.setnaturalsize() def centerWindow(self):

w = 290 h = 150

sw = root.winfo_screenwidth() sh = root.winfo_screenheight()

x = (sw - w)/2 y = (sh - h)/2


(3)

def generateKunci(self):

panjang = self.cbpjkey.get() start_time = time.time()

key = self.elGamal.bangkitkanKunci(panjang) timeelapsed = time.time() - start_time print('p: ', getattr(key, 'pubKeyP')) print('a: ', getattr(key, 'pubKeyA')) print('b: ', getattr(key, 'pubKeyB')) print('d: ', getattr(key, 'privKeyD')) print('time elapsed: ', timeelapsed)

infostring = 'Lama waktu pembangkitan kunci: ' + str("%.4f" % timeelapsed) + ' s'

self.labelInfoVar.set(infostring)

self.entryGenKeypVar.set(getattr(key, 'pubKeyP')) self.entryGenKeyaVar.set(getattr(key, 'pubKeyA')) self.entryGenKeybVar.set(getattr(key, 'pubKeyB')) self.entryGenKeyPrivdVar.set(getattr(key, 'privKeyD')) # Hack

a = int(getattr(key, 'pubKeyA')) b = int(getattr(key, 'pubKeyB')) p = int(getattr(key, 'pubKeyP')) dlp = DLP()

start_time = time.time()

mylist = dlp.shpDiscreteLog(a, b, p) hacked = getattr(mylist, "d")

dlptimeelapsed = time.time() - start_time print('hacked key: ', hacked)

print('HACK time elapsed: ', dlptimeelapsed)

def exportKunciPublik(self):

myPubKey = 'p' + self.entryGenKeypVar.get() + ';'

myPubKey = myPubKey + 'a' + self.entryGenKeyaVar.get() + ';'

myPubKey = myPubKey + 'b' + self.entryGenKeybVar.get() myFile = filedialog.asksaveasfile(mode='w')

if myFile is None: return

myFile.write(myPubKey) def exportKunciPrivat(self):

myPrivKey = 'p' + self.entryGenKeypVar.get() + ';' myPrivKey = myPrivKey + 'd' +

self.entryGenKeyPrivdVar.get()

myFile = filedialog.asksaveasfile(mode='w') if myFile is None:

return

myFile.write(myPrivKey) def importKunciPublik(self):

myFile = filedialog.askopenfile(mode='r') if myFile is None:

return

myText = myFile.read()

elGamalCon = ElGamalConverter()


(4)

self.entryEncryptpVar.set(myPubKey['p']) self.entryEncryptaVar.set(myPubKey['a']) self.entryEncryptbVar.set(myPubKey['b']) def importKunciPrivat(self):

myFile = filedialog.askopenfile(mode='r') if myFile is None:

return

myText = myFile.read()

elGamalCon = ElGamalConverter()

myPrivKey = elGamalCon.stringToPrivKey(myText) self.entryDecryptpVar.set(myPrivKey['p']) self.entryDecryptdVar.set(myPrivKey['d']) def importPlainText(self):

myFile = filedialog.askopenfile(mode='r') if myFile is None:

return

self.encryptPlainText.delete(1.0, END)

self.encryptPlainText.insert(END, myFile.read()) def importCipherText(self):

myFile = filedialog.askopenfile(mode='r') if myFile is None:

return

self.myCipherText = myFile.read() print(self.myCipherText)

self.decryptCipherText1.delete(1.0, END)

self.decryptCipherText1.insert(END, self.myCipherText)

def enkripsi(self):

pubKeyA = int(self.entryEncryptaVar.get()) pubKeyB = int(self.entryEncryptbVar.get()) pubKeyP = int(self.entryEncryptpVar.get()) message = self.encryptPlainText.get("1.0",END) message = message[:len(message) - 1]

for char in message: print('char: ', char)

cipherText = self.elGamal.enkripsi(message, pubKeyA, pubKeyB, pubKeyP)

self.myCiphertext = getattr(cipherText, 'cipherText1') + chr(95) + str(getattr(cipherText, 'cipherText2'))

self.encryptCipherText1.delete(1.0, END)

self.encryptCipherText1.insert(END, self.myCiphertext) def dekripsi(self):

pubKeyP = int(self.entryDecryptpVar.get()) privKeyD = int(self.entryDecryptdVar.get())

egc = ElGamalConverter()

myct = self.decryptCipherText1.get("1.0",END) cipherText = egc.stringToMessage(myct)

C1 = cipherText[0] C2 = int(cipherText[1])

plainText = self.elGamal.dekripsi(C2, C1, pubKeyP, privKeyD)

self.decryptPlainText.delete(1.0, END)


(5)

def eksportCipherText(self):

myFile = filedialog.asksaveasfile(mode='w') if myFile is None:

return

myFile.write(self.myCiphertext) def eksportPlainText(self):

message = self.decryptPlainText.get("1.0",END) myFile = filedialog.asksaveasfile(mode='w') if myFile is None:

return

myFile.write(message)

def importKunciPublikHack(self):

myFile = filedialog.askopenfile(mode='r') if myFile is None:

return

myText = myFile.read()

elGamalCon = ElGamalConverter()

myPubKey = elGamalCon.stringToPubKey(myText) self.entryHackpVar.set(myPubKey['p'])

self.entryHackaVar.set(myPubKey['a']) self.entryHackbVar.set(myPubKey['b']) def eksportHackedKunciPrivat(self):

myPrivKey = 'p' + self.entryHackpVar.get() + ';'

myPrivKey = myPrivKey + 'd' + self.entryHackdVar.get() myFile = filedialog.asksaveasfile(mode='w')

if myFile is None: return

myFile.write(myPrivKey) def hack(self):

a = int(self.entryHackaVar.get()) b = int(self.entryHackbVar.get()) p = int(self.entryHackpVar.get()) dlp = DLP()

start_time = time.time()

mylist = dlp.shpDiscreteLog(a, b, p) timeelapsed = time.time() - start_time

self.lblpjkeyVar.set('Panjang Kunci: ' + str(len(str(p))) + ' digit')

infostring = 'Lama waktu pemecahan kunci: ' + str("%.4f" % timeelapsed) + ' s'

self.lbltimehackVar.set(infostring)

print('HACK time elapsed: ', timeelapsed) self.entryHackdVar.set(getattr(mylist, "d")) #Code tetap, inisialisasi

root = Tk()

# splash screen >;)

image_file = "lib/splash.gif" assert os.path.exists(image_file)

s = SplashScreen(root, timeout=3000, image=image_file) # Membuat objek notebook dengan method inisialisasi ex = ElGamalSHP(root)


(6)

CURRICULUM VITAE

Nama

: Arifin

Alamat

: Jl. Paku. Gg Family, no. 20, Kec. Medan Marelan, Medan.

Alamat Orang Tua

: Jl. Paku. Gg Family, no. 20, Kec. Medan Marelan, Medan.

No. Handphone

: 0878 6722 3126

Pendidikan

1997-2003

: SD N 031 Kec. Siak Hulu, Kab. Kampar, Riau.

2003-2006

: SMP N 4 Kec. Siak Hulu, Kab. Kampar, Riau.

2006-2009

: SMA S. Sinar Husni, Kec. Medan Helvetia, Medan.

2010-2015

: Universitas Sumatera Utara (S1 Ilmu Komputer Fasilkom-TI)

Riwayat Organisasi

2011-2012

: Anggota Bidang Kaderisasi UKMI Al-Khuwarizmi

2012

: Kepala Bidang Kaderisasi UKMI Al-Khuwarizmi

2012-2014

: Asisten Laboratorium Pemrograman

2012-2013

: Divisi Penjadwalan IKLC

2013-2014

: Ketua Unit IKLC

Keahlian

Web Development

Bahasa Pemrograman : HTML, Javascript, CSS, PHP.

Framework

: CodeIgniter, Wordpress, Bootstrap.

Bahasa

: Indonesia, Inggris.