IMPLEMENTASI PUBLIC KEY INFRASTRUCTURE UNTUK KEAMANAN SISTEM PENGIRIMAN DATA PILKADA VIA MOBILE
SYAMSUL ARIFIN
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT PERTANIAN BOGOR BOGOR 2012
i
ABSTRACT SYAMSUL ARIFIN, Implementation of Public Key Infrastructure for Security System of Local Elections Data Transmission Via Mobile. Supervised by SHELVIE NIDYA NEYMAN Cryptography is a process of encrypting data into a form that can be read only by a system. The system has a key to read the encripted data. Based on the method, cryptographic algorithms can be divided into asymmetric key cryptography, symmetric key criptography, and public key cryptography. This research attemps to develop Public Key Infrastructure (PKI) with integrity service, which is implemented in the transmission of voting results in mobile election process. The benefits of this research is to simplify and improve the efficiency of the counting process and improving the security of the data transmission using mobile communication. The method employed is the Life Cycle Security System in which a sequence of steps following the life cycle of security system by eliminating the operational and maintenance step. The algorithm used in this research are RSA and MD5 Hash Function. RSA Algorithm is used to facilitate the distribution of keys that was used in the message encryption, and MD5 hash functions as an authentication function. The result of this research is the security system of the transmission of local elections vote via mobile which overcome the threat of sniffing or snooping, camouflage, and alteration with provides security services of authentication, integrity, and availability. Keywords: Election of Regional Head, Java, J2ME, Public Key, RSA Algorithm.
i
IMPLEMENTASI PUBLIC KEY INFRASTRUCTURE UNTUK KEAMANAN SISTEM PENGIRIMAN DATA PILKADA VIA MOBILE
SYAMSUL ARIFIN
Skripsi sebagai salah satu syarat untuk memperoleh gelar Sarjana Komputer pada Departemen Ilmu Komputer
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT PERTANIAN BOGOR BOGOR 2012
i
Judul skripsi Nama NIM
: Implementasi Public Key Infrastructure untuk Keamanan Sistem Pengiriman Data Pilkada Via Mobile : Syamsul Arifin : G64063472
Menyetujui Pembimbing,
Shelvie Nidya Neyman, S.Kom, M.Si. NIP 19770206 200501 2 002
Mengetahui Ketua Departemen Ilmu Komputer,
Dr. Ir. Agus Buono, M.Si, M.Kom NIP 19660702 199302 1 001
Tanggal lulus: ii
RIWAYAT HIDUP Penulis lahir di Bangkalan pada tanggal 15 Agustus 1988. Penulis merupakan anak kelima dari lima bersaudara, pasangan Mi‟ad Ikhsan dan Sumani. Pada tahun 2006, penulis lulus Sekolah Menengah Umum Negeri 1 Bangkalan, Kabupaten Bangkalan, Madura, Jawa Timur. Penulis melanjutkan perkuliahan di Institut Pertanian Bogor melalui jalur Ujian Seleksi Masuk IPB (USMI) pada tahun 2006. Penulis diterima di Program Studi Ilmu Komputer Fakultas Matematika dan Ilmu Pengetahuan Alam pada tahun 2008. Penulis aktif dalam organisasi Badan Eksekutif Mahasiswa Keluarga Mahasiswa IPB (BEM KM IPB) dan menjabat sebagai staf Kementrian Pendidikan pada tahun 2006. Penulis juga menjadi asisten praktikum Penerapan Komputer pada tahun 2008. Penulis pernah melakukan Praktik Kerja Lapangan di Republik Citra Televisi Indonesia (RCTI)selama 2 bulan. Penulis membuat Sistem Dokumentasi Data Perusahaan RCTI. Penulis pernah bekerja sebagai programmer di salah satu perusahaan yang bergerak di bidang GPS provider yaitu PT. Global Posisi Semesta. Pada saat penulisan skripsi ini, penulis bekerja di salah satu perusahaanyang bergerak di bidang teknologi informasi yaitu PT. Jatis Mobile.
iii
PRAKATA Alhamdulillah, segala puji dan syukur penulis panjatkan kepada Allah Subhanahuwata’ala atas semua rahmat dan karunia-Nya, sehingga penulis dapat menyelesaikan skripsi yang berjudul Implementasi Public Key Infrastructure untuk Keamanan Sistem Pengiriman Data Pilkada Via Mobile yang dilaksanakan pada bulan Juli 2010 sampai dengan September 2011. Shalawat serta salam penulis sampaikan kepada junjungan kita Nabi Muhammad Salallahualaihiwassalam. Terima kasih kepada kedua orang tua tercinta, Ayahanda Mi‟ad Ikhsan dan Ibunda Sumani yang sampai detik ini selalu memberikan curahan kasih sayang yang tiada terhingga, juga untuk setiap dukungan, semangat, dan doa yang telah diberikan untuk penulis, begitu juga dengan keempat kakak penulis yang menjadi motivasi buat penulis untuk terus melakukan yang terbaik. Penulis mengucapkan terima kasih kepada Ibu Shelvie Nidya Neyman, S.Kom, M.Si selaku pembimbing yang dengan sabar membimbing serta memberikan masukan kepada penulis.Terima kasih atas saran, bantuan, perhatian, bimbingan dan masukannya kepada penulis selama menjalankan penelitian ini. Ucapan terima kasih juga penulis sampaikan kepada pihak-pihak yang terus memberikan dukungan dan semangat : 1 Teman-teman di PT. Global Posisi Semesta, terutama kepada Bapak Rudy Hartanto selaku pimpinan perusahaan. 2 Seluruh staf pengajar dan karyawan Departemen Ilmu Komputer Institut Pertanian Bogor. 3 Teman-teman ILKOM angkatan 43 atas kebersamaan dan dukungannya. 4 Teman-teman GASISMA atas kebersamaan, persahabatan, semangat dan bantuannya. Semoga karya ilmiah ini bermanfaat bagi pembaca, terutama untuk para pembaca yang berminat untuk melanjutkan dan menyempurnakan penelitian ini.
Bogor, Juli 2012
Syamsul Arifin
iv
DAFTAR ISI Halaman DAFTAR GAMBAR .....................................................................................................
vi
DAFTAR LAMPIRAN ..................................................................................................
vi
PENDAHULUAN Latar Belakang ....................................................................................................... Tujuan ................................................................................................................... Ruang Lingkup ...................................................................................................... Manfaat Penelitian .................................................................................................
1 1 1 1
TINJAUAN PUSTAKA Kriptografi Kunci Publik ........................................................................................ Algoritme RSA ...................................................................................................... Fungsi Hash ........................................................................................................... Message Digest 5 (MD5) ........................................................................................ Komunikasi Perangkat Mobile................................................................................ 1 Teknologi Nirkabel 1G ................................................................................ 2 Teknologi Nirkabel 2G ................................................................................ 3 Teknologi Nirkabel 2,5 G............................................................................. 4 Teknologi Nirkabel 3G ................................................................................ Java 2 Micro Edition (J2ME) .................................................................................. 1 Connected Limited Device Configuration (CLDC) ....................................... 2 Connected Device Configuration (CDC) ...................................................... 3 Mobile Information Device Profile (MIDP) ..................................................
1 1 2 2 2 2 2 3 3 3 3 4 4
METODE PENELITIAN Ancaman (Thread) ................................................................................................. Kebijakan (Policy) ................................................................................................. Spesifikasi ............................................................................................................. Desain.................................................................................................................... Implementasi .........................................................................................................
4 4 4 4 4
HASIL DAN PEMBAHASAN Ancaman (Thread) ................................................................................................. Kebijakan (Policy) ................................................................................................. Spesifikasi ............................................................................................................. Desain.................................................................................................................... Implementasi .........................................................................................................
5 5 5 5 8
KESIMPULAN DAN SARAN Kesimpulan ............................................................................................................ Saran .....................................................................................................................
8 8
DAFTAR PUSTAKA ....................................................................................................
8
v
DAFTAR GAMBAR Halaman 1 2 3 4 5 6 7 8 9 10
Algoritme MD5 (Munir 2004) .................................................................................. Arsitektur jaringan GPRS. ........................................................................................ Perkembangan teknologi Java ................................................................................... Siklus hidup sistem keamanan (Neyman 2007). ......................................................... Flowchart pendaftaran petugas. ................................................................................ Flowchart pendaftaran calon. .................................................................................... Flowchart login ke sistem. ........................................................................................ Form login. .............................................................................................................. Flowchart pengiriman data. ...................................................................................... Form generate token.................................................................................................
2 3 3 4 6 6 6 7 7 8
DAFTAR LAMPIRAN Halaman 1 2 3 4 5
User interface aplikasi di sisi server.......................................................................... User interface aplikasi di sisi client ........................................................................... Implementasi public key infrastructure...................................................................... Data hasil enkripsi .................................................................................................... Proses uji pada aplikasi pengiriman data pilkada via mobile – server .........................
11 12 13 21 22
vi
1
PENDAHULUAN Latar Belakang Pemilihan Kepala Daerah (Pilkada) merupakan salah satu bentuk perwujudan sistem politik demokrasi di Indonesia, sehingga pelaksanaan pilkada yang baik menjadi tolak ukur baik tidaknya pelaksanaan demokrasi. Pilkada harus dilaksanakan secara langsung, umum, bebas, dan rahasia serta dilandasi dengan semangat jujur dan adil. Oleh karena itu, pelaksanaan pilkada perlu dikelola dengan baik dan benar (Budi et al. 2008). Proses pilkada memiliki 4 tahapan utama: 1 Pendataan adalah tahap untuk mendata penduduk dan pemilih, TPS (Tempat Pemungutan Suara), dan peserta pilkada. 2 Persiapan adalah tahap untuk menetapkan alokasi kursi untuk setiap daerah pemilihan, serta untuk menetapkan calon, serta melengkapi pembentukan panitia penyelenggara pilkada. 3 Pemungutan suara adalah tahapan pengambilan dan penghitungan suara Pilkada. 4 Pasca Pilkada adalah tahapan penetapan hasil pilkada. Proses yang paling krusial pada pilkada adalah pada saat proses pengambilan suara dan proses penghitungan hasil suara. Setelah proses penghitungan, hasil suara dikirim ke pusat. Sistem pengiriman data hasil suara yang banyak dikembangkan belakangan ini menggunakan aplikasi berbasis SMS yang diintegrasikan dengan aplikasi web. Tujuannya untuk mempercepat hasil perhitungan suara pilkada secara realtime dan mengurangi indikasi kecurangan (Amborowati 2007). Kelemahan sistem ini adalah proses pengiriman datanya masih menggunakan sistem SMS yang sederhana serta tidak sepenuhnya data jumlah suara dikirim ke pusat tetapi hanya mengambil sebagian suara sebagai sampel sehingga masih memungkinkan kecurangan. Penelitian ini mencoba mengembangkan sebuah sistem menggunakan algoritme kriptografi kunci publik dalam proses pengiriman data pilkada untuk menigkatkan keamanan dan kerahasiaan informasi data hasil suara yang dikirimkan ke pusat. Sistem pengiriman data pilkada ini berguna sebagai pengaman agar tidak terjadi kecurangan dalam pengubahan pada saat pengiriman data ke pusat. Tujuan Penelitian ini bertujuan membangun sistem Public Key Infrastruktur (PKI) dengan
keamanan layanan integritas di dalamnya. Layanan integritas tersebut menggunakan kriptografi sebagai autentikasi untuk memeriksa pesan yang terkirim apakah benar berasal dari sumber yang sah. Ruang Lingkup Penelitian ini mencoba mengembangkan sistem PKI yang merupakan sistem clientserver. Sistem ini menggunakan mobile sebagai client. Sistem diimplementasikan menggunakan simulator. Data yang digunakan dalam penelitian ini bersifat dummy. Bahasa pemrograman yang digunakan untuk mengembangkan sistem ini adalah bahasa pemograman Java yang diimplementasikan dalam lingkungan mobile. Manfaat Penelitian Hasil dari penelitian ini diharapkan dapat mempermudah dan meningkatkan efisiensi waktu dalam perhitungan suara serta meningkatkan keamanan pengiriman data pilkada yang dilakukan melalui mobile. Selain itu, metode keamanan yang dihasilkan dari penelitian ini dapat diterapkan dalam sistem pemilihan berbasis mobile (m-voting). TINJAUAN PUSTAKA Kriptografi Kunci Publik Diberikan skema enkripsi yang teridiri atas himpunan transformasi enkripsi dan dekripsi {Ee : e ϵ K} dan {Dd : d ϵ K}. Metode enkripsi disebut skema enkripsi kunci publik jika untuk setiap pasangan (e,d). Kunci e dibuat tersedia untuk umum (publik) dan kunci pasangan d dibuat untuk pribadi dan dijaga kerahasiaannya. Skema tersebut dikatakan aman, jika secara perhitungan tak-layak menentukan d dari e (Menezes et al. 1996). Algoritme RSA Algoritme RSA ditemukan oleh Ron Rivest, Adi Shamir, dan Len Adleman. Algoritme ini diperkenalkan pertama kali pada bulan Agustus 1977. Algoritme kriptografi ini banyak digunakan untuk memberikan privasi dan menjamin autentikasi data digital. Saat ini RSA telah dikembangkan oleh banyak sistem komersial. RSA digunakan oleh web server dan browser untuk keamanan lalu-lintas data pada web. RSA juga juga digunakan untuk menjamin remote login session dan bagian utama dari sistem pembayaran kartu kredit elektronik. Dengan kata lain RSA, banyak digunakan untuk
2
Fungsi Hash Fungsi hash adalah fungsi yang secara komputasi efisien memetakan bitstring dengan panjang sembarang ke bitstring dengan panjang tetap yang disebut nilai-hash (hash-value). Untuk fungsi hash dengan output nilai-hash nbit, probabilitas pemilihan string secara random yang dipetakan ke nilai-hash n-bit adalah 2-n. Berdasarkan definisi tersebut, ide dasar dari fungsi hash adalah membuat string input menjadi teratur rapat dengan panjang seragam. Terkait dengan kegunaan kriptografi, fungsi hash h dipilih sedemikian sehingga secara komputasi tak-layak menentukan input berbeda x dan y sehingga h(x) = h(y) (Menezes et al. 1996). Message Digest5 (MD5) Salah satu fungsi hash yang paling banyak digunakan adalah Message Digest 5 (MD5). MD5 adalah fungsi hash satu arah yang dibuat oleh Ron Rivest. Satu arah yang dimaksud adalah kita dengan mudah dapat menghitung nilai hash pesan tetapi sangat sulit untuk mendapatkan kembali pesan semula. MD5 memproses masukan dengan panjang 512 bit yang dibagi ke dalam 16 blok dengan panjang masing-masing blok 32 bit (Schneier 1996). Keluaran yang dihasilkan berupa message digest yang panjangnya 128 bit. Langkah-langkah pembuatan message digest adalah sebagai berikut: 1 Penambahan bit-bit pengganjal (padding bits). 2 Penambahan nilai panjang pesan semula. 3 Inisialisasi penyangga MD. 4 Pengolahan pesan dalam blok berukuran 512 bit.
Padding bit
K bit
K mod 264 (1-512 bit
512
512
Y0
Y1
128 HMD5
HMD5
Panjang Pesan
1000…000
Pesan
512
…
512
…
Yq
128 128
YL = 1
128 128 HMD5
ABCD
HMD5 128
Deskripsi sederhana dari algoritme RSA sebagai berikut: N = pq (1) Dengan p dan q adalah dua buah bilangan prima besar dengan ukuran yang sama. Berikan nilai e dan d dengan ketentuan sebagai berikut: ed = 1 mod φ(N) (2) φ(N) = (p-1)(q-1) (3) N adalah RSA modulus, e adalah encryption exponent, dan d adalah decryption exponent. (N,e) adalah kunci publik yang digunakan untuk ekripsi pesan. (N,d) adalah kunci rahasia atau kunci privat yang digunakan untuk mendeskripsi chipertext atau pesan telah dienkripsi ke pesan sebenarnya (Boneh 1999).
Gambaran pembuatan message digest dengan algoritme MD5 dapat dilihat pada Gambar 1. L x 512 bit
128
aplikasi yang membutuhkan keamanan data digital.
Message Digest
Gambar 1 Algoritme MD5 (Munir 2004). Komunikasi Perangkat Mobile Perkembangan teknologi perangkat mobile telah sampai pada fase “Generations” atau dikenal dengan akronim „G”. Perkembangan baru dari tiap generasi perangkat mobile memberikan reabilitas dan fleksibilitas lebih dari generasi sebelumnya (Harte & Bowler 2004). 1 Teknologi Nirkabel 1G Teknologi ini merupakan teknologi pertama dari teknologi nirkabel. Generasi ini dikembangkan pada tahun 1980-1990 dan hanya menggunakan layanan suara analog tanpa layanan data. Pada generasi ini, frekuensi yang digunakan belum standar, karena terdapat berbagai frekuensi berbeda untuk tiap provider. 2 Teknologi Nirkabel 2G Generasi kedua atau 2G dari teknologi nirkabel menggunakan jaringan digital berbasis sirkuit. Karena generasi ini menggunakan jaringan digital, teknologi ini telah mampu mentransmisikan data dengan kecepatan ratarata 9.6 Kbps (Kilobits per second). Teknologi ini bekerja pada beberapa frekuensi, yaitu 900 MHz, 1800 MHz, dan 1900 MHz. Teknologi ini memiliki tiga standar sebagai berikut: 1 Time Division Multiple Access (TDMA). 2 Code Division Multiple Access (CDMA). 3 Global Sistem for Mobile (GSM).
3
3 Teknologi Nirkabel 2.5 G 2.5G adalah akronim dari perkembangan teknologi dari generasi teknologi nirkabel 2G. Perkembangan pada teknologi ini adalah meningkatnya kecepatan transmisi data menjadi 56 Kbps. Teknologi 2.5G tetap menggunakan infrastruktur 2G dengan beberapa tambahan teknologi perti General Packet Radio Service (GPRS) dan Enhanced Data Rates for Global Evolution (EDGE) yang berbasis paket data.
perangkat mobile, seperti pager, ponsel, screenphones, dan sistem navigasi kendaraan (Feng & Zhu 2001). Gambar 3 memperlihatkan perangkat dan platform dari tiap edisi teknologi Java. Java 2 Entreprise Edition (J2EE) memberikan solusi untuk lingkungan enterprise, Java 2 Standard Edition (J2SE) untuk lingkungan pengembangan desktop, dan J2ME untuk perangkat mobile. Servers
Desktop Machine
GGSN
Other network
Low End Consumer Device
Foundati on Profile
internet
J2SE
J2EE
GPRSback bone
Personal Profile
GSNs
High End Consumer Device
MIDP
CDC
CLDC
Java Card
Java Virtual Machine
KVM
Card VM
Smart Card
Gambar 3 Perkembangan teknologi Java. Gambar 2 Arsitektur jaringan GPRS. Gambar 2 menunjukkan arsitektur jaringan GPRS. Elemen dari jaringan GPRS adalah Base Transciver Stations (BTS), Base Stations Controller (BSC), GPRS support nodes (GSNs), serving GSN, dan Gateway GSN (GGSN).
Configuration merepresentasikan Java library minimum yang harus dimiliki oleh suatu perangkat elektronik untuk menjalankan suatu aplikasi. J2ME saat ini telah mendefinisikan dua buah configuration, yaitu CLDC dan CDC, serta profile dari masing-masing Configuration, yaitu MIDP.
4 Teknologi Nirkabel 3G Generasi ini menggunakan frekuensi transmisi yang berbeda dari generasi sebelumnya dan membutuhkan infrastruktur yang berbeda. Teknologi ini memberikan peningkatan kecepatan transmisi data hingga 2 Mbps pada keadaan stabil. Teknologi 3G dapat memberikan layanan seperti : Audio dan Video streaming, Voice Over Internet Protocol (VolP), Mengirim dan menerima gambar, suara dan video, Virtual Home Environments (VHE), dan Global Positioning Sistem (GPS). Layanan 3G masih akan terus bertambah seiring perkembangan teknologi ini. Java 2 Micro Edition (J2ME) Sun Microsistem mendefinisikan Java 2 Micro Edition (J2ME) sebagai Java run-time environment yang ditargetkan pada konsumen
1 Connected Limited Device Configuration (CLDC) CLDC adalah spesifikasi dasar yang berupa library dan API yang diimplementasikan pada J2ME dan biasa digunakan pada telepon selular atau PDA yang memiliki karakteristik:
Prosesor 16-bit atau 32-bit. Memory terbatas, 512 KB atau lebih rendah. Power supply yang terbatas. Layar monitor yang terbatas. Kemampuan input yang terbatas.
CLDC juga tidak mendukung tipe data float dan double. Selain itu, CLDC juga tidak mendukung kelas dan method yang membutuhkan tipe data tersebut atau melibatkan operasi floating point. Java Virtual Machine (JVM) yang biasa digunakan disebut Kilobyte Virtual Machine (KVM). Selain itu, terdapat VM lain, yaitu J9VM dari IBM.
4
2 Connected Device Configuration (CDC) CDC diperuntukan bagi perangkat dengan ketersediaan memori minimal 2MB dan 32 bit prosesor. CDC dapat ditemukan pada high-end PDA, smart phones, Internet TV serta mobile TV. JVM yang digunakan disebut CVM. Profile melengkapi configuration dengan menambahkan beberapa kelas yang menyediakan fitur yang sesuai untuk suatu tipe perangkat tertentu. Kedua configuration J2ME memiliki satu atau lebih profile yang terkait, dan beberapa di antaranya saling tergantung. 3 Mobile Information Device Profile (MIDP) MIDP memiliki API tambahan untuk jaringan, daur hidup aplikasi, antarmuka, dan penyimpanan persistensi untuk CLDC. Profile ini ditujukan untuk perangkat mobile yang memiliki display dan fasilitas penyimpanan yang terbatas.
METODE PENELITIAN Ancaman (Thread)
Kebijakan (Policy)
Spesifikasi
Desain
Implementasi
Operasi dan Pemeliharaan
Gambar 4 Siklus hidup sistem keamanan (Neyman 2007). Metode yang digunakan untuk implementasi sistem keamanan pengiriman data hasil suara pilkada via mobile ini mengadopsi tahapan pada Security Sistem Life Cycle (Bishop 2003) untuk lebih detail dapat dilihat pada Gambar 4. Kegiatan yang dilakukan pada setiap tahapannya adalah sebagai berikut:
Ancaman (Thread) Tahapan awal dari pembangunan sistem ini adalah mengidentifikasi ancaman-ancaman yang ingin diatasi oleh sistem, atau dalam penelitian ini adalah penentuan aspek, atau layanan keamanan yang ingin diberikan. Layanan keamanan dipersiapkan untuk mengatasi serangan akibat ancaman-ancaman yang diperkirakan akan muncul. Bishop (2003) mengemukakan bahwa keamanan komputer melingkupi tiga aspek utama yaitu, kerahasiaan, integritas, dan availability. Interpretasi setiap aspek pada lingkungan suatu organisasi ditentukan oleh kebutuhan dari individu yang terlibat, kebiasaan, dan hukum yang berlaku pada organisasi tersebut. Kebijakan (Policy) Tahapan selanjutnya adalah penentuan kebijakan keamanan. Kebijakan tersebut ditujukan untuk memberikan arahan dan sasaran serta sekaligus menjadi acuan standar keamanan dalam sistem. Kebijakan keamanan juga harus memenuhi layanan-layanan keamanan yang akan disajikan oleh sistem. Spesifikasi Tahap spesifikasi merupakan pernyataan fungsional dari sistem yang dapat berupa ekspresi matematika atau bahasa lain yang mendeskripsikan metode sistem dalam memberikan layanan keamanan. Desain Tahapan desain dari sistem akan menerjemahkan spesifikasi dalam bentuk komponen-komponen yang akan diimplementasikan. Desain dikatakan memenuhi spesifikasi jika tidak melanggar semua ketentuan dalam spesifikasi. Pada tahap ini, dilakukan perancangan aplikasi dengan menerjemahkan kebutuhan sistem berdasarkan ancaman (thread), kebijakan, dan spesifikasi. Perancangan dilakukan dengan membuat flowchart modul dan sketsa umum antarmuka sistem yang akan dibuat. Implementasi Tahapan implementasi menghasilkan aplikasi yang sesuai dengan desain yang ada. Bila desain yang ada telah memenuhi spesifikasi sistem, secara tidak langsung aplikasi yang dihasilkan juga memenuhi spesifikasi tersebut. Kesulitan pada tahapan ini biasanya terletak pada kompleksitas program untuk mengimplementasikan desain.
HASIL DAN PEMBAHASAN Sistem ini diawali dengan proses pengiriman data dari aplikasi mobile melalui internet.
5
Jaringan tersebut merupakan jaringan unsecure sehingga diperlukan keamanan dalam pengiriman data pilkada ke server. Pada pembahasan di bawah ini, akan dijelaskan dari setiap tahap dalam pembangunan sistem ini. Ancaman (Thread) Jenis ancaman yang teridentifikasi yang dapat menimbulkan serangan keamanan dalam sistem pengiriman data pilkada via mobile ini adalah snooping dan modification or alteration. Ancaman snooping atau pengintaian terjadi dikarenakan pengiriman data melewati jaringan komunikasi public yang semua pihak dapat melihat aliran informasi yang lewat pada jaringan tersebut atau biasa dikenal dengan wiretapping, yaitu pengintaian dalam jaringan yang terbuka. Snooping yang terjadi dalam sistem pengiriman data pilkada adalah mengetahui jumlah suara yang dikirim petugas ke pusat. Modification or alteration, adanya pengubahan data jumlah suara pilkada oleh pihak yang tidak berhak kemudian dikirim ulang ke server dengan harapan petugas dan server tidak menyadari adanya perubahan. Penyamaran, yaitu adanya pihak yang tidak berhak mengaku sebagai petugas sehingga dapat menggunakan sistem untuk hal yang tidak sesuai prosedur. Salah satu cara untuk mengatasi ancaman ini adalah dengan memberikan layanan kerahasiaan, autentikasi dan integritas pada sistem. Kebijakan (Policy) Pada tahap ini, ditentukan kebijakankebijakan yang akan berlaku dalam sistem ini. Kebijakan keamanan tersebut meliputi: 1 User Policy Pada sistem ini, terdapat dua pihak yaitu pihak pengirim dan penerima. Dalam sistem pengiriman data pilkada via mobile, penerima sendiri adalah admin server dan pengirim adalah petugas yang mengirimkan data jumlah suara pilkada via mobile. Masing-masing pihak memiliki peranan yang berbeda dalam proses pengiriman data. Sistem ini tidak melibatkan pihak ketiga. 2 Communication and Network Policy Jalur komunikasi dalam sistem pengiriman data pilkada bersifat dua arah serta menggunakan jaringan yang unsecure dan umum. Hal ini menyebabkan setiap orang dapat melihat adanya pertukaran data yang mengalir di dalam jaringan dengan ketentuan kondisi normal. Penelitian ini menggunakan jaringan unsecure dan umum untuk menerapkan metode pendistribusian kunci yang sesuai sebagai pengaman.
3 Access Policy Sistem ini sepenuhnya mengatur hak akses user. Dalam sistem ini, user yang sudah diberikan hak dapat menggunakan layanan yang disediakan oleh sistem. Untuk melakukan proses tersebut, user harus memasukkan username, password, dan pin. Kebijakan ini diberikan untuk mencegah adanya ancaman penyamaran yang sudah diidentifikasi pada tahap sebelumnya. 4 Application and Data Policy Aplikasi hanya bisa digunakan oleh user yang telah mendaftarkan diri ke admin sehingga aplikasi tersebut bisa di-install di handphone user dan tidak bisa di-copy ke handphone yang lain. Data yang digunakan dalan sistem ini merupakan data dummy. Asumsi bahwa data yang dikirim ke server merupakan data valid digunakan. Spesifikasi Pada tahap ini, dilakukan penentuan algoritme yang akan digunakan. Algoritme yang dipakai untuk menyajikan keamanan pada sistem ini adalah sebagai berikut: 1 Autentikasi dan verifikasi Fungsi hash diterapkan untuk menjaga layanan integritas. Autentikasi digunakan untuk mendapat nilai autentikasi dari data, sedangkan verifikasi digunakan untuk memeriksa keautentikan data dengan nilai autentikasinya. Metode ini digunakan untuk menyembunyikan keautentikan data agar tidak diketahui oleh pihak luar. Selain itu, metode ini digunakan sebagai bentuk pencegahan penyamaran dan modifikasi data oleh pihak yang tidak berhak. Untuk mendukung layanan integritas, sistem menggunakan fungsi hash yaitu MD5. 2 Kerahasiaan Data Algoritme kriptografi kunci publik digunakan untuk menjaga kerahasiaan data adalah RSA. Algoritme ini merupakan metode yang digunakan dalam pembangkitan kunci yang nantinya akan didistribusikan secara umum. Studi kasus dalam penelitian ini adalah petugas akan mengirimkan kunci publik ke server agar server bisa membuka pesan yang dikirim oleh petugas. Hal ini dilakukan untuk layanan keautentikan dapat terealisasi. Tahap spesifikasi dalam penelitian ini juga ditentukan lingkungan pengembangan sistem. Desain Ancaman, kebijakan, dan spesifikasi yang sudah ditentukan dilanjutkan untuk diterjemahkan ke dalam desain sistem yang
6
dibagi berdasarkan modul yang dibutuhkan dalam sistem. Modul-modul tersebut antara lain adalah:
Mulai
Cek status pendaftaran
1 Modul pendaftaran petugas Modul ini digunakan untuk pendaftaran petugas yang nantinya akan diberi hak untuk mengakses sistem atau dengan kata lain modul ini dijadikan sebagai layanan jaminan hak akses terhadap sistem. Hasil dari desain sistem pendaftaran petugas dapat dilihat pada flowchart pendaftaran petugas pada Gambar 5. Antarmuka aplikasi di sisi server dapat dilihat pada Lampiran 1, sedangkan antarmuka aplikasi di sisi klien dapat dilihat pada Lampiran 2.
Pendaftaran ditutup?
tidak
Ya
Input Data Diri
Pendaftaran ditutup
Input data lengkap?
Ya
tidak Simpan Data Pernyataan salah
Mulai
Tabel Calon dan count
Cek status pendaftaran
Selesai
Gambar 6 Flowchart pendaftaran calon. tidak
Pendaftaran ditutup?
tidak
Mulai
Pendaftaran ditutup
Input Data Diri
Input data lengkap?
Ya
Petugas memasukkan Username, password dan pin
Ya Simpan Data
Peringatan kesalahan
Pernyataan salah Tabel penanggung jawab, Tabel user, dan Tabel token pada basis data pilkada
Input data lengkap?
Tidak Ya
User Login Selesai
Generate key(public key, private key,modulo) Proses login
Gambar 5 Flowchart pendaftaran petugas. Pendaftaran hanya bisa dilakukan pada saat pendaftaran dibuka oleh panitia. Data yang dimasukkan adalah data diri petugas sesuai dengan KTP petugas, username, password, password token, serta pin yang akan digunakan ketika login. Jika input data lengkap, sistem akan menyimpan data tersebut ke dalam database dengan mengambil nilai hash dari password, password token, dan pin. 2 Modul pendaftaran calon Modul ini digunakan untuk memberikan referensi kepada petugas dan memberikan jaminan agar tidak terjadi kesalahan ketika mengirimkan data berupa jumlah suara yang terkait dengan calon serta memberikan standarisasi penamaan calon dalam sistem. Desain yang dirancang dapat dilihat pada flowchart pendaftaran calon pada Gambar 6.
Tidak Mendeskripsi username, password dan pin menggunakan kunci privat petugas dengan algoritma kunci asimetri
Login valid? Ya
Enkripsi Username, Password dan PIN menggunakan kunci publik dengan algoritma kunci asimetri
Tabel user pada basis data pilkada
Gambar 7 Flowchart login ke system. 3 Modul login ke sistem Desain pada modul ini digunakan untuk masuk ke dalam sistem dengan username, password, dan pin. Setelah login ini dilakukan oleh petugas, dilakukan proses pengiriman data. Login dilakukan oleh petugas pada saat proses perhitungan suara, baik saat hasil perhitungan
7
belum selesai atau sudah selesai, dengan ketentuan bahwa pengiriman data yang pertama adalah insert data baru sesuai dengan id petugas. Untuk yang kedua kali dan seterusnya, yang dilakukan hanya proses update data di dalam database berdasarkan id petugas tersebut. Untuk lebih detail mengenai desain modul ini dapat dilihat pada flowchart login pada Gambar 7. Pada modul ini, akan dilakukan pembangkitan kunci publik ketika petugas melengkapi input data pada sistem. Kunci publik digunakan untuk mengenkripsi data petugas, dalam hal ini adalah username, password, dan password token agar tidak ada pihak luar yang mengetahui isi pesan yang dikirimkan. Kode implementasi public key infrastructure dapat dilihat pada Lampiran 3. User Interface untuk modul login dapat dilihat pada Gambar 8.
Untuk menjamin keamanan bahwa sistem masih dipegang oleh orang yang sama, setelah melakukan pemilihan, petugas akan diminta untuk memasukkan password token sebagai parameter untuk membangkitkan challenge code yang nantinya akan divalidasi oleh system. Challenge code hanya berlaku dalam selang waktu tiga menit.
Proses submit
Memilih calon dan memasukkan Jumlah suara, nama TPS dan keadaan Ya
Proses Generate respon Code menggunakan Tidak password token petugas dan challenge code user
send
System
Proses send
Proses Generate Challenge Code
Password kosong? Memasukkan password token
Enkripsi id petugas, challenge code, respon code, jumlah suara, pilihan calon, nama TPS, kondisi pilkada menggunakan kunci publik petugas
Password Deskripsi id petugas, benar? challenge code, respon Tidak code, jumlah suara, pilihan Pernyataan Ya calon, nama TPS, kondisi salah pilkada menggunakan Respon code kunci privat Tidak sesuai? Ya
Simpan data
Gambar 8 Form Login. 4 Modul pengiriman data Modul ini merupakan fungsi utama dalam penelitian ini. Desain modul ini dapat dilihat pada flowchart pengiriman data pada Gambar 9. Pada modul ini, petugas melakukan pengiriman data berupa jumlah suara yang diperoleh oleh setiap calon ke server. Pada proses pengiriman ini, dilakukan enkripsideskripsi menggunakan algoritme kunci publik. Contoh data yang telah dienkripsi dapat dilihat pada Lampiran 4. Fungsi yang sifatnya update data ini bisa dilakukan berulang kali oleh petugas. Pada saat petugas melakukan pengiriman data pertama kali, sistem tidak otomatis logout, tetapi kembali ke tampilan utama.
Tabel history pada basis data pilkada
selesai
Gambar 9 Flowchart pengiriman data. User interface untuk form pengisian data dapat dilihat pada Gambar 10. User interface untuk generate token key dapat di lihat pada Gambar 11.
Gambar 10 Form data pilkada.
8
flowchart atau desain sistem yang telah ditentukan pada tahap desain. Untuk lebih detail, hasil pengujian dapat dilihat di Lampiran 5. KESIMPULAN DAN SARAN
Gambar 11 Form generate token. Implementasi Tahap implementasi dilakukan untuk merealisasikan desain sistem yang sudah dibuat dalam bentuk aplikasi. Beberapa komponen yang digunakan untuk merealisasikan desain sistem adalah sebagai berikut: Algoritme fungsi hash yang digunakan adalah MD5 yang menghasilkan nilai hash dengan panjang 128 bit. Algoritme kunci publik yang berfungsi untuk pengamanan dalam pendistribusian kunci menggunakan sepasang kunci dengan fungsi tertentu, yaitu kunci publik dan kunci privat. Algoritme yang digunakan sebagai algoritme kunci publik yakni RSA. Komponen dan lingkungan implementasi desain sistem direalisasikan menjadi aplikasi menggunakan perangkat dengan spesifikasi sebagai berikut: 1 Perangkat lunak: MySQL 5.0.67, J2ME Wireless Toolkit 2.5.2, Netbeans IDE 6.9, dan Bahasa pemograman yang digunakan adalah Java 2 Mobile Edition (J2ME) 2 Perangkat keras: Processor : Intel® Dual- Core 2.00GHz, Memory : 2GB, Harddisk : 160GB, dan Handphone berbasis Java, misalnya: Sony Ericsson W205 Pada tahap ini, juga dilakukan pengujian terhadap sistem menggunakan metode uji blackbox testing. Berdasarkan hasil pengujian, sistem sudah berjalan dengan baik berdasarkan
Kesimpulan Penelitian ini berhasil menerapkan metode public key infrastructure. Dalam prosesnya, sistem ini sendiri bisa memberikan beberapa layanan keamanan untuk mengatasi ancamanancaman yang mungkin terjadi pada sistem. Ancaman yang bisa diatasi dalam penelitian ini adalah sniffing atau snooping, penyamaran, dan alteration. Ancaman sniffing bisa diatasi karena pesan yang dikirimkan pada jaringan publik berupa karakter-karakter yang aneh sehingga untuk bisa membaca pesan tersebut dibutuhkan sistem bantuan, sedangkan ancaman penyamaran dan alteration dapat diatasi dengan layanan autentikasi-verifikasi data yang dikirimkan. Saran Saran untuk penelitian selanjutnya adalah: 1 Penelitian ini dapat dikembangkan menjadi pemilihan secara mobile (m-voting) sehingga mempermudah pemilihan, dan perhitungan suara serta meningkatkan efisiensi waktu yang digunakan serta meningkatkan keamanan dari m-voting. 2 Aplikasi perlu dikembangkan agar dapat diimplementasikan untuk semua platform mobile karena tidak semua handphone menggunakan aplikasi berbasis Java. DAFTAR PUSTAKA Amborowati A. 2007. Aplikasi Sistem Quick Count (SI-Q-CUP) Pilkada Pemilihan Kepala Daerah Studi Kasus Pilkada Propinsi DIY. Yogyakarta: STMIK AMIKOM Yogyakarta. Bishop M. 2003. Computer Security. Boston: Addison-Wesley. Boneh D. 1999. Twenty years of attacks on the RSA cryptosystem. Notices of the American Mathematical Society (AMS) 46(2):203123. Budi EM, Nuryanto HD, Rahman MZ, Yuwono A, Noor S. 2008. Solusi e-demokrasi untuk meningkatkan kualitas pemilu dan pilkada di Indonesia. Di dalam: Konferensi dan Temu Nasional Teknologi Informasi dan Komunikasi untuk Indonesia; Jakarta, 21-23 Mei 2008. Bandung: IGOS Center.
9
Feng
Y, Zhu J. 2001. Wireless Java Programming with J2ME. New York: Sams. Harte L, Bowler D. 2004. Introduction to Mobile Telephone System – 1G, 2G, 2.5 G, and 3G Wireless Technologies and Services. New York: ALTHOS. Menezes A, Oorschot PV, Vanstone S. 1996. Handbook of Applied Cryptography. London: CRC Press.
Munir R. 2004. Fungsi Hash Satu Arah dan MD5. Bandung: Institut Teknologi Bandung. Neyman SN. 2007. Perancangan Protokol Penyembunyian Informasi Terotentikasi [tesis]. Bogor: Fakultas Matematika dan Ilmu Pengetahuan Alam. Bogor: Institut Pertanian Bogor. Schneier B. 1996. Applied Cryptography. Ed ke-2. New York: John Wiley & Sons.
10
LAMPIRAN
11
Lampiran 1 User interface aplikasi di sisi server
12
Lanjutan
Lampiran 2 User interface aplikasi di sisi client
13
Lanjutan
Lampiran 3 Implementasi public key infrastructure package com.arifin.odp.RSA.main; import com.arifin.odp.RSA.cipher.AsymmetricBlockCipher; import com.arifin.odp.RSA.cipher.AsymmetricCipherKeyPair; import com.arifin.odp.RSA.cipher.exception.CryptoException; import com.arifin.odp.RSA.cipher.exception.DataLengthException; import com.arifin.odp.RSA.cipher.exception.InvalidCipherTextException; import com.arifin.odp.RSA.digest.MD5Digest; import com.arifin.odp.RSA.encoding.PKCS1Encoding; import com.arifin.odp.RSA.modul.BigInteger; import com.arifin.odp.RSA.modul.RSAKeyPairGenerator; import com.arifin.odp.RSA.modul.SecureRandom; import com.arifin.odp.RSA.parameter.RSAKeyGenerationParameters; import com.arifin.odp.RSA.parameter.RSAKeyParameters; import com.arifin.odp.RSA.privat.RSAPrivateCrtKeyParameters; import com.arifin.odp.RSA.sign.PSSSigner; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; /** * @author Arifin */ public class RSAMidlet { public String Encrypt(String str) { try { System.out.println(“generator on”); byte[] keypair = generator(); String keyp = byteArraytoHex(keypair);
14
Lanjutan byte[] plain = str.getBytes(); // input stream pasangan kunci ByteArrayInputStream bais = new ByteArrayInputStream(keypair); DataInputStream dis = new DataInputStream(bais); int modLen = dis.readInt(); int pubLen = dis.readInt(); int privLen = dis.readInt(); int pLen = dis.readInt(); int qLen = dis.readInt(); int dPLen = dis.readInt(); int dQLen = dis.readInt(); int qInvLen = dis.readInt(); byte[] modulo = new byte[modLen]; bais.read(modulo, 0, modLen); byte[] pubExp = new byte[pubLen]; bais.read(pubExp, 0, pubLen); byte[] privExp = new byte[privLen]; bais.read(privExp, 0, privLen); byte[] p = new byte[pLen]; bais.read(p, 0, pLen); byte[] q = new byte[qLen]; bais.read(q, 0, qLen); byte[] dP = new byte[dPLen]; bais.read(dP, 0, dPLen); byte[] dQ = new byte[dQLen]; bais.read(dQ, 0, dQLen); byte[] qInv = new byte[qInvLen]; bais.read(qInv, 0, qInvLen); dis.close(); bais.close();
// qInv);
// construct private key RSAPrivateCrtKeyParameters privKey = constructPrivateKey(modulo, pubExp, privExp, p, q, dP, dQ, // construct public key RSAKeyParameters pubKey = constructPublicKey(modulo, pubExp);
byte[] cipher = rsaEncrypt(plain, pubKey); String tss = byteArraytoHex(cipher); String encrypt = tss+”+”+keyp; return encrypt; } catch (IOException ex) { return ex.toString(); } } public String Decrypt(String hexa,byte[] pair) { try { System.out.println(“generator on”); ByteArrayInputStream bais = new ByteArrayInputStream(pair); DataInputStream dis = new DataInputStream(bais); int modLen = dis.readInt(); int pubLen = dis.readInt(); int privLen = dis.readInt();
15
Lanjutan int pLen = dis.readInt(); int qLen = dis.readInt(); int dPLen = dis.readInt(); int dQLen = dis.readInt(); int qInvLen = dis.readInt(); byte[] modulo = new byte[modLen]; bais.read(modulo, 0, modLen); byte[] pubExp = new byte[pubLen]; bais.read(pubExp, 0, pubLen); byte[] privExp = new byte[privLen]; bais.read(privExp, 0, privLen); byte[] p = new byte[pLen]; bais.read(p, 0, pLen); byte[] q = new byte[qLen]; bais.read(q, 0, qLen); byte[] dP = new byte[dPLen]; bais.read(dP, 0, dPLen); byte[] dQ = new byte[dQLen]; bais.read(dQ, 0, dQLen); byte[] qInv = new byte[qInvLen]; bais.read(qInv, 0, qInvLen); dis.close(); bais.close();
// qInv);
// construct private key RSAPrivateCrtKeyParameters privKey = constructPrivateKey(modulo, pubExp, privExp, p, q, dP, dQ,
// construct public key RSAKeyParameters pubKey = constructPublicKey(modulo, pubExp);
String ok = convertHexToString(hexa); byte[] cip = StringToByteArray(ok); byte[] recovery = rsaDecrypt(cip, pubKey);
return new String(recovery); } catch (IOException ex) { return ex.toString(); } } public static final char[] kDigits ={„0‟,‟1‟,‟2‟,‟3‟,‟4‟,‟5‟,‟6‟,‟7‟,‟8‟,‟9‟,‟a‟,‟b‟,‟c‟,‟d‟,‟e‟,‟f‟}; /* byte array ke Hexa */ public static String byteArraytoHex(byte[] str){ StringBuffer sb = new StringBuffer(str.length * 2); for(int i=0;i<str.length;i++){ int v = str[i] & 0xff; if(v<16){ sb.append(“0”); }
16
Lanjutan sb.append(Integer.toHexString(v)); } return sb.toString(); } public String convertHexToString(String hex) { StringBuffer sb = new StringBuffer(); StringBuffer temp = new StringBuffer(); //49204c6f7665204a617661 split into two characters 49, 20, 4c... for (int I = 0; I< hex.length() – 1; I += 2) { //grab the hex in pairs String output = hex.substring(I, (I + 2)); //convert hex to decimal int decimal = Integer.parseInt(output, 16); //convert the decimal to character sb.append((char) decimal); temp.append(decimal); } System.out.println(“Decimal : “ + temp.toString()); return sb.toString(); }
public RSAKeyParameters constructPublicKey(byte[] modulo, byte[] pubExp) { BigInteger n = new BigInteger(modulo); BigInteger e = new BigInteger(pubExp); return (new RSAKeyParameters(false, n, e)); } public RSAPrivateCrtKeyParameters constructPrivateKey(byte[] modulo, byte[] pubExp, byte[] privExp, byte[] pByte, byte[] qByte, byte[] dPByte, byte[] dQByte, byte[] qInvByte) { BigInteger n = new BigInteger(modulo); BigInteger e = new BigInteger(pubExp); BigInteger d = new BigInteger(privExp); BigInteger p = new BigInteger(pByte); BigInteger q = new BigInteger(qByte); BigInteger dP = new BigInteger(dPByte); BigInteger dQ = new BigInteger(dQByte); BigInteger qInv = new BigInteger(qInvByte); return (new RSAPrivateCrtKeyParameters(n, e, d, p, q, dP, dQ, qInv)); } public byte[] rsaEncrypt(byte[] inputByte, RSAKeyParameters publicKey) { byte[] sesKeyCipher = null; try { AsymmetricBlockCipher rsaEngine = new PKCS1Encoding(new RSAEngine()); rsaEngine.init(true, publicKey); System.out.println(“enkripsi berjalan…”); System.out.println(“input encrypt length:” + inputByte.length); sesKeyCipher = rsaEngine.processBlock(inputByte, 0, inputByte.length); } catch (InvalidCipherTextException ex) { } return sesKeyCipher; } public byte[] rsaDecrypt(byte[] inputByte,RSAKeyParameters publicKey) { byte[] sesKeyPlain = null;
17
Lanjutan try { AsymmetricBlockCipher rsaEngine = new PKCS1Encoding(new RSAEngine()); rsaEngine.init(false, publicKey); System.out.println(“dekripsi berjalan…”); System.out.println(“input dekripsi length:” + inputByte.length); sesKeyPlain = rsaEngine.processBlock(inputByte, 0, inputByte.length); } catch (InvalidCipherTextException ex) { } return sesKeyPlain; } public byte[] getSignature(byte[] inputByte, RSAPrivateCrtKeyParameters privateKey) { byte[] signatureByte = null; try { MD5Digest md5Engine = new MD5Digest(); RSAEngine rsaEngine = new RSAEngine(); PSSSigner signer = new PSSSigner(rsaEngine, md5Engine, 64); signer.init(true, privateKey); signer.update(inputByte, 0, inputByte.length); signatureByte = signer.generateSignature(); } catch (DataLengthException ex) { } catch (CryptoException ex) { } return signatureByte; } public17oolean verifySignature(byte[] inputByte, byte[] signature, RSAKeyParameters publicKey) { MD5Digest md5Engine = new MD5Digest(); RSAEngine rsaEngine = new RSAEngine(); PSSSigner signer = new PSSSigner(rsaEngine, md5Engine, 64); signer.init(false, publicKey); signer.update(inputByte, 0, inputByte.length); return signer.verifySignature(signature); } public byte[] generator() { //
System.out.println(“tes”); BigInteger exp = new BigInteger(“11”, 16); // System.out.println(“tes1”); SecureRandom srand = new SecureRandom(); // System.out.println(“tes2”); RSAKeyGenerationParameters params = new RSAKeyGenerationParameters(exp, srand, 1024, 80); // System.out.println(“tes3”); RSAKeyPairGenerator rsaKeyPairGen = new RSAKeyPairGenerator(); // System.out.println(“tes4”); rsaKeyPairGen.init(params); AsymmetricCipherKeyPair keyPair = rsaKeyPairGen.generateKeyPair(); // 17oolean hasil generate RSAPrivateCrtKeyParameters rsaPrivateKey = (RSAPrivateCrtKeyParameters) keyPair.getPrivate(); // private key byte[] modulo = rsaPrivateKey.getModulus().toByteArray(); byte[] pubExp = rsaPrivateKey.getPublicExponent().toByteArray(); byte[] privExp = rsaPrivateKey.getExponent().toByteArray(); byte[] p = rsaPrivateKey.getP().toByteArray(); byte[] q = rsaPrivateKey.getQ().toByteArray(); byte[] dP = rsaPrivateKey.getDP().toByteArray(); byte[] dQ = rsaPrivateKey.getDQ().toByteArray(); byte[] qInv = rsaPrivateKey.getQInv().toByteArray();
18
Lanjutan ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); try { dos.writeInt(modulo.length); dos.writeInt(pubExp.length); dos.writeInt(privExp.length); dos.writeInt(p.length); dos.writeInt(q.length); dos.writeInt(dP.length); dos.writeInt(dQ.length); dos.writeInt(qInv.length); baos.write(modulo, 0, modulo.length); baos.write(pubExp, 0, pubExp.length); baos.write(privExp, 0, privExp.length); baos.write(p, 0, p.length); baos.write(q, 0, q.length); baos.write(dP, 0, dP.length); baos.write(dQ, 0, dQ.length); baos.write(qInv, 0, qInv.length); dos.close(); baos.close(); } catch (IOException ex) { } return baos.toByteArray(); } public static String URLdecode(String str) { StringBuffer result = new StringBuffer(); int l = str.length(); for (int I = 0; I< l; ++i) { char c = str.charAt(i); if (c == „%‟&&I + 2 < l) { char c1 = str.charAt(I + 1); char c2 = str.charAt(I + 2); if (isHexit(c1) && isHexit(c2)) { result.append((char) (hexit(c1) * 16 + hexit(c2))); I += 2; } else { result.appendI; } } else { result.appendI; } } return result.toString(); } private static 18oolean isHexit(char c) { String legalChars = “0123456789abcdefABCDEF”; return (legalChars.indexOfI != -1); } private static int hexit(char c) { if (c >= „0‟&& c <= „9‟) { return c –„0‟; } if (c >= „a‟&& c <= „f‟) { return c –„a‟ + 10; } if (c >= „A‟&& c <= „F‟) {
19
Lanjutan return c –„A‟ + 10; } return 0; } final static String[] hex = { “%00”, “%01”, “%02”, “%03”, “%04”, “%05”, “%06”, “%07”, “%08”, “%09”, “%0a”, “%0b”, “%0c”, “%0d”, “%0e”, “%0f”, “%10”, “%11”, “%12”, “%13”, “%14”, “%15”, “%16”, “%17”, “%18”, “%19”, “%1a”, “%1b”, “%1c”, “%1d”, “%1e”, “%1f”, “%20”, “%21”, “%22”, “%23”, “%24”, “%25”, “%26”, “%27”, “%28”, “%29”, “%2a”, “%2b”, “%2c”, “%2d”, “%2e”, “%2f”, “%30”, “%31”, “%32”, “%33”, “%34”, “%35”, “%36”, “%37”, “%38”, “%39”, “%3a”, “%3b”, “%3c”, “%3d”, “%3e”, “%3f”, “%40”, “%41”, “%42”, “%43”, “%44”, “%45”, “%46”, “%47”, “%48”, “%49”, “%4a”, “%4b”, “%4c”, “%4d”, “%4e”, “%4f”, “%50”, “%51”, “%52”, “%53”, “%54”, “%55”, “%56”, “%57”, “%58”, “%59”, “%5a”, “%5b”, “%5c”, “%5d”, “%5e”, “%5f”, “%60”, “%61”, “%62”, “%63”, “%64”, “%65”, “%66”, “%67”, “%68”, “%69”, “%6a”, “%6b”, “%6c”, “%6d”, “%6e”, “%6f”, “%70”, “%71”, “%72”, “%73”, “%74”, “%75”, “%76”, “%77”, “%78”, “%79”, “%7a”, “%7b”, “%7c”, “%7d”, “%7e”, “%7f”, “%80”, “%81”, “%82”, “%83”, “%84”, “%85”, “%86”, “%87”, “%88”, “%89”, “%8a”, “%8b”, “%8c”, “%8d”, “%8e”, “%8f”, “%90”, “%91”, “%92”, “%93”, “%94”, “%95”, “%96”, “%97”, “%98”, “%99”, “%9a”, “%9b”, “%9c”, “%9d”, “%9e”, “%9f”, “%a0”, “%a1”, “%a2”, “%a3”, “%a4”, “%a5”, “%a6”, “%a7”, “%a8”, “%a9”, “%aa”, “%ab”, “%ac”, “%ad”, “%ae”, “%af”, “%b0”, “%b1”, “%b2”, “%b3”, “%b4”, “%b5”, “%b6”, “%b7”, “%b8”, “%b9”, “%ba”, “%bb”, “%bc”, “%bd”, “%be”, “%bf”, “%c0”, “%c1”, “%c2”, “%c3”, “%c4”, “%c5”, “%c6”, “%c7”, “%c8”, “%c9”, “%ca”, “%cb”, “%cc”, “%cd”, “%ce”, “%cf”, “%d0”, “%d1”, “%d2”, “%d3”, “%d4”, “%d5”, “%d6”, “%d7”, “%d8”, “%d9”, “%da”, “%db”, “%dc”, “%dd”, “%de”, “%df”, “%e0”, “%e1”, “%e2”, “%e3”, “%e4”, “%e5”, “%e6”, “%e7”, “%e8”, “%e9”, “%ea”, “%eb”, “%ec”, “%ed”, “%ee”, “%ef”, “%f0”, “%f1”, “%f2”, “%f3”, “%f4”, “%f5”, “%f6”, “%f7”, “%f8”, “%f9”, “%fa”, “%fb”, “%fc”, “%fd”, “%fe”, “%ff” }; public static String URLencode(String s) { StringBuffer sbuf = new StringBuffer(); int len = s.length(); for (int I = 0; I< len; i++) { int ch = s.charAt(i); if („A‟<= ch && ch <= „Z‟) { // „A‟..‟Z‟ sbuf.append((char) ch); } else if („a‟<= ch && ch <= „z‟) { // „a‟..‟z‟ sbuf.append((char) ch); } else if („0‟<= ch && ch <= „9‟) { // „0‟..‟9‟ sbuf.append((char) ch); } else if (ch == „„) { // space sbuf.append(„+‟); } else if (ch <= 0x007f) { // other ASCII sbuf.append(hex[ch]); } else if (ch <= 0x07FF) { // non-ASCII <= 0x7FF sbuf.append(hex[0xc0 | (ch >> 6)]); sbuf.append(hex[0x80 | (ch & 0x3F)]); } else { // 0x7FF < ch <= 0xFFFF sbuf.append(hex[0xe0 | (ch >> 12)]); sbuf.append(hex[0x80 | ((ch >> 6) & 0x3F)]); sbuf.append(hex[0x80 | (ch & 0x3F)]); }
20
Lanjutan } return sbuf.toString(); } //=============================================== // .StringToByteArray //=============================================== public static final byte[] StringToByteArray(String s) { int len = s.length(); byte[] b = new byte[len]; for (int I = 0; I< len; i++) { b[i] = (byte) s.charAt(i); } return b; } private static final String ENCODINGSTR = “ISO-8859-1”; private static byte SupportsEncoding; //=============================================== //CheckEncoding() //=============================================== public static void CheckEncoding() {
byte[] b = new byte[1]; b[0] = (byte) 178; try { String s = new String(b, 0, 1, ENCODINGSTR); if (s == null) { throw new Exception(); } if (s.charAt(0) != 178) { SupportsEncoding = 2; } else { SupportsEncoding = 1; } } catch (Exception e) { String s = new String(b, 0, 1); if (s == null || s.length() != 1 || s.charAt(0) != 178) { SupportsEncoding = 2; } else { SupportsEncoding = 0; } } }
//=============================================== // .ByteArrayToString //=============================================== public static final String ByteArrayToString(byte[] buf, int off, int len) { StringBuffer sb = new StringBuffer(len); for (int I = 0; I< len; i++) { sb.append((char) (buf[i] & 0xff)); } return sb.toString(); }}
21
Lampiran 4 Data hasil enkripsi Data 123
Hasil enkripsi 4a3277148b2868c0fd56ef6c592198215c90b7ceb5a36672074a91a5381304c2095cec9f37 8728e010352226c68907167a04ad7f6c612c43c5cfd81f0f1f3db03ac0612420b7493f1c1d7 09f37deab9c372e4525af2be9a2a49961ca5e537bc85b1932e7d1e82ba1c6a7829407806a6 937e5f9e7eecb91224dca81a9e203e716
22
Lampiran 5 Proses uji pada aplikasi pengiriman data pilkadavia mobile – server Skenario Uji
Keterangan
Status Ya
Cek status pendaftaran petugas
Apakah pendaftaran ditutup ?
Tidak Ya
Cek status pendaftaran calon
Petugas memasukkan username, password, Pin
Apakah pendaftaran di tutup ?
Tidak
Proses otentikasi data petugas
Main menusistem (memilih calon, memasukkan jumlah suara, nama TPS, dan keadaan)
Menu generate token(petugas memasukkan password token dan generate response code)
Proses pengecekan response code?
Calon tidak bisa mendaftar Calon mengisi data diri lengkap dan tersimpan di dalam database
Tidak
Keluar warning bahwa petugas di minta memasukkan inputan yang lengkap
Apakah data bisa di terjemahkan ?
Apakah petugas menekan tombol submit ?
Petugas mengisi data diri lengkap dan tersimpan di dalam database
Sistemberhasil mengenkrip data dan melanjutkan ke proses dekrip data petugas
Apakah Input data lengkap ?
Apakah username, password, dan pin benar ?
Petugas tidak bisa mendaftar
Ya
Ya Proses dekripsi data petugas
Data Output
Sistem melanjutkan ke proses otentikasi data petugas
Tidak
Keluar warning bahwa pengirim tidak terotentikasi
Ya
Petugas berhasil masuk ke main menu
Tidak
Keluar warning bahwa petugas di minta memasukkan inputan dengan benar
Ya
Petugas masuk ke menu generate token
Tidak
Petugas tetap di main menu
Ya
Sistem melanjutkan ke proses pengecekan response code
Apakah passwordtoken yang di masukkan benar? Tidak
Keluar warning bahwa petugas di minta memasukkan password token dengan benar
Ya
Data di simpan di dalam database dan keluar informasi bahwa data sudah tersimpan
Tidak
Keluar warning bahwa responsecode sudah expired
Apakah responsecode sesuai ?