D AFTAR R IWAYAT H IDUP

ANALISIS DAN PERANCANGAN

3.2. Perancangan Sistem

Perancangan sistem dilakukan untuk memberikan gambaran kepada sistem yang akan dibangun sehingga mempermudah dalam melakukan implementasi ataupun evaluasi.

Sistem dirancang dengan membuat kerangka menu, flowchart, pseudocode, use-

case diagram, activity diagram, sequence diagram dan perancangan antarmuka

(interface).

3.2.1. Kerangka menu

Secara umum, sistem yang akan dibangun memiliki beberapa menu yang dikelompokkan ke dalam beberapa kategori. Adapun kerangka menu dari sistem yang akan dibangun adalah sebagai berikut.

1. Halaman Utama

Merupakan tampilan awal saat sistem dijalankan. Pada halaman utama dari sistem akan menampilkan kunci publik jika terdapat kunci yang disimpan sebelumnya atau menampilkan tombol pembangkit kunci jika tidak ada kunci yang tersimpan.

2. Menu Fungsi

Terdapat beberapa submenu pada menu fungsi, antara lain: a. Pembangkit kunci

Menu untuk membangkitkan kunci kriptografi Rabin. Kunci dapat dibangkitkan secara acak dari sistem atau ditentukan oleh pengguna. Setelah kunci didapatkan, feature penyimpanan kunci bersifat opsional. Jika kunci ingin disimpan, kunci pada form akan diperiksa kembali sebelum disimpan untuk menghindari kesalahan kunci.

b. Kosongkan database

Berfungsi untuk menghapus kunci yang disimpan sebelumnya. Jika pengguna mengonfirmasi untuk menghapus kunci, maka database kunci akan dikosongkan.

c. Enkripsi dan embed

Pada menu ini, pengguna dapat melakukan proses enkripsi dan/atau embed. d. Ekstrak dan dekripsi

45

e. Keluar

Jika pengguna mengonfirmasi untuk keluar dari sistem, maka proses dari sistem akan selesai (aplikasi ditutup).

3. Menu Tentang

Menampilkan identitas singkat dari penulis dan judul dari penelitian. 4. Menu Bantuan

Menampilkan panduan dalam menggunakan aplikasi.

3.2.2. Flowchart square and multiply

Flowchart atau diagram alir merupakan gambar atau bagan yang memperlihatkan

urutan dan hubungan antar proses dengan pernyataannya (Zarlis & Handrizal, 2008). Pada Gambar 3.5. berikut ini merupakan flowchart dari algoritma square and

multiply left-to right variant (Smart, 2004).

Nilai index dari tiap bit pada b pada Gambar 3.5. yaitu index bit paling kanan bernilai t = jumlah bit 1 dan index bit paling kiri bernilai 0. Berikut ini merupakan

pseudocode dari algoritma square and multiply left-to-right variant (Smart, 2004). 1. function sam(x,y,z):

2. b = toBinary(y) 3. t = length(b) - 1 4. result = 1

5. for i = 0 to t:

6. result = (result*result) mod z

7. if(b[i] = ’1’): result = (result*x) mod z 8. return result

3.2.3. Flowchart Miller-Rabin

Gambar 3.6. merupakan flowchart dari algoritma Miller-Rabin. Berikut ini adalah

pseudocode dari algoritma Miller-Rabin dengan n adalah bilangan bulat positif

(Cormen, et al. 2009).

1. function MillerRabin(n):

2. if(n == 2): return “Prima”

3. if((n < 3) or (n mod 2 == 0)):

4. return “Bukan Prima”

5. biner_n = toBinary(n-1) 6. t = get_t(biner_n) 7. u = get_u(biner_n, t) 8. a = differentRandom(n) 9. for i = 0 to length(a)-1: 10. if Witness(a[i], u, n, t):

11. return “Bukan Prima”

12. return “Prima” 1. function Witness(a, u, n, t): 2. x = array 3. x[0] = sam(a, u, n) 4. for i = 1 to t: 5. x[i] = sam(x[i-1],2,n)

6. if x[i]==1 and x[i-1] ≠ 1 and x[i-1] ≠ n–1:

