Langsung ke konten utama

Merancang Sistem Baru sebagai Upaya untuk Meningkatkan Kredibilitas serta Transparansi Perhitungan Suara

Indonesia dalam beberapa hari terkahir ini diramaikan dengan isu-isu serangan siber dan hal-hal konyol lainnya. Tetiba banyak sekali hacker gadungan yang bermain hacker-hackeran. Semua ini dilatarbelakangi oleh kekhawatiran masyarakat yang merasa akan terjadinya kecurangan dalam pemilihan umum kali ini. Alih-alih ingin berkontribusi justru yang ada malah terlihat bodoh. Untuk mengurangi hal-hal bodoh seperti ini muncul kembali, ada baiknya kita memikirkan sistem baru yang dapat membungkam manusia-manusia semacam ini di Indonesia. Tak perlu yang canggih sekali, yang penting transparan. Well, actually, teknologi yang akan digunakan sudah cukup canggih jadi aku bisa bilang kalau sistem yang akan dibuat ini sudah cukup canggih dan tidak mudah untuk dijaili. Tulisan ini hanya akan membicarakan konsep. Implementasinya tentu di lain waktu saja bila memungkinkan bagiku untuk membuatnya.

Kenali Sistem yang Ada

Sebelum membicarakan rancangan sistem yang baru, kita perlu mengenali sistem yang udah ada terlebih dahulu. Bagaimana sih cara KPU menghitung suaranya? Bagaimana dengan transparansi yang udah ada di KPU sekarang? Singkatnya, suara dihitung di TPS masing-masing kemudian direkap ke dalam bentuk form C1 yang kemudian "dikumpulkan" ke KPU pusat. Pengumpulan form C1-nya dengan cara melakukan pemindaian dokumen tersebut yang kemudian di-submit ke (setahu saya) suatu Google Form. Setelah diterima, barulah data tersebut dipublikasikan di Situng KPU (sistem informasi perhitungan suara). Untuk setiap TPS di Situng, kita bisa liat angkanya serta hasil pemindaian form C1-nya.

Berdasarkan cara kerja di atas, sepertinya sudah cukup transparan, bukan? Kendati demikian, sayangnya masih banyak orang-orang bodoh yang mudah ditipu oleh gambar. Bisa saja gambarnya disunting dengan Photoshop atau semacamnya, iya ga? Selain itu informasi perhitungan di Situng juga bisa dimanipulasi locally dengan memanfaatkan inspect element. Masalahnya banyak orang awam yang tidak tahu tapi merasa paling tahu sehingga kekacauan ini tidak dapat dihindari. Untuk membungkam orang-orang model gini, ada baiknya kita perbaiki sistem yang sudah ada. Salah satunya dengan meningkatkan transparansi ke tingkatan yang selanjutnya. Selain masalah transparansi, masalah keamanan peladen (server) juga sering dijadikan target penyebaran berita bohong. Sekalian aja deh kita tingkatin juga.

Biar gampang diinget, kita kasih nama sistem baru yang bakal kita rancang nih. Aku kasih nama Goblok aja deh. Kenapa Goblok? Karena mereka goblok tapi sok tau. Biar nanti kalau ada orang yang teriak-teriak curang karena liat tangkapan layar doang yang notabene dapat dengan mudah dipalsukan bisa kamu bales "buka aja Goblok, liat langsung di sana data riilnya." Selamat berbaku hantam!


Biar lebih bagus kita namain Sistem Informasi Goblok atau disingkat menjadi Si Goblok.

Kumpulan Istilah-Istilah yang Digunakan

Sebelum jauh-jauh membahas arsitektur dan sebagainya, ada baiknya kita pahami dahulu beberapa istilah-istilah yang akan sering digunakan. Kamu boleh aja melewati bagian ini dan kembali lagi saat menemukan istilah yang asing bagi kamu. Kalau istilah yang kamu cari tidak ada di sini, aku saranin buat cari aja sendiri dengan bantuan mesin pencari.

  1. Cari
  2. Sendiri
  3. Ajalah
  4. Aku
  5. Malas
  6. Nulisnya


