- Mulai DuckDB versi 1.4, ditambahkan fitur enkripsi data tersimpan (Data-at-Rest Encryption), sehingga seluruh file database dapat dilindungi dengan enkripsi standar berbasis AES
- Algoritme yang didukung adalah AES-GCM-256 dan AES-CTR-256; di antaranya, GCM menyertakan tag autentikasi untuk verifikasi integritas data
- Enkripsi diterapkan pada file database, WAL (Write-Ahead Log), dan file sementara, serta mencakup struktur cache aman untuk pengelolaan kunci dan perlindungan memori
- Tersedia dua implementasi, yaitu OpenSSL dan Mbed TLS; saat menggunakan OpenSSL, akselerasi perangkat keras membuat penurunan performa hampir tidak terasa
- File DuckDB yang terenkripsi dapat sekaligus memastikan keamanan dan portabilitas, sehingga distribusi data tetap aman bahkan di lingkungan cloud atau CDN
Gambaran umum enkripsi
- Sejak DuckDB 1.4, seluruh file database dapat dienkripsi secara transparan (Transparent Encryption)
- Saat disimpan, digunakan enkripsi AES-GCM-256 atau AES-CTR-256
- AES-GCM menghitung tag untuk verifikasi integritas, sedangkan AES-CTR lebih cepat tetapi tidak memiliki fungsi autentikasi
- AES adalah algoritme enkripsi kunci simetris, di mana enkripsi dan dekripsi dilakukan dengan kunci yang sama
- IV (Initialization Vector) dan nonce digunakan untuk memastikan plaintext yang sama berubah menjadi ciphertext yang berbeda
- Persyaratan standar NIST masih belum sepenuhnya dipenuhi
Struktur implementasi internal DuckDB
- Header utama file database tetap dalam bentuk plaintext, dan menyimpan flag yang menunjukkan apakah enkripsi digunakan serta metadata enkripsi
- Metadata mencakup identifier database (salt), informasi algoritme enkripsi, dan canary terenkripsi
- Melalui fungsi derivasi kunci (KDF), kunci yang dimasukkan pengguna diubah menjadi kunci aman 32 byte
- Kunci turunan disimpan dalam cache aman sehingga tidak di-swap ke disk
- Kunci asli langsung dihapus dari memori
- Blok data disimpan dengan unit dasar 256KB; saat dienkripsi, nonce/IV dan tag ditambahkan ke header blok sehingga ukurannya bertambah 40 byte
- Checksum disimpan dalam keadaan terenkripsi
Enkripsi WAL (Write-Ahead Log)
- WAL adalah file log untuk pemulihan transaksi, dan di DuckDB dienkripsi per entri
- Setiap entri ditambahkan nonce dan tag agar dilindungi dengan metode AES-GCM
- Entri WAL terenkripsi disusun dalam urutan panjang (plaintext) → nonce → checksum dan data terenkripsi → tag
- Pada database yang memiliki kunci enkripsi, enkripsi WAL aktif secara otomatis
Enkripsi file sementara
- File sementara yang dibuat saat operasi besar seperti sort, join, dan window function juga dienkripsi secara otomatis
- Aktif saat menghubungkan database terenkripsi atau ketika pengaturan
SET temp_file_encryption = true digunakan
- DuckDB secara internal membuat kunci sementara; jika terjadi benturan, dekripsi tidak dimungkinkan
- File sementara memiliki ekstensi
.tmp atau .block, dan informasi ukuran disertakan di header
- Checksum dihilangkan untuk mengurangi biaya komputasi
Cara menggunakan enkripsi
Implementasi dan performa
- Untuk meminimalkan dependensi eksternal, DuckDB menyertakan dua implementasi enkripsi: Mbed TLS dan OpenSSL
- Mbed TLS memiliki performa lebih rendah karena akselerasi perangkat keras tidak aktif, dan karena ditemukannya kerentanan pada generator angka acak, fitur tulis dinonaktifkan (sejak 1.4.1)
- OpenSSL menggunakan akselerasi perangkat keras dan generator angka acak yang aman, dan akan beralih otomatis saat ekstensi
httpfs dimuat
- Hasil uji performa:
- Kueri SUMMARIZE tanpa enkripsi: 5,4 detik
- Enkripsi Mbed TLS: 6,2 detik
- Enkripsi OpenSSL: 5,4 detik (tanpa penurunan performa)
- Pada pengujian TPC-H Power/Throughput juga, perbedaan performa sangat kecil saat enkripsi digunakan
- Power@Size: 624,296 → 571,985
- Throughput@Size: 450,409 → 145,353 (sedikit menurun saat I/O disk meningkat)
Kesimpulan
- Dengan fitur enkripsi data tersimpan DuckDB, seluruh file database dapat dilindungi secara aman
- Karena WAL dan file sementara juga dienkripsi, risiko kebocoran data di lingkungan cloud ikut berkurang
- Dengan implementasi berbasis OpenSSL, hampir tidak ada kehilangan performa, sehingga tetap efisien digunakan di lingkungan produksi
- File DuckDB terenkripsi juga cocok untuk distribusi eksternal seperti CDN, sambil tetap mempertahankan fitur yang ada seperti penyimpanan multi-tabel
- Tim DuckDB berencana terus meningkatkan fitur ini berdasarkan umpan balik pengguna
Belum ada komentar.