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 KraitchikBigInteger n {
found = false x = ceil Sqrtn
k = 1 while found
{ if IsSquarex x - k n x x - k n = 0
{ y = Sqrtx 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 KraitchikBigInteger n
2. Inisialisasi variabel boolean found = false, variabel x = √n yang dibulatkan dan
variabel k =1.
found = false x = ceil Sqrtn
k = 1
3. Lakukan perulangan while sampai syarat variabel found = true terpenuhi.
while found
4. Periksa apakah x
2
– k.n adalah akar sempurna dan x
2
– k.n ≠ 0. Jika terpenuhi lanjutkan dengan inisialisasi variabel y sama dengan
√x
2
– k.n kemudian lakukan tahap 5. Jika tidak terpenuhi maka increment nilai variabel x.
if IsSquarex x - k n x x - k n = 0 y = Sqrtx x - k n
x++
Universitas Sumatera Utara
5. Periksa apakah x + y – k.n ≠ 0 dan x – y – k.n ≠ 0. Jika terpenuhi maka
hitung p = p + qk 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_dBigInteger totien totien = p-1q-1 {
e = 2 while GCDtotien, 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_dBigInteger totien totien = p-1q-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 GCDtotien, E = 1
{ e++
}
3.
Output nilai variabel e.
Universitas Sumatera Utara
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 Gcda,b = 1 a =
kunci publik e dan b = ɸn.
Substitusikan r
i
= ax
i
+ by
i
ke dalam r
i
= r
i-2
– q
i
r
i-1
menjadi: r
i
= ax
i-2
+ by
i-2
– q
i
ax
i-1
+ by
i-1
atau r
i
= a x
i-2
– q
i
x
i-1
+ b y
i-2
– q
i
y
i-1
Untuk selanjutnya hitung x
i
= x
i-2
– q
i
x
i-1
dan y
i
= y
i-2
– q
i
y
i-1
secara berulang sampai r
i
= Gcde, ɸn = 1, sehingga didapat kunci privat d = x
i
.
Function Privat_dE,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
x
i
= x
i-2
– q
i
x
i-1
dan y
i
= y
i-2
– q
i
y
i- 1
sampai a
i
= r
i
= Gcda,b = 1. Jika terpenuhi lanjutkan ke tahap 4.
q = b a r = b a
c = xLast - q x
Universitas Sumatera Utara
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 = c
d
mod 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 = c
d
mod n.
for i = 0; i c.Length; i++ {
m[i] = c[i]
d
mod n }
Untuk menghitung m = c
d
mod n dapat menggunakan function modExp c, d, n sebagai berikut:
Universitas Sumatera Utara
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
3.5. Perancangan Antarmuka Sistem System Interface