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:
ENCRYPTION_KEYdari lingkungan.- Berkas
.encryption_keyyang disimpan secara persisten di bawahDATA_DIRyang dipilih. - Hanya pada penyimpanan baru, kunci baru yang dibuat dan ditulis secara tahan lama ke
DATA_DIR/.encryption_keysebelum 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_KEYbersama 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.