Revault szyfruje duży plik w segmentach po około 5 MiB, z których każdy ma własny znacznik uwierzytelniający, więc cały plik nigdy nie musi naraz znajdować się w pamięci. Właśnie dzięki temu aplikacja internetowa obsługuje pliki do 1 GiB.

Dlaczego nie szyfrować całego pliku naraz?

Duże pliki nie powinny wymagać dużej ilości pamięci. Revault odczytuje pliki w segmentach o wielkości około 5 MiB, szyfruje każdy segment w przeglądarce i umieszcza tekst zaszyfrowany w IndexedDB. Oryginalny plik nigdy nie jest wczytywany do jednego gigantycznego bufora.

Praca w segmentach oznacza też, że przerwane wysyłanie może być kontynuowane od już przygotowanego szyfrogramu, zamiast szyfrować cały plik od nowa.

Co chroni kolejność i kompletność segmentów?

Każdy plik otrzymuje własny klucz szyfrowania, wyprowadzany za pomocą HKDF z klucza głównego skarbca. Kontekst wyprowadzania obejmuje identyfikatory skarbca i pliku, długość pliku w bajtach i rozmiar segmentu.

12-bajtowy nonce każdego segmentu łączy losowy prefiks wybrany dla danego pliku, czterobajtowy licznik segmentów i flagę oznaczającą ostatni segment. Segmenty mają 128-bitowe znaczniki GCM. Jeśli segmenty zostaną zamienione, zmienione lub obcięte, weryfikacja się nie powiedzie.

Co się dzieje, gdy wysyłanie zostanie przerwane?

Po zakończeniu szyfrowania przesyłanie sieciowe z buforowanego tekstu zaszyfrowanego może zostać wznowione po odświeżeniu strony. Ponowne próby wysyłają te same zaszyfrowane bajty, zamiast szyfrować nowe źródło ze starymi wartościami jednorazowymi. Jeśli samo szyfrowanie zostanie przerwane, anuluj niekompletne przesyłanie i rozpocznij od nowa z nową tożsamością pliku.

Jak weryfikowane są pobrania?

Podczas pobierania każdy segment jest uwierzytelniany, zanim zostanie udostępniony. Ponieważ weryfikacja odbywa się w trakcie strumieniowania pliku, błąd pod koniec pobierania może pozostawić niekompletny plik, więc upewnij się, że pobieranie zakończyło się pomyślnie, zanim zaczniesz z niego korzystać.

Jakie są limity?

Każdy plik w aplikacji internetowej może mieć do 1 GiB. Podglądy zdjęć i filmów mają osobny limit pamięci. Wyczyszczenie lokalnej pamięci przeglądarki może usunąć szyfrogram potrzebny do wznowienia wysyłania.

Format przesyłania strumieniowego jest zgodny z udokumentowaną konstrukcją przesyłania strumieniowego AES-GCM-HKDF firmy Tink, wykorzystującą natywne prymitywy Web Crypto. Tożsamość pliku i oczekiwana długość są powiązane z kontekstem wyprowadzania klucza; Liczniki segmentów i znacznik końcowy chronią kolejność i kompletację. Implementacja ta nie przeszła niezależnego audytu kryptograficznego.

Strona modelu bezpieczeństwa opisuje pełną konstrukcję, w tym nagłówek strumienia i wyprowadzanie kluczy.