ANALISIS DAN PERANCANGAN SISTEM
3.2. Perancangan Sistem
Tahap perancangan sistem dilakukan untuk memberikan gambaran yang jelas dan rancang bangun yang lengkap, menggambarkan bagaimana suatu sistem dibentuk dan merupakan penggambaran, perencanaan dan pembuatan sketsa atau pengaturan dari beberapa elemen yang terpisah ke dalam satu kesatuan yang utuh dan berfungsi.
Sistem akan dikembangkan menggunakan teknologi Ms. Visual C# yang menerapkan paradigma pengembangan sistem berorientasi objek, oleh karena itu dalam proses perancangan ini akan digunakan Unified Modelling Language (UML). Diagram UML yang digunakan adalah use case diagram dan activity diagram.
3.2.1. Use case diagram
Use case diagram menggambarkan interaksi antara sistem dan pengguna atau sistem lain di luar sistem tersebut yaitu siapa pengguna sistem itu dan dengan cara bagaimana pengguna berharap berinteraksi dengan sistem.
Pemecahan Kunci RSA
Sistem Pemecahan Kunci RSA Metode Kraitchik
Dekripsi Ciphertext RSA Pengguna Menghitung Kunci Privat (d) Pemfaktoran (n) Metode Kraitchik «extends» «uses» Periksa Kunci Publik (e,n) Dekripsi ciphertext-->plaintext Simpan plaintext «uses» Ambil ciphertext direktori penyimpanan «uses» «uses» Periksa ciphertext && (n,d) «uses» «uses» «uses»
Gambar 3.2 Use case diagram Sistem Pemecahan Kunci RSA Metode Kraitchik
Gambar 3.2 menunjukkan interaksi antara pengguna dan Sistem Pemecahan Kunci RSA. Ada dua proses yang dilakukan sistem yaitu pemecahan kunci RSA dan dekripsi
28
RSA. Deskripsi lengkap diuraikan pada tabel narasi use case Pemecahan Tabel 3.3 dan Tabel 3.4.
Tabel 3.3 Narasi Use Case Pemecahan Kunci RSA Use case name Pemecahan kunci RSA
Scenario Memecahkan kunci privat d
Brief description
Pengguna meng-input pasangan kunci publik (e,n). Sistem akan melakukan pemfaktoran untuk mendapatkan faktor kunci publik
n dan dihitung secara matematis yang menghasilkan output
berupa kunci privat d
Actors Pengguna
Precondition Pengguna telah memperoleh pasangan kunci publik (e,n) Postcondition Kunci privat d terpecahkan dan ditampilkan
Flow of events Actors System
1. Pengguna meng-
input pasangan kunci publik (e,n)
2. Sistem memeriksa input
pasangan kunci publik (e, n) 3. Sistem memfaktorkan kunci
publik n menjadi faktor- faktornya (p,q) menggunakan metode Kraitchik
4. Sistem menghitung kunci privat
d menggunakan faktor-faktornya (p,q)
Exception condition
1. Jika pasangan kunci publik (e, n) belum di-input: Tanyakan kepada pengguna
2. Jika pasangan kunci publik (e, n) tidak berformat BigInteger: Tanyakan kepada pengguna
Tabel 3.4 Narasi Use Case Dekripsi RSA Use case name Dekripsi RSA
Scenario Dekripsi ciphertext menjadi plaintext
Brief description
Pengguna meng-input pasangan kunci privat (d, n) dan ciphertext
format *.doc dan *.txt, kemudian sistem melakukan dekripsi dengan kunci privat tersebut terhadap ciphertext menjadi plaintext
Actors Pengguna
Precondition Pengguna telah memperoleh pasangan kunci privat (d, n) Postcondition Memperoleh plaintext format *.doc dan *.txt
Flow of events Actors System
1. Pengguna meng-
input ciphertext
format *.doc dan *.txt dari direktori penyimpanan
2. Sistem meng-input pasangan kunci privat (d, n)
3. Sistem memeriksa input
pasangan kunci privat (d, n) dan
ciphertext format *.doc dan *.txt 4. Sistem melakukan dekripsi terhadap ciphertext format *.doc dan *.txt dengan pasangan kunci privat (d, n)
5. Sistem menyimpan plaintext
pada direktori penyimpanan dengan format *.doc dan *.txt Exception
condition
1. Jika pasangan kunci publik (e, n) dan ciphertext belum di-
input: Tanyakan kepada pengguna
2. Jika pasangan kunci publik (e, n) tidak berformat BigInteger: Tanyakan kepada pengguna
3. Jika ciphertext tidak berformat *.doc dan *.txt: Tanyakan kepada pengguna
3.2.2. Activity diagram
Activity diagram berfungsi untuk menjelaskan lebih detil use case, menjelaskan
bussiness rule yang kompleks dan menjelaskan algoritma yang kompleks. Activity
30
diagram untuk use case Pemecahan Kunci RSA dan use case Dekripsi RSA ditunjukkan pada Gambar 3.3 dan Gambar 3.4.
Halaman Utama
Input kunci publik (n)
Periksa (n) pada textbox Tekan tombol "Faktorkan"
Tampilkan dialog, Minta input Pemfaktoran (n) metode Kraitchik
Tampilkan (p,q) & Waktu pemfaktoran Hitung kunci privat (d)
Tampilkan kunci publik(n,e) & kunci privat(n,d) Buka aplikasi
Pengguna Sistem
Tidak ada Ada
Pilih opsi "Pemecahan Kunci RSA" Tampilkan window 'Pemecahan Kunci RSA'
Tekan tombol "Hitung!"
Halaman Utama
Input kunci publik (n)
Periksa (d,n,ciphertext) Tekan tombol "Dekripsi & Simpan"
Tampilkan dialog, Minta input Proses dekripsi Buka aplikasi
Pengguna Sistem
Tidak ada Ada
Pilih opsi "Dekripsi RSA" Tampilkan window 'Dekripsi RSA'
Input kunci privat (d) Input file ciphertext Tampilkan "Open File Dialog"
Ambil file *.txt atau *.doc
Simpan file plaintext *.txt atau *.doc
Gambar 3.4 Activity diagram untuk use case Dekripsi RSA
3.3. Flowchart
Flowchart (diagram alir) adalah simbol-simbol yang digunakan untuk menggambarkan sebuah pernyataan logika pemrograman serta aliran logika suatu prosedur dan proses dari pemecahan masalah yang ditunjukkan dengan arah panah (Zarlis & Handrizal 2010). Berikut ini akan dijelaskan beberapa flowchart dari proses yang berjalan pada Sistem Pemecahan Kunci RSA Metode Kraitchik.
32
3.3.1. Flowchart pemecahan kunci RSA metode Kraitchik
Start Start Input: kunci publik n Input: kunci publik n Inisialisasi k = 1 Hitung x = sqrt(n) Inisialisasi k = 1 Hitung x = sqrt(n) x = x + 1 x = x + 1 Apakah (x^2 – k*n = akar sempurna) AND (x^2 – k*n ≠ 0 Apakah (x^2 – k*n = akar sempurna) AND (x^2 – k*n ≠ 0 No Apakah (x + y) - k * n ≠ 0 AND (x- y) - k * n ≠ 0 Apakah (x + y) - k * n ≠ 0 AND (x- y) - k * n ≠ 0 Hitung y = Sqrt(x^2 - k * N) Hitung y = Sqrt(x^2 - k * N) Yes k = k + 1 k = k + 1 No Hitung p = (x + y)/k q = x - y Hitung p = (x + y)/k q = x - y Yes Apakah (0 < p < n) AND (0 < q < n) Apakah (0 < p < n) AND (0 < q < n) End End Output: Faktor kunci (p,q) Output: Faktor kunci (p,q) Yes No
Keterangan:
Gambar 3.5 menunjukkan gambaran proses pemecahan kunci RSA dengan pemfaktoran metode Kraitchik dan persamaan (1). Adapun proses yang bekerja antara lain:
1. Input kunci publik n.
2. Hitung nilai x yang merupakan akar n, kemudian tentukan nilai k = 1.
3. Lakukan pengulangan dengan meningkatkan nilai x (x = x + 1) hingga x2 – k.n
adalah akar sempurna dan x2–k.n≠ 0.
4. Hitunglah y = √(x2 – k.n) dan lakukan pengulangan dengan meningkatkan nilai k
(k = k + 1) hingga (x + y) –k.n≠ 0 dan (x – y) –k.n≠ 0.
5. Output proses ini adalah nilai p dan q dengan menghitung p = (p + q)/k dan q = p– q jika memenuhi syarat (0 < p < n) dan (0 < q < n). Jika tidak memenuhi syarat ulangi langkah 4.
3.3.2. Flowchart menghitung kunci publik dan kunci privat
Start Start End End Input: Bilangan prima (p,q) Input: Bilangan prima (p,q) Inisialisasi e = 2 Hitung n = p.q φ(n) = ( p-1) ( q-1 ) Inisialisasi e = 2 Hitung n = p.q φ(n) = ( p-1) ( q-1 ) Cek apakah GCD (e,φ(n)) = 1 Cek apakah GCD (e,φ(n)) = 1 Inisialisasi d = 1 Inisialisasi d = 1 Hitung d = e-1(mod φ(n)) Hitung d = e-1(mod φ(n)) Output:
Publik Key =(e,n) Privat Key (d,n)
Output: Publik Key =(e,n)
Privat Key (d,n) Yes A A A A e = e+1 e = e+1 No
Gambar 3.6 Flowchart menghitung kunci publik dan kunci privat
34
Keterangan:
Gambar 3.6 menunjukkan gambaran proses menghitung kunci privat d dengan pemfaktoran metode Kraitchik dan persamaan (1). Adapun proses yang bekerja antara lain:
1. Input faktor kunci publik n yaitu p dan q. 2. Hitung ɸ(n) = (p– 1).(q– 1).
3. Pilih kunci publik e, yang relatif prima terhadap φ(n)
4. Kemudian hitung kunci privat d dengan persamaan e.d ≡ 1(mod ɸ(n)) yaitu melakukan inverse modulo terhadap e menjadi d = e-1modɸ(n).
5. Output berupa kunci publik (e, n) dan kunci privat (d, n)
3.3.3. Flowchart dekripsi RSA
Start
Start
End
End
Input: Kunci privat (d,n), Ciphertext (c)
Input: Kunci privat (d,n), Ciphertext (c) m= cd mod n m= cd mod n Output: Pesan plaintext (m) Output: Pesan plaintext (m)
Gambar 3.7 Flowchart proses dekripsi RSA
Keterangan:
Gambar 3.7 menunjukan gambaran proses dekripsi RSA. Adapun proses yang bekerja antara lain:
1. Ciphertext didekripsi dengan rumus m = cd mod n menggunakan kunci privat d
yang telah didapat sebelumnya
2. Dengan menggunakan pasangan kunci privat (d, n) dan rumus dekripsi m= cdmod n, sebuah ciphertext di ubah ke dalam bentuk plaintext-nya. Output dari proses ini merupakan sebuah pesan asli (plaintext).
3.4. Pseudocode
3.4.1. Pseudocode pemecahan kunci RSA (metode Kraitchik)
Pseudocode „Function Kraitchik‟ adalah implementasi metode Kraitchik yaitu memfaktorkan kunci publik n menjadi faktor perkaliannya atau faktor kunci (p,q).
Function Kraitchik(BigInteger n) { found = false x = ceil (Sqrt(n)) k = 1 while (!found) { if (IsSquare(x * x - k * n) && x * x - k * n != 0) { y = Sqrt(x * x - k * n) if ((x + y) - k * n != 0 && (x - y) - k * n != 0) { p = (x + y) / k q = x - y
if (0 < p && p < n && 0 < q && q < n) found = true; } k++ } x++ } return p,q }
Gambar 3.8 Pseudocode pemecahan kunci RSA (metode Kraitchik)
Berikut ini adalah penjelasan tahapan pseudocode pemecahan kunci RSA (metode Kraitchik) pada Gambar 3.8:
1. Input kunci publik n yang merupakan bilangan bulat bertipe data BigInteger
yaitu hasil perkalian dua bilangan prima (p,q).
function Kraitchik(BigInteger n)
2. Inisialisasi variabel boolean found = false, variabel x = √n yang dibulatkan dan variabel k =1.
found = false x = ceil (Sqrt(n)) k = 1
3. Lakukan perulangan while sampai syarat variabel found = true terpenuhi.
while (!found)
4. Periksa apakah x2 – k.n adalah akar sempurna dan x2 – k.n ≠ 0. Jika terpenuhi lanjutkan dengan inisialisasi variabel y sama dengan √(x2 – k.n) kemudian lakukan tahap 5. Jika tidak terpenuhi maka increment nilai variabel x.
if (IsSquare(x * x - k * n) && x * x - k * n != 0 y = Sqrt(x * x - k * n)
x++
36
5. Periksa apakah (x + y) – k.n ≠ 0 dan (x – y) – k.n ≠ 0. Jika terpenuhi maka hitung p = (p + q)/k dan q = p – q. Jika tidak terpenuhi maka increment nillai variabel k dan lanjutkan ke tahap 6.
if ((x + y) - k * n != 0 && (x - y) - k * n != 0) p = (x + y) / k
q = x – y
6. Periksa apakah (0 < p < n) dan (0 < q < n). Jika terpenuhi maka inisialisasi variabel boolean found = true dan lanjutkan ke tahap 7. Jika tidak terpenuhi maka kembali ke tahap 5.
if (0 < p && p < n && 0 < q && q < n) found = true;
7. Output nilai variabel p dan q.
return p,q
3.4.2. Pseudocode menghitung kunci publik e
Pseudocode „Function Publik_e‟ adalah implementasi penghitungan kunci publik e
yaitu kunci publik e yang relatif prima terhadap ɸ(n) atau Gcd (e, ɸ(n)) = 1. Function Publik_d(BigInteger totien) //totien = (p-1)*(q-1)
{ e = 2 while (GCD(totien, E) != 1) { e++ } return e }
Gambar 3.9 Pseudocode menghitung kunci publik e
Berikut ini adalah penjelasan tahapan pseudocode menghitung kunci publik e pada Gambar 3.9:
1. Input bilangan ɸ(n) yang bertipe data BigInteger yaitu ɸ(n) = (p– 1).(q– 1).
Function Publik_d(BigInteger totien) totien = (p-1)*(q-1)
2. Inisialisasi variabel e = 2 dan lakukan perulangan while yaitu increment nilai variabel e sampai syarat e relatif prima terhadap ɸ(n) terpenuhi.
e = 2
while (GCD(totien, E) != 1) {
e++ }
return e
3.4.3. Pseudocode menghitung kunci privat d
Pseudocode „Function Privat_d‟ adalah implementasi penghitungan kunci publik d
yaitu menghitung invers dari kunci publik e modulo ɸ(n)
d = e-1 (modɸ(n))
Invers modulo (extended Euclidean) menghitung r = ax + by dan Gcd(a,b) = 1 (a = kunci publik e dan b = ɸ(n)).
Substitusikan ri = axi+ byi ke dalam ri = ri-2 –qiri-1 menjadi:
ri = (axi-2 + byi-2) –qi (axi-1 + byi-1)
atau
ri = a (xi-2–qixi-1) + b (yi-2–qiyi-1)
Untuk selanjutnya hitung xi = xi-2–qixi-1 dan yi = yi-2 –qiyi-1 secara berulang sampai ri
= Gcd(e,ɸ(n)) = 1, sehingga didapat kunci privat d = xi.
Function Privat_d(E,totien) //modInverse (extended Euclidean) { x = 1, y = 0, xLast = 0, yLast = 1 a = E, b = totien while (a != 1) { q = b / a r = b % a c = xLast - q * x d = yLast - q * y xLast = x, yLast = y x = c, y = d b = a, a = r } d = (x + totien) % totien return d }
Gambar 3.10 Pseudocode menghitung kunci privat d
Berikut ini adalah penjelasan pseudocode menghitung kunci privat d pada Gambar 3.10:
1. Input kunci publik e dan ɸ(n) yang bertipe data BigInteger.
2. Inisialisasi variabel x = 1, y = 0 dan xLast = 0, yLast = 1, serta variabel a = kunci publik e dan b = ɸ(n).
3. Lakukan perulangan while dengan menghitung xi= xi-2–qixi-1 dan yi = yi-2 –qiyi- 1 sampai ai= ri = Gcd(a,b) = 1. Jika terpenuhi lanjutkan ke tahap 4.
q = b / a r = b % a
c = xLast - q * x
38
d = yLast - q * y xLast = x, yLast = y x = c, y = d
b = a, a = r
4. Output nilai variabel d merupakan kunci privat d.
d = (x + totien) % totien return d
3.4.4. Pseudocode dekripsi RSA
Pseudocode „Function Dekripsi_RSA‟ adalah implementasi dekripsi RSA yaitu mendekripsikan ciphertext desimal ASCII dengan rumus m = cdmod n menggunakan kunci privat d.
Function Dekripsi_RSA (c, d, n) //c = ciphertext read as line {
for (i = 0; i < c.Length; i++) {
m[i] = modExp (c[i],d,n) //m[i] = c[i]d mod n
} convertTo_stringASCII (m[i]) return m } Function modExp (c,d,n) { z = 1 for (i = 1; i <= d; i++) { z = c.z mod n } return z }
Gambar 3.11 Pseudocode Dekripsi RSA
Berikut ini adalah penjelasan tahapan pseudocode dekripsi RSA pada Gambar 3.11: 1. Input kunci publik n, kunci privat d dan input ciphertext c yang terdiri dari
desimal ASCII sebagai baris (line).
Function Dekripsi_RSA (n, d, c) c = ciphertext read as line
2. Lakukan pengulangan for untuk mendekripsi ciphertext c menjadi plintext m
dengan rumus m = cdmodn.
for (i = 0; i < c.Length; i++) {
m[i] = c[i]d mod n
}
Untuk menghitung m = cd mod n dapat menggunakan function modExp (c, d, n) sebagai berikut:
Function modExp (c,d,n) { z = 1 for (i = 1; i <= d; i++) { z = c.z mod n } return z }
3. Ubah plaintext yang masih dalam bentuk desimal ASCII menjadi plaintext m
dalam bentuk string atau karakter ASCII dan lakukan output berupa plaintext
variabel m.
convertTo_stringASCII (m[i]) return m