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

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. Universitas Sumatera Utara 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. Gambar 3.8 Sequence diagram Enkripsi Pesan Universitas Sumatera Utara 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. Gambar 3.10 Sequence diagram Hack Universitas Sumatera Utara 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 Universitas Sumatera Utara 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 7 Universitas Sumatera Utara 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 7 Universitas Sumatera Utara 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 6 Universitas Sumatera Utara 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 Berikut pseudocode yang digunakan dalam pembangkitan kunci ElGamal: Universitas Sumatera Utara function GENERATE_KEYinput 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 PRIMEinput p: integer → integer { mengembalikan bilangan prima dengan panjang p } function PRIM_ROOTinput p: integer → integer { mengembalikan primitive root dari p } function RANDOMinput 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  PRIMEpanjangKunci a  PRIM_ROOTp d  RANDOM1, p-2 {bilangan acak antara 1 and p-2} b  MOD_EXPa, 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_TESTinput n: integer → boolean DEKLARASI certainty : integer { jumlah iterasi pengetesan } randomNumber : integer { bilangan acak } function RANDOMinput x1, x2: integer → integer Universitas Sumatera Utara { 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 whilexmin1 mod 2 = 0 and xmin1 0: xmin1  xmin1 2 s  s + 1 d  nmin1 power2, s certainty  lengthn i  0 whilei certainty nmin2  n - 2 ifnmin2 2 nmin2  2 { bilangan acak antara 2 dan nmin 2 } randomNumber  RANDOM2, nmin2 x  MOD_EXPrandomNumber, d, n ifx = 1 or x = n-1 i  i + 1 next step j  0 while j s - 1 x  MODEXPx, 2, n ifx = 1 return false ifx = nmin1 j  j + 1 next step j  j + 1 return true Universitas Sumatera Utara Untuk membangkitkan kunci publik a, dilakukan pencarian akar primitif dari p yang telah ditemukan, berikut adalah pseudocode pencarian akar primitif dari p. function PRIM_ROOTinput 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_FACTORinput 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_FACTORs p  distinctPrimes[“p”] power  distinctPrimes[power] testlist  empty_list of integer for item in p: testlist.appends mod item primitiveRoot  2 passed  False whilenot passed passed  True for each item in testlist temp  MOD_EXPpr, item, prime iftemp = 1 primitiveRoot  primitiveRoot + 1 passed  False stop return primitiveRoot Universitas Sumatera Utara b. Pseudocode algoritma enkripsi ElGamal Berikut pseudocode yang digunakan dalam enkripsi pesan ElGamal: function ENKRIPSIinput 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 RANDOMinput x1, x2: integer → integer { mengembalikan nilai bilangan acak antara x1 dan x2 } DESKRIPSI r  RANDOMpublicKey[p] – 1 C2  “” C1  MOD_EXPpublickey[a], r, publicKey[p] pengali  MOD_EXPpublickey[b], r, publicKey[p] foreach character in plaintext charcode  ASCIIcharacter charcode  charcode pengali mod publicKey[p] C2  C2 + NUMTOCHARcharcode cipherText  C2 + C1 return cipherText c. Pseudocode algoritma dekripsi ElGamal Berikut adalah pseudocode dari algoritma dekripsi ciphertext ElGamal function elgamalDecryptprivKey: array of integer, cipherText: string → string DEKLARASI cipherText : string privateKey : array of integer C1 : integer Universitas Sumatera Utara 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_MODciphertext[C1], publicKey[p] foreach character in ciphertext[C2] charCode  ASCIIcharacter charCode  charCode invMod mod publicKey[p] plainTextChar  NUMTOCHARcharcode plainText  plainText + plainTextChar return plainText d. Pseudocode algoritma Silver-Pohlig-Hellman untuk pencarian kunci privat ElGamal function sphDiscreteLogbase, 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_FACTORinput 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_FACTORprime - 1 pj  distinctPrimes[pj] aj  distinctPrimes[aj] Barray  array of integer j  0 foreach item in pj j  j + 1 Barray[0]  B for i in range 0, j-1 Universitas Sumatera Utara if i = 0 k  0 pangkatBase  p-1 k item pangkatB  p-1 item tempA  MOD_EXPbase, pangkatBase, prime tempB  MOD_EXPB, pangkatB, prime whiletempA = tempB k  k + 1 pangkatBase  p-1 k item tempA  MOD_EXPbase, pangkatBase, prime b[i]  k else sigma  0 for k in range0, i-1 sigma  sigma + powb[k], j powitem, k pangkatBase  INVERS_MODsigma Barray[i]  B powbase, pangkatBase k  0 pangkatBase  p-1 k item pangkatB  p-1 powitem, i + 1 tempA  MOD_EXPbase, pangkatBase, prime tempB  MOD_EXP B, pangkatB, prime whiletempA = tempB k  k + 1 pangkatBase  p-1 k item tempA  powbase, pangkatBase mod prime b[i]  k e  0 for i in range0, aj[j] e  e + powb[i], j pow item , i temp  e mod powitem, aj[j] ej.appendtemp ejm.appendpowitem, aj[j] x  CRTej, ejm x  x mod LCMejm 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 CRTa, m : array of integer → integer DEKLARASI x : integer M : integer listM : array of integer listInvM : array of integer x : integer Universitas Sumatera Utara function INVERS_MOD a, b, p : integer } → char { mengembalikan inversi modulo dari a mod p } DESKRIPSI M  1 for i in range1, lengthm M  M m[i-1] listM  int[] for i in range1, lengthm listM[i-1]  M m[i-1] listInvM  int[] for i in range1, countlistM listInvM[i-1]  inversModlistM[i - 1], m[i - 1] x  0 for i in range1, counta x  x + a[i-1] listM[i-1] listInvM[i-1] return x Universitas Sumatera Utara BAB 4 IMPLEMENTASI DAN PENGUJIAN

4.1 Implementasi Sistem