Mã hóa cơ sở dữ liệu
Libre WebUI có dịch vụ mã hóa ở cấp ứng dụng dành cho các giá trị nhạy cảm trước khi ghi chúng vào bộ nhớ.
Phương thức mã hóa
Backend sử dụng AES-256-GCM thông qua crypto của Node.js. Khóa mã hóa phải dài 32 byte, được biểu diễn bằng chuỗi thập lục phân 64 ký tự:
ENCRYPTION_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
Tạo khóa:
openssl rand -hex 32
Lưu trữ khóa
Libre WebUI nạp khóa theo thứ tự sau:
ENCRYPTION_KEYtừ môi trường.- Tệp
.encryption_keyđược lưu bền vững trongDATA_DIRđã chọn. - Chỉ với kho dữ liệu mới, một khóa mới được tạo và ghi bền vững vào
DATA_DIR/.encryption_keytrước khi cơ sở dữ liệu khởi động.
Nếu cả môi trường và tệp bền vững đều cung cấp khóa, chúng phải khớp nhau, nếu không quá trình khởi động sẽ thất bại. Trạng thái đã mã hóa nhưng thiếu khóa gốc cũng bị từ chối an toàn; Libre không bao giờ tạo khóa thay thế cho kho dữ liệu đã tồn tại.
Quy tắc quan trọng về khóa
- Sao lưu
ENCRYPTION_KEYcùng cơ sở dữ liệu. - Không xoay vòng khóa nếu chưa có kế hoạch di chuyển các giá trị đã mã hóa.
- Mất khóa đồng nghĩa với việc không thể khôi phục các giá trị đã mã hóa.
- Đổi khóa mà không mã hóa lại dữ liệu sẽ khiến các giá trị đã mã hóa hiện có không thể đọc được.
Phạm vi được bảo vệ
Mã hóa được áp dụng bởi các đường mã sử dụng dịch vụ mã hóa hoặc trình hỗ trợ lưu trữ mã hóa. Cơ chế này dành cho các giá trị ứng dụng nhạy cảm như thông tin xác thực và dữ liệu riêng tư của người dùng do những trình hỗ trợ đó xử lý.
Đây không phải mã hóa toàn đĩa, mã hóa trang SQLite hay mã hóa đầu cuối giữa người dùng và trình duyệt. Hãy dùng mã hóa đĩa và HTTPS cho các lớp đó.
Dữ liệu Work
Mã hóa ở cấp ứng dụng không mã hóa toàn bộ tác vụ Work. Tệp nguồn và dependency dự án Work là các tệp thông thường trong volume có tên của Docker được giới hạn theo tác vụ. Hội thoại Work, kết quả công cụ, đầu ra lệnh và siêu dữ liệu tác vụ được lưu trong SQLite; chúng không tự động được mã hóa chỉ vì một số đường lưu trữ thông tin xác thực sử dụng dịch vụ mã hóa.
Khi cần, hãy bảo vệ thư mục gốc dữ liệu Docker và DATA_DIR bằng kiểm soát truy cập cùng mã hóa đĩa. Sao lưu đồng thời cơ sở dữ liệu, ENCRYPTION_KEY và các volume Work được quản lý. Gửi tác vụ Work đến mô hình từ xa cũng có thể tiết lộ ngữ cảnh hội thoại và đầu ra tệp hoặc lệnh được yêu cầu cho nhà cung cấp đó; mã hóa lưu trữ không thay đổi ranh giới mạng này.
Docker và Kubernetes
Đặt rõ một khóa ổn định cho môi trường production:
ENCRYPTION_KEY=replace-with-64-hex-characters
DATA_DIR=/data
Gắn DATA_DIR vào bộ nhớ bền vững. Trong Kubernetes, lưu khóa trong Secret và gắn dữ liệu vào PersistentVolume.
Khắc phục sự cố
Độ dài khóa không hợp lệ
Khóa phải có đúng 64 ký tự thập lục phân. Tạo khóa mới bằng:
openssl rand -hex 32
Không thể giải mã dữ liệu sau khi triển khai lại
Xác nhận đang dùng cùng ENCRYPTION_KEY và gắn cùng volume DATA_DIR.
Môi trường phát triển đã tạo khóa mới
Giữ DATA_DIR/.encryption_key cùng cơ sở dữ liệu. Bạn cũng có thể đặt cùng giá trị qua ENCRYPTION_KEY; nếu cả hai nguồn tồn tại, chúng phải khớp nhau.