47 8. if x[t] ≠ 1: 9. return True 10. return False 1. function get_t(biner_n): 2. t = 0 3. p = length(biner_n)-1 4. for i = p downto 0: 5. if(biner_n[i] == ‘0’): 6. t++ 7. if(biner_n[i] == ‘1’): 8. break 9. return t 1. function get_u(biner_n, t): 2. bin_u = biner_n[0:length(biner_n)-t] 3. u = toDecimal(bin_u) 4. return u 1. function differentRandom(n): 2. x = array 3. for i = 0 to length(str(n)): 4. a = random(2, n-1) 5. while a in x: 6. a = random(2, n-1) 7. x[i] = a 8. return x

Berikut ini merupakan penjelasan dari pseudocode di atas. Pseudocode

differentRandom(n) berfungsi untuk menentukan bilangan acak yang berbeda antara

satu dengan yang lain sebanyak jumlah dari digit bilangan n. Pseudocode

get_t(biner_n) berfungsi untuk menentukan nilai t yaitu jumlah bit 0 pada representasi biner bilangan n-1 sebelum digit 1 dari posisi bit paling kanan ke kiri.

Pseudocode get_u(biner_n, t) berfungsi untuk menentukan nilai u yaitu nilai desimal u yang memenuhi persamaan 2tu = n-1. Jika fungsi Witness(a, u, n, t)

pada pseudocode MillerRabin(n) menghasilkan nilai benar, maka bilangan n merupakan bilangan bukan prima. Dan jika hasil fungsi Witness(a, u, n, t)

Gambar 3.6. Flowchart dari (A) Algoritma Miller-Rabin dan (B) Fungsi Witness

3.2.4. Flowchart extended Euclidean

Algoritma Extended Euclidean berfungsi untuk menentukan GCD dari dua buah bilangan (a,b) dan menemukan nilai x dan y pada persamaan xa+yb = GCD(a,b)

49

(Lipschutz & Lipson, 2007). Gambar 3.7. berikut ini merupakan flowchart dari algoritma Extended Euclidean (Sadikin, 2012).

Gambar 3.7. Flowchart Algoritma Extended Euclidean

Berikut ini adalah pseudocode dari algoritma Extended Euclidean di mana

pseudocode ini akan menghasilkan nilai GCD(a,b), x, y (Sadikin, 2012). 1. function extendedEuclidean(a,b): 2. A, B, x, x2, y, y2 = a, b, 1, 0, 0, 1 3. while (B > 0): 4. hasilBagi = A/B 5. sisaBagi = A – hasilBagi * B 6. A, B = B, sisaBagi 7. S = x – hasilBagi * x2 8. x, x2 = x2, S; 9. T = y – hasilBagi * y2 10. y, y2 = y2, T 11. return A, x, y

3.2.5. Flowchart chinese remainder theorem

Chinese Remainder Theorem digunakan pada proses dekripsi algoritma Rabin, yaitu

untuk menyelesaikan dua persamaan dengan modulus yang relatif prima. Gambar 3.8. berikut ini adalah flowchart dari algoritma Chinese Remainder Theorem yang digunakan pada sistem ini (Rosen, 2012).

Gambar 3.8. Flowchart Algoritma Chinese Remainder Theorem

Berikut ini adalah pseudocode dari algoritma Chinese Remainder Theorem yang digunakan pada sistem ini (Rosen, 2012).

1. function CRT(mp, mq, p, q):

2. n = p * q

3. M1 = n / p

4. M2 = n / q

5. gcd, y1, y2 = extendedEuclidean(M1,M2)

6. return mp*M1*y1, mq*M2*y2, n

3.2.6. Flowchart pembangkit kunci

Gambar 3.9. berikut ini adalah flowchart dari pembangkit kunci untuk algoritma Rabin yang digunakan pada penelitian ini.

51

Gambar 3.9. Flowchart (A) Pemeriksaan Kunci dan (B) Pembangkit Kunci Secara Acak

Pseudocode dari pembangkit kunci untuk algoritma Rabin terdiri dari dua

bagian, yaitu fungsi cekKunci(p, q) dan bangkitkanKunci() seperti sebagai berikut.

