Revault 會把大型檔案分成約 5 MiB 的區段加密,每個區段都有各自的驗證標籤,因此整個檔案不必一次全部放進記憶體。在網頁版 App 中,這正是能處理最大 1 GiB 檔案的原因。
為什麼不一次加密整個檔案?
大型檔案不該佔用大量記憶體。Revault 會以約 5 MiB 的區段讀取檔案,在瀏覽器中加密每個區段,並將密文暫存在 IndexedDB。原始檔案絕不會被一次讀入一個巨大的緩衝區。
以區段方式處理,也表示中斷的上傳可以從已暫存的密文繼續,而不必重新加密整個檔案。
是什麼保護區段的順序與完整性?
每個檔案都有自己的加密金鑰,由保險庫主金鑰以 HKDF 衍生而來。衍生脈絡包含保險庫與檔案識別碼、檔案的位元組長度,以及區段大小。
每個區段的 12 位元組隨機數 (nonce),是由為該檔案挑選的隨機前綴、四位元組的區段計數器,以及標示最後一個區段的旗標組合而成。區段帶有 128 位元的 GCM 標籤。若區段被調換、竄改或截斷,驗證就會失敗。
上傳中斷會發生什麼事?
加密完成後,網路上傳可以在頁面重新整理後,從快取的密文繼續進行。重試時會傳送相同的加密位元組,而不是用舊的 nonce 重新加密新的來源。如果加密本身中斷,請取消該未完成的上傳,並以全新的檔案識別資訊重新開始。
下載如何驗證?
下載時會先驗證每個區段,才釋出該區段。由於檢查是隨著檔案串流同時進行,下載後段發生錯誤時,可能會留下不完整的檔案,因此請確認下載成功完成後再使用。
有哪些限制?
網頁版 App 中的每個檔案最大可達 1 GiB。圖片與影片預覽有另外的記憶體限制。清除瀏覽器的本機儲存空間,可能會移除繼續上傳所需的密文。
串流格式遵循 Tink 公開記載的 AES-GCM-HKDF 串流結構,並使用原生 Web Crypto 基本元件。檔案識別資訊和預期長度會繫結到金鑰衍生情境;區段計數器和結尾標記則保護順序與完整性。此實作尚未接受獨立的密碼學稽核。
安全模型頁面說明了完整的建構方式,包括串流標頭與金鑰衍生。