Simulasi Pencarian Kunci Privat dengan Algoritma Silver-Pohlig-Hellaman pada Algoritma Kriptografi Elgamal
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 ≤ d ≤ p – 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)