1. function cekKunci(p, q):

2. if(p mod 4 == 3) and MillerRabin (p)

and (q mod 4 == 3) and MillerRabin (q)

and (p ≠ q) and (length(str(p*q)) ≤ 8):

3. return True 4. return False 1. function bangkitkanKunci(): 2. syarat_tdk_terpenuhi = True 3. while syarat_tdk_terpenuhi: 4. p = random(3,9999)

5. q = random(3,9999)

6. if cekKunci(p, q):

7. syarat_tdk_terpenuhi = False

8. n = p * q

9. return p, q, n

Fungsi cekKunci(p, q) diperlukan untuk pemeriksaan kunci pada fungsi

bangkitkanKunci()dan jika pengguna melakukan input langsung. 3.2.7. Flowchart enkripsi

Flowchart enkripsi terbagi atas dua bagian, yaitu fungsi dasar enkripsi yang berfungsi

untuk melakukan enkripsi untuk satu nilai dan fungsi enkripsi yang berfungsi untuk melakukan enkripsi pesan perupa teks seperti yang terlihat pada Gambar 3.10.

Fungsi ord(P[i]) berfungsi untuk mengubah karakter P[i] ke nilai desimal pada ASCII. Dalam hal ini, pesan yang dapat dienkripsi adalah pesan dengan karakter pada ASCII 8 bit seperti yang sudah dijelaskan pada batasan masalah penelitian ini. Berikut ini adalah pseudocode dari proses enkripsi.

1. function enkripsi(P, n): 2. if(P < n): 3. C = sam(P,2,n) 4. return C 5. return False 1. function enkripsiPesan(P, n): 2. C = list 3. for i = 0 to length(P)-1: 4. C.append(enkripsi(ord(P[i]), n))

5. if C[i] == False: break

53

Gambar 3.10. Flowchart (A) Fungsi Dasar Enkripsi dan (B) Fungsi Enkripsi Seperti yang terlihat pada Gambar 3.10. dan pseudocode, jika kunci publik yang digunakan untuk enkripsi lebih kecil atau sama dengan dengan nilai desimal dari karakter pada sebuah pesan, maka fungsi akan mengembalikan nilai salah (false) yang berarti kesalahan pada proses enkripsi atau proses enkripsi tidak dapat dilakukan.

3.2.8. Flowchart dekripsi

Pada algoritma Rabin, terdapat empat hasil dekripsi dan penerima pesan harus menentukan pesan yang benar. Terdapat beberapa cara yang dapat dilakukan untuk dapat menentukan hasil dekripsi yang benar, seperti menggandakan pesan atau menggandakan nilai bit dari pesan sebelum dienkripsi dan hasil yang memiliki nilai yang berulang merupakan kemungkinan hasil dekripsi yang benar.

Jika pesan yang dienkripsi jumlahnya sedikit, maka penerima pesan relatif mudah dalam menentukan hasil dekripsi. Namun jika pesan yang dienkripsi jumlahnya

banyak, maka akan timbul kesulitan bagi penerima pesan dalam menentukan hasil dekripsi. Penulis sudah mencoba melakukan enkripsi (menggunakan kunci publik yang lebih besar dari 255) dan dekripsi untuk nilai yang mencakup karakter pada ASCII 8 bit (1 sampai dengan 255) dan memberikan pengalaman bahwa hasil dekripsi yang benar biasanya adalah nilai yang paling kecil dari keempat hasil dekripsi. Berdasarkan pengalaman tersebut, penulis melakukan modifikasi dalam proses dekripsi pada penelitian ini yaitu dengan melakukan proses autodekripsi (penerima pesan tidak direpotkan dalam menentukan nilai dekripsi yang dianggap benar). Adapun flowchart dari proses dekripsi pada penelitian ini dapat dilihat pada Gambar 3.11.

Berikut ini adalah pseudocode dari proses dekripsi pada penelitian ini.

