IMPLEMENTASI ALGORITMA ELGAMAL PADA
JWS UNTUK KEAMANAN LAYANAN
API APLIKASI ABSENSI LPKIA
1Andy Victor Pakpahan, 2Sangga Buana
1,2 Program Studi Teknik Informatika, STMIK LPKIA
Jln. Soekarno Hatta No. 456 Bandung 40266, Telp. +62 22 75642823, Fax. +62 22 7564282 Email : 1[email protected], 2[email protected].
ABSTRAK
API (Aplication Programming Interface) merupakan sebuah layanan antarmuka yang memungkinkan berbagai aplikasi untuk berkomunikasi melakukan pertukaran data (Leonardo Richardson dkk, 2013). Salah satu bentuk dari API adalah JSON (javascript object notation) yang memiliki karakteristik lebih ringan dari format lainnya, selain itu json menyajikan data dalam bentuk objek yang memudahkan dalam pengolahan serta pengambilan data. Data bisa berwujud suatu keadaan, gambar, suara, huruf, angka, matematika, bahasa ataupun simbol-simbol lainnya yang bisa kita gunakan sebagai bahan untuk melihat lingkungan, obyek, kejadian ataupun suatu konsep. Data yang sudah dikelola pada tempat , waktu, dan dengan format yang tepat dapat menghasilkan sebuah informasi yang berguna untuk berbagai user (Hitesh Gupta, 2011). Dari waktu ke waktu data yang dihasilkan di sebuah aplikasi web dan mobile semakin banyak. Sebagian dari data tersebut adalah data pribadi dan data keuangan yang bersifat sensitif dan sangat penting sehingga perlu untuk diamankan. JSON API digunakan sebagai interface untuk melakukan pertukaran data – data tersebut. JSON API tanpa keamanan sangatlah rentan untuk diserang. Memungkinkan tejadinya manipulasi data melalui JSON API karena dapat diakses melalui URL dengan protocol HTTP/HTTPS.
Untuk meminimalkan kemungkinan terjadinya manipulasi tersebut maka dibuatkan mekanisme keamanan JWS dengan algoritma ElGamal yang dapat memberikan jaminan kemanan pada JSON API
.
Kata kunci: JSON API, JWS, ElGamal. *) = pembimbing
I. PENDAHULUAN
Aplikasi yang berkomunikasi melalui sebuah interface JSON API memiliki kerentanan kemanan karena JSON API mengizinkan penggunan API walaupun tanpa menggunakan mekanisme keamanan (unsecured json) seperti autorisasi pada request dan token serta enkripsi konten , hal ini menyebabkan unsecured json sangat rentan untuk diserang karena json berada pada layer aplication dengan protokol HTTP / HTTPS yang memungkinkan siapa saja dapat mengakses json yang tersedia melalui web browser. Dengan kemunkinan tersebut, API membutuhkan mekanisme keamanan, tidak hanya mekanisme keamanan pada lapisan transport dan lapisan network saja, tapi juga dibutuhkan mekanisme keamanan berbasis objek pada lapisan application. Semua itu dilakukan untuk mengurangi terjadinya pencurian dan manipulasi data yang tidak diinginkan oleh
developer, kebocoran data pernah terjadi pada website Pribadi Kim Kardashian West yang disebabkan API yang tidak diamankan. CEO sekaligus Co-founder dari Communly yang merupakan developer dari apilkasi terebut menyatakan “Membiarkan API server dalam keadaan tidak terproteksi, yang memungkinkan siapa saja untuk mendapatkan rincian tentang pengguna yang terdaftar pada situs Kardashian / Janner”. Hal itu membuat bocornya data sensitif pengguna web tersebut. Kesadaran devolper untuk mengamankan API mereka sangatlah rendah, 65 persen dari 250 praktisi keamanan mengakui bahwa mereka tidak memiliki proses di tempat untuk memastikan bahwa data yang diakses oleh aplikasi yang menkonsumsi API yang mereka kelola adalah aman. (Blackhat Conference 2015, Alkana), Membiarkan API telanjang dan tanpa memberi pembatasan akses sangatlah buruk, bahkan developer tidak akan pernah tau apakah data mereka dicuri atau data mereka telah dimanipulasi oleh pihak lain.
II. DASAR TEORI 1. API
API (Aplication Programming Interface) merupakan sebuah layanan antarmuka yang memungkinkan berbagai aplikasi untuk berkomunikasi melakukan pertukaran data dan layanan.
Menurut Leonardo Richardson, Mike Amundsen, Sam Ruby (dalam Restfull Web APIs, 2013) Api merupakan singkatan dari Aplication Programming Interface. Sebuah api dapat menyediakan sambungan untuk developer pihak ketiga untuk mengakses data dan layanan saat membangun aplikasi seperti aplikasi iphone.
Menururt Sanjay Patni (dalam Design, Build and Integrate with REST, JSON, XML and JAX-RS, 2017). Api bukanlah hal yang baru. API telah menjadi sebuah layanan antarmuka yang mengizinkan berbagai aplikasi untuk berkomunikasi satu sama lain dalam beberapa dekade ini. (Leonardo Richardson, 2013)
2. JSON
JSON merupakan singkatan dari javascript object notation, Json adalah format pertukaran data berbasis text yang ringan dan mudah dipahami manusia maupun dicerna dan dikonsumsi oleh komputer. JSON dirancang untuk mewakili struktur data sederhana (Chris Snyder, 2011)
JSON adalah format pertukaran data, yang mudah untuk dibaca dan dituliskan serta mudah untuk diraikan dan digenerate oleh mesin. JSON text merapakan bahasa pengkodean seperti java, C, dan javascript (vohra, 2015)
3. ELGAMAL
Elgamal ditemukan oleh ilmuwan Mesir, yaitu Taher ElGamal pada tahun 1985, merupakan algoritma kriptografi kunci publik. Algoritma ElGamal terdiri dari tiga proses, yaitu proses pembentukan kunci, enkripsi, dan deskripsi. A . Pembentukan Kunci
Skema ElGamal memerlukan sepasang kunci yang dibangkitkan dengan memilih sebuah bilangan prima p dan dua buah bilangan random g dan x. Nilai g dan x lebih kecil dari p yang memenuhi persamaan :
𝑦 = 𝑔𝑥 𝑚𝑜𝑑 𝑝
Dari persamaan tersebut y, g dan p merupakan kunci publik dan x adalah kunci rahasia.
B. Proses Enkripsi
Proses enkripsi merupakan proses mengubah pesan asli (plaintext) menjadi pesan rahasia (ciphertext). Pada proses ini digunakan kunci publik (p, g, y). Langkah-langkah dalam mengenkripsi pesan adalah sebagai berikut. 1. Potong plaintext menjadi blok-blok m1, m2,
…, nilai setiap blok di dalam selang [0, p – 1].
2. Ubah nilai blok pesan ke dalam nilai ASCII. 3. Pilih bilangan acak k, dengan syarat 1 ≤
𝑘 ≤ 𝑝 – 2.
4. Setiap blok m dienkripsi dengan rumus
sebagai berikut.
gamma (𝛾) = 𝑔𝑘 𝑚𝑜𝑑 𝑝 .(1) delta (𝛿) =
𝑦𝑘 𝑚 𝑚𝑜𝑑 𝑝. (2)
5. Susun ciphertext dengan urutan γ1,δ1, γ2,δ2,…,γn,δn.
Pasangan γ dan δ adalah cipherteks untuk blok pesan m. Hasil yang didapat dari proses enkripsi berupa pesan rahasia (ciphertext).
C. Proses Dekripsi
Proses dekripsi merupakan proses mengubah pesanrahasia (ciphertext) menjadi pesan asli (plaintext). Padaproses ini digunakan kunci pribadi (x, p). Langkah-langkah dalam mendekripsi pesan adalah sebagai berikut. 1. Penentuan nilai gamma dan delta. Nilai
gamma (γ) diperoleh dari ciphertext dengan urutan ganjil sedangkan delta (δ) dengan urutan genap.
2. Hitung plaintext m dengan persamaan rumus berikut
𝑚 = 𝛿. 𝛾 (𝑝−1−𝑥)𝑚𝑜𝑑 𝑝 (3)
3. Ubah nilai m yang didapat kedalam nilai ASCII.
4. Susun plaintext dengan urutan m1,m2, ..m3
III. ANALISA DAN PERANCANGAN
Spesifikasi JWA mendefinisikan daftar standar algoritma yang dapat digunakan para developer untuk signature atau enkripsi.
Contoh algoritma digital signature JWA adalah sebagai berikut:
"alg" Value Signature Method NONE No Digital Signature HS256 HMAC w/ SHA-256 hash HS384 HMAC w/ SHA-384 hash HS512 HMAC w/ SHA-512 hash RS256 RSA PKCS v1.5 w/ SHA-256 hash
RS384 RSA PKCS v1.5 w/ SHA-384 hash
RS512 RSA PKCS v1.5 w/ SHA-512 hash
ES256 ECDSA w/ P-256 curve and SHA-256 hash
ES384 ECDSA w/ P-384 curve and SHA-384 hash
ES512 ECDSA w/ P-521 curve and SHA-512 hash
Workflow JSON
Dalam implementasinya JSON API bertukar data melalui protokol HTTP / HTTPS yang bisa diakses menggunkan metode GET, POST, PUT, dan sebagainya. Dalam aplikasi absensi LPKIA ini metode yang digunakan adalah POST.
Pemodelan Class
Proses Ekripsi pada Elgamal
- Menyiapkan Kunci publik, P , G, X. dan text sebagai input, P adalah bilangan prima acak dimana p harus lebih besar dari 255. G adalah bilangan acak dimana G harus lebih kecil dari nilai P. dan X adalah bilangan acak dengan syarat lebih besar dari 0 dan lebih kecil atau sama dengan (P- 1) - Menghitung y, dimana 𝑦 = 𝑔𝑥 𝑚𝑜𝑑 𝑝
- Melakukan pemecahan text per string / per karakter
- Setiap karakter yang dipecah dari text diubah menjadi bilangan ASCII
- Kemudian menghitung a, dimana a = g*k*I mod p
- Menghitung b, dimana b = y*k*I mod p - Kemudian memasukan nilai a,b kedalam
blok a
- Membandingkan panjang text dengan panjang blok a, jika tidak sama maka akan kembali ke langkah 5 secara berulang dan akan berhenti jika panjang text sama dengan a
- Jika perulangan telah dilakukan maka akan menampilkan nilai dari blok a
Proses Dekripsi pada Elgamal
- Simbol P , X. dan chippertext sebagai input, P adalah bilangan prima acak dimana p harus lebih besar dari 255 dengan ketentuan nilai p harus sama dengan nilai p yang ada pada enkripsi.. dan X adalah bilangan acak dengan syarat lebih besar dari 0 dan lebih kecil atau sama dengan (P- 1) , nilai x harus sama dengan nilai x yang ada pada enkripsi - Chipertext dipecah per 2 karaketer yang
dipisahkan oleh spasi, karakter bilangan ascii yang disebalah kiri adalah ai dan yang disebalah kanan adalah bi, contoh bilangan ascii : 31 201 137 82. Maka dipecah menjadi a. 31 201
b. 137 82
31 adalah ai untuk bilangan ascii a dan 201 adalah bi untuk nilai ascii a
137 adalah ai untuk bilangan ascii b dan 201 adalah bi untuk nilai ascii b
- Kemudian menghiung mi , dengan rumus 𝑚𝑖 = 𝑏𝑖. 𝑎𝑖𝑝−1−𝑥 𝑚𝑜𝑑 𝑝.
- Hasil mi adalah nilai ascii , kemudian diubah menjadi string.
- Memasukan mi kedalam variable hasil string - Melakukan pengecekan panjang hasil string
sama dengan panjang chipper text, jika panjang tidak sama maka akan melakukan perulangan. Jika panjang telah sama maka akan melakukan print hasil enkripsi
Pada Library JWS menggunakan algoritma elgamal menghasilkan struktur file sebagai berikut.
Penggunaan
Proses dibagi menjadi dua, yaitu proses sign dan verify. Kedua fungsi tersebut
dideklarasikan didalam web aplication (aplikasi web absensi front end) dan API web service nya
Interaksi web application, api service , dan JWS
1. Public key ,payload dan header yang diapanggil di web aplication akan melakukan proses signin
2. Setelah proses signin akan dihasilkan encode beserta digital signature yang nilainya akan dikembalikan ke web aplication
3. Web aplication melakukan permintaan dengan metode POST ke API web service, sekaligus mengirimkan data enkripsi (signature, payload / data, header)
4. API web service memanggil private key
5. API web service memanggil fungsi verify yang ada pada JWS
6. JWS melakukan verify dan decode, kemudian mengembalikan nilai yang merupakan data hasil dekripsi kepada API web service
7. Jika hasil verify berhasil, maka API web service akan melanjutkan untuk melakukan update pada database seusai data yang telah di enkrip.
8. API web service memberikan response kepada web application
Faktor Eksperimen
Faktor penelitian yang diuji adalah kemanan dan kecepatan. Pengujian kemanan dilakukan dengan cara melakukan penetration testing,yang dibagi menjadi menjadi tiga tahap penetrasi, untuk menjamin bahwa data hasil enkripsi telah terenkapsulasi dengan benar dan tidak adanya kesalahan pada proses verify maka pengujian berikut akan dilakukan secara berulang pada platform browser dan sistem oprasi yang berbeda - beda:
1. Pengujian akses langsung kepada url API melalui HTTP/HTTPS.
2. Penetration testing dengan memberikan key kepada penetration tester.
3. Penetration testing dengan membuatkan program untukmelakukan signin dengan semua algoritma default dari jws beserta memberikan key kepada penetration tester.
4. Pengujian Hasil Enkripsi pada Algoritma ElGamal.
5. Pengujian Hasil Deksripsi pada Algoritma Elgamal.
IV. IMPLEMENTASI
Kegiatan pengimplementasian jws adalah sebagai berikut:
1. Pembuatan Prototype
Pada tahap ini dilakukan pengkodean untuk membuat prototype library jws dengan algoritma ElGamal berdasarkan desain proses dan analisis.
2. Pengujian dan Evaluasi
Pada tahap ini dilakukan uji coba prototype library jws yang telah dibuat dan melakukan evaluasi terhadap hasil dari uji coba.
3. Penyempurnaan Prototype
Pada tahap ini dilakukan pengkodean ulang untuk menyempurnakan prototype yang sudah dibuat sebelumnya.
4. Dokumentasi
Pada tahap ini yaitu proses pengumpulan data yang sudah di rekap dan di satukan untuk keperluan skripsi.
3.1 Lingkup dan Batasan Implementasi 1. Bahasa pemograman yang digunakan php 2. Format yang digunakan JOSE untuk API
JSON
3. Digunakan sebagai library yang dimanfaatkan oleh sistem lain untuk mengaktifkan kemanan API yang sudah ada
3.2 Implementasi Interaksi JWS, API, dan Web Application
1.
Implementation
JWS
pada
program.
2.
Signing and Encode
3.
Decode
4. Error pada Header Algoritma
5. Error Kunci Publik pada Proses Verify
3.4 Hasil Pengujian
a. Signing
b. Verify
c. Enkripsi Elgamal
d. Dekripsi Elgamal
e. Halaman Download Library dan
Pembangkitan Kunci
f. Pengujian Penetrasi
Daftar Pustaka
Blank, A. G. (2016). TCP/IP Fondation. Chris Snyder, M. S. (2011). Pro PHP Security. Denis, T. s. (2006). Cryptography forDevelopers.
Gerald, A. D. (2010). Bussiness Data Commmunications and Network. Gupta, H. (2011). Management Information
System.
Krause, M. (2006). Information Security Management Handbook.
Leonardo Richardson, M. A. (2013). restfull web APIs.
Lucey, T. (2005). Management Infromation System.
Network Defense : Fundamentals and Protocolsm. (2010). EC-Council. Setyaningsih, E. (2015). Kriptografi dan
Implementasinya menggunakan matlab.
vohra, D. (2015). Pro couchbase development. RFC 7515 - JSON Web Signature
RFC 7165 - Use Cases and Requirements for JSON
RFC 7797 - JSON Web Signature (JWS) Unencoded Payload Option