4.1 Implementasi
2. RAM 2 GB
43
Implementasi algoritma RSA standar dilakukan dengan membuat sebuah
class khusus yang diberi nama RSA_Standar. Class ini berisi fungsi (method)
untuk pembangkitan kunci, enkripsi, dan dekripsi. Implementasi ini sesuai dengan
rancangan algoritma RSA standar pada sub bab 3.2. Hasil implementasi ini
sebagai bahan uji perfoma dan keamanan algoritmanya.
BigInteger p, q, phi_n;
while(true){
p = pembangkitPrima(panjang_bit);
q = pembangkitPrima(panjang_bit);
if(!p.equals(q))
break;
n = p.multiply(q);
while(true){
if(panjang_bit_e != 0)
44
Random());
else
if((e.gcd(phi_n)).equals(BigInteger.ONE))
break;
d = e.modInverse(phi_n);
Variabel p dan q pada gambar 4.1 diatas menunjukkan bilangan prima. Variabel n
menunjukkan nilai N atau modulus sesuai dengan rumus 2.1. Variabel phi_n
menunjukkan nilai Ф(N) atau euler totient function sesuai dengan rumus 2.2.
Variabel e menunjukkan eksponen enkripsi sesuai dengan rumus 2.3. Variabel d
menunjukkan eksponen dekripsi sesuai dengan rumus 2.4. Parameter panjang_bit
menunjukkan panjang bit bilangan prima sedangkan parameter panjang_bit_e
menunjukkan panjang bit eksponen enkripsi.
45
int ASCII = (int)plaintext.charAt(i);
return ciphertext;
Parameter plaintext pada Gambar 4.2 diatas merupakan pesan asli yang ditulis
oleh user. Variabel ASCII menunjukkan nilai desimal karakter sebagai nilai plain
text (M). Parameter E menunjukkan eksponen enkripsi (e). Parameter N
menunjukkan nilai modulus (N). Variabel C menunjukkan nilai cipher text (C).
Variabel-variabel ini sesuai dengan rumus 2.5. Nilai cipher text tiap karakter
disimpan pada variabel ciphertext. Nilai yang tersimpan pada variabel ciphertext
ini nantinya dikirim ke user tujuan melalui socket TCP.
String plaintext="";
46
String temp="";
if((ciphertext.charAt(i)+"").equals(" ")){
plaintext = plaintext+(char)ASCII;
temp="";
}else{
temp=temp+ciphertext.charAt(i);
return plaintext;
Variabel M pada gambar 4.3 diatas menunjukkan nilai plain text (M). Variabel
temp menunjukkan nilai cipher text (C). Variabel d menunjukkan nilai eksponen
dekripsi (d). Variabel N menunjukkan nilai modulus (N). Variabel-variabel ini
sesuai dengan rumus 2.6. Parameter ciphertext menunjukkan pesan terenkripsi
yang berisi kumpulan nilai C tiap karakter pada pesan asli. Karakter hasil konversi
nilai variabel M tiap cipher text ditampung pada variabel plaintext. Variabel
plaintext akan menyimpan pesan asli hasil dekripsi jika proses dekripsi selesai.
47
4.1.4.1 Implementasi pembangkitan kunci improvisasi algoritma RSA
daftar_bilangan_prima[i] = pembangkitPrima(panjang_bit);
if(verifikasiDaftarBilanganPrima(daftar_bilangan_prima))
break;
n = BigInteger.ONE;
n = n.multiply(daftar_bilangan_prima1);
phi_n =
phi_n.multiply(daftar_bilangan_prima1.subtract(BigInteger.ONE));
while(true){
if(panjang_bit_e != 0)
48
e = new BigInteger(phi_n.bitLength()-panjang_bit_e, new
Random());
else
if((e.gcd(phi_n)).equals(BigInteger.ONE))
break;
d = e.modInverse(phi_n);
49
public String enkripsi(BigInteger E, BigInteger N, String
plaintext){
BigInteger k;
while(true){
if((k.gcd(N)).equals(BigInteger.ONE))
break;
C = C.multiply(k).mod(N);
return cipherteks;
Variabel E pada gambar 4.5 diatas menunjukkan nilai eksponen enkripsi (e).
Variabel N menunjukkan nilai modulus (N). Variabel k menunjukkan bilangan
bulat acak sesuai dengan rumus 2.15. Variabel Ck menunjukkan cipher text k (Ck)
sesuai dengan rumus 2.16. Variabel ASCII menunjukkan nilai desimal karakter
sebagai plain text (M). Variabel C menunjukkan nilai cipher text (C) sesuai
dengan rumus 2.17. Parameter plaintext menunjukkan pesan asli yang ditulis oleh
user. Nilai cipher text k dan nilai cipher text tiap karakter dalam pesan asli
disimpan pada variabel cipherteks. Nilai variabel cipherteks ini nantinya
dikirimkan ke user lain melalui socket TCP.
50
4.1.4.3 Implementasi dekripsi improvisasi algoritma RSA
String Ck="";
int i=0;
while(true){
if((cipher.charAt(i)+"").equals(" "))
break;
else
Ck=Ck+cipher.charAt(i);
i++;
BigInteger t = k.modInverse(n);
String plain="";
String temp="";
if((cipher.charAt(i)+"").equals(" ")){
51
byte ASCII = Byte.parseByte(M.toString());
plain = plain+(char)ASCII;
temp="";
}else{
temp = temp+cipher.charAt(i);
return plain;
Variabel Ck pada gambar 4.6 diatas menunjukkan cipher text k (Ck). Variabel d
menunjukkan nilai eksponen dekripsi (d). Variabel n menunjukkan nilai modulus
(N). Variabel k menunjukkan nilai bilangan bulat sesuai dengan rumus 2.18.
Variabel t menunjukkan nilai bilangan bulat sesuai dengan rumus 2.19. Variabel M
menunjukkan nilai plain text sesuai dengan rumus 2.20. Variabel ASCII
menyimpan hasil konversi nilai M ke karakter. Hasil konversi tiap nilai M ini
disimpan dalam variabel plain. Variabel plain ini nantinya menyimpan pesan asli
jika proses dekripsi selesai.
52
btn_cek.addActionListener((ActionEvent e) -> {
try{
data_cipher.add(BigInteger.valueOf(i).modPow(E, N));
data_ASCII[i] = i;
String temp="";
String plaintext1="";
String plaintext2="";
int jumlah_cipher = 0;
int jumlah_plain = 0;
if((ciphertext.charAt(i)+"").equals(" ")){
if(!temp.equals("")){
if(C.equals(data_cipher.get(j))){
53
//mengubah nilai P menjadi karakter
plaintext2 = plaintext2+(char)data_ASCII[j];
jumlah_plain++;
break;
jumlah_cipher++;
temp="";
}else
temp=temp+ciphertext.charAt(i);
ta4.setText("");
if(!plaintext1.equals("")){
}else{
//hasil gagal
}catch(Exception ex){
54
});
Gambar 4.7: potongan kode sumber aplikasi known plain text test RSA
q_n.add(e.divide(n));
BigInteger r = e.mod(n);
e = n;
n = r;
while(!r.equals(BigInteger.ZERO)){
q_n.add(e.divide(n));
r = e.mod(n);
55
e = n;
n = r;
Variabel q_n pada gambar 4.8 diatas merupakan elemen fraksaksi berkelanjutan
sesuai dengan rumus 2.7. Variabel e menunjukkan nilai eksponen enkripsi (e).
Variabel n menunjukkan nilai modulus (N). Variabel r menunjukkan sisa hasil
pembagian nilai variabel e dengan nilai variabel n. Sub proses berikutnya adalah
membentuk fraksaksi k/d. Sub proses ini dimplementasikan dengan membuat
fungsi (method) fraction_to_fraction. Implementasi ini sesuai dengan pseudo code
pada gambar 3.15. Kode sumber pembentuk fraksaksi k/d adalah sebagai berikut:
k_n.add(q_n.get(0));
d_n.add(BigInteger.ONE);
k_n.add(q_n.get(0).multiply(q_n.get(1)).add(BigInteger.ONE));
d_n.add(q_n.get(1));
k_n.add(q_n.get(i).multiply(k_n.get(i-1)).add(k_n.get(i-2)));
d_n.add(q_n.get(i).multiply(d_n.get(i-1)).add(d_n.get(i-2)));
Variabel k_n dan d_n menunjukkan nilai fraksaksi (k dan d) sesuai dengan rumus
2.8. Variabel k_n menyimpan kumpulan nilai fraksaksi k, sedangkan variabel d_n
56
menyimpan kumpulan nilai fraksaksi d. Metode wiener attack diimplementasikan
dengan membuat fungsi wiener_test. Implementasi ini sesuai dengan pseudo code
pada gambar 3.16. Kode sumber metode wiener attack adalah sebagai berikut:
continue_fraction(e,N);
fraction_to_fraction();
BigInteger phi_n =
(e.multiply(d_n.get(i)).subtract(BigInteger.ONE)).divide(k_n.get(i));
if(!phi_n.equals(BigInteger.ZERO)){
BigInteger b = N.subtract(phi_n).add(BigInteger.ONE);
BigInteger D = (b.pow(2)).subtract(BigInteger.valueOf(4).multiply(N));
BigInteger x1 = (b.add(sqrt(D))).divide(BigInteger.valueOf(2));
BigInteger x2 = (b.subtract(sqrt(D))).divide(BigInteger.valueOf(2));
if((x1.multiply(x2)).equals(N)){
BigInteger d = e.modInverse(phi_n);
return d;
return BigInteger.ZERO;
57
Variabel phi_n pada gambar 4.10 diatas menunjukkan nilai Ф(N) atau euler totient
function. Variabel e menunjukkan nilai eksponen enkripsi (e). Variabel N
menunjukkan nilai modulus (N). Variabel-variabel ini sesuai dengan rumus 2.9.
Variabel ini juga digunakan untuk proses penyelesaian persamaan kuadrat sesuai
dengan rumus 2.10. Variabel x1 dan x2 menyimpan nilai hasil akar persamaan
kuadrat sesuai dengan acuan rumus 2.10. Hasil kali antara nilai variabel x1 dan
nilai variabel x2 yang nilainya sama dengan nilai variabel N menunjukkan wiener
attack berhasil menemukan nilai eksponen dekripsi (d). Variabel d menunjukkan
eksponen dekripsi (d). Nilai variabel ini dihitung dengan rumus 2.4
4.2 Pengujian
58
kunci dengan parameter panjang bit bilangan prima 128 bit dan panjang bit
eksponen enkripsi 128 bit adalah sebagai berikut:
1 63
2 78
3 31
4 62
5 32
Hasil pengujian pada tabel 4.1 menyimpulkan bahwa waktu pembangkitan kunci
terlihat tidak menentu. Hal ini dipengarui oleh kecepatan sistem dalam
membangkitkan bilangan prima. Mula-mula sistem membangkitkan bilangan
ganjil secara acak dengan panjang bit yang sudah diberikan kemudian dilakukan
serangkaian pengujian untuk menentukan status keprimaan bilangan. Jika uji
keprimaan algoritma miller rabin bernilai true maka proses pembangkitan
bilangan prima selesai, sebaliknya jika uji keprimaan algoritma miller rabin
bernilai false maka sistem mengulang proses pembangkitan bilangan prima dari
awal.
59
bilangan prima. Hasil pengujian waktu pembangkitan kunci improvisasi algoritma
RSA dengan parameter panjang bit bilangan prima 128 bit dan panjang bit
eksponen enkripsi 128 bit adalah sebagai berikut:
2 47 125 63 94 171
4 16 78 78 141 156
60
Ada beberapa poin analisa yang dapat diambil dari tabel 4.2 diatas. Waktu
pembangkitan kunci terlihat tidak menentu, hal ini dipengarui oleh proses
pembangkitan bilangan prima. Algoritma miller-rabin bersifat probabilistik
sehingga diperlukan beberapa kali pengujian untuk mendapatkan bilangan yang
150
100
50
0
1 2 3 4 5
hampir prima. Semakin banyak bilangan prima yang digunkan, semakin tinggi
rentang waktu pembangkitan kunci yang diperlukan. Improvisasi algoritma RSA
yang menggunakan 2 bilangan prima memiliki waktu pembangkitan kunci yang
lebih cepat dibandingkan improvisasi algoritma RSA yang menggunakan 6
bilangan prima. Grafik waktu pembangkitan kunci dari tabel 4.1 adalah sebagai
berikut:
Poin analisa yang dapat diambil dari gambar 4.11 yaitu semakin banyak bilangan
prima yang digunakan, waktu pembangkitan kunci semakin lama. Hal ini terlihat
pada grafik 4.1 dimana garis yang mewakili improvisasi algoritma RSA yang
menggunakan 2 bilangan prima menempati posisi bawah sedangkan improvisasi
algoritma RSA yang menggunakan 6 bilangan prima menempati posisi atas.
61
Analisis perbandingan hasil pengujian waktu pembangkitan kunci
dilakukan dengan membandingkan rata-rata waktu pembangkitan kunci pada tiap
panjang bit bilangan prima dan panjang bit eksponen enkripsi (e). Perbandingan
ini dilakukan untuk menganalisis perfoma waktu pembangkitan kunci antara
algoritma RSA standar dan improvisasi algoritma RSA (IRSA). Perbandingan
rata-rata waktu pembangkitan kunci dengan parameter panjang prima 128 bit
adalah sebagai berikut:
Tabel 4.3: Perbandingan rata-rata waktu pembangkitan kunci prima 128 bit
Kesimpulan yang dapat diambil dari tabel 4.3 yaitu waktu pembangkitan kunci
algoritma RSA tidak selalu lebih cepat dari improvisasi algoritma RSA. Waktu
pembangkitan kunci improvisasi algoritma RSA yang menggunakan 2 bilangan
prima lebih cepat daripada algoritma RSA standar pada beberapa parameter
panjang bit eksponen enkripsi yang sama seperti pada parameter panjang bit nilai
Ф(N) dikurangi 4 hingga 2. Hal ini membuktikan bahwa implementasi
62
pembangkitan kunci yang berbeda memperngarui waktu pembangkitan kunci
algoritma meskipun secara konsep sama. Waktu pembangkitan kunci improvisasi
algoritma RSA yang menggunakan 5 dan 6 bilangan prima lebih lama
dibandingkan dengan waktu pembangkitan kunci algoritma RSA standar. Hasil ini
membuktikan bahwa penambahan jumlah penggunaan bilangan prima pada
improvisasi algoritma RSA meningkatkan waktu pembangkitan kunci.
Penggunaan jumlah bilangan prima yang lebih sedikit dapat mengurangi waktu
pembangkitan kunci improvisasi algoritma RSA. Perbandingan rata-rata waktu
pembangkitan kunci dengan parameter prima 256 bit adalah sebagai berikut:
Tabel 4.4: Perbandingan rata-rata waktu pembangkitan kunci prima 256 bit
63
Kesimpulan yang dapat diambil dari tabel 4.4 yaitu waktu pembangkitan kunci
improvisasi algoritma RSA yang menggunakan 2 bilangan prima lebih cepat
dibandingkan algoritma RSA standar. Improvisasi algoritma RSA yang
menggunakan 2 bilangan prima memiliki konsep yang sama dengan algoritma
RSA standar namun memiliki implementasi yang berbeda dari segi kode sumber.
Waktu pembangkitan improvisasi algoritma RSA yang menggunakan 4 hingga 6
bilangan prima lebih lambat dibandingkan algoritma RSA standar. Hasil ini
membuktikan bahwa peningkatan jumlah penggunaan bilangan prima dapat
memperlambat waktu pembangkitan kunci improvisasi algoritma RSA.
1. Panjang bit eksponen enkripsi (e) tidak berpengaruh secara signifikan pada
perfoma waktu pembangkitan kunci. Hal ini ditunjukkan pada tabel 4.3
dimana semakin besar panjang bit nilai e, rata-rata waktu pembangkitan kunci
tidak semakin meningkat atau menurun secara drastis.
64
4.2.2 Pengujian waktu enkripsi
1 50 31 78 78 62
Ada beberapa poin analisa dari hasil pengujian waktu enkripsi pada tabel 4.5 yang
sebagai berikut:
65
terjadi peningkatan waktu enkripsi. Pengujian dengan parameter panjang bit
eksponen enkripsi sama dengan panjang bilangan yang dibangkitkan
memiliki waktu enkripsi yang lebih cepat dibandingkan dengan parameter
panjang bit eksponen enkripsi yang lain. Hasil ini menunjukkan pengaruh
panjang bit eksponen enkripsi.
3. Parameter panjang bit eksponen enkripsi (e) sebesar panjang bit nilai Ф(N)
dikurangi 4 hingga 2 menghasilkan panjang bit yang tidak menentu. Jika
ukuran bilangan prima sebesar 128 bit maka kemungkinan panjang bit nilai
Ф(N) adalah 256 bit atau 255 bit. Hal ini menyebabkan ketidakpastian
panjang bit nilai e sehingga waktu enkripsi yang ditampilkan pada parameter
ini hampir sama atau memiliki selisih yang rendah.
66
prima (ms) (ms) (ms)
2 47 93 78 78
Ada beberapa poin analisa dari hasil pengujian waktu enkripsi pada tabel 4.5 yang
sebagai berikut:
67
menggunakan 2 bilangan prima. Waktu enkripsi improvisasi algoritma RSA
yang menggunakan 2 hingga 6 bilangan prima terlihat selalu mengalami
peningkatan.
2. Nilai Ф(N) pada improvisasi algoritma RSA dihitung sesuai dengan rumus
2.12. Peningkatan jumlah penggunaan bilangan prima menyebabkan nilai
Ф(N) semakin besar sehingga panjang bit yang dihasilkan semakin besar.
Faktor ini berdampak ketika panjang bit nilai e setara dengan panjang bit nilai
Ф(N) dikurangi 2 hingga 4. Improvisasi algoritma RSA yang menggunakan 2
bilangan prima tidak mengalami kenaikan waktu enkripsi yang cukup besar
dari parameter default hingga panjang bit nilai Ф(N) dikurangi 4 sedangkan
improvisasi algoritma RSA yang menggunakan 6 bilangan prima mengalami
kenaikan waktu enkripsi yang sangat besar dari parameter default hingga
panjang bit nilai Ф(N) dikurangi 4.
68
Tabel 4.7: Hasil perbandingan rata-rata waktu enkripsi prima 128 bit
IRSA (2 prima) 74
69
IRSA (4 prima) 1232.5
Kesimpulan yang dapat diambil pada tabel 4.7 yaitu waktu enkripsi algoritma
RSA standar lebih cepat dibandingkan dengan improvisasi algoritma RSA, hal ini
dikarenakan proses enkripsi algoritma RSA standar lebih sedikit dibandingkan
dengan proses enkripsi improvisasi algoritma RSA. Rata-rata waktu enkripsi
improvisasi algoritma RSA yang menggunakan 2 hingga 6 bilangan prima selalu
mengalami peningkatan tiap panjang karakter. Improvisasi algoritma RSA yang
menggunakan 6 bilangan prima memiliki rata-rata waktu enkripsi paling besar.
Perbandingan rata-rata waktu enkripsi dengan parameter panjang bit bilangan
prima 256 bit adalah sebagai berikut:
Tabel 4.8: Hasil perbandingan rata-rata waktu enkripsi prima 256 bit
70
IRSA (3 prima) 2480.75
Kesimpulan yang dapat diambil pada tabel 4.8 yaitu waktu enkripsi algoritma
RSA standar lebih cepat dibandingkan dengan improvisasi algoritma RSA, hal ini
dikarenakan proses enkripsi algoritma RSA standar lebih sedikit dibandingkan
dengan proses enkripsi improvisasi algoritma RSA. Rata-rata waktu enkripsi
improvisasi algoritma RSA yang menggunakan 2 hingga 6 bilangan prima selalu
mengalami peningkatan tiap panjang karakter. Improvisasi algoritma RSA yang
menggunakan 6 bilangan prima memiliki rata-rata waktu enkripsi paling besar.
71
2. Panjang bit bilangan prima memperngarui cepat lambatnya waktu enkripsi.
Waktu enkripsi algoritma RSA standar dan improvisasi algoritma RSA yang
menggunakan bilangan prima 128 bit lebih cepat dibandingkan dengan
menggunakan bilangan prima 256 bit.
1 50 78 78 78 94
72
Poin analisa yang dapat diambil dari tabel 4.9 diatas yaitu selisih waktu dekripsi
antar parameter panjang bit eksponen enkripsi (e) tidak terlalu besar. Peningkatan
panjang bit nilai e tidak menyebabkan penaikan atau penurunan waktu dekripsi
secara drastis. Hal ini menunjukkan bahwa panjang bit nilai e tidak memperngarui
waktu dekripsi.
2 78 78 94 93
73
4 968 967 998 998
Ada beberapa poin analisa dari hasil pengujian waktu enkripsi pada tabel 4.10
yang sebagai berikut:
2. Ketika panjang bit eksponen enkripsi (e) ditingkatkan menjadi panjang bit
nilai Ф(N) dikurangi 2 hingga 4, waktu dekripsi sebagian besar mengalami
penurunan. Namun penurunan waktu dekripsi tersebut tidak terlalu besar.
Penurunan waktu dekripsi terjadi pada improvisasi algoritma RSA yang
menggunakan 5 dan 6 bilangan prima sedangkan pada improvisasi algoritma
RSA yang menggunakan 2 hingga 4 bilangan prima tidak dapat disumpulkan
secara pasti perubahan waktu dekripsi ketika panjang bit nilai e ditingkatkan.
74
Analisis waktu enkripsi dilakukan dengan membandingkan nilai rata-rata
waktu enkripsi antara algoritma RSA standar dan improvisasi algoritma RSA pada
tiap panjang karakter pesan. Nilai rata-rata waktu enkripsi diambil mulai dari
parameter panjang bit nilai e setara dengan panjang bit bilangan prima yang
dibangkitkan (default) hingga setara dengan panjang bit nilai Ф(N) dikurangi 2.
Hasil perbandingan rata-rata waktu enkripsi algoritma RSA dan improvisasi
algoritma RSA adalah sebagai berikut:
RSA Standar 82
75
IRSA (2 prima) 167.5
Kesimpulan yang dapat diambil dari tabel 4.11 yaitu waktu dekripsi algoritma
RSA standar lebih cepat dibandingkan improvisasi algoritma RSA. Improvisasi
algoritma RSA memiliki banyak langkah untuk melakukan dekripsi seperti yang
dijelaskan pada sub bab 2.3.3 sedangkan algoritma RSA standar memiliki langkah
yang lebih sedikit untuk melakukan dekripsi seperti yang dijelaskan pada sub bab
2.3.1. Rata-rata waktu dekripsi improvisasi algoritma RSA yang menggunakan 2
hingga 6 bilangan prima selalu mengalami peningkatan. Improvisasi algoritma
RSA yang menggunakan 6 bilangan memiliki rata-rata waktu dekripsi yang paling
besar pada pengujian ini. Hasil perbandingan rata-rata waktu dekripsi dengan
parameter bilangan prima 256 bit adalah sebagai berikut:
76
RSA Standar 508.75
Kesimpulan yang dapat diambil dari tabel 4.12 yaitu waktu dekripsi algoritma
RSA standar lebih cepat dibandingkan improvisasi algoritma RSA. Rata-rata
waktu dekripsi dengan parameter bilangan prima 256 bit sebagian besar lebih dari
1000 ms atau melebihi 1 detik. Rata-rata waktu dekripsi improvisasi algoritma
RSA yang menggunakan 2 hingga 6 bilangan prima selalu mengalami
77
peningkatan. Improvisasi algoritma RSA yang menggunakan 6 bilangan memiliki
rata-rata waktu dekripsi yang paling besar pada pengujian ini.
1. Waktu dekripsi algoritma RSA standar lebih cepat jika dibandingkan dengan
improvisasi algoritma RSA. Hal ini dikarenakan komputasi untuk melakukan
dekripsi pada improvisasi RSA lebih banyak dibandingkan komputasi untuk
melakukan dekripsi pada algoritma RSA standar.
78
mencakup waktu enkripsi dan dekripsi. Pengujian ini digunakan untuk melihat
estimasi waktu yang diperlukan algoritma untuk melakukan enkripsi dan dekripsi.
Waktu pengiriman pesan juga mencakup waktu pengiriman pesan melalui socket
TCP. Hasil pengujian waktu pengiriman pesan algoritma RSA standar dengan
parameter bilangan prima 128 bit adalah sebagai berikut:
Tabel 4.13: Hasil pengujian waktu pengiriman pesan prima 128 bit
Poin analisa yang dapat diambil dari tabel 4.13 yaitu ketika panjang bit eksponen
enkripsi (e) ditingkatkan menjadi setara dengan panjang bit nilai Ф(N) dikurangi 2
hingga 4, waktu pengiriman pesan menjadi semakin lama. Peningkatan waktu
pengiriman tersebut menunjukkan bahwa peningkatan panjang bit nilai e tidak
berdampak terjadinya penurunan waktu dekripsi sehingga waktu pengiriman
pesan mengalami peningkatan. Waktu pengiriman pesan tercepat terjadi pada
parameter panjang bit eksponen enkripsi (e) sama dengan 128 bit (default).
79
Pengujian waktu pengiriman pesan pada improvisasi algoritma RSA
standar dilakukan dalam beberapa kali pengujian dengan pengaturan parameter
panjang bit bilangan prima dan panjang bit eksponen enkripsi yang berbeda. Hasil
pengujian keseluruhan dapat dilihat di lampiran 8. Waktu pengriman pesan sudah
mencakup waktu enkripsi dan dekripsi. Pengujian ini digunakan untuk melihat
estimasi waktu yang diperlukan algoritma untuk melakukan enkripsi dan dekripsi.
Waktu pengiriman pesan juga mencakup waktu pengiriman pesan melalui socket
TCP. Hasil pengujian waktu pengiriman pesan improvisasi algoritma RSA dengan
parameter bilangan prima 128 bit adalah sebagai berikut:
Tabel 4.14: Hasil pengujian waktu pengiriman pesan prima 128 bit
80
3 680 904 912 949
Ada beberapa poin analisa dari hasil pengujian waktu enkripsi pada tabel 4.14
yang sebagai berikut:
81
perbandingan rata-rata waktu dekripsi algoritma RSA dan improvisasi algoritma
RSA adalah sebagai berikut:
Tabel 4.15: Perbandingan rata-rata waktu pengiriman pesan prima 128 bit
82
Kesimpulan yang dapat diambil dari 4.15 yaitu algoritma RSA standar memiliki
waktu pengiriman yang lebih cepat dibandingkan dengan improvisasi algoritma
RSA. Hasil membuktikan bahwa algoritma RSA standar memiliki estimasi waktu
enkripsi dan dekripsi yang lebih sedikit dibandingkan dengan algoritma RSA
standar. Rata-rata waktu pengiriman pesan pada improvisasi algoritma RSA yang
menggunakan 2 hingga 6 bilangan prima selalu mengalami peningkatan.
Peningkatan jumlah penggunaan bilangan prima pada improvisasi algoritma RSA
menyebabkan meningkatnya estimasi waktu enkripsi dan waktu dekripsi. Hasil
perbandingan rata-rata waktu pengiriman pesan pada parameter bilangan prima
256 bit adalah sebagai berikut:
Tabel 4.16: Perbandingan rata-rata waktu pengiriman pesan prima 256 bit
RSA Standar 82
83
IRSA (6 prima) 3024.75
Kesimpulan yang dapat diambil dari 4.16 yaitu algoritma RSA standar memiliki
waktu pengiriman yang lebih cepat dibandingkan dengan improvisasi algoritma
RSA. Hasil membuktikan bahwa algoritma RSA standar memiliki estimasi waktu
enkripsi dan dekripsi yang lebih sedikit dibandingkan dengan algoritma RSA
standar. Improvisasi algoritma RSA yang menggunakan 6 bilangan prima
memiliki rata-rata waktu pengiriman pesan yang paling besar. Rata-rata waktu
pengiriman pesan tersebut lebih dari 1000 ms atau lebih dari 1 detik sehingga
waktu pengiriman pesan relatif lama.
84
algoritma RSA yang menggunakan bilangan prima 128 bit lebih cepat
dibandingkan dengan yang menggunakan bilangan prima 256 bit.
Pengujian known plain text attack pada algoritma RSA dilakukan dengan
memanfaatkan informasi dari server socket seperti yang sudah dijelaskan pada sub
bab 1.5.4 poin ke 2. Pengujian ini dilakukan dua kali dengan parameter bilangan
prima 128 bit dan 256 bit. Hasil pengujian ini secara keseluruhan dapat dilihat di
lampiran 9. Hasil pengujian known plain text pada algoritma RSA adalah sebagai
berikut:
Tabel 4.17: Hasil pengujian known plain text attack prima 128 bit
1 50 189 ms 100 %
Kesimpulan yang dapat diambil dari hasil pengujian known plain text attack pada
tabel 4.17 yaitu algoritma RSA standar sangat rentan terhadap known plain text
attack. Hal ini dibuktikan dengan prosentase keberhasilan sebesar 100 persen
pada semua pengujian. Waktu eksekusi program yang ditampilkan tergolong
85
efektif sehingga metode penyerangan known plain text attack dapat meruntuhkan
keamanan algoritma RSA standar dalam waktu singkat.
Tabel 4.18: Hasil pengujian known plain text attack prima 128 bit
(2 - 8) 100 %
1 2 6832
(9 - 21) 0%
(2 - 9), 12 100 %
2 3 13916
(10 - 11), (13-21) 0%
(2 - 7) 100 %
3 4 20966
(8 - 21) 0%
(2 - 8) 100 %
4 5 31278
(9 - 21) 0%
(2 - 8) 100 %
5 6 42230
(9 - 21) 0%
Kesimpulan yang dapat diambil dari 4.18 yaitu metode known plain text attack
berhasil menemukan plain text pada interval panjang bit k 2 hingga 8 bit. Ketika
panjang bit bilangan acak k sangat kecil maka nilai k dapat ditemukan pada
86
rentang nilai 0 - 255. Apabila nilai k berhasil ditemukan maka sangatlah mudah
untuk mengetahui plain text tersembunyi dari cipher text yang diinputkan hanya
dengan kunci publik (N,e). Hal ini menyimpulkan bahwa improvisasi algoritma
rentan dari analisis known plain text attack jika panjang bit bilangan acak k untuk
enkripsi sangat kecil.
Known plain text attack digunakan untuk menemukan teks asli (plain
text) tanpa menggunakan kunci privat. Pengujian known plain text attack pada
algoritma RSA standar menunjukkan prosentase keberhasilan 100 persen,
sedangkan pada improvisasi algoritma RSA rata-rata menunjukkan prosentase
keberhasilan 100 persen pada bit nilai k 2 hingga 8 bit. Hal ini menunjukkan
bahwa algoritma RSA standar memiliki kerentanan terhadap analisis known plain
text attack yang lebih tinggi dibandingkan dengan improvisasi algoritma RSA.
Improvisasi algoritma RSA terbukti lebih aman terhadap known plain text attack
daripada algoritma RSA standar.
87
Tabel 4.19: Hasil pengujian wiener attack prima 128 bit
Kesimpulan yang dapat diambil dari hasil pengujian wiener attack pada tabel 4.19
diatas yaitu Wiener attack tidak selalu berhasil menemukan nilai d ketika nilai d <
N1/4, hal ini dibuktikan dengan adanya pasangan kunci yang tidak berhasil
dipecahkan oleh wiener attack pada hasil diatas. Peningkatan nilai d
menyebabkan semakin sedikit nilai d yang dapat dipecahkan dari setiap invertal
sebaliknya penurunan nilai d menyebabkan semakin banyak nilai d yang dapat
ditemukan dari setiap interval. Keberhasilan wiener attack dalam memecahkan
nilai d pada algoritma RSA standar dipengarui oleh besar kecilnya nilai d pada
kunci kunci privat. Nilai d yang sangat kecil sangat mudah dipecahkan oleh
wiener attack, hal ini dibuktikan dengan jumlah kunci privat yang berhasil
dipecahkan yang semakin menurun mulai dari interval d yang pertama hingga
kelima.
88
lampiran 12. Hasil pengujian wiener attack pada improvisasi aadalah sebagai
berikut:
Tabel 4.20: Hasil pengujian wiener attack improvisasi RSA 2 prima 128 bit
Kesimpulan yang dapat diambil pada hasil pengujian wiener attack pada tabel
4.20 diatas yaitu wiener attack berhasil memecahkan semua kunci privat yang
memenuhi syarat d < N1/4. Prosedur pemilihan bilangan prima yang digunakan
improvisasi algoritma RSA yang menggunakan 2 bilangan prima membuatnya
sangat rentan terhadap analisis wiener attack. Hasil ini membuktikan bahwa
keberhasilan wiener tidak hanya dipengarui oleh nilai d yang sangat kecil tetapi
juga dipengarui oleh prosedur pemilihan bilangan prima yang digunakan. Hasil
pengujian wiener attack pada improvisasi algoritma RSA yang menggunakan 3
bilangan prima dengan parameter bilangan prima 128 bit adalah sebagai berikut:
Tabel 4.21: Hasil pengujian wiener attack improvisasi RSA 3 prima 128 bit
89
No Interval d Berhasil Gagal Waktu eksekusi (ms)
Kesimpulan yang dapat diambil dari hasil pengujian wiener attack pada tabel 4.21
diatas yaitu wiener attack tidak dapat memecahkan nilai d sama sekali meskipun
nilai d < N1/4. Hasil ini membuktikan bahwa improvisasi algoritma RSA aman dari
analisis wiener attack ketika jumlah bilangan prima yang digunakan lebih dari 2.
Keberhasilan wiener attack dalam memecahkan nilai d dipengarui oleh jumlah
penggunaan bilangan prima.
Wiener attack digunakan untuk menemukan nilai d pada kunci privat dari
sepasang nilai kunci publik (N,e). Ada beberapa poin yang dapat disimpulkan dari
pengujian wiener attack yang telah dilakukan pada algoritma RSA standar dan
improvisasi algoritma RSA sebagai berikut:
90