BAB III
METODE PENELITIAN
3.1 Analisa Masalah
Tujuan utama algoritma Hybrid RSA EL-GAMAL adalah untuk memperkuat tingkat keamanan yang secara detail sudah dijelaskan pada subbab 2.5. Performa algortima RSA dapat dilihat melalui waktu yang diperlukan untuk melakukan pembangkitan kunci, enkripsi dan juga dekripsi. Pengujian perfoma antara algoritma RSA, EL-GAMAL dan Hybrid dilakukan untuk menganalisis perbandingan perfoma antar ketiga algoritma tersebut.
Algoritma RSA memiliki banyak celah keamanan yang memungkinkan terjadinya berbagai jenis metode penyerangan. Metode serangan ini sudah dipaparkan pada subbab 2.3.2, begitu juga dengan algoritma EL-GAMAL yang memiliki celah kemanan. Metode penyerangan algoritma EL-GAMAL juga sudah dijelaskan pada subbab 2.4.2. Algortima Hybrid diharapkan mampu menutupi celah keamanan algoritma RSA dengan menggunakan algoritma EL- GAMAL. Untuk memastikan hal ini, pengujian keamanan dilakukan. Pengujian kemanan antara algoritma RSA, EL-GAMAL dan Hybrid digunakan untuk membandingkan kemaanan ketiga algoritma tersebut. Metode keamanan yang digunakan adalah fermat factorization dan baby step-giant step. Hasil pengujian performa dan pengujian kemanan diharapkan dapat menjadi bahan evaluasi untuk mengukur kualitas hasil ketiga algoritma tersebut dari segi performa mauun keamanan.
3.2 Rancangan Algoritma RSA
Rancangan algoritma RSA ini sesuai dengan algoritma RSA asli pada subbab 2.3. Rancangan ini nantinya diimplementasikan pada program komputer yang ditulis dengan bahasa pemrograman java. Algoritma ini terbagi menjadi tiga mekanisme yang berbeda yang dilakukan secara berurutan.
3.2.1 Pembangkitan Kunci algoritma RSA
Pembangkitan kunci pada algoritma RSA standar diawali dengan membangkitkan dua bilangan prima (p dan q). Jika dua bilangan prima (p dan q) sudah terpilih dilanjutkan menghitung nilai N dengan rumus (2.1) dan menghitung Ф(N) dengan rumus (2.2). Langkah selanjutnya adalah memilih bilangan bulat e secara acak dengan ketentuan faktor persekutuan terbesar (FPB) atau great common divisor (gcd) antara e dan Ф(N) sama dengan satu (lihat rumus (2.3)). Jika nilai e sudah terpilih dilanjutkan dengan perhitungan nilai d.
Hubungan nilai e dan d dituliskan seperti pada rumus (2.4). Pasangan nilai e dan N menjadi kunci publik yang selanjutnya didistribusikan untuk melakukan enkripsi sedangkan pasangan nilai d dan N menjadi kunci privat yang dirahasiakan untuk melakukan dekripsi. Pseudo code proses pembangkitan kunci algoritma RSA standar adalah sebagai berikut:
Gambar 3.1pseudo code pembangkitan kunci algoritma RSA
Proses pembangkitan kunci algoritma RSA membutuhkan input panjang bit bilangan prima dan panjang bit eksponen enkripsi. Input tersebut ditentukan oleh user sesuai dengan pilihan yang sudah disediakan. Panjang bit bilangan prima yang digunakan pada penelitian ini adalah 64 bit, 128 bit dan 256 bit, sedangkan panjang bit eksponen enkripsi yang digunakan pada penelitian ini antara lain berukuran sama dengan bilangan prima (default). Alur proses pembangkitan kunci algoritma RSA standar adalah sebagai berikut:
Input: panjang bit bilangan prima (α), panjang bit eksponen enkripsi (β)
Output: Kpublik, Kprivat
1. Bangkitkan dua bilangan prima berukuran α bit (p dan q)
2. N = p × q
3. Ф(N) = (p - 1) × (q - 1)
4. Pilih bilangan bulat e berukuran β bit dengan gcd(e, Ф(N)) = 1, 1 < e < Ф(N)
5. d = e-1 mod Ф(N)
6. Kpublik = (e, N), Kprivat = (d, N)
Gambar 3.2 alur pembangkitan kunci Algoritma RSA 3.2.2 Enkripsi Algortima RSA
Enkripsi dipergunakan untuk menyandikan pesan sebelum pesan tersebut dikirim melalui saluran jaringan. Sebelum pesan dienkripsi, masing-masing karakter pada pesan diubah menjadi nilai ASCII desimal. Tiap-tiap nilai ASCII ini kemudian diubah menjadi nilai cipher text (C) dengan rumus (2.5) dan digabungkan menjadi satu membentuk pesan terenkripsi. Pseudo code proses enkripsi algoritma RSA standar adalah sebagai berikut:
Gambar 3.3 pseudocode enkripsi algoritma RSA Input: Kpublik = (e, N), plain text (M) Output: cipher text (C)
1. for i ← 0 to PanjangPlaintext - 1 do 2. Konversi Mi ke nilai desimal
3. Ci ← (Mi)e mod N 4. end for
5. Return C
Proses enkripsi memerlukan input kunci publik dari user target penerima pesan dan pesan asli atau plain text (M). User menginput sebuah pesan singkat dan memilih user target penerima pesan. Setiap user memiliki kunci publik yang disebarluaskan melalui saluran jaringan. Nama user beserta kunci publiknya disimpan dalam daftar user online. Daftar user online dimiliki oleh setiap user.
Ketika user memilih user target penerima pesan maka system otomatis menginput kunci publik user tersebut untuk proses enkripsi. Alur proses enkripsi algoritma RSA adalah sebagai berikut:
Gambar 3.4 alur enkripsi algoritma RSA
3.2.3 Dekripsi Algoritma RSA
Dekripsi digunakan untuk mengubah pesan terenkripsi (cipher text atau C) menjadi sebuah pesan asli (plain text atau M). Nilai M dihitung dengan rumus (2.6) untuk tiap nilai C yang ada pada pesan terenkripsi. Nilai M hasil dekripsi berupa nilai desimal yang kemudian diubah menjadi karakter. Penelitian ini Jika pada proses enkripsi nilai desimal karakter diperoleh dari nilai ASCII desimal maka pada dekripsi pengubahan nilai M ke karakter juga dilakukan berdasarkan nilai ASCII. Tiap karakter hasil pengubahan tersebut disatukan kembali sehingga membentuk pesan asli. Pseudo code dekripsi algoritma RSA adalah sebagai berikut:
Gambar 3.5 pseudocode dekripsi algoritma RSA
Proses dekripsi algoritma RSA memerlukan input kunci privat (N,d) dan pesan terenkripsi (C). Setiap user memiliki satu kunci privat yang diperoleh setelah melakukan pembangkitan kunci. Kunci privat tersebut tersimpan secara rahasia dan tidak didistribusikan kepada siapapun. Proses dekripsi dilakukan setiap kali user menerima pesan baru dari user lain. Sistem menginputkan pesan terenkripsi dan kunci privat secara otomatis untuk melakukan dekripsi. Pesan ter enkripsi yang diterima akan direpresentasikan kembali kedalam karakter yang sebelumnya dalam proses enkripsi telah dilakukan konversi kedalam nilai ASCII.
Setelah karakter dari konversi nilai ASCII tersebut akan kembali di susun sebelum di tampilkan kepada socket TCP penerima. Alur proses dekripsi algoritma RSA adalah sebagai berikut:
Input: Kprivat = (d, N), cipher text (C) Output: plain text (M)
1. for i ← 0 to PanjangCiphertext - 1 do 2. Mi ← (Ci)d mod N
3. Konversi nilai Mi ke karakter 4. end for
5. Return M
Gambar 3.6 Alur dekripsi algoritma RSA 3.3 Rancangan Algoritma EL-GAMAL
Rancangan algoritma EL-GAMAL ini sesuai dengan algoritma EL- GAMAL pada subbab 2.4. Rancangan ini nantinya diimplementasikan pada program komputer yang ditulis dengan bahasa pemrograman java. Algoritma ini terbagi menjadi tiga mekanisme yang berbeda yang dilakukan secara berurutan.
3.3.1 Pembangkitan Kunci Algoritma EL-GAMAL
Pembangkitan kunci pada algoritma EL-GAMAL diawali dengan pembangkitan bilangan prima EL-GAMAL pEL dan dua bilangan acak g dan x.
Langkah selanjutnya adalah menghitung nilai y dengan rumus (2.7), hubungan nilai d dan x dituliskan pada rumus (2.7). Pasangan nilai pEL, g dan y menjadi
kunci publik yang selanjutnya didistribusikan untuk proses enkripsi sedangkan nilai x dan pEL menjadii kunci privat yang dirahasiakan untuk proses dekripsi.
Gambar 3.7 pseudo code pebangkitan kunci EL-GAMAL
Proses pembangkitan kunci algoritma EL-GAMAL membutuhkan input panjang bit bilangan prima dan dua bilangan acak yang mempunyai ketentuan panjang bit bilangan prima dikurangi dua. Input tersebut ditentukan oleh user sesuai dengan pilihan yang sudah disediahkan. Panjang bit bilangan prima yang digunakan pada penelitian ini adalah 64 bit, 128 bit dan 256 bit. Alur proses pembangkitan kunci algoritma EL-GAMAL adalah sebagai berikut:
Gambar 3.8 Alur pembangkitan kunci algoritma EL-GAMAL Input: panjang bit bilangan prima EL-GAMAL (α) Output: Kpublik, Kprivat
1. Bangkitkan sebuah bilangan prima berukuran α bit (pEL)
2. Bangkitkan dua bilangan acak g dan x 3. y = gx mod pEL
4. Kpublik = (y, g, pEL), Kprivat = (x, pEL)
3.3.2 Enkripsi Algoritma EL-GAMAL
Enkripsi dipergunakan untuk menyandikan pesan sebelum pesan tersebut dikirim melalui saluran jaringan. Sebelum pesan dienkripsi, masing-masing karakter pada pesan diubah menjadi blok-blok m1, m2,…. Sehingga mempunyai nilai dalam interval 0 sampai nilai bilangan prima EL-GAMAL. Setiap nilai tersebut akan dilakukan enkripsi manjadi dua bagian dalam satu blok pesan sesuai dengan rumus (2.8). Pseudo code proses enkripsi algoritma EL-GAMAL adalah sebagai berikut:
Gambar 3.9 pseudocode enkripsi algoritma EL-GAMAL
Proses enkripsi memerlukan input kunci publik dari user target penerima pesan dan pesan asli atau plain text (M). User menginput sebuah pesan singkat dan memilih user target penerima pesan. Setiap user memiliki kunci publik yang disebarluaskan melalui saluran jaringan. Nama user beserta kunci publiknya disimpan dalam daftar user online. Daftar user online dimiliki oleh setiap user.
Ketika user memilih user target penerima pesan maka system otomatis menginput kunci publik user tersebut untuk proses enkripsi. Pesan asli yang diterima akan di konversi kedalam bilangan ASCII untuk dilakukan proses enkripsi yang berupa blok-blok pesan asli yang sudah dikonversi kedalam nilai ASCII. Alur proses enkripsi algoritma EL-GAMAL adalah sebagai berikut:
Input: Kpublik = (pEL, y, g), plain text (M) Output: cipher text (C)
1. Konversi M ke blok-blok mi
2. Bangkitkan nilai acak k dengan 0≤ k ≤ pEl-1 3. for i ← 0 to PanjangPlaintext - 1 do
4. ai ← gk mod pEL
5. bi ← yk * mi mod pEL 6. Return Ci ← (ai, bi) 7. end for
Gambar 3.10 Alur enkripsi algoritma EL-GAMAL 3.3.3 Dekripsi Algoritma EL-GAMAL
Dekripsi digunakan untuk mengubah pesan terenkripsi (cipher text atau C) menjadi sebuah pesan asli (plain text atau M). Nilai M dihitung dengan rumus (2.9) untuk tiap nilai Ci yang terdiri dari a dan b pada pesan terenkripsi. Nilai M hasil dekripsi berupa nilai desimal yang kemudian diubah menjadi karakter. Jika pada enkripsi nilai C didapat dari kombinasi nilai a dan b maka pada dekripsi pengubahan nilai M ke karakter juga dilakukan berdasarkan nilai a dan b. Tiap karakter hasil pengubahan tersebut disatukan kembali sehingga membentuk pesan asli. Pseudo code dekripsi algoritma EL-GAMAL adalah sebagai berikut:
Gambar 3.11 pseudocode dekripsi algoritma EL-GAMAL Input: Kprivat = (x, pEL), cipher text (C) Output: plain text (M)
1. for i ← 0 to PanjangCiphertext - 1 do 2. Mi ← bi*ai pEl-1-x mod pEL
3. Konversi nilai Mi ke karakter 4. end for
5. Return M
Proses dekripsi algoritma EL-GAMAL memerlukan input kunci privat (x,pEL) dan pesan terenkripsi (C). Setiap user memiliki satu kunci privat yang diperoleh setelah melakukan pembangkitan kunci. Kunci privat tersebut tersimpan secara rahasia dan tidak didistribusikan kepada siapapun. Proses dekripsi dilakukan setiap kali user menerima pesan baru dari user lain. Sistem menginputkan pesan terenkripsi dan kunci privat secara otomatis untuk melakukan dekripsi. Alur proses dekripsi algoritma EL-GAMAL adalah sebagai berikut:
Gambar 3.12 Alur dekripsi algoritma EL-GAMAL
3.4 Rancangan Algoritma Hybrid
Rancangan algoritma Hybrid ini sesuai dengan algoritma Hybrid pada subbab 2.5. Rancangan ini nantinya diimplementasikan pada program komputer yang ditulis dengan bahasa pemrograman java. Algoritma ini terbagi menjadi tiga mekanisme yang berbeda yang dilakukan secara berurutan.
3.4.1 Pembangkitan Kunci Algoritma Hybrid
Pembangkitan kunci pada algoritma Hybrid diawali dengan pembangkitan bilangan prima Hybrid p dan q dan bilangan bulat e. Langkah selanjutnya adalah menghitung nilai d dengan rumus (2.12), hubungan nilai e dan d dituliskan pada rumus (2.12). Bangkitkan bilangan prima pEL dan hitung nilai y dengan rumus (2.13). Pasangan nilai N, e, pEL, g dan y menjadi kunci publik yang selanjutnya didistribusikan untuk proses enkripsi sedangkan nilai d dan x menjadii kunci privat yang dirahasiakan untuk proses dekripsi.
Gambar 3.13 pseudo code pembangkitan kunci Hybrid
Proses pembangkitan kunci algoritma Hybrid membutuhkan input panjang bit bilangan prima, bilangan bulat dan dua bilangan acak yang mempunyai ketentuan panjang bit bilangan prima dikurangi dua. Input tersebut ditentukan oleh user sesuai dengan pilihan yang sudah disediahkan. Panjang bit bilangan prima yang digunakan pada penelitian ini adalah 64 bit, 128 bit dan 256 bit. Alur proses pembangkitan kunci algoritma Hybrid adalah sebagai berikut:
Input: panjang bit bilangan prima Hybrid (α) Output: Kpublik, Kprivat
1. Bangkitkan dua bilangan prima berukuran α bit (p dan q)
2. Bangkitkan bilangan bulat e dengan gcd(e, Ф(N)) = 1
3. Hitung nilai d sehingga e*d ≡ 1 mod Ф(N) 4. Bangkitkan bilangan prima berukuran α bit
(pEL) dengan pEL ≠ e > 0
5. Bangkitkan dua bilangan acak (x dan g) 6. y = gx mod pEL
7. Kpublik = (N, e, y, g, pEL), Kprivat = (d, x, N, pEL)
Gambar 3.14 Alur pembangkitan kunci algoritma Hybrid 3.4.2 Enkripsi Algoritma Hybrid
Enkripsi dipergunakan untuk menyandikan pesan sebelum pesan tersebut dikirim melalui saluran jaringan. Sebelum pesan dienkripsi, masing-masing karakter pada pesan diubah menjadi blok-blok m1, m2,…. Sehingga mempunyai nilai dalam interval 0 sampai nilai bilangan prima pEL. Setiap nilai tersebut akan dilakukan enkripsi manjadi dua bagian dalam satu blok pesan sesuai dengan rumus (2.15), sebelumnya dilakukan perubahan nilai a dengan rumus (2.14).
pesan yang sudah diubah kedalam blok-blok akan dikonversi kedalam bilai ASCII untuk dilakukan proses enkripsi, karena proses komputasi membutuhkan nilai untuk dilakukan proses. Pseudo code proses enkripsi algoritma Hybrid adalah sebagai berikut:
Gambar 3.15 pseudocode enkripsi algoritma Hybrid
Proses enkripsi memerlukan input kunci publik dari user target penerima pesan dan pesan asli atau plain text (M). User menginput sebuah pesan singkat dan memilih user target penerima pesan. Setiap user memiliki kunci publik yang disebarluaskan melalui saluran jaringan. Nama user beserta kunci publiknya disimpan dalam daftar user online. Daftar user online dimiliki oleh setiap user.
Ketika user memilih user target penerima pesan maka system otomatis menginput kunci publik user tersebut untuk proses enkripsi. Alur proses enkripsi algoritma Hybrid adalah sebagai berikut:
Gambar 3. 16 Alur enkripsi algoritma Hybrid
Input: Kpublik = (N, e, pEL, y, g), plain text (M)
Output: cipher text (C)
1. Konversi M ke blok-blok mi
2. Bangkitkan nilai acak k dengan 0≤ k ≤ pEl-1 3. for i ← 0 to PanjangPlaintext - 1 do
4. ai ← gk mod pEL
5. bi ← yk * mi mod pEL 6. cai ← aie mod N
7. Return Ci ← (cai, bi) 8. end for
3.4.3 Dekripsi Algoritma Hybrid
Dekripsi digunakan untuk mengubah pesan terenkripsi (cipher text atau C) menjadi sebuah pesan asli (plain text atau M). Nilai M dihitung dengan rumus (2.9) untuk tiap nilai Ci yang terdiri dari a dan b pada pesan terenkripsi. Nilai M hasil dekripsi berupa nilai desimal yang kemudian diubah menjadi karakter. Jika pada enkripsi nilai C didapat dari kombinasi nilai ca dan b maka pada dekripsi pengubahan nilai M ke karakter juga dilakukan berdasarkan nilai a dan b. Tiap karakter hasil pengubahan tersebut disatukan kembali sehingga membentuk pesan asli. Pseudo code dekripsi algoritma EL-GAMAL adalah sebagai berikut:
Gambar 3.17 pseudocode dekripsi algoritma Hybrid
Proses dekripsi algoritma Hybrid memerlukan input kunci privat (d,x,N,pEL) dan pesan terenkripsi (C). Setiap user memiliki satu kunci privat yang diperoleh setelah melakukan pembangkitan kunci. Kunci privat tersebut tersimpan secara rahasia dan tidak didistribusikan kepada siapapun. Proses dekripsi dilakukan setiap kali user menerima pesan baru dari user lain. Sistem menginputkan pesan terenkripsi dan kunci privat secara otomatis untuk melakukan dekripsi. Hasil dekripsi akan dikonversi kedalam karakter yang sebelumnya masih berupa nilai ASCII, sebelum ditampilkan kepada socket TCP penerima. Alur proses dekripsi algoritma Hybrid adalah sebagai berikut:
Input: Kprivat = (d, x, N, pEL), cipher text (C) Output: plain text (M)
1. for i ← 0 to PanjangCiphertext - 1 do 2. ai ← caid mod N
3. ai-1 ← ai pEL-1-x mod pEL 4. Mi ← bi*ai-1 mod pEL
5. Konversi nilai Mi ke karakter 6. end for
7. Return M
Gambar 3.18 Alur dekripsi algoritma Hybrid 3.5 Rancangan Uji Keamanan
Algoritma RSA dan EL-GAMAL memiliki kerentanan yang dapat dipergunakan untuk melumpuhkan keamanannya. Informasi yang didapatkan dari hasil metode penyerangan ketika berhasil diantaranya adalah menemukan nilai eksponen dekripsi pada kunci privat untuk mendekripsi cipher text (C).
Rancangan uji keamanan ini dipergunakan untuk menganalisis perbandingan keamanan antara algoritma RSA, Algoritma EL-GAMAL dan Algoritma Hybrid.
3.5.1 Fermat Factorization
Fermat Factorization termasuk metode penyerangan yang digunakan menemukan plain text (M) dari cipher text (C) tanpa menggunakan nilai eksponen dekripsi. Fermat Factorization ini sudah dibahas pada subbab 2.3.2.1.
Alur proses Fermat Factorization adalah sebagai berikut:
Gambar 3. 19 Alur Fermat Factorization
Proses fermat factorization diawali dengan menginputkan kunci public.
Proses selanjutnya adalah mencari nilai k dari hasil yang mendekati dari akar dari N, dengan ketentuan k2 > N dan k2-N = h2 jika tidak memenuhi maka nilai k terus dinaikan sampai kondisi tersebut dipenuhi. Nilai p dan q dapat ditentukan jika kondisi diatas terpenuhi, nilai d dapat dihitung dengan rumus d=e-1 modФ(N).
Sistem akan menampilkan bilangan prima (p dan q) dan kunci privat (d)
berdasarkan kunci public (N, e), hasil dari system itu yang akan digunakan untuk mencari plainteks/ pesan (M) dari chiperteks (C) dari Algortima RSA.
3.5.2 Baby step-Giant step
Baby step - Giant step termasuk metode penyerangan yang digunakan menemukan plain text (M) dari cipher text (C) tanpa menggunakan nilai eksponen dekripsi. Baby step - Giant step ini sudah dibahas pada subbab 2.4.2.1.
Alur proses Baby step - Giant step adalah sebagai berikut:
Gambar 3. 20 Alur Baby step-Giant step
Proses baby step-giant step diawali dengan menginputkan kunci publik.
Proses selanjutnya adalah mencari nilai N dari hasil akar prima EL-GAMAL dikurangi 1 ditambah 1 dengan ketentuan nilai N2 lebih besar samadengan nilai prima EL-GAMAL. Berdasarkan nilai N tersebut maka dilakukan proses baby step – giant step, bs= gj mod pEL dan gs= y*g-N*j mod pEL untuk 0 ≤ k ≤ N yang dimana g- = g invers. Selama iterasi itu berjalan nilai bs dan gs melakukan pengondisian dimana jika nilai gs dan bs sama maka index iterasi jadi acuan untuk menentukan nilai dari kunci privat (x), jika belum ada nilai yang sama dari bs dan gs maka proses iterasi akan dilakukan ulang dengan penambahan nilai N++.