"; } } return $keys; } function mo ($g, $l) { return $g - ($l * floor ($g/$l)); } function extend ($Ee,$Epi) { $u1 = 1; $u2 = 0; $u3 = $Epi; $v1 = 0; $v2 = 1; $v3 = $Ee; while ($v3 != 0) { $qq = floor($u3/$v3); $t1 = $u1 - $qq * $v1; $t2 = $u2 - $qq * $v2; $t3 = $u3 - $qq * $v3; $u1 = $v1; $u2 = $v2; $u3 = $v3; $v1 = $t1; $v2 = $t2; $v3 = $t3; $z = 1; } $uu = $u1; $vv = $u2; if ($vv < 0) { $inverse = $vv + $Epi; } else { $inverse = $vv; } return $inverse; } function GCD($e,$pi) { $y = $e; $x = $pi; while ($y != 0) { $w =
mo($x , $y);
$x = $y; $y = $w; } return $x; } function tofindE($pi) { global $primes, $maxprimes; $great = 0; $cc = mt_rand (0,$maxprimes); $startcc = $cc; while ($cc >= 0) {
22
$se = $primes[$cc]; $great = GCD($se,$pi); $cc--; if ($great == 1) break; } if ($great == 0) { $cc = $startcc + 1; while ($cc <= $maxprimes) { $se = $primes[$cc]; $great = GCD($se,$pi); $cc++; if ($great == 1) break; } } return $se; } function rsa_encrypt ($m, $e, $n) { $asci = array (); for ($i=0; $i<strlen($m); $i+=3) { $tmpasci="1"; for ($h=0; $h<3; $h++) { if ($i+$h <strlen($m)) { $tmpstr = ord (substr ($m, $i+$h, 1)) - 30; if (strlen($tmpstr) < 2) { $tmpstr ="0".$tmpstr; } } else { break; } $tmpasci .=$tmpstr; } array_push($asci, $tmpasci."1"); }
//Each number is then encrypted using the RSA formula: block ^E mod N for ($k=0; $k< count ($asci); $k++) { $resultmod = powmod($asci[$k], $e, $n); $coded .= $resultmod." "; } return trim($coded); } function powmod ($base, $exp, $modulus) { $accum = 1; $i = 0; $basepow2 = $base; while (($exp >> $i)>0) { if ((($exp >> $i) & 1) == 1) { $accum = mo(($accum * $basepow2) , $modulus); } $basepow2 = mo(($basepow2 * $basepow2) , $modulus); $i++; } return $accum; } function rsa_decrypt ($c, $d, $n) { //Strip the blank spaces from the ecrypted text and store it in an array
23
$decryptarray = split(" ", $c); for ($u=0; $u
Pada kode program RSA dideklarasikan fungsi-fungsi yang akan digunakan pada fungsi-fungsi lainnya. Fungsi utama pada kode program RSA di atas adalah sebagai berikut: a. generate_keys($show_debug=0)
Fungsi ini digunakan untuk mendapatkan nilai kunci publik, kunci privat dan modulo secara acak yang digunakan untuk tiap pemilih yang melakukan pendaftaran. b. rsa_encrypt($m, $e, $n)
Fungsi ini digunakan untuk melakukan enkripsi pada pesan $m menggunakan kunci publik $e dan modulo $n masing-masing pemilih. c. rsa_decrypt($c, $d, $n)
Fungsi ini digunakan untuk melakukan dekripsi pada ciphertext $c menggunakan kunci privat $d dan modulo $n masing-masing pemilih.
Implementasi algoritme kunci simetri adalah menggunakan algoritme twofish dalam bahasa PHP. Implementasi di sistem e-voting ini dapat dilihat pada gambar di bawah ini yang secara umum terdiri dari fungsi enkripsi dan dekripsi. /* Name:TwoFish
encryption
About: Handles encryption / decrytion of TwoFish
ciphers
Author: Greg Sidberry [ gregsidberry.com ] Requires:None Vars:None */ class TwoFish { var $mTwoFish=array(); function TwoFish(){ //initalise mcrypt and needed vars srand((double)microtime()*1000000 ); $this->mTwoFish['td']=mcrypt_module_open(MCRYPT_TWOFISH, '',
MCRYPT_MODE_CBC, '');
$this->mTwoFish['iv']=mcrypt_create_iv(mcrypt_enc_get_iv_size($this->mTwoFish['td']), MCRYPT_RAND); $this->mTwoFish['ks'] = mcrypt_enc_get_key_size($this->mTwoFish['td']); } function makeKey($key1,$key2){ //encryption requires two keys. we use the passsed keys if available, else we get a md5 hash of current timestamp.
24
$key1 = ($key1===false) ? md5(time()): $key1; $key2 = ($key2===false) ? md5(time()): $key2; //now create the key using the two keys passed - taken from php.net $key = substr($key1, 0, $this->mTwoFish['ks']/2) . substr(strtoupper($key2), (round(strlen($key2) / 2)), $this->mTwoFish['ks']/2); $key = substr($key.$key1.$key2.strtoupper($key1),0,$this->mTwoFish['ks']); $this->mTwoFish['key']=$key; } function encrypt($string){ //init encryption mcrypt_generic_init($this->mTwoFish['td'], $this->mTwoFish['key'], $this->mTwoFish['iv']); //encypt data $encrypted = mcrypt_generic($this->mTwoFish['td'], $string); //terminate encryption handler mcrypt_generic_deinit($this->mTwoFish['td']); //return encrypted value return $encrypted; } function decrypt($string){ //init encryption mcrypt_generic_init($this->mTwoFish['td'], $this->mTwoFish['key'], $this->mTwoFish['iv']); //encypt data $decrypted = mdecrypt_generic($this->mTwoFish['td'], $string); //terminate encryption handler mcrypt_generic_deinit($this->mTwoFish['td']); return $decrypted; } function close(){ mcrypt_module_close($this->mTwoFish['td']); } }
Pada algoritme kunci simetri pada gambar di atas dideklarasikan fungsi-fungsi yang akan digunakan pada fungsi-fungsi lainnya. Fungsi pada algoritme twofish adalah sebagai berikut: a. makeKey($key1,$key2)
Fungsi ini digunakan untuk membuat kunci dengan masukan dua buah kunci $key1 dan $key2 yang akan menghasilkan satu buah kunci $key. b. encrypt($string)
Fungsi ini digunakan untuk melakukan enkripsi pada pesan $string menggunakan kunci yang telah dibuat pada fungsi makeKey($key1,$key2). c. decrypt($string)
Fungsi ini digunakan untuk melakukan dekripsi pada ciphertext $string menggunakan kunci yang telah dibuat pada fungsi makeKey($key1,$key2).
25
Lampiran 3 Black Box Testing Tabel Deskripsi dan Hasil Uji untuk Fungsi Pendaftaran Pemilih No. 1.
Deskripsi Uji Memeriksa hasil pendaftaran pemilih
Kondisi Awal Halaman pendaftar an
Skenario Uji Pemilih memasukkan data pendaftaran dengan benar Pemilih memasukkan data pendaftaran tidak lengkap
Hasil yang Diharapkan Muncul pemberitahuan bahwa pendaftaran sukses Muncul pesan kesalahan dalam melakukan pendaftaran
Hasil Uji OK
OK
Tabel Deskripsi dan Hasil Uji untuk Fungsi Pengaktifan Pemilih No. 1.
Deskripsi Uji Mengubah status pemilih yang telah mendaftar menjadi aktif
Kondisi Awal Halaman edit pemilih
Skenario Uji Administrator mengubah status pemilih yang sudah mendaftar menjadi aktif
Hasil yang Diharapkan Status pemilih yang diubah menjadi aktif
Hasil Uji OK
Tabel Deskripsi dan Hasil Uji untuk Fungsi Autentikasi Pengguna (Login) No. 1.
2.
Deskripsi Uji Memeriksa hasil autentikasi login untuk administrator yang akan memasuki halaman Evoting Management System
Memeriksa hasil autentikasi login untuk pemilih yang akan memasuki evoting system
Kondisi Awal Halaman login
Halaman login
Hasil Uji OK
Skenario Uji
Hasil yang Diharapkan
Administrator memasukkan data login (nomor KTP, password, dan captcha) yang valid untuk tingkatan administrator dan meng-klik tombol ‘Login’ Administrator memasukkan data login (nomor KTP, password, dan captcha) yang tidak valid dan meng-klik tombol ‘Login’
Administrator memasuki halaman E-voting Management System
Administrator tidak bisa memasuki halaman Evoting Management System dan diberikan pesan kesalahan
OK
Pemilih aktif memasukkan data login (nomor KTP, password, dan captcha) yang valid untuk tingkatan administrator dan meng-klik tombol ‘Login’
Pemilih memasuki halaman e-voting system
OK
26
Pemilih aktif memasukkan data login (nomor KTP, password, dan captcha) yang tidak valid dan meng-klik tombol ‘Login’ Pemilih tidak aktif memasukkan data login (nomor KTP, password, dan captcha) yang valid dan meng-klik tombol ‘Login’
Pemilih tidak bisa memasuki halaman evoting system dan diberikan pesan kesalahan
OK
Muncul pesan kesalahan bahwa pemilih belum melaporkan pendaftarannya ke panitia pemilihan
OK
Tabel Deskripsi dan Hasil Uji untuk Fungsi Pemilihan No.
Deskripsi Uji
1.
Pemilih melakukan pemilihan pada calon
2.
Pemilih mengecek hasil pilihannya
Kondisi Awal Halaman pemiliha n calon
Halaman pemiliha n calon
Skenario Uji
Hasil yang Diharapkan
Hasil Uji OK
Pemilih meng-klik tombol ‘PILIH’ tanpa menentukan pilihannya
Pesan kesalahan bahwa pilihan tidak boleh kosong
Pemilih menentukan pilihannya tetapi tidak atau salah mengisi captcha dan meng-klik tombol ‘PILIH’
Pesan kesalahan bahwa kode tidak sama
OK
Pemilih menentukan pilihan, mengisi captcha dengan benar, dan mengklik tombol ‘PILIH’ Pemilih salah atau tidak memasukkan password lalu meng-klik tombol ‘Lihat Pilihan’ Pemilih memasukkan password dengan benar
Pemilihan berhasil dan langsung masuk ke halaman pengecekan hasil pilihan
OK
Pesan kesalahan bahwa password yang dimasukkan salah
OK
Muncul tampilan calon yang dipilih oleh pemilih
OK
Tabel Deskripsi dan Hasil Uji untuk Fungsi Perhitungan Suara No.
Deskripsi Uji
1.
Mengirim hasil perhitungan suara di kelurahan ke pusat
Kondisi Awal Halaman hasil perhitunga n suara kelurahan
Skenario Uji
Hasil yang Diharapkan
Administrator meng-klik tombol ‘Kirim Hasil Pemilihan’
Pesan bahwa pengiriman hasil perhitungan berhasil
Hasil Uji OK
27
2.
Melihat hasil perhitungan suara total
Halaman hasil perhitunga n suara pusat
Masuk ke halaman perhitungan suara pusat
Menampilkan data hasil perhitungan total dan hasil perhitungan masing-masing kelurahan
OK
28