1. function autodekripsi(C, p, q): 2. mp = sam(C, (p+1)/4, p) 3. mq = sam(C, (q+1)/4, q) 4. x, y, n = CRT(mp,mq,p,q) 5. P1 = (x + y) mod n 6. P2 = (x – y) mod n 7. P3 = (-x + y) mod n 8. P4 = (-x – y) mod n 9. return min(P1, P2, P3, P4) 1. function dekripsi(C, p, q): 2. Psn = [] 3. for i = 0 to length(C)-1: 4. Psn.append(chr(autodekripsi(C[i],p,q))) 5. return join(Psn)

Pada fungsi dekripsi pesan, fungsi chr() akan mengubah nilai hasil autodekripsi ke bentuk karakter ASCII dan join(Psn) berfungsi untuk membentuk karakter-karakter yang telah disimpan pada list menjadi string pesan.

55

Gambar 3.11. Flowchart (A) Fungsi Autodekripsi dan (B) Fungsi Dekripsi Pesan

3.2.9. Flowchart pemetaan titik hitam

Pemetaan titik hitam digunakan dalam penyisipan pesan rahasia ke dalam citra dan berfungsi untuk mengetahui index atau posisi pixel yang dianggap hitam. Batas toleransi warna yang dianggap hitam (mt) adalah nilai maksimum dari warna yang dianggap hitam. Pada penelitian ini, nilai dari mt dapat ditetetapkan mulai dari 15 hingga sama dengan 255. Walaupun demikian, penulis menyarankan untuk memberikan nilai mt = 15 untuk hasil penyisipan (embedding) yang lebih baik.

Langkah-langkah dalam pemetaan titik hitam digambarkan pada Gambar 3.12. berikut ini.

Gambar 3.12. Flowchart Pemetaan Titik Hitam

Langkah-langkah dalam melakukan pemetaan titik hitam dalam bentuk

pseudocode adalah seperti berikut.

1. function sequentialSearch(pixel, mt):

2. htm = list

3. for i = 0 to length(pixel)-2:

4. if(pixel[i][0] <= mt and pixel[i][1] <= mt and pixel[i][2] <= mt):

5. htm.append(i)

6. return htm

Nilai pixel berupa tuple, list ataupun larik yang berisi nilai R, G dan B dari sebuah pixel. Pencarian dilakukan dari index 0 hingga jumlah pixel dalam citra dikurang

57

dengan 2 karena pixel paling akhir dari citra akan digunakan sebagai penanda jika pada

pixel sebelumnya merupakan pixel yang dianggap hitam.

3.2.10. Flowchart penyisipan

Gambar 3.13. berikut ini adalah flowchart dari penyisipan pesan ke dalam citra.

Sebelum melakukan penyisipan, perlu dilakukan beberapa proses yaitu penguraian (parsing) nilai pesan rahasia, penyaringan (filter) citra untuk mengganti seluruh pixel dengan nilai RGB sama dengan 254 menjadi 255 dan dilanjutkan kepada proses pemetaan titik hitam.

Tujuan dari proses parsing nilai pesan rahasia adalah untuk memperoleh nilai yang cukup untuk dikatakan hitam pada representasi warna RGB sehingga pada proses penggantian warna pada cover-image tidak begitu mempengaruhi kualitas warna pada citra. Alasan penulis memilih warna hitam adalah karena nilai representasi warna hitam pada RGB relatif lebih kecil daripada warna lainnya dan hal ini berhubungan dengan nilai hasil parsing suatu bilangan.

Jika nilai hasil parsing menjadi relatif besar dan disisip pada pixel dengan nilai RGB yang relatif kecil atau sebaliknya, maka akan mempengaruhi kualitas citra tersebut berupa perbedaan warna yang semakin mencolok. Mempertimbangkan hal tersebut, penulis memilih untuk menghasilkan nilai parsing yang relatif kecil untuk mengganti nilai yang relatif kecil pula karena lebih mudah untuk membagi suatu bilangan menjadi kecil dan menggabungkannya kembali ke bentuk semula daripada memperbesar nilai suatu bilangan dalam rentang 0 hingga sama dengan 255 untuk menghasilkan representasi warna RGB yang tidak jauh berbeda.

