加密
bae 放入云端主目录的一切都会在离开设备前加密;不存在不加密的模式。bae 不实现自己的密码学:整套方案来自 coven,本页描述 bae 如何使用它。
| 密钥 | 用途 |
|---|---|
| 存储库密钥 | 加密资料库及其成员资格记录 |
| 每个人的圈子密钥 | 加密此人设为私密的内容:其私密播放历史和播放列表 |
| 每个文件的密钥 | 加密一个文件,只在其所属行的加密更改中传递 |
| 某人的签名密钥对 | 为其设备发送的每项更改签名 |
| 某人的封装密钥对 | 打开封装给此人的密钥 |
存储库密钥是随机的,在资料库获得云端主目录时生成。一个人的密钥对由其所有设备共享。私钥和资料库密钥保存在 OS 钥匙串中,从不放在文件或数据库里。它们通过两种方式到达设备,均在身份和会员资格中说明:恢复码携带此人自己的密钥对;批准邀请的管理员会把存储库密钥封装给新成员的封装密钥。
密钥从不原地修改,而是新增一个。某人被移除后,仍在的成员的设备会在继续写入数据之前,新增一个存储库密钥,并为此人所在的每个圈子新增一个密钥:之后写入的一切对他都不可读,而其余成员保留所有旧密钥,可以读取全部历史。移除单台设备不会轮换任何密钥,因为此人的其他设备共享同样的密钥;从移除起,那台设备发送的内容不再生效。
被封装的内容
Section titled “被封装的内容”主目录中的每个对象:更改、snapshot、成员资格记录和文件。内容用 XChaCha20-Poly1305 加密,每项更改都用 Ed25519 签名,密钥用 X25519 sealed box 封装给人。文件按 64 KiB 分块加密,每块单独认证并绑定到自己的位置,因此分块无法在不被察觉的情况下被篡改、替换或重排。分块是串流能工作的原因:播放器可以只解密它获取的那些分块。
提供商能看到什么
Section titled “提供商能看到什么”对象数量、对象大小、上传时间、哪个账户写入了每个对象,以及哪台设备上传了每个文件和 snapshot,因为它们的路径中带有设备名。看不到名称、元数据、音频、图像。文件以随机名称存放,从不使用其内容的哈希。没有服务端恢复:如果每个人都丢失了每台设备和每个恢复码,资料库就会丢失,这正是该设计的工作方式。
打开资料库会从 OS 钥匙串读取其密钥。当前被锁定的钥匙串(因会话锁定或显示器休眠)会与已损坏的钥匙串区分开:bae 会把资料库显示为已锁定,并在解锁后再试,而不是报告资料库不可用。设备也可以忘记密钥,这会把该设备上的资料库锁定,直到再次解锁。