Garis Besar Arsitektur Si Goblok

Arsitektur sistem yang akan dibangun ini menggunakan teknologi yang cukup edgy. Kita akan bermain-main dengan virtual machine, container engine (termasuk orchestration-nya), version control, websocket, JavaScript obfuscation, dan lain-lain. Selain itu sistem informasi Goblok ini dipisah menjadi tiga bagian. Bagian pertama berupa bagian utamanya yang bertugas untuk menyimpan form C1 serta riwayat perubahan data dan sejenisnya lah. Bagian yang kedua itu cuma buat nampilin datanya aja. Bagian yang ketiga buat forwarder atau sebagai penengah dari bagian satu dan bagian dua.

Sayangnya dalam hal ini kita gabisa pake auto scaling dari platform ternama seperti AWS dan Heroku. Intinya ada banyak limitasi karena peladennya harus di Indonesia. Kenapa? Nanti kena isu lagi karena datanya tidak disimpan di peladen Indonesia. Nah, dari sini kita tau kalau data-data penting harus disimpan di Indonesia. Bagaimana dengan bagian kedua yang hanya digunakan untuk menampilkan data saja? Kita bisa dong memanfaatkan layanan sejenis GitHub Pages? Layanan sebesar GitHub aku rasa gabakal down kalau diakses oleh banyak orang. Lebih tepatnya juga anti DDoS, kan? Ini penting agar hacker-hackeran tidak kebanyakan gaya. Selain itu bagian ketiga juga tidak perlu di Indonesia karena fungsinya cuma sebagai penengah. Intinya bagian satu sebisa mungkin jangan diketahui IP address-nya.

Gambar 1. Aliran data sistem informasi Goblok (Si Goblok).

Berdasarkan Gambar 1, bagian ketiga yang disebutkan di atas adalah Server B. Bagian pertama adalah Server A sementara bagian kedua adalah Server C. Intinya, Server A itu IP address-nya tidak dipublikasikan karena di Server B pemanggilan API dilakukan di backend. Adapun di Server C pemanggil API ke Server B dilakukan di frontend. Sehingga, alamat IP yang diketahui hanya Server B dan Server C. Dengan menggunakan layanan yang reliable, DDoS or some shits tidak berguna. Akibatnya, hacker gadungan akan semakin terlihat bodoh. Di situlah aku senang. Sampai sini sudah terlihat kalau kita sangat meminimalisir informasi penting agar tidak tersebar sehingga ancaman serangan oleh hacker yang capable dapat diperkecil.

Rancangan Si Goblok secara Detail

Server A

Gambar 2. Arsitektur Server A sebagai aplikasi utama.

Server A merupakan aplikasi utama dan peladennya harus ditempatkan di Indonesia. Untuk meningkatkan keamanannya, kita perlu meningkatkan kerumitannya juga. Kita menggunakan virtual machine (VM) dengan bantuan Vagrant. Agar lebih indah, kita gunakan saja Nomad yang sudah mempaketkan banyak hal yang kita butuhkan. Di sini peran Nomad adalah sebagai orchestrator. Nomad memiliki Driver yang mendukung container engine seperti Docker dan rkt. Intinya isolasi sistemnya agar dapat dipulihkan dengan mudah apabila terjadi perusakan sistem oleh hacker. Kamu hancurkan sistemnya wahai hacker? "vagrant up" dan Si Goblok pulih dengan sendirinya. Tentunya kita perlu melakukan beberapa setup sebelumnya tapi untuk saat ini abaikan aja dulu.