Nilai hasil parsing yang penulis tetapkan adalah bilangan dalam rentang dari 0 hingga sama dengan 15. Berdasarkan pengamatan penulis, nilai dari 0 hingga sama dengan 15 pada representasi warna RGB akan menghasilkan warna yang relatif terlihat sama (hitam). Nilai 15 dipilih karena jumlah bit pada representasi binernya sebanyak 4 bit dan merupakan nilai maksimal untuk biner dengan panjang biner sebanyak 4 bit. Selain itu, rentang nilai 15 relatif tidak jauh terhadap nilai 0.

Proses parsing dilakukan dengan membagi nilai biner dari suatu bilangan menjadi beberapa bagian. Berdasarkan percobaan yang penulis lakukan, panjang atau jumlah bit maksimal suatu ciphertext hasil enkripsi (menggunakan algoritma Rabin) dari nilai suatu pesan rahasia (sesuai ASCII 8 bit) dengan beberapa kunci publik sepanjang 64 bit yang berbeda-beda adalah sebanyak 16 bit. Dari percobaan tersebut, penulis menetapkan untuk menyamakan panjang bit dari tiap nilai yang akan disisip ke citra sepanjang 16 bit yaitu dengan menambahkan sejumlah bit 0 pada bit paling kiri hingga panjang bit nilai yang akan disisipkan tersebut menjadi 16 bit.

59

Setelah jumlah atau panjang bit dari nilai yang akan disisipkan sudah menjadi 16 bit, langkah selanjutnya yaitu membagi ke-16 bit tersebut menjadi empat bagian. Atau dengan kata lain, 16 bit menjadi empat buah biner dengan panjang 4 bit. Masing- masing bagian tersebut diubah ke dalam desimal sehingga akan diperoleh nilai antara dari 0 hingga sama dengan 15. Berikut ini adalah pseudocode dari proses penyisipan.

1. function sisip(C, pixel, mt):

2. C = preSisip(C) 3. pixel = filter(pixel) 4. hitam = sequentialSearch(pixel, mt) 5. if(length(hitam) ≥ length(C)): 6. i = 0 7. for j = 0 to length(C)-1: 8. pixel[hitam[j]][0] = C[i] 9. pixel[hitam[j]][1] = C[i+1] 10. pixel[hitam[j]][2] = C[i+2] 11. i = i + 3 12. if(length(C) < length(pixel)): 13. pixel[hitam[length(C)-1] + 1][0] = 254 14. pixel[hitam[length(C)-1] + 1][1] = 254 15. pixel[hitam[length(C)-1] + 1][2] = 254

16. else: return False

17. else: return False

18. return pixel 1. function filter(pixel): 2. for i = 0 to length(pixel)-1: 3. if(pixel[i][0] == pixel[i][1] == pixel[i][2] == 254): 4. pixel[i][0] = 255 5. pixel[i][1] = 255 6. pixel[i][2] = 255 7. return pixel 1. function parsing(C): 2. C = preParsing(C) 3. if(length(C) == 16): 4. c1 = (C[:4]) 5. c2 = (C[4:8]) 6. c3 = (C[8:12])

7. c4 = (C[12:]) 8. return c1, c2, c3, c4 1. function preParsing(C): 2. b = toBinary(C) 3. if(length(b) < 16): 4. selisih = 16 – length(b) 5. for j = 1 to selisih: 6. b = ‘0’ + b 7. return b 1. function preSisip(C) 2. d = list 3. for i = 0 to length(C)-1: 4. c1, c2, c3, c4 = parsing(C[i]) 5. d.append(toDecimal(c1)) 6. d.append(toDecimal(c2)) 7. d.append(toDecimal(c3)) 8. d.append(toDecimal(c4)) 9. while(length(d) mod 3 ≠ 0): 10. d.append(0) 11. return d

Yang menjadi masukan (input) dari fungsi sisip(C, pixel, mt) adalah C

yang merupakan sejumlah nilai desimal dari plaintext atau ciphertext yang disimpan dalam list, pixel yang merupakan kumpulan pixel dari citra dalam list dan mt yang

