Revault crittografa un file di grandi dimensioni in segmenti di circa 5 MiB, ciascuno con il proprio tag di autenticazione, così l'intero file non deve mai trovarsi in memoria tutto insieme. Nell'app web è proprio questo che permette di gestire file fino a 1 GiB.

Perché non crittografare l'intero file in una volta?

I file di grandi dimensioni non dovrebbero richiedere una grande quantità di memoria. Revault legge i file in segmenti di circa 5 MiB, crittografa ogni segmento nel browser e inserisce il testo cifrato in IndexedDB. Il file originale non viene mai letto in un buffer gigante.

Lavorare a segmenti significa anche che un caricamento interrotto può riprendere dal testo cifrato già preparato, invece di crittografare di nuovo l'intero file.

Cosa protegge l'ordine e la completezza dei segmenti?

Ogni file riceve una propria chiave di crittografia, derivata con HKDF dalla chiave principale del vault. Il contesto di derivazione include gli identificatori del vault e del file, la lunghezza in byte del file e la dimensione dei segmenti.

Il nonce da 12 byte di ogni segmento combina un prefisso casuale scelto per quel file, un contatore di segmenti da quattro byte e un flag che indica il segmento finale. I segmenti hanno tag GCM da 128 bit. Se i segmenti vengono scambiati, alterati o troncati, la verifica non riesce.

Cosa succede se un caricamento si interrompe?

Una volta completata la crittografia, i caricamenti in rete possono riprendere dal testo cifrato memorizzato nella cache dopo un aggiornamento della pagina. I tentativi inviano gli stessi byte crittografati, anziché crittografare una nuova origine sotto vecchi nonce. Se la crittografia stessa viene interrotta, annulla il caricamento incompleto e ricomincia con una nuova identità di file.

Come vengono verificati i download?

I download autenticano ogni segmento prima di rilasciarlo. Poiché il controllo avviene durante lo streaming del file, un errore verso la fine di un download può lasciare un file incompleto: assicurati quindi che il download termini correttamente prima di farci affidamento.

Quali sono i limiti?

Nell'app web ogni file può arrivare fino a 1 GiB. Le anteprime di immagini e video hanno un limite di memoria separato. Cancellare lo spazio di archiviazione locale del browser può rimuovere il testo cifrato necessario per riprendere un caricamento.

Il formato di streaming segue la costruzione di streaming AES-GCM-HKDF documentata di Tink, utilizzando le primitive Web Crypto native. L'identità del file e la lunghezza prevista sono legate al contesto di derivazione della chiave; i contatori dei segmenti e il marcatore finale proteggono l'ordine e il completamento. Questa implementazione non ha ricevuto un controllo crittografico indipendente.

La pagina del modello di sicurezza descrive la costruzione completa, inclusi l'intestazione dello stream e la derivazione delle chiavi.