Setelah mengisolasi sistem dengan virtual machine, kita isolasi lagi bagian-bagian kecilnya. Dimulai dengan database. Ambil aja Docker image untuk suatu database, setup dikit, kelar. Untuk GitLab CE, ambil aja Docker image-nya, setup dikit, kelar. Kenapa pakai GitLab CE? Nanti akan kujelasin di bagian "Cara Kerja Si Goblok." Tapi yang jelas GitLab mendukung REST API jadi harus kita manfaatkan. Lantas bagaimana dengan database kita? Ya, kita perlu auto backup buat ini. Asumsikan aja kita udah bikin task buat mencadangkan basis data kita.

Server B

Gambar 3. Arsitektur Server B sebagai forwarder antar Server.

Server B merupakan forwarder yang ditempatkan di Heroku (atau AWS juga boleh). Intinya biar gabisa diserang DDoS atau sejenisnya aja sih. Kita juga bisa pake fitur auto scalling-nya. Kita juga harus pakai cache (misalnya Redis) agar orang-orang iseng yang tekan key F5 tanpa berhenti sia-sia usahanya. Cache hit? Pake data yang udah ada. Cache miss? Ambil data ke Server A lalu simpan di Cache terus kirim hasilnya. Dengan demikian Server A tidak terlalu berat kerjanya.

Server C

Gambar 4. Arsitektur Server C sebagai pemberi View.

Server C pada dasarnya digunakan hanya untuk menampilkan data saja. Karena itu di Server C hanya ada HTML, CSS, dan JavaScript doang. Kita host di GitHub Pages atau Netlify aja biar hacker gadungan gabisa deface (insert LOL here). Ya atau minimal dia kesulitan pake banget deh. Nah lanjut, Server C ketika ada request akan memanggil Server B. Setelah itu data yang diterima akan ditampilkan. Bagian yang paling penting di sini kode JavaScript hasil build-nya harus menerapkan obfuscation agar sulit untuk dimanipulasi dengan inspect element. Kenapa? Di sini kita menggunakan websocket ke Server B agar data perolehan suara tidak dapat diubah dengan inspect element. Server C ini melakukan listen secara real time ke Server B sehingga ketika data diubah dapat dikembalikan lagi oleh websocket tersebut. Mau inspect element bos? Usaha dulu ea.

Sebenernya gaperlu sih sampe pake websocket segala. Tapi sebisa mungkin kurangin orang-orang yang gampang triggered karena gambar screenshot-an hasil inspect element.

Cara Kerja Si Goblok

Untuk Petugas KPU

Petugas KPU atau apapun itu namanya yang bertugas untuk menghitung suara dapat dibuatkan akun GitLab-nya di Server A (aktifin fitur 2FA-nya juga!). Buat aja satu repository untuk menyimpan form C1 serta perolehan suara dalam bentuk data. Masing-masing daerah membuat branch-nya masing-masing. Untuk setiap perubahan data diharuskan melalui pull request. Dengan demikian semua perubahan dapat dipantau dan ditinjau oleh semua petugas yang ada. Selain itu riwayat commit yang tersimpan dapat dilacak sehingga ini sangat meningkatkan transparansi. GitLab CE di Server A harus mendukung pemanggilan REST API agar Server B dapat mengambil informasi commit yang telah dibuat. Pastikan deskripsi untuk setiap commit cukup deskriptif seperti misalnya "Input suara untuk (TPS), (Kelurahan), (Kecamatan), (Kabupaten), (Provinsi)." Dengan ini pengguna dapat melihat langsung perubahan datanya karena commit tersebut akan menampilkan diff-nya di bagian itu aja.

Siapa yang melakukan commit dan siapa yang melakukan review (termasuk merger) perlu ditampilkan juga? Lebih bagus iya. Namun, menimbang banyaknya kaum barbarian di Indonesia sebaiknya jangan dulu. Takutnya nanti kena persekusi kan repot.

Nomad ini ada fitur monitoring juga, lho. Jadinya buat petugas mudah aja memantau server, client, dan task yang jeralan di Nomad. Ketika ada yang salah, bisa langsung ditinjau lalu dipulihkan. Such a bliss!

