Перейти до основного вмісту

Шифрування бази даних

Libre WebUI шифрує конфіденційні значення на рівні застосунку до запису в сховище.

Метод шифрування

Сервер використовує AES-256-GCM через crypto Node.js. Ключ має містити 32 байти у вигляді 64-символьного шістнадцяткового рядка:

ENCRYPTION_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

Створення ключа:

openssl rand -hex 32

Зберігання ключа

Libre WebUI завантажує ключ у такому порядку:

  1. ENCRYPTION_KEY із середовища.
  2. Збережений файл .encryption_key у вибраному DATA_DIR.
  3. Лише для нового сховища — щойно створений ключ, надійно записаний у DATA_DIR/.encryption_key до запуску бази.

Якщо ключ є і в середовищі, і у файлі, значення мають збігатися, інакше запуск завершується помилкою. Наявний зашифрований стан без початкового ключа також безпечно блокує запуск; Libre ніколи не створює заміну для наявного сховища.

Важливі правила

  • Створюйте резервну копію ENCRYPTION_KEY разом із базою.
  • Не змінюйте ключ без плану міграції зашифрованих значень.
  • Втрата ключа означає неможливість відновити дані.
  • Зміна без повторного шифрування зробить наявні значення нечитабельними.

Що захищено

Шифрування застосовується шляхами коду, які використовують службу шифрування або її допоміжні функції. Воно призначене для конфіденційних значень, як-от облікові дані та приватні дані користувача, які проходять цими шляхами.

Це не повнодискове шифрування, не шифрування сторінок SQLite і не наскрізне шифрування між користувачем і браузером. Для цих рівнів використовуйте шифрування диска й HTTPS.

Дані Work

Шифрування застосунку не шифрує все завдання Work. Вихідні файли й залежності є звичайними файлами в іменованих томах Docker. Розмови, результати інструментів, вивід команд і метадані зберігаються в SQLite й не стають автоматично зашифрованими лише через шифрування деяких шляхів облікових даних.

За потреби захищайте корінь даних Docker і DATA_DIR контролем доступу та шифруванням диска. Разом копіюйте базу, ENCRYPTION_KEY і керовані томи Work. Надсилання завдання віддаленій моделі також може розкрити провайдеру контекст, файли або вивід команд; шифрування сховища не змінює цієї мережевої межі.

Docker і Kubernetes

Для промислового середовища явно задайте стабільний ключ:

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

Підключіть DATA_DIR до постійного сховища. У Kubernetes зберігайте ключ у Secret, а дані — на PersistentVolume.

Усунення неполадок

Неправильна довжина ключа

Ключ повинен мати рівно 64 шістнадцяткові символи. Створіть новий:

openssl rand -hex 32

Дані не розшифровуються після повторного розгортання

Перевірте той самий ENCRYPTION_KEY і підключення того самого тому DATA_DIR.

Під час розробки створено новий ключ

Зберігайте DATA_DIR/.encryption_key разом із базою. Можна також задати те саме значення через ENCRYPTION_KEY; за наявності обох вони мають збігатися.

Пов’язана документація