Κρυπτογράφηση βάσης δεδομένων
Το Libre WebUI περιλαμβάνει υπηρεσία κρυπτογράφησης σε επίπεδο εφαρμογής για ευαίσθητες τιμές, πριν αυτές εγγραφούν στον χώρο αποθήκευσης.
Μέθοδος κρυπτογράφησης
Το backend χρησιμοποιεί AES-256-GCM μέσω του crypto του Node.js. Το κλειδί κρυπτογράφησης πρέπει να είναι 32 byte και να αναπαρίσταται ως δεκαεξαδική συμβολοσειρά 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. Τα αρχεία πηγαίου κώδικα και οι εξαρτήσεις έργου του Work είναι συνηθισμένα αρχεία σε επώνυμους τόμους Docker που περιορίζονται στην εργασία. Οι συνομιλίες Work, τα αποτελέσματα εργαλείων, η έξοδος εντολών και τα μεταδεδομένα εργασιών αποθηκεύονται στο SQLite και δεν κρυπτογραφούνται αυτόματα μόνο και μόνο επειδή ορισμένες διαδρομές αποθήκευσης διαπιστευτηρίων χρησιμοποιούν την υπηρεσία κρυπτογράφησης.
Προστατεύστε τη ρίζα δεδομένων Docker και το DATA_DIR με ελέγχους πρόσβασης και κρυπτογράφηση δίσκου όπου απαιτείται. Δημιουργείτε μαζί αντίγραφα ασφαλείας της βάσης δεδομένων, του ENCRYPTION_KEY και των διαχειριζόμενων τόμων Work. Η αποστολή μιας εργασίας 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· αν υπάρχουν και οι δύο πηγές, πρέπει να συμφωνούν.