Back to Blog
Jan 8, 20264 min read

Menggugat Trust: Membangun Sistem E-Voting Zero-Trust dari Nol

Tirta Afandi
Tirta Afandi
@kikuk_afandi

Dalam dunia software engineering, ada satu adagium yang sering dilupakan ketika kita bicara soal aplikasi pemilu: "Jangan pernah percaya pada admin."

Terdengar kasar? Mungkin. Tapi itulah kenyataan pahit demokrasi digital. Selama ini, kita membangun aplikasi voting dengan asumsi bahwa pembuat sistem dan panitia adalah orang jujur. Kita menyerahkan database, password, dan akses penuh kepada mereka.

Tapi bagaimana jika mereka tidak jujur? Bagaimana jika ada "orang dalam" yang mengubah nilai kolom jumlah_suara di database MySQL via phpMyAdmin sambil minum kopi?

Keresahan itulah yang membuat saya merombak total QuickVote. Saya tidak lagi ingin membangun aplikasi pencatat suara. Saya ingin membangun Brankas Digital.

Inilah perjalanan saya membangun arsitektur Zero-Trust E-Voting.


1. Masalah Amplop dan Identitas

Tantangan pertama bukan pada kodingan, tapi pada logika dasar: Bagaimana cara kita tahu seseorang berhak memilih, tapi tidak tahu APA yang dia pilih?

Di pemilu konvensional, ini mudah. Anda tunjukkan KTP (Identitas), panitia kasih kertas suara kosong (Anonim), Anda masuk bilik. Hubungan antara KTP dan Kertas Suara putus saat Anda nyemplungin kertas ke kotak.

Di dunia digital? Log server mencatat semuanya. User ID 123 memilih Kandidat B pada jam 10:00:01. Privasi hilang.

Solusinya: Protokol Distribusi Fisik (The Paper Slip)

Saya memutuskan untuk kembali ke akar. "Low-tech" kadang adalah solusi keamanan terbaik. Saya membangun sistem di mana panitia mencetak Kode Akses dalam amplop tertutup yang dilipat dan distaples.

Panitia hanya melihat Nama di luar amplop. Kode di dalam? Hanya Tuhan dan Pemilih yang tahu saat amplop dibuka. Di sini, saya memutus mata rantai "Admin tahu segalanya".


2. Enkripsi: Mengunci Suara

Bagian paling teknis dan paling saya banggakan adalah Client-Side Encryption.

Banyak sistem e-voting melakukan enkripsi di server. Itu salah besar. Itu sama saja Anda menitipkan surat terbuka ke tukang pos, lalu meminta tukang pos yang mengelem amplopnya. Si tukang pos bisa saja mengintip isinya dulu.

Di QuickVote 2.0, saya menggunakan kombinasi RSA (Asimetris) dan AES.

Saat user mengklik "Pilih Kandidat A", browser (Chrome/Firefox) langsung mengacak data tersebut menjadi kode gibberish (Ciphertext) sebelum data itu dikirim lewat internet.

Artinya? Data yang melesat lewat WiFi, masuk ke router, hingga mendarat di database server saya, semuanya sudah berupa sampah karakter acak.

Bahkan jika saya (sebagai developer) membuka database:

  • Nama Kandidat: U2FsdGVkX1+... (Tidak terbaca)
  • Pilihan: xYz123... (Tidak terbaca)

Hanya ada satu cara membukanya: Upacara Kunci (Key Ceremony).

3. Upacara Kunci: Karena Satu Orang Terlalu Berbahaya

Siapa yang pegang kunci pembukanya? Kalau Admin yang pegang, ya sama saja bohong.

Saya menerapkan mekanisme Split Key. Kunci privat (Private Key) untuk membuka enkripsi dilindungi oleh Passphrase yang saya pecah menjadi 3 Kata Sandi.

Kata sandi ini dipegang oleh 3 orang berbeda (Misal: Saksi 1, Saksi 2, Ketua Panitia).

Untuk melihat hasil suara (Quick Count), ketiga orang ini harus hadir di depan terminal server, dan mengetikkan sandi mereka secara berurutan. Jika satu orang absen/berkhianat, gembok tidak akan terbuka. Hasil suara tetap aman terkunci selamanya.

Ini bukan lagi soal software, ini soal Prosedur Keamanan.


4. Transparansi: Membuka Tirai dengan Blockchain

Terakhir, bagaimana pemilih yakin suaranya tidak dihapus?

Saya mengadopsi konsep Blockchain Ledger sederhana. Setiap suara yang masuk memiliki "Sidik Jari Digital" (Hash) yang terikat dengan suara sebelumnya.

Jika saya iseng menghapus satu baris suara di tengah database, seluruh rantai di bawahnya akan "rusak" (Hash-nya tidak cocok). Sistem akan berteriak "DATA CORRUPTED!".

Setiap pemilih mendapatkan Kode Resi. Mereka bisa mengecek sendiri di papan pengumuman publik: "Apakah kode resi saya ada di daftar sah?" tanpa orang lain tahu siapa yang mereka pilih.


Teknologi untuk Kepercayaan

Membangun QuickVote 2.0 mengajarkan saya bahwa coding untuk demokrasi itu berat. Kita tidak hanya menulis baris kode (if-else), tapi kita sedang menulis rasa percaya.

Dengan arsitektur Zero Trust ini, saya bisa dengan lantang berkata: "Anda tidak perlu mempercayai saya. Percayalah pada matematikanya."

Karena pada akhirnya, matematika tidak bisa disuap.


Artikel ini ditulis berdasarkan pengembangan sistem QuickVote #DevLog #EVoting #ZeroTrust #Laravel #Cryptography

Tags

Engineering DevLog EVoting ZeroTrust Laravel Cryptography

Enjoyed this article?

Check out more writings

Back to Overview
Menggugat Trust: Membangun Sistem E-Voting Zero-Trust dari Nol