Revault 会将大文件分成约 5 MiB 的分段进行加密,每个分段都有自己的认证标签,因此整个文件无需一次性载入内存。在 Web 应用中,这正是支持最大 1 GiB 文件的原因。

为什么不一次性加密整个文件?

大文件不应需要大量内存。 Revault 以大约 5 MiB 的分段读取文件,在浏览器中加密每个分段,并将密文暂存在 IndexedDB 中。原始文件永远不会读入一个巨大的缓冲区。

分段处理还意味着,中断的上传可以从已暂存的密文继续,而无需重新加密整个文件。

什么保护分段的顺序和完整性?

每个文件都有自己的加密密钥,由保管库主密钥通过 HKDF 派生。派生上下文包括保管库和文件标识符、文件的字节长度以及分段大小。

每个分段的 12 字节 nonce 由三部分组成:为该文件选定的随机前缀、四字节的分段计数器,以及标记最后一个分段的标志位。各分段带有 128 位 GCM 标签。如果分段被调换、篡改或截断,验证就会失败。

上传中断会怎样?

加密完成后,页面刷新后可以从缓存的密文恢复网络上传。重试发送相同的加密字节,而不是在旧的随机数下加密新的源。如果加密本身被中断,请取消不完整的上传并使用新的文件标识重新开始。

下载如何验证?

下载时会先认证每个分段,再将其释放。由于校验是在文件流式传输过程中进行的,下载后期出现的错误可能会留下一个不完整的文件,因此请在确认下载成功完成后再使用该文件。

有哪些限制?

Web 应用中的每个文件最大可达 1 GiB。图片和视频预览另有内存限制。清除浏览器本地存储可能会删除续传上传所需的密文。

流格式遵循 Tink 记录的 AES-GCM-HKDF 流结构,使用本机 Web Crypto 原语。文件标识和预期长度被绑定到密钥派生上下文中;段计数器和最终标记保护排序和完成。此实施尚未接受独立的加密审计。

安全模型页面介绍了完整的构造,包括流头部和密钥派生。