Cifratura del database
Libre WebUI include un servizio di cifratura a livello applicativo per i valori sensibili, prima che vengano scritti nell'archivio.
Metodo di cifratura
Il backend usa AES-256-GCM tramite il modulo crypto di Node.js. La chiave deve essere di 32 byte, rappresentati da una stringa esadecimale di 64 caratteri:
ENCRYPTION_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
Genera una chiave:
openssl rand -hex 32
Archiviazione della chiave
Libre WebUI carica la chiave in questo ordine:
ENCRYPTION_KEYdall'ambiente.- Un file
.encryption_keypersistente sotto ilDATA_DIRselezionato. - Solo per un archivio nuovo, una chiave appena generata e scritta in modo durevole in
DATA_DIR/.encryption_keyprima dell'avvio del database.
Se sia l'ambiente sia il file persistente forniscono una chiave, devono coincidere; altrimenti l'avvio fallisce. Anche uno stato cifrato esistente senza la chiave originale fallisce in modo chiuso: Libre non genera mai una sostituzione per un archivio esistente.
Regole importanti per la chiave
- Esegui il backup di
ENCRYPTION_KEYinsieme al database. - Non ruotare la chiave senza un piano di migrazione dei valori cifrati.
- Se perdi la chiave, i valori cifrati non possono essere recuperati.
- Cambiare chiave senza ricifrare i dati rende illeggibili i valori cifrati esistenti.
Cosa viene protetto
La cifratura viene applicata dai percorsi di codice che usano il servizio di cifratura o gli helper di archiviazione cifrata. È destinata ai valori sensibili dell'applicazione, come credenziali e dati privati degli utenti gestiti da tali helper.
Non è una cifratura dell'intero disco, delle pagine SQLite o end-to-end tra utenti e browser. Usa cifratura del disco e HTTPS per questi livelli.
Dati di Work
La cifratura applicativa non cifra un'intera attività Work. File sorgente e dipendenze sono file normali in volumi Docker con nome e limitati all'attività. Conversazioni Work, risultati degli strumenti, output dei comandi e metadati delle attività vengono salvati in SQLite e non sono cifrati automaticamente solo perché alcuni percorsi di credenziali usano il servizio di cifratura.
Quando necessario, proteggi la directory dei dati Docker e DATA_DIR con controlli di accesso e cifratura del disco. Esegui insieme il backup di database, ENCRYPTION_KEY e volumi Work gestiti. Inviare un'attività Work a un modello remoto può anche comunicare al provider il contesto della conversazione e i file o l'output dei comandi richiesti; la cifratura dell'archivio non modifica questo confine di rete.
Docker e Kubernetes
Imposta esplicitamente una chiave stabile in produzione:
ENCRYPTION_KEY=replace-with-64-hex-characters
DATA_DIR=/data
Monta DATA_DIR su un archivio persistente. In Kubernetes, conserva la chiave in un Secret e monta i dati su un PersistentVolume.
Risoluzione dei problemi
Lunghezza della chiave non valida
La chiave deve contenere esattamente 64 caratteri esadecimali. Generane una nuova con:
openssl rand -hex 32
Impossibile decifrare i dati dopo una nuova distribuzione
Verifica di usare la stessa ENCRYPTION_KEY e di aver montato lo stesso volume DATA_DIR.
Lo sviluppo ha generato una nuova chiave
Conserva DATA_DIR/.encryption_key insieme al database. In alternativa puoi impostare lo stesso valore tramite ENCRYPTION_KEY; se entrambe le fonti esistono, devono coincidere.