Revault codeert een groot bestand in segmenten van ongeveer 5 MiB, elk met een eigen authenticatietag, zodat nooit het hele bestand tegelijk in het geheugen hoeft te staan. Daardoor kan de webapp bestanden tot 1 GiB aan.
Waarom niet het hele bestand in één keer coderen?
Grote bestanden zouden geen grote hoeveelheid geheugen nodig hebben. Revault leest bestanden in segmenten van ongeveer 5 MiB, codeert elk segment in de browser en voert cijfertekst in IndexedDB uit. Het originele bestand wordt nooit in één gigantische buffer gelezen.
Werken in segmenten betekent ook dat een onderbroken upload kan doorgaan vanaf ciphertext die al klaarstaat, in plaats van het hele bestand opnieuw te coderen.
Wat beschermt de volgorde en volledigheid van segmenten?
Elk bestand krijgt een eigen coderingssleutel, met HKDF afgeleid van de hoofdsleutel van de kluis. De afleidingscontext bevat de identificatoren van de kluis en het bestand, de lengte van het bestand in bytes en de segmentgrootte.
De nonce van 12 bytes van elk segment combineert een willekeurig voorvoegsel dat voor dat bestand is gekozen, een segmentteller van vier bytes en een vlag die het laatste segment markeert. Segmenten hebben GCM-tags van 128 bits. Als segmenten worden verwisseld, gewijzigd of afgekapt, mislukt de verificatie.
Wat gebeurt er als een upload wordt onderbroken?
Zodra de codering is voltooid, kunnen netwerkuploads worden hervat vanuit in de cache opgeslagen cijfertekst nadat de pagina is vernieuwd. Nieuwe pogingen verzenden dezelfde gecodeerde bytes, in plaats van een nieuwe bron onder oude nonces te coderen. Als de codering zelf wordt onderbroken, annuleert u die onvolledige upload en begint u opnieuw met een nieuwe bestandsidentiteit.
Hoe worden downloads geverifieerd?
Bij downloads wordt elk segment geauthenticeerd voordat het wordt vrijgegeven. Omdat de controle plaatsvindt terwijl het bestand binnenstroomt, kan een fout laat in een download een onvolledig bestand achterlaten. Controleer dus of de download geslaagd is voordat u erop vertrouwt.
Wat zijn de limieten?
Elk bestand in de webapp kan maximaal 1 GiB groot zijn. Voor voorbeelden van afbeeldingen en video’s geldt een aparte geheugenlimiet. Het wissen van lokale browseropslag kan de ciphertext verwijderen die nodig is om een upload te hervatten.
Het streamingformaat volgt de gedocumenteerde AES-GCM-HKDF-streamingconstructie van Tink, waarbij gebruik wordt gemaakt van native Web Crypto-primitieven. Bestandsidentiteit en verwachte lengte zijn gebonden aan de sleutelafleidingscontext; segmenttellers en de eindmarkering beschermen de bestelling en voltooiing. Deze implementatie heeft geen onafhankelijke cryptografische audit ondergaan.
De pagina over het beveiligingsmodel beschrijft de volledige constructie, inclusief de streamheader en de sleutelafleiding.