跳转到内容

加密

bae 放入不透明云端主目录的一切都会在离开设备前加密。bae 不实现自己的密码学:整套方案来自 coven,本页描述 bae 如何使用它。可浏览主目录选择退出这一切;下文都不适用于它们。

不透明资料库有一个根秘密:创建主目录时生成的随机 256 位密钥。它位于 OS 钥匙串中,永远不在文件里;在 Apple 平台上,钥匙串条目会通过 iCloud Keychain 同步。bae 的配置只保存该密钥的指纹,足以在解锁时判断输入的是错密钥还是对密钥,而无需持有秘密。

密钥通过两种方式在设备间传递,二者都在身份和成员资格中描述:在邀请期间封装给已批准设备的公钥,以及装在恢复码中。

资料库密钥实际上是一个带编号世代的钥匙串。移除成员会追加一个新世代,被移除成员永远不会收到:之后写入的一切都使用新世代,并且对其不可读,而仍存活的成员保留每个世代,可以读取全部历史。每个封装对象都会以明文记录哪个世代能打开它。

主目录中的每个对象:changeset、snapshot、音频 blob、图像、成员资格记录、控制对象。对象以 XChaCha20-Poly1305 按 64 KB 分块封装,每个分块都经过认证,并绑定到自身上下文:封装对象只能作为它被写入时的那个对象、在这个资料库、使用这个密钥解密。分块是串流能工作的原因,播放器可以只解密它获取的字节范围。

对象数量、对象大小、上传时间和访问模式。看不到名称、元数据、音频、图像、成员资格。没有服务端恢复:如果用户丢失每台设备和每份密钥副本,就永远失去该资料库的密文,这正是该设计的工作方式。

打开资料库会从钥匙串读取密钥。如果资料库需要密钥而钥匙串中没有,bae 会把该资料库视为已锁定:打开前提示输入密钥,并在保存回钥匙串前用已存指纹验证输入。锁定资料库会有意从钥匙串中移除密钥;在再次输入之前,云端主目录中的任何内容都不能读取或写入。