Lewati ke konten utama

Enkripsi Database

Libre WebUI menyertakan layanan enkripsi pada tingkat aplikasi untuk nilai sensitif sebelum ditulis ke penyimpanan.

Metode Enkripsi

Backend menggunakan AES-256-GCM melalui crypto Node.js. Kunci enkripsi harus sepanjang 32 byte dan dinyatakan sebagai string heksadesimal 64 karakter:

ENCRYPTION_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

Buat kunci:

openssl rand -hex 32

Penyimpanan Kunci

Libre WebUI memuat kunci dalam urutan berikut:

  1. ENCRYPTION_KEY dari lingkungan.
  2. Berkas .encryption_key yang disimpan secara persisten di bawah DATA_DIR yang dipilih.
  3. Hanya pada penyimpanan baru, kunci baru yang dibuat dan ditulis secara tahan lama ke DATA_DIR/.encryption_key sebelum database dimulai.

Jika lingkungan dan berkas persisten sama-sama menyediakan kunci, keduanya harus cocok atau proses mulai akan gagal. Keadaan terenkripsi yang sudah ada tanpa kunci aslinya juga ditolak secara aman; Libre tidak pernah membuat kunci pengganti untuk penyimpanan yang sudah ada.

Aturan Penting untuk Kunci

  • Cadangkan ENCRYPTION_KEY bersama database.
  • Jangan merotasi kunci kecuali Anda memiliki rencana migrasi untuk nilai terenkripsi.
  • Jika kunci hilang, nilai terenkripsi tidak dapat dipulihkan.
  • Mengganti kunci tanpa mengenkripsi ulang data akan membuat nilai terenkripsi yang ada tidak dapat dibaca.

Yang Dilindungi

Enkripsi diterapkan oleh jalur kode yang menggunakan layanan enkripsi atau pembantu penyimpanan terenkripsi. Enkripsi ini dirancang untuk nilai aplikasi sensitif seperti kredensial dan data pengguna pribadi yang ditangani pembantu tersebut.

Ini bukan enkripsi seluruh disk, enkripsi halaman SQLite, ataupun enkripsi ujung-ke-ujung antara pengguna dan peramban. Gunakan enkripsi disk dan HTTPS untuk lapisan tersebut.

Data Work

Enkripsi tingkat aplikasi tidak mengenkripsi seluruh tugas Work. Berkas sumber dan dependensi proyek Work adalah berkas biasa dalam volume bernama Docker yang dibatasi per tugas. Percakapan Work, hasil alat, keluaran perintah, dan metadata tugas disimpan di SQLite dan tidak otomatis terenkripsi hanya karena sebagian jalur penyimpanan kredensial menggunakan layanan enkripsi.

Lindungi root data Docker dan DATA_DIR dengan kontrol akses dan enkripsi disk jika diperlukan. Cadangkan database, ENCRYPTION_KEY, dan volume Work yang dikelola secara bersamaan. Mengirim tugas Work ke model jarak jauh juga dapat mengungkapkan konteks percakapan serta keluaran berkas atau perintah yang diminta kepada penyedia tersebut; enkripsi penyimpanan tidak mengubah batas jaringan itu.

Docker dan Kubernetes

Tetapkan kunci stabil secara eksplisit untuk produksi:

ENCRYPTION_KEY=replace-with-64-hex-characters
DATA_DIR=/data

Pasang DATA_DIR pada penyimpanan persisten. Di Kubernetes, simpan kunci dalam Secret dan pasang data pada PersistentVolume.

Pemecahan Masalah

Panjang kunci tidak valid

Kunci harus tepat 64 karakter heksadesimal. Buat kunci baru dengan:

openssl rand -hex 32

Data tidak dapat didekripsi setelah deployment ulang

Pastikan ENCRYPTION_KEY yang sama digunakan dan volume DATA_DIR yang sama dipasang.

Pengembangan membuat kunci baru

Simpan DATA_DIR/.encryption_key bersama database. Sebagai alternatif, Anda dapat menetapkan nilai yang sama melalui ENCRYPTION_KEY; jika kedua sumber tersedia, nilainya harus cocok.

Dokumentasi Terkait