Lompat ke konten Lompat ke sidebar Lompat ke footer

Panduan Enkripsi Data Sensitif di PostgreSQL Menggunakan Ekstensi pgcrypto

 

Keamanan data merupakan prioritas mutlak dalam perancangan dan pengelolaan sistem informasi modern. Menyimpan data sensitif, seperti kata sandi (password), nomor identitas kependudukan, hingga informasi finansial dalam format teks biasa (plaintext) di dalam database adalah sebuah celah keamanan yang sangat berbahaya.

Bagi administrator dan pengembang sistem yang menggunakan PostgreSQL, terdapat solusi terintegrasi dan andal untuk mengamankan data secara langsung di tingkat database, yaitu melalui ekstensi pgcrypto.

Artikel ini akan membahas secara komprehensif cara mengaktifkan, mengonfigurasi, serta mengimplementasikan fungsi enkripsi dari ekstensi pgcrypto untuk melindungi data sensitif Anda.

1. Mengenal Ekstensi pgcrypto

pgcrypto adalah modul bawaan (opsional) dari PostgreSQL yang menyediakan fungsi-fungsi kriptografi untuk keperluan hashing dan enkripsi data. Dengan memanfaatkan ekstensi ini, proses penyandian data dilakukan langsung di sisi server database, sehingga mengurangi risiko kebocoran data saat transmisi antara aplikasi dan database.

Ekstensi ini mendukung berbagai algoritma kriptografi standar industri, termasuk fungsi hash (seperti SHA, MD5, dan Blowfish) serta enkripsi dua arah (seperti AES dan PGP).

2. Mengaktifkan Ekstensi pgcrypto

Secara default, pgcrypto belum diaktifkan pada instalasi standar PostgreSQL. Anda memerlukan hak akses Superuser untuk memasang ekstensi ini.

Jalankan perintah SQL berikut melalui antarmuka query tool Anda (seperti pgAdmin atau psql):

SQL
CREATE EXTENSION IF NOT EXISTS pgcrypto;

Untuk memverifikasi apakah ekstensi telah berhasil dipasang, Anda dapat menjalankan perintah berikut untuk melihat daftar fungsi yang tersedia:

SQL
SELECT * FROM pg_extension WHERE extname = 'pgcrypto';

3. Pendekatan Keamanan: Hashing vs Enkripsi

Sebelum melakukan implementasi, penting untuk memahami perbedaan antara dua metode pengamanan data utama yang disediakan oleh pgcrypto.

MetodeKarakteristik UtamaKasus Penggunaan Ideal
Hashing (Satu Arah)Data yang disandikan tidak dapat dikembalikan ke bentuk asli secara matematis.Kata sandi (password), PIN, token keamanan.
Symmetric Encryption (Dua Arah)Data disandikan menggunakan sebuah kunci dan dapat dikembalikan (dekripsi) dengan kunci yang sama.Data medis, nomor kartu kredit, detail alamat.

4. Implementasi Hashing untuk Kata Sandi

Untuk menyimpan kata sandi, metode terbaik adalah menggunakan hashing dengan tambahan salt (data acak yang ditambahkan ke kata sandi sebelum di-hash untuk mencegah serangan Rainbow Table). Fungsi crypt() dan gen_salt() pada pgcrypto sangat ideal untuk tugas ini.

Algoritma yang direkomendasikan adalah Blowfish (bf), yang merupakan standar fungsi bcrypt.

A. Menyimpan Data (INSERT)

SQL
INSERT INTO pengguna (username, password_hash) 
VALUES (
    'admin_sistem', 
    crypt('KataSandiKuat123!', gen_salt('bf'))
);

B. Memverifikasi Data (SELECT)

Untuk memverifikasi apakah kata sandi yang dimasukkan pengguna saat login cocok dengan hash yang tersimpan:

SQL
SELECT username 
FROM pengguna 
WHERE username = 'admin_sistem' 
  AND password_hash = crypt('KataSandiKuat123!', password_hash);

Jika kata sandi benar, query akan mengembalikan data pengguna. Jika salah, query tidak akan mengembalikan baris apa pun.

5. Implementasi Enkripsi Simetris untuk Data Rahasia

Untuk data yang perlu ditampilkan kembali ke aplikasi (seperti nomor identitas atau alamat email), Anda harus menggunakan metode enkripsi dua arah. Fungsi pgp_sym_encrypt() dan pgp_sym_decrypt() adalah pilihan yang tepat.

Pastikan tipe data kolom yang digunakan untuk menyimpan hasil enkripsi adalah BYTEA (kumpulan byte biner).

A. Menyimpan Data Rahasia (INSERT)

SQL
INSERT INTO data_pegawai (nama_lengkap, nomor_ktp_enkripsi) 
VALUES (
    'Budi Santoso', 
    pgp_sym_encrypt('3578012345678901', 'kunci_rahasia_sistem_123')
);

B. Membaca dan Mendekripsi Data (SELECT)

Untuk menarik data dan mengembalikannya ke format plaintext, gunakan perintah berikut:

SQL
SELECT 
    nama_lengkap, 
    pgp_sym_decrypt(nomor_ktp_enkripsi, 'kunci_rahasia_sistem_123') AS nomor_ktp_asli 
FROM data_pegawai;

6. Praktik Terbaik (Best Practices) Manajemen Kunci

Implementasi teknis pgcrypto sangatlah lugas, namun keamanan keseluruhan sistem bergantung pada bagaimana Anda mengelola kunci enkripsi. Berikut adalah panduan profesional yang wajib diterapkan:

  • Pemisahan Akses: Jangan menyimpan "kunci rahasia" (secret key) secara langsung (hardcode) di dalam query atau Trigger database.

  • Injeksi Parameter: Kirimkan kunci rahasia dari sisi aplikasi (sebagai Environment Variable) sebagai parameter aman saat melakukan query ke PostgreSQL.

  • Pembatasan Hak Akses: Pastikan pengguna database (Role) yang digunakan oleh aplikasi memiliki hak akses (GRANT) seminimal mungkin, hanya pada tabel yang diperlukan.

Dengan menerapkan enkripsi tingkat database melalui ekstensi pgcrypto, infrastruktur IT Anda telah memenuhi standar kepatuhan pengelolaan data (compliance) yang jauh lebih tinggi dan tahan terhadap potensi peretasan data internal maupun eksternal.

Posting Komentar untuk "Panduan Enkripsi Data Sensitif di PostgreSQL Menggunakan Ekstensi pgcrypto"