Cifrado de la base de datos
Libre WebUI incluye un servicio de cifrado en la aplicación para proteger los valores confidenciales antes de escribirlos en el almacenamiento.
Método de cifrado
El backend utiliza AES-256-GCM mediante el módulo criptográfico de Node.js. La clave debe tener 32 bytes, representados por una cadena hexadecimal de 64 caracteres:
ENCRYPTION_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
Genera una clave:
openssl rand -hex 32
Almacenamiento de la clave
Libre WebUI carga la clave en este orden:
ENCRYPTION_KEYdesde el entorno.- Un archivo persistente
.encryption_keyen elDATA_DIRseleccionado. - Solo en un almacenamiento nuevo, una clave recién generada que se escribe de forma duradera en
DATA_DIR/.encryption_keyantes de iniciar la base de datos.
Si tanto el entorno como el archivo persistente proporcionan una clave, deben coincidir o el inicio falla. Un estado cifrado existente sin su clave original también produce un fallo seguro; Libre nunca genera una sustituta para un almacenamiento existente.
Reglas importantes de las claves
- Guarda una copia de
ENCRYPTION_KEYcon la base de datos. - No rotes la clave sin un plan para migrar los valores cifrados.
- Si pierdes la clave, no podrás recuperar los valores cifrados.
- Cambiarla sin volver a cifrar los datos hará ilegibles los valores existentes.
Qué protege
El cifrado se aplica en las rutas de código que utilizan el servicio de cifrado o los auxiliares de almacenamiento cifrado. Está diseñado para valores confidenciales, como credenciales y datos privados gestionados por esos auxiliares.
No es cifrado de disco completo, de páginas SQLite ni de extremo a extremo entre usuarios y navegador. Utiliza cifrado de disco y HTTPS para esas capas.
Datos de Work
El cifrado de la aplicación no cifra una tarea de Work completa. Los archivos fuente y las dependencias del proyecto son archivos normales en volúmenes Docker con nombre propios de cada tarea. Las conversaciones, resultados de herramientas, salidas de comandos y metadatos de Work se almacenan en SQLite y no se cifran automáticamente porque algunas rutas de credenciales utilicen el servicio.
Protege la raíz de datos de Docker y DATA_DIR con controles de acceso y cifrado de disco cuando sea necesario. Haz copias conjuntas de la base de datos, ENCRYPTION_KEY y los volúmenes de Work administrados. Enviar una tarea de Work a un modelo remoto también puede revelar al proveedor el contexto y las salidas solicitadas; el cifrado del almacenamiento no cambia ese límite de red.
Docker y Kubernetes
Define expresamente una clave estable para producción:
ENCRYPTION_KEY=replace-with-64-hex-characters
DATA_DIR=/data
Monta DATA_DIR en almacenamiento persistente. En Kubernetes, guarda la clave en un Secret y monta los datos en un PersistentVolume.
Solución de problemas
Longitud de clave no válida
La clave debe tener exactamente 64 caracteres hexadecimales. Genera una nueva con:
openssl rand -hex 32
No se pueden descifrar los datos tras volver a desplegar
Confirma que se utilicen el mismo ENCRYPTION_KEY y el mismo volumen DATA_DIR.
El desarrollo generó una clave nueva
Conserva DATA_DIR/.encryption_key con la base de datos. También puedes definir el mismo valor mediante ENCRYPTION_KEY; si existen ambas fuentes, deben coincidir.