merupakan batas toleransi pixel yang dianggap hitam. Jika yang akan disisip merupakan pesan asli (plaintext), maka sebelum penguraian pesan dilakukan pengubahan tiap karakter pada pesan ke bentuk biner (sesuai dengan kode ASCII 8 bit). Jika nilai yang ingin disisip merupakan hasil dari enkripsi, maka nilai ciphertext diubah menjadi bentuk biner.

Pada fungsi preSisip(C) akan menambahkan nilai 0 pada akhir dari list jika panjang dari d tidak habis dibagi oleh 3. Karena satu pixel memiliki tiga buah nilai

(RGB), jika elemen terakhir dari d tidak dapat membentuk satu pixel (misalnya, R-G-B diganti dengan dn-G-B), maka nilai pada G dan/atau B diganti dengan 0. Hal ini bertujuan agar pixel tersebut tetap terlihat hitam.

61

3.2.11. Flowchart ekstrak citra

Pada proses ekstrak, suatu citra yang merupakan stego-image adalah citra yang hanya memiliki satu pixel dengan nilai RGB sama dengan 254. Proses ekstrak dalam bentuk

flowchart dapat dilihat pada Gambar 3.14. berikut.

Berikut ini adalah langkah-langkah dari proses ekstraksi suatu stego-image dalam bentuk pseudocode.

1. function ekstrak(pixel): 2. if(preEkstrak(pixel)): 3. C = get_C(pixel) 4. temp = list 5. for i = 0 to length(C): 6. temp.append(chr(C[i])) 7. return b

8. else: return “Tidak ada pesan rahasia”

1. function preEkstrak(pixel): 2. penanda = 0 3. for i = 0 to length(pixel)-1: 4. R = pixel[i][0] 5. G = pixel[i][1] 6. B = pixel[i][2]

7. if(R == 254 and G == 254 and B == 254):

8. penanda++

9. if(penanda == 1 and pixel[0] ≠ (254,254,254)):

10. return True 11. return False 1. function biner(x): 2. b = toBinary(x) 3. while(length(b) < 4): 4. b = ‘0’ + b 5. return b 1. function get_C(pixel): 2. C = list 3. for i = 0 to length(pixel)-1: 4. if(pixel[i] == (254,254,254)): break 5. else:

6. if(pixel[i][0] ≤ 15 and pixel[i][1] ≤

15 and pixel[i][2] ≤ 15):

7. C.append(pixel[i][0])

8. C.append(pixel[i][1])

9. C.append(pixel[i][2])

63

11. for i = 0 to (length(C) mod 4):

12. C.pop(length(C)-1) 13. psn = list 14. for i = 0 to length(C)-1: 15. b1 = biner(C[i]) 16. b2 = biner(C[i+1]) 17. b3 = biner(C[i+2]) 18. b4 = biner(C[i+3]) 19. psn.append(toDecimal(join(b1,b2,b3,b4))) 20. i = i + 4 21. return psn

Fungsi chr(C[i]) pada ekstrak(pixel) berfungsi untuk mengubah nilai desimal menjadi karakter sesuai dengan ASCII. Fungsi preEkstrak(pixel) akan mengembalikan nilai true jika hanya terdapat satu pixel penanda atau pixel dengan nilai RGB sama dengan 254 pada citra dan pixel tersebut tidak berada pada awal dari pixel citra. Pada fungsi biner(x), jika nilai biner dari x panjangnya lebih kecil dari 4, maka akan ditambahkan sejumlah bit 0 pada bit paling kiri dari nilai biner x tersebut sehingga akan menghasilkan nilai biner dengan panjang 4 bit. Fungsi get_C(pixel) adalah untuk mendapatkan sejumlah nilai pesan rahasia yang ada pada citra yang disimpan dalam bentuk list.

3.2.12. Use-case diagram

Diagram use-case digunakan untuk menggambarkan hubungan antara aktor dengan fungsi atau layanan yang disediakan oleh sistem (Ambler, 2005).

Aktor yang terlibat atau mempunyai interaksi dengan sistem pada penelitian ini adalah pengirim dan penerima. Hubungan antara aktor dengan fungsi (use-case) yang tersedia pada sistem dihubungkan oleh garis lurus menyatakan bahwa aktor tersebut melakukan inisiasi atau mengajukan permintaan terhadap suatu use-case. Hubungan yang menyatakan suatu use-case dapat dilaksanakan dengan syarat yaitu kelakuan yang harus terpenuhi (include) digambarkan oleh garis putus-putus dengan tanda panah terbuka. Pada hubungan include, yang menjadi syarat dari suatu use-case adalah use-

