Revault criptează un fișier mare în segmente de aproximativ 5 MiB, fiecare cu propria etichetă de autentificare, astfel încât întregul fișier nu trebuie să stea niciodată în memorie deodată. În aplicația web, tocmai asta face posibile fișierele de până la 1 GiB.

De ce nu se criptează întregul fișier deodată?

Fișierele mari nu ar trebui să necesite multă memorie. Revault citește fișierele în segmente de aproximativ 5 MiB, criptează fiecare segment în browser și pregătește textul cifrat în IndexedDB. Fișierul original nu este citit niciodată într-un singur buffer uriaș.

Lucrul pe segmente înseamnă și că o încărcare întreruptă poate continua de la textul cifrat deja pregătit, în loc să cripteze din nou întregul fișier.

Ce protejează ordinea și caracterul complet al segmentelor?

Fiecare fișier primește propria cheie de criptare, derivată cu HKDF din cheia principală a seifului. Contextul derivării include identificatorii seifului și ai fișierului, lungimea fișierului în octeți și dimensiunea segmentului.

Nonce-ul de 12 octeți al fiecărui segment combină un prefix aleatoriu ales pentru acel fișier, un contor de segment de patru octeți și un indicator care marchează ultimul segment. Segmentele poartă etichete GCM de 128 de biți. Dacă segmentele sunt interschimbate, modificate sau trunchiate, verificarea eșuează.

Ce se întâmplă dacă o încărcare este întreruptă?

După finalizarea criptării, încărcările în rețea pot continua din textul cifrat salvat în cache chiar și după reîmprospătarea paginii. Reîncercările trimit aceiași octeți criptați, în loc să cripteze o sursă nouă cu nonce-uri vechi. Dacă însăși criptarea este întreruptă, anulează acea încărcare incompletă și reîncepe cu o identitate de fișier nouă.

Cum sunt verificate descărcările?

Descărcările autentifică fiecare segment înainte de a-l elibera. Deoarece verificarea are loc pe măsură ce fișierul este transmis în flux, o eroare târzie într-o descărcare poate lăsa în urmă un fișier incomplet, așa că asigură-te că descărcarea se termină cu succes înainte să te bazezi pe ea.

Care sunt limitele?

Fiecare fișier din aplicația web poate avea până la 1 GiB. Previzualizările de imagini și videoclipuri au o limită de memorie separată. Ștergerea stocării locale a browserului poate elimina textul cifrat necesar pentru a relua o încărcare.

Formatul de streaming urmează construcția de streaming AES-GCM-HKDF documentată de Tink, folosind primitive Web Crypto native. Identitatea fișierului și lungimea așteptată sunt legate de contextul de derivare a cheii; contorii de segmente și marcajul final protejează ordinea și finalizarea. Această implementare nu a primit un audit criptografic independent.

Pagina Model de securitate descrie construcția completă, inclusiv antetul fluxului și derivarea cheilor.