Το Revault κρυπτογραφεί ένα μεγάλο αρχείο σε τμήματα περίπου 5 MiB, καθένα με δική του ετικέτα πιστοποίησης, ώστε ολόκληρο το αρχείο να μην χρειάζεται να βρίσκεται ταυτόχρονα στη μνήμη. Στην εφαρμογή web, αυτό δίνει χώρο για αρχεία έως 1 GiB.
Γιατί να μην κρυπτογραφηθεί ολόκληρο το αρχείο μονομιάς;
Τα μεγάλα αρχεία δεν θα έπρεπε να απαιτούν μεγάλη ποσότητα μνήμης. Το Revault διαβάζει τα αρχεία σε τμήματα περίπου 5 MiB, κρυπτογραφεί κάθε τμήμα στο πρόγραμμα περιήγησης και αποθηκεύει προσωρινά το κρυπτογραφημένο κείμενο στο IndexedDB. Το αρχικό αρχείο δεν διαβάζεται ποτέ ολόκληρο σε έναν τεράστιο buffer.
Η εργασία σε τμήματα σημαίνει επίσης ότι μια διακοπείσα μεταφόρτωση μπορεί να συνεχιστεί από κρυπτογραφημένο κείμενο που έχει ήδη προετοιμαστεί, αντί να κρυπτογραφηθεί ξανά ολόκληρο το αρχείο.
Τι προστατεύει τη σειρά και την πληρότητα των τμημάτων;
Κάθε αρχείο παίρνει δικό του κλειδί κρυπτογράφησης, που παράγεται με HKDF από το κύριο κλειδί του χρηματοκιβωτίου. Το πλαίσιο παραγωγής περιλαμβάνει τα αναγνωριστικά του χρηματοκιβωτίου και του αρχείου, το μήκος του αρχείου σε byte και το μέγεθος τμήματος.
Το nonce 12 byte κάθε τμήματος συνδυάζει ένα τυχαίο πρόθεμα που επιλέγεται για το αρχείο, έναν μετρητή τμήματος τεσσάρων byte και μια σημαία που επισημαίνει το τελευταίο τμήμα. Τα τμήματα φέρουν ετικέτες GCM 128 bit. Αν τα τμήματα αντιμετατεθούν, αλλοιωθούν ή κοπούν, η επαλήθευση αποτυγχάνει.
Τι συμβαίνει αν διακοπεί μια μεταφόρτωση;
Μόλις ολοκληρωθεί η κρυπτογράφηση, οι μεταφορτώσεις μέσω δικτύου μπορούν να συνεχιστούν από το αποθηκευμένο κρυπτογραφημένο κείμενο μετά από ανανέωση της σελίδας. Οι επαναλήψεις στέλνουν τα ίδια κρυπτογραφημένα byte, αντί να κρυπτογραφούν νέα πηγή με παλιά nonce. Αν διακοπεί η ίδια η κρυπτογράφηση, ακυρώστε την ημιτελή μεταφόρτωση και ξεκινήστε ξανά με νέα ταυτότητα αρχείου.
Πώς επαληθεύονται οι λήψεις;
Οι λήψεις ελέγχουν την αυθεντικότητα κάθε τμήματος πριν το αποδεσμεύσουν. Επειδή ο έλεγχος γίνεται καθώς το αρχείο μεταδίδεται, ένα σφάλμα προς το τέλος μιας λήψης μπορεί να αφήσει ένα ημιτελές αρχείο, γι' αυτό βεβαιωθείτε ότι η λήψη ολοκληρώθηκε επιτυχώς πριν βασιστείτε σε αυτήν.
Ποια είναι τα όρια;
Κάθε αρχείο στην εφαρμογή web μπορεί να φτάνει το 1 GiB. Οι προεπισκοπήσεις εικόνων και βίντεο έχουν ξεχωριστό όριο μνήμης. Η εκκαθάριση του τοπικού χώρου αποθήκευσης του προγράμματος περιήγησης μπορεί να αφαιρέσει το κρυπτογραφημένο κείμενο που χρειάζεται για να συνεχιστεί μια μεταφόρτωση.
Η μορφή ροής ακολουθεί την τεκμηριωμένη κατασκευή ροής AES-GCM-HKDF του Tink, χρησιμοποιώντας εγγενή primitives του Web Crypto. Η ταυτότητα του αρχείου και το αναμενόμενο μήκος δεσμεύονται στο πλαίσιο παραγωγής κλειδιών· οι μετρητές τμημάτων και ο τελικός δείκτης προστατεύουν τη σειρά και την ολοκλήρωση. Αυτή η υλοποίηση δεν έχει υποβληθεί σε ανεξάρτητο κρυπτογραφικό έλεγχο.
Η σελίδα του μοντέλου ασφαλείας περιγράφει πλήρως την κατασκευή, συμπεριλαμβανομένης της κεφαλίδας ροής και της παραγωγής κλειδιών.