case pada pangkal tanda panah. Hubungan yang menyatakan suatu use-case merupakan

perluasan (extend) dari suatu use-case lainnya digambarkan oleh garis putus-putus dengan tanda panah terbuka. Use-case yang merupakan perluasan dari use-case lainnya

pada hubungan extend adalah use-case yang terletak pada pangkal dari tanda panah. Diagram use-case pada penelitian ini dapat dilihat pada Gambar 3.15.

Gambar 3.15. Use-case Diagram

Pada hubungan tipe relasi (stereotype) dari extend hanya berjalan pada kondisi tertentu. Pada Gambar 3.13, kondisi tertentu dari use-case bangkitkan kunci secara acak adalah jika pengguna (pengirim) mengalami kesulitan dalam menentukan kunci, kondisi tertentu dari use-case enkripsi pesan adalah jika pengirim ingin mengenkripsi terlebih dahulu sebelum melakukan penyisipan ke citra dan kondisi tertentu dari use-

case dekripsi pesan adalah jika pesan rahasia hasil ekstrak citra merupakan ciphertext. Use-case narrative merupakan penjelasan dari setiap use-case yang ada pada

diagram use-case. Tabel 3.3. sampai Tabel 3.10. berikut ini adalah use-case narrative dari diagram use-case pada Gambar 3.15.

65

Tabel 3.3. Use-Case Narrative Simpan Kunci

Use-Case Name Simpan Kunci

Design Scope Sistem (black box)

Goal Level Subfunction

Stakeholders and Interest Pengirim (Pengguna): Ingin menyimpan kunci agar

mudah melakukan dekripsi dan khawatir kunci terlupa.

Precondition Kunci private sudah di-input.

Minimal Guarantee Sistem dapat memeriksa kunci dan jika kunci tidak memenuhi syarat, maka sistem akan meminta pengguna untuk mengganti kunci dan kunci sebelumnya tidak dapat disimpan.

Success Guarantee Kunci disimpan jika kunci yang di-input memenuhi persyaratan.

Trigger Pengguna menekan tombol simpan.

Main Success Scenario 1. Pengguna meng-input bilangan pada form sebagai kunci private.

2. Pengguna menekan tombol simpan.

3. Sistem melakukan pemeriksaan syarat dari kunci yang di-input.

4. Sistem menampilkan dialog bahwa kunci berhasil disimpan.

Extensions 1a. Pengguna meng-input karakter yang bukan angka. 1a1. Sistem hanya merespon jika karakter yang

di-input adalah angka.

2a. Tombol simpan ditekan tetapi terdapat kunci yang kosong.

2a1. Sistem akan menampilkan dialog peringatan bahwa kunci tidak boleh ada yang kosong. 4a. Kunci tidak memenuhi syarat.

4a1. Sistem akan menampilkan dialog kesalahan bahwa kunci yang di-input tidak memenuhi syarat dan pengguna harus mengganti kunci.

Tabel 3.4. Use-Case Narrative Menentukan Kunci

Use-Case Name Menentukan Kunci

Design Scope Sistem (black box)

Goal Level User-goal

Stakeholders and Interest Pengirim (Pengguna): Ingin menentukan atau

membangkitkan kunci yang dapat dipakai pada algoritma Rabin.

Precondition Pengguna belum memiliki kunci atau mengganti kunci sebelumnya.

Minimal Guarantee Sistem dapat menampilkan dialog bahwa kunci yang di-

input pengguna tidak memenuhi syarat.

Success Guarantee Sistem menampilkan kunci publik sebagai tanda bahwa kunci private yang di-input memenuhi syarat.

Trigger Pengguna menekan tombol cek kunci.

Main Success Scenario 1. Pengguna meng-input bilangan pada form sebagai kunci private.

2. Pengguna menekan tombol cek kunci.

