• Tidak ada hasil yang ditemukan

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

Dokumen terkait