Untuk Netijen Maha Benar

Netijen yang Maha Benar ini dapat mengunjungi website si Goblok. Goblok nantinya akan menampilkan hasil perolehan suara sementara sampai dengan tiba waktunya 100% suara dimasukkan. Sebagai referensi, kira-kira seperti Situng sekarang tapi ditambahkan dengan riwayat commit. Tentunya di commit tersebut form C1 harus disediakan juga agar dapat dilihat langsung keasliannya.

Kendala untuk Mewujudkan Si Goblok

Kendalanya tentu ada banyak. Selain implementasinya yang ribet, kita juga perlu SDM yang memadai. Tidak semua orang mengerti bagaimana cara memakai platform seperti GitLab. Mahasiswa yang kuliah di program studi Teknik Informatika dan sejenisnya pun tidak semuanya tau apa itu Git. Ups!

Penutup

Semoga sistem informasi yang dirancang ini dapat direalisasikan dan dapat mengurangi kebodohan-kebodohan yang terjadi sekarang ini. Teruntuk kamu yang menjadi hacker gadungan atau mendadak menjadi ahli IT, segeralah memohon ampun kepada Tuhan Yang Maha Esa.

Komentar

Posting Komentar

Aku berharap dapet komentar yang membangun.

Postingan populer dari blog ini

Bagaimana Cara Menjadi Siswa Google Summer of Code?

Google Summer of Code  (GSoC) adalah salah satu program yang dibuat oleh Google dalam rangka meramaikan partisipasi mahasiswa/i untuk berkontribusi ke proyek-proyek sumber terbuka. Ada banyak keuntungan yang akan kita dapatkan apabila terpilih menjadi salah satu siswanya. Selain mendapatkan bimbingan langsung dari orang-orang yang kompeten, kita juga akan diberikan upah untuk kebutuhan hidup. Upah tersebut diberikan apabila kita lolos evaluasi yang dilaksanakan tiga kali. Nilai upah yang diberikan bervariasi tergantung pada tempat dan kebijakan Google di setiap tahunnya. Pada tahun 2018, total upah yang diberikan untuk Indonesia adalah USD 2400. Kamu bisa lihat informasi mengenai upah tahun ini di halaman Student Stipends . Seperti apa GSoC dan bagaimana cara menjadi salah satu pesertanya? Sedikit Pengalaman Mengerjakan Proyek GSoC di Organisasi Haskell Tahun 2018 lalu aku mengerjakan proyek GSoC di organisasi  Haskell . Aku gagal di evaluasi kedua karena ada miscommuni

Membangun Kembali Citraku Sebagai Penulis Blog

Halo, salam kenal! Aku Wisnu, seorang pemrogram yang saat ini tengah menjalani pendidikan di salah satu universitas swasta di Indonesia. Buat kamu yang belum pernah sekalipun membaca tulisan postingan blogku, mungkin tidak akan ada masalah dengan gaya tulisan yang sekarang lagi kamu baca. Aku rasa buat yang udah sering baca tulisanku (dulu) pasti ngerasa ada yang beda. Ya, aku terbiasa menulis dengan gaya formal. Gaya tulisan formal tersebut nampaknya kurang cocok dipakai untuk sebuah postingan blog karena terkesan kaku. Dampaknya yah interaksi dengan pembaca terasa kurang. Itulah sebabnya aku mengubah gaya penulisanku menjadi lebih santai. Aku ngomong gini in case kamu penikmat blog berfaedahku. Kalau kamu penikmat blog aibku udah pasti ga heran sama gaya tulisanku. Setelah sekian lama akhirnya aku pakai Blogger lagi. Kenapa kok pakai Blogger lagi? Padahal mampu bikin blogging engine sendiri karena katanya aku pemrogram, bukan? Kan keren kalo bisa! Juga, kenapa ga pake yang lain