3. Sistem melakukan pemeriksaan syarat dari kunci yang di-input.

4. Sistem menampilkan kunci publik pada form.

Extensions 1a. Pengguna meng-input karakter yang bukan angka. 1a1. Sistem hanya merespon jika karakter yang

di-input adalah angka.

2a. Tombol cek kunci ditekan tetapi terdapat kunci yang kosong.

2a1. Sistem akan menampilkan dialog peringatan bahwa kunci tidak boleh ada yang kosong. 4a. Kunci tidak memenuhi syarat.

4a1. Sistem akan menampilkan dialog kesalahan bahwa kunci yang di-input tidak memenuhi syarat, form kunci publik dikosongkan dan pengguna harus mengganti kunci.

Tabel 3.5. Use-Case Narrative Bangkitkan Kunci Secara Acak

Use-Case Name Bangkitkan Kunci Secara Acak

Design Scope Sistem (black box)

Goal Level User-goal

Stakeholders and Interest Pengirim (Pengguna): Ingin menentukan atau

membangkitkan kunci secara acak karena sulit secara manual.

Precondition -

Minimal Guarantee -

Success Guarantee Sistem menampilkan kunci yang sudah memenuhi syarat.

Trigger Pengguna menekan tombol bangkitkan kunci.

Main Success Scenario 1. Sistem menampilkan kunci private dan kunci publik pada form.

67

Tabel 3.6. Use-Case Narrative Sisip Pesan ke Citra (I)

Use-Case Name Sisip Pesan ke Citra

Design Scope Sistem (black box)

Goal Level User-goal

Stakeholders and Interest Pengirim (Pengguna): Ingin menyembunyikan pesan

rahasia ke dalam citra untuk hasil pengamanan yang lebih baik.

Precondition Terdapat batas maksimum toleransi dan pesan rahasia berupa ciphertext atau plaintext pada form.

Minimal Guarantee Sistem menampilkan dialog kegagalan bahwa pesan tidak dapat disisipkan ke citra.

Success Guarantee Sistem menampilkan stego-image.

Trigger Pengguna menekan tombol embed.

Main Success Scenario 1. Form berisi pesan rahasia yang akan disisip ke citra.

2. Pengguna memilih cover-image.

3. Pengguna meng-input nilai batas toleransi warna yang dianggap hitam dan pengguna menekan tombol embed.

4. Sistem melakukan penyisipan pesan rahasia. 5. Sistem menampilkan stego-image.

6. Pengguna menyimpan stego-image.

7. Sistem menampilkan dialog stego-image berhasil disimpan.

Extensions 1a. Pesan rahasia dapat berupa ciphertext atau plaintext. 1a1. Jika pesan rahasia adalah ciphertext, maka

sistem akan mengubah tiap nilai ciphertext menjadi karakter sebelum disisip ke citra. Jika tidak dapat diubah ke karakter, maka tiap karakter dari nilai ciphertext akan disisip ke citra.

1a2. Jika pesan rahasia adalah plaintext, maka pesan rahasia siap untuk disisip ke citra (pesan rahasia berupa teks dengan karakter yang terdapat pada ASCII 8 bit).

2a. Pengguna memilih citra atau berkas dengan format selain BMP.

2a1. Sistem akan menampilkan dialog peringatan bahwa berkas yang dipilih bukan format BMP dan pengguna harus memilih berkas kembali.

3a. Nilai batas toleransi yang di-input pengguna bukan berupa angka.

3a1. hanya merespon jika karakter yang di-input adalah angka.

Tabel 3.7. Use-Case Narrative Sisip Pesan ke Citra (II)

Extensions 3b. Nilai batas toleransi yang di-input pengguna tidak sesuai rentang yang diperbolehkan.

3b1. Jika nilai batas toleransi tidak pada rentang dari 15 hingga sama dengan 255, maka sistem akan menampilkan dialog kesalahan dan pengguna harus meng-input kembali

Dalam dokumen Implementasi Sistem Keamanan Data Menggunakan Steganografi Teknik Pemetaan Titik Hitam Dengan Pencarian Sekuensial Dan Rabin Cryptosystem (Halaman 55-89)