Data identitas penduduk indonesia berupa Kartu dinamai Kartu Tanda Penduduk (KTP). Data diri seseorang biasaya diminta oleh pihak perusahaan atau aplikasi, penggunaan data pribadi ini tidak banyak diketahui oleh pengguna kecuali mereka memberitahu bagaimana data disimpan dan diproses. Penyimpanan data ini haruslah disimpan dengan aman, terlepas digunakan untuk apapun oleh perusahaan agar data ini tidak mudah diakses oleh pihak yang tidak bertanggung jawab.
Kasus Pencurian Data
Banyak kasus pencurian data aplikasi khususnya di Indonesia, pencurian ini dilakukan oleh hacker. Apapun motifnya, ini sangat merugikan pengguna dan perusahaan. Periksadata.com adalah situs untuk memeriksa apakah email kamu sudah pernah pernah terdaftar di database aplikasi yang diretas.
Biasanya data yang bocor adalah username, email, password dan tanggal lahir. Ini data utama yang harus pengguna masukkan ketika mendaftar di website atau aplikasi. Data pribadi yang lebih personal seperti alamat, Nomor Induk Kependudukan (NIK), hingga status hubungan yang biasa tertera di KTP jarang dimintai oleh pihak perusahaan/website/aplikasi. Data tersebut terlalu personal dan mungkin tidak relevan dalam aktifitas didalam website atau aplikasi.
Katakanlah sebuah aplikasi atau website mengharuskan pengguna untuk memasukkan data personal, biasanya ini berhubungan dengan uang untuk mengatur transaksi keuangan. Maka, perlu analisa bagaimana mengamankan data pengguna? apakah semua data perlu dienkripsi? jika enkripsi bagaimana menyimpan kuncinya?. Pertanyaan-pertanyaan ini akan dijawab dalam artikel ini, semoga membantu.
Analisa Pengamankan Data Pribadi
Disini saya hanya melakukan analisa konseptual cara mengamankan data pribadi khususnya pada lapisan aplikasi dan database, sedangkan lapisan lainnya seperti jaringan, sistem operasi dan perangkat itu sudah beda cerita. Pertama kali saya tertarik mengulik ini karena mendengar sekilas pembicaraan atasan saya di PT. *** pada tim lainnya, mereka membicarakan pemrosesan data pengguna khususnya NIK tidak disimpan didalam database. Mungkin mereka ingin data tersebut aman jika database diretas. Perihal keamanan ini sangat membuat pikiran saya gatal untuk memikirkan solusinya. Saya memikirkan solusinya adalah enkripsi.
Enkripsi biasa dilakukan untuk mengamankan data rahasia yang tersimpan dimanapun. Metode ini bisa digunakan untuk menyimpan data pengguna dengan aman didatabase.
Enkripsi pasti membutuhkan kunci (key) untuk mengunci dan membuka data (Decrypt). Symmetric Encryption menggunakan 1 kunci untuk membuka dan mengunci data, sedangkan Asymmetric Encryption menggunakan 2 kunci yang disebut public key untuk membuka data dan private key untuk mengunci data.
Symmetric Encryption
Enkripsi simetris (Symmetric Encryption) hanya membutuhkan 1 kunci untuk membuka dan mengunci data. Implementasi proses ini di aplikasi dapat dilakukan dengan membuat kunci enkripsi dan disimpan di server terpisah. Saat data masuk ke server aplikasi enkripsi data sebelum masuk ke database.
Masalah yang HARUS DIPERHATIKAN adalah Penyimpanan kunci. Enkripsi akan jadi tidak berguna jika kunci disimpan di server yang sama atau bahkan disimpan di file .env
bersama dengan file aplikasi. Gunakan Key Management Service (KMS) untuk urusan penyimpanan kunci seperti Google Cloud Key Management, AWS KMS, Azure Key Vault.
Metode diatas menggunakan Kunci pemilik aplikasi/website untuk mengunci data, metode ini berguna jika sewaktu-waktu pemilik aplikasi ingin melihat data pengguna dan mereka punya kendali terhadap data tersebut.
Symmetric Encryption (User Password)
Metode selanjutnya adalah menggunakan kunci alih-alih disediakan oleh pihak aplikasi tetapi menggunakan kata sandi pengguna. Metode ini sangat membuat data menjadi lebih aman karena setiap pengguna menggunakan kunci enkripsi yang berbeda-beda dan pihak perusahaan tidak bisa melihat data pengguna.
Kata sandi pengguna yang dimaksud bukanlah kata sandi yang telah di hash. Jika pengguna ingin menampilkan data personalnya maka pengguna harus memasukkan kata sandi akunnya untuk membukanya. Proses ini sangat aman karena pihak aplikasi tidak perlu menyimpan kunci dan hanya pengguna yang mengetahui kuncinya. Kekurangan dari metode ini adalah, jika pengguna LUPA PASSWORD maka data tersebut tidak bisa dibuka dan HARUS di reset. Di lain sisi, pihak aplikasi juga harus antisipasi jika sewaktu-waktu pengguna mengganti password maka Cipher text (Data terenkripsi) haruslah di-enkripsi dengan kunci yang baru.
Asymmetric Encryption (Public Key)
Enkripsi ini menggunakan 2 kunci yang berbeda yaitu Private key dan Public key, setiap pengguna memiliki kunci public dan private yang unik. Pengguna perlu menyimpan atau mengamankan Private key saja. Sangat berbeda dari metode sebelumnya dan memiliki beberapa jenis proses yaitu:
Sebagai Digital Signature
Mengunci data menggunakan Private key dan membaca data menggunakan Public key, pembacaan ini disebut sebagai Validasi sedangkan proses enkripsi disebut dengan Signature. Proses ini tentu saja tidak menyembunyikan data karena siapapun bisa membukanya selagi memiliki public key, tetapi bisa menjadi bukti bahwa data dibuat oleh orang yang dikenal.
Sebagai Public-key Encryption
Pada metode ini, menggunakan Public key untuk mengunci data dan gunakan Private key untuk membuka data. Dengan metode ini, hanya orang yang memiliki private key yang bisa membukanya.
Dalam konteks diatas yaitu mengamankan data di aplikasi maka skenario penyimpanan data seperti berikut:
- Saat pengguna registrasi, sistem generate public & private key. public key disimpan di database sistem tanpa enkripsi, sedangkan private key disimpan di database dengan enkripsi symmetric key dari password pengguna.
- Saat pengguna mengirimkan data sensitif, gunakan public key untuk enkripsi data tersebut lalu simpan di database.
- Lalu minta password saat pengguna meminta data yang kemudian digunakan untuk dekripsi data pribadi untuk dikirim kembali pada pengguna.
Metode ini memastikan hanya pengguna saja yang bisa mengakses data tersebut. Jika pihak aplikasi ingin mengakses data yang sama juga maka perlu menyimpan private key pengguna di database dan server yang berbeda, jadi pihak aplikasi memiliki akses.
Membentuk Pola Pikir
Enkripsi data sama sekali tidak menambah keamanan jika pola berpikir keamanan belum terbentuk, misalnya kunci enkripsi disimpan di server yang sama, maka enkripsi ini tidak ada gunanya seperti gembok rumah yang sudah tersangkut kuncinya. Keamanan sistem merupakan proses layer berbeda dalam pembuatan perangkat lunak, perlu analisa mendalam untuk mengetahui apa saja cela keamanan yang bisa ditimbulkan. Mengetahui kenapa data tersebut harus diamankan, apa yang harus dilakukan, alat dan metode yang akan digunakan, itu tergantung pada pemikiran dari pemilik proyek. Tentu saja penambahan proses enkripsi akan membuat komputasi menjadi lebih lambat, hal ini juga perlu dipertimbangkan. Melakukan penguncian data pada level aplikasi, software, sistem operasi, hingga partisi harddisk adalah opsi-opsi yang dipilih, atau mungkin saja tidak perlu dilakukan enkripsi. Pilihlah standard keamanan data yang sesuai dengan negara karena biasanya negara menentukan metode enkripsi dan algoritma yang harus digunakan.
Kesimpulan
Keamanan data merupakan tanggung jawab dari pemilik aplikasi atau perusahaan, pemilihan metode keamanan haruslah dipilih dengan bijak. Transparansi informasi kepada pengguna bagaimana data diolah dan digunakan juga harus dilakukan. Metode enkripsi symmetric dan asymmetric adalah jenis metode enkripsi yang umum digunakan, setiap algoritma enkripsi pasti memiliki salah satu metode ini. Pemilihan proses ini tidak lepas dari pertanyaan ‘kenapa harus melakukan ini?’ karena ini bukanlah sekedar penambahan fitur dalam aplikasi, tetapi proses panjang yang menjadi mindset dari setiap tindakan kedepannya. Saya sebagai pembuat perangkat lunak selalu tertarik dengan materi seperti ini, semoga dengan tulisan ini dapat membantu teman-teman dalam menjaga data pengguna dengan baik. Terima kasih