Revault یک فایل بزرگ را در بخشهایی حدود 5 MiB رمزگذاری میکند که هر کدام برچسب احراز هویت خودش را دارد، بنابراین لازم نیست کل فایل یکجا در حافظه باشد. در برنامهٔ وب، همین چیزی است که فایلهای تا 1 GiB را ممکن میکند.
چرا کل فایل را یکجا رمزگذاری نکنیم؟
فایلهای بزرگ نباید به حافظه زیادی نیاز داشته باشند. Revault فایلها را در قطعههایی حدود ۵ MiB میخواند، هر قطعه را در مرورگر رمزگذاری میکند و متن رمزشده را در IndexedDB مرحلهبندی میکند. فایل اصلی هرگز در یک بافر غولپیکر خوانده نمیشود.
کار کردن بهصورت بخشبخش یعنی یک آپلود قطعشده میتواند از متن رمزگذاریشدهای که از قبل آماده شده ادامه پیدا کند، بهجای آنکه کل فایل دوباره رمزگذاری شود.
چه چیزی از ترتیب و کامل بودن بخشها محافظت میکند؟
هر فایل کلید رمزگذاری مخصوص خودش را دارد که با HKDF از کلید اصلی گاوصندوق مشتق میشود. زمینهٔ اشتقاق شامل شناسههای گاوصندوق و فایل، طول بایتی فایل و اندازهٔ بخش است.
nonce ۱۲ بایتی هر بخش، یک پیشوند تصادفی انتخابشده برای آن فایل، یک شمارندهٔ چهاربایتی بخش و پرچمی را که بخش پایانی را مشخص میکند ترکیب میکند. بخشها برچسبهای GCM ۱۲۸ بیتی دارند. اگر بخشها جابهجا، دستکاری یا بریده شوند، راستیآزمایی شکست میخورد.
اگر آپلود قطع شود چه میشود؟
پس از پایان رمزگذاری، بارگذاریهای شبکه میتوانند پس از تازهسازی صفحه از متن رمزشده ذخیرهشده ادامه یابند. تلاشهای دوباره همان بایتهای رمزگذاریشده را میفرستند، نه اینکه منبع جدیدی را با nonceهای قدیمی رمزگذاری کنند. اگر خود رمزگذاری قطع شد، آن بارگذاری ناقص را لغو کنید و با هویت فایل تازه از نو شروع کنید.
دانلودها چگونه راستیآزمایی میشوند؟
دانلودها هر بخش را پیش از تحویل احراز هویت میکنند. چون بررسی همزمان با جریان فایل انجام میشود، خطایی در اواخر دانلود میتواند فایلی ناقص برجا بگذارد؛ پس پیش از تکیه بر فایل مطمئن شوید دانلود با موفقیت تمام شده است.
محدودیتها چیست؟
هر فایل در برنامهٔ وب میتواند تا 1 GiB باشد. پیشنمایش تصویر و ویدیو سقف حافظهٔ جداگانهای دارد. پاک کردن ذخیرهسازی محلی مرورگر میتواند متن رمزگذاریشدهٔ لازم برای ادامهٔ آپلود را حذف کند.
قالب جریانی از ساختار جریانی AES-GCM-HKDF مستندشده Tink پیروی میکند و از ابزارهای بومی Web Crypto استفاده میکند. هویت فایل و طول مورد انتظار در بافت اشتقاق کلید گنجانده میشوند؛ شمارندههای قطعه و نشانگر پایانی از ترتیب و تکمیل محافظت میکنند. این پیادهسازی بررسی رمزنگاری مستقل را پشت سر نگذاشته است.
صفحهٔ مدل امنیتی ساختار کامل، از جمله سرآیند جریان و اشتقاق کلید را توضیح میدهد.