การเข้ารหัสฐานข้อมูล
Libre WebUI มีบริการเข้ารหัสระดับแอปพลิเคชันสำหรับค่าที่ละเอียดอ่อนก่อนเขียนลงพื้นที่เก็บข้อมูล
วิธีการเข้ารหัส
backend ใช้ AES-256-GCM ผ่าน crypto ของ Node.js คีย์เข้ารหัสต้องมีขนาด 32 ไบต์ แสดงเป็นสตริงเลขฐานสิบหก 64 อักขระ:
ENCRYPTION_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
สร้างคีย์:
openssl rand -hex 32
การเก็บคีย์
Libre WebUI โหลดคีย์ตามลำดับนี้:
ENCRYPTION_KEYจากสภาพแวดล้อม- ไฟล์
.encryption_keyที่เก็บถาวรภายใต้DATA_DIRที่เลือก - เฉพาะพื้นที่เก็บข้อมูลใหม่ จะสร้างคีย์ใหม่และเขียนอย่างถาวรไปยัง
DATA_DIR/.encryption_keyก่อนฐานข้อมูลเริ่มทำงาน
หากทั้งสภาพแวดล้อมและไฟล์ถาวรมีคีย์ คีย์ต้องตรงกัน มิฉะนั้นการเริ่มระบบจะล้มเหลว สถานะเข้ารหัสเดิมที่ไม่มีคีย์ต้นฉบับก็จะถูกปฏิเสธอย่างปลอดภัย Libre ไม่สร้างคีย์ทดแทนให้พื้นที่เก็บข้อมูลเดิม
กฎสำคัญเกี่ยวกับคีย์
- สำรอง
ENCRYPTION_KEYพร้อมฐานข้อมูล - อย่าหมุนเวียนคีย์หากไม่มีแผนย้ายค่าที่เข้ารหัส
- หากคีย์สูญหาย จะไม่สามารถกู้คืนค่าที่เข้ารหัสได้
- การเปลี่ยนคีย์โดยไม่เข้ารหัสข้อมูลใหม่จะทำให้ค่าที่เข้ารหัสเดิมอ่านไม่ได้
สิ่งที่ได้รับการปกป้อง
การเข้ารหัสจะใช้ในเส้นทางโค้ดที่เรียกบริการเข้ารหัสหรือตัวช่วยพื้นที่เก็บข้อมูลเข้ารหัส ออกแบบมาสำหรับค่าแอปพลิเคชันที่ละเอียดอ่อน เช่น ข้อมูลประจำตัวและข้อมูลส่วนตัวของผู้ใช้ที่ตัวช่วยเหล่านั้นจัดการ
นี่ไม่ใช่การเข้ารหัสทั้งดิสก์ การเข้ารหัสหน้า SQLite หรือการเข้ารหัสจากต้นทางถึงปลายทางระหว่างผู้ใช้กับเบราว์เซอร์ ให้ใช้การเข้ารหัสดิสก์และ HTTPS สำหรับชั้นเหล่านั้น
ข้อมูล Work
การเข้ารหัสระดับแอปพลิเคชันไม่ได้เข้ารหัสงาน Work ทั้งหมด ไฟล์ต้นฉบับและ dependency ของโปรเจกต์ Work เป็นไฟล์ทั่วไปใน volume แบบมีชื่อของ Docker ที่จำกัดตามงาน การสนทนา Work ผลลัพธ์เครื่องมือ เอาต์พุตคำสั่ง และเมทาดาทางานเก็บใน SQLite และไม่ได้เข้ารหัสอัตโนมัติเพียงเพราะเส้นทางเก็บข้อมูลประจำตัวบางส่วนใช้บริการเข้ารหัส
เมื่อจำเป็น ให้ปกป้องรากข้อมูล Docker และ DATA_DIR ด้วยการควบคุมการเข้าถึงและการเข้ารหัสดิสก์ สำรองฐานข้อมูล ENCRYPTION_KEY และ volume Work ที่จัดการไว้พร้อมกัน การส่งงาน Work ไปยังโมเดลระยะไกลอาจเปิดเผยบริบทการสนทนาและเอาต์พุตไฟล์หรือคำสั่งที่ร้องขอแก่ผู้ให้บริการนั้น การเข้ารหัสพื้นที่เก็บข้อมูลไม่เปลี่ยนขอบเขตเครือข่ายดังกล่าว
Docker และ Kubernetes
กำหนดคีย์ที่เสถียรอย่างชัดเจนสำหรับ production:
ENCRYPTION_KEY=replace-with-64-hex-characters
DATA_DIR=/data
เมานต์ DATA_DIR บนพื้นที่เก็บข้อมูลถาวร ใน Kubernetes ให้เก็บคีย์ใน Secret และเมานต์ข้อมูลบน PersistentVolume
การแก้ปัญหา
ความยาวคีย์ไม่ถูกต้อง
คีย์ต้องมีเลขฐานสิบหก 64 อักขระพอดี สร้างคีย์ใหม่ด้วย:
openssl rand -hex 32
ถอดรหัสข้อมูลไม่ได้หลังติดตั้งใหม่
ยืนยันว่าใช้ ENCRYPTION_KEY เดิมและเมานต์ volume DATA_DIR เดิม
สภาพแวดล้อมพัฒนาสร้างคีย์ใหม่
เก็บ DATA_DIR/.encryption_key ไว้กับฐานข้อมูล หรือกำหนดค่าเดียวกันผ่าน ENCRYPTION_KEY หากมีทั้งสองแหล่ง ค่าต้องตรงกัน