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