i
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
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.
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
ii Judul skripsi : Implementasi Public Key Infrastructure untuk Keamanan Sistem Pengiriman
Data Pilkada Via Mobile
Nama : Syamsul Arifin
NIM : 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
iii
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
iv
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 :
1Teman-teman di PT. Global Posisi Semesta, terutama kepada Bapak Rudy Hartanto selaku pimpinan perusahaan.
2Seluruh staf pengajar dan karyawan Departemen Ilmu Komputer Institut Pertanian Bogor. 3Teman-teman ILKOM angkatan 43 atas kebersamaan dan dukungannya.
4Teman-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
v
DAFTAR ISI
Halaman
DAFTAR GAMBAR ... vi
DAFTAR LAMPIRAN ... vi
PENDAHULUAN Latar Belakang ... 1
Tujuan ... 1
Ruang Lingkup ... 1
Manfaat Penelitian ... 1
TINJAUAN PUSTAKA Kriptografi Kunci Publik ... 1
Algoritme RSA ... 1
Fungsi Hash ... 2
Message Digest 5 (MD5) ... 2
Komunikasi Perangkat Mobile ... 2
1 Teknologi Nirkabel 1G ... 2
2 Teknologi Nirkabel 2G ... 2
3 Teknologi Nirkabel 2,5 G ... 3
4 Teknologi Nirkabel 3G ... 3
Java 2 Micro Edition (J2ME) ... 3
1 Connected Limited Device Configuration (CLDC) ... 3
2 Connected Device Configuration (CDC) ... 4
3 Mobile Information Device Profile (MIDP) ... 4
METODE PENELITIAN Ancaman (Thread) ... 4
Kebijakan (Policy) ... 4
Spesifikasi ... 4
Desain... 4
Implementasi ... 4
HASIL DAN PEMBAHASAN Ancaman (Thread) ... 5
Kebijakan (Policy) ... 5
Spesifikasi ... 5
Desain... 5
Implementasi ... 8
KESIMPULAN DAN SARAN Kesimpulan ... 8
Saran ... 8
vi
DAFTAR GAMBAR
Halaman
1 Algoritme MD5 (Munir 2004) ... 2
2 Arsitektur jaringan GPRS. ... 3
3 Perkembangan teknologi Java ... 3
4 Siklus hidup sistem keamanan (Neyman 2007). ... 4
5 Flowchart pendaftaran petugas. ... 6
6 Flowchart pendaftaran calon. ... 6
7 Flowchart login ke sistem. ... 6
8 Form login. ... 7
9 Flowchart pengiriman data. ... 7
10 Formgenerate token. ... 8
DAFTAR LAMPIRAN Halaman 1 User interface aplikasi di sisi server ... 11
2 User interface aplikasi di sisi client ... 12
3 Implementasi public key infrastructure... 13
4 Data hasil enkripsi ... 21
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 client-server. 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
aplikasi yang membutuhkan keamanan data digital.
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).
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 n-bit, 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. 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.
Gambaran pembuatan message digest
dengan algoritme MD5 dapat dilihat pada Gambar 1.
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 rata-rata 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 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.
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).
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
perangkat mobile, seperti pager, ponsel, screen-phones, 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.
Gambar 3 Perkembangan teknologi Java.
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.
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.
Low End Consumer
Device
Java Virtual Machine KVM Card VM
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
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
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 kebijakan-kebijakan 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 viamobile. 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
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
dibagi berdasarkan modul yang dibutuhkan dalam sistem. Modul-modul tersebut antara lain adalah:
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.
Mulai
Input Data Diri Pendaftaran ditutup
Input data
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.
Mulai
Input Data Diri Pendaftaran ditutup
Gambar 6 Flowchart pendaftaran calon.
Mulai password dan pin menggunakan
kunci privat petugas dengan algoritma kunci asimetri oleh petugas, dilakukan proses pengiriman data.
Login dilakukan oleh petugas pada saat proses perhitungan suara, baik saat hasil perhitungan
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.
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 enkripsi-deskripsi 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.
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.
Memilih calon dan memasukkan Jumlah suara, nama TPS dan
keadaan
Proses submit
Proses Generate respon Code menggunakan password token petugas
dan challenge code
Memasukkan password token Proses Generate Challenge Code
Enkripsi id petugas, challenge code, respon code, jumlah suara, pilihan calon, nama TPS, kondisi pilkada menggunakan kunci challenge code, respon code, jumlah suara, pilihan
calon, nama TPS, kondisi pilkada menggunakan
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.
user
Gambar 11 Formgenerate 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
flowchart atau desain sistem yang telah ditentukan pada tahap desain. Untuk lebih detail, hasil pengujian dapat dilihat di Lampiran 5.
KESIMPULAN DAN SARAN
Kesimpulan
Penelitian ini berhasil menerapkan metode
public key infrastructure. Dalam prosesnya, sistem ini sendiri bisa memberikan beberapa layanan keamanan untuk mengatasi ancaman-ancaman 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):203-123.
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.
Lanjutan
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();
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();
// construct private key
// RSAPrivateCrtKeyParameters privKey = constructPrivateKey(modulo, pubExp, privExp, p, q, dP, dQ, qInv);
// 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);
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();
// construct private key
// RSAPrivateCrtKeyParameters privKey = constructPrivateKey(modulo, pubExp, privExp, p, q, dP, dQ, qInv);
// 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){
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; }
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();
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; }
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)]);
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)); }
Lampiran 4 Data hasil enkripsi
Data Hasil enkripsi
123 4a3277148b2868c0fd56ef6c592198215c90b7ceb5a36672074a91a5381304c2095cec9f37
Lampiran 5 Proses uji pada aplikasi pengiriman data pilkadavia mobile – server
Skenario Uji Keterangan Status Data Output
Cek status pendaftaran petugas
Apakah pendaftaran ditutup ?
Ya Petugas tidak bisa mendaftar
Tidak
Petugas mengisi data diri lengkap dan tersimpan di dalam database
Cek status pendaftaran calon Apakah pendaftaran di tutup ?
Ya Calon tidak bisa mendaftar
Tidak
Calon mengisi data diri lengkap dan tersimpan di dalam database data dan melanjutkan ke proses dekrip data petugas
Tidak
Keluar warning bahwa petugas di minta
memasukkan inputan yang lengkap
Proses dekripsi data petugas Apakah data bisa di terjemahkan ? pengirim tidak terotentikasi
Proses otentikasi data petugas
Apakah username,
password, dan pin
benar ?
Ya Petugas berhasil masuk ke
main menu
Tidak
Keluar warning bahwa petugas di minta memasukkan inputan dengan benar
Main menusistem (memilih calon, memasukkan jumlah suara, nama TPS, dan keadaan)
password token dan generate
response code)
Apakah passwordtoken yang di masukkan
benar?
Ya
Sistem melanjutkan ke proses pengecekan response code
Tidak
Keluar warning bahwa petugas di minta memasukkan password
token dengan benar
Proses pengecekan response code?
Apakah responsecode
sesuai ?
Ya
Data di simpan di dalam
database dan keluar informasi bahwa data sudah tersimpan
Tidak Keluar warning bahwa
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.
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 client-server. 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
aplikasi yang membutuhkan keamanan data digital.
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).
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 n-bit, 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. 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.
Gambaran pembuatan message digest
dengan algoritme MD5 dapat dilihat pada Gambar 1.
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 rata-rata 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 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.
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).
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
perangkat mobile, seperti pager, ponsel, screen-phones, 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.
Gambar 3 Perkembangan teknologi Java.
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.
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.
Low End Consumer
Device
Java Virtual Machine KVM Card VM