Revault didelį failą šifruoja maždaug 5 MiB segmentais, kurių kiekvienas turi savo autentifikavimo žymą, todėl visas failas niekada neturi vienu metu telpti atmintyje. Žiniatinklio programoje būtent dėl to galima naudoti iki 1 GiB dydžio failus.

Kodėl nešifruoti viso failo iš karto?

Dideli failai neturėtų reikalauti daug atminties. Revault skaito failus maždaug 5 MiB segmentais, kiekvieną segmentą užšifruoja naršyklėje, o šifrotekstą laikinai saugo IndexedDB. Originalus failas niekada nėra nuskaitomas į vieną milžinišką buferį.

Darbas segmentais taip pat reiškia, kad nutrūkusį įkėlimą galima tęsti iš jau paruošto šifrotekščio, o ne iš naujo šifruoti visą failą.

Kas apsaugo segmentų tvarką ir išsamumą?

Kiekvienas failas gauna savo šifravimo raktą, išvestą HKDF iš seifo pagrindinio rakto. Išvedimo kontekste yra seifo ir failo identifikatoriai, failo baitų ilgis ir segmento dydis.

Kiekvieno segmento 12 baitų vienkartinis skaičius (nonce) sujungia tam failui parinktą atsitiktinį priešdėlį, keturių baitų segmento skaitiklį ir vėliavėlę, žyminčią paskutinį segmentą. Segmentai turi 128 bitų GCM žymas. Jei segmentai sukeičiami, pakeičiami ar nukerpami, patikra nepavyksta.

Kas nutinka, jei įkėlimas nutrūksta?

Baigus šifravimą, tinklo įkėlimus galima tęsti iš talpykloje esančio šifroteksto net ir atnaujinus puslapį. Kartojant siunčiami tie patys užšifruoti baitai, o ne naujai užšifruotas šaltinis su senais vienkartiniais skaičiais (nonce). Jei pats šifravimas nutrūksta, atšaukite nebaigtą įkėlimą ir pradėkite iš naujo su nauja failo tapatybe.

Kaip tikrinami atsisiuntimai?

Atsisiunčiant kiekvienas segmentas autentifikuojamas prieš jį išleidžiant. Kadangi tikrinama failui transliuojant, klaida pabaigoje gali palikti nepilną failą, todėl prieš juo pasikliaudami įsitikinkite, kad atsisiuntimas sėkmingai baigėsi.

Kokie yra apribojimai?

Žiniatinklio programoje kiekvienas failas gali būti iki 1 GiB. Vaizdų ir vaizdo įrašų peržiūroms taikomas atskiras atminties limitas. Išvalius vietinę naršyklės saugyklą, gali dingti šifrotekstas, reikalingas įkėlimui tęsti.

Srautinis formatas atitinka dokumentuotą Tink AES-GCM-HKDF srautinę konstrukciją ir naudoja natyvius Web Crypto primityvus. Failo tapatybė ir tikėtinas ilgis įtraukiami į rakto išvedimo kontekstą; segmentų skaitikliai ir baigiamasis žymeklis apsaugo eiliškumą ir užbaigtumą. Ši realizacija nėra nepriklausomai patikrinta kriptografiniu auditu.

Saugumo modelio puslapyje aprašyta visa konstrukcija, įskaitant srauto antraštę ir raktų išvedimą.