跳转到内容

身份和成员资格

bae 中没有任何账号系统。资料库中的每个人都是一个 coven 成员:一个随机且永久的成员 id,以及两个密钥对,一个用于签名,一个用于接收封装给他的密钥;它们由此人的所有设备共享,并保存在每台设备的 OS 钥匙串中。设备是一次安装,有自己的 id,属于一个成员。谁属于一个资料库,由云端主目录中一组已签名记录表示,由每个成员的设备检查,不由服务器签发。这套机制来自 coven;本页说明 bae 如何使用它。

资料库在云端主目录中的全部历史是一条编号序列,每台设备都以相同顺序应用它。成员资格或设置的变更是这条序列中的一个管理条目,由其作者的密钥签名,并依据它之前那一刻的状态判定,因此每台设备都能独立得出相同的结论。条目只有在作者有权做出时才生效,并且资料库始终至少保留一名管理员。

设备发送的每项更改都会对照该记录检查:由当前成员签名,来自未被移除的设备。来自已移除设备或成员、从未加入的密钥,或签名无效的更改都不生效。提供商存储这些记录,但不能伪造它们。

管理员 和 成员 都能读写资料库:coven 不对资料库写入检查权限,所以只读角色无法成立。管理员还可以邀请和移除人、更改角色,以及重命名资料库。为资料库提供云端主目录的人是它的第一个管理员。

操作谁
邀请某人管理员
添加设备本人,在新设备上,用自己的恢复码
移除设备设备所属的人,或任何管理员
移除某人管理员
重命名资料库管理员

一个人的个人资料、评分、播放历史和播放列表都是所有者行:只有此人的设备能修改它们,因此记在某人名下的评分确实出自他本人。

恢复码证明设备属于其主人,因此不需要批准:

  1. 新设备通过扫描此人另一台设备显示的二维码、在 Apple 设备上从 iCloud 钥匙串中选取,或手动输入来获得恢复码。
  2. 它连接到存储:在 Dropbox 和 OneDrive 上登录此人自己的账户,在 S3 上使用此人的访问密钥,二维码会在恢复码旁边携带该密钥。
  3. 它载入资料库,检查恢复码中的密钥属于当前成员,并用这些密钥签名的条目把自己登记为新设备。

密钥此后已被替换的恢复码会失败。恢复总会创建一台新设备;它不会挽救另一个安装中未发送的编辑。

  1. 管理员输入对方的提供商账户并选择其角色。bae 把资料库的文件夹共享给该账户,或在 S3 上为对方创建访问密钥,并显示邀请:一个二维码,其中包含资料库的位置、为此人选定的成员 id、一次性密钥和资料库当前的名称。邀请在创建一天后过期。
  2. 对方的设备扫描邀请,登录他自己的账户,生成他的密钥对,并向存储写入加入请求;该请求用从邀请密钥派生的密钥加密,并用他的新密钥签名。
  3. 管理员的设备是唯一持有该密钥的设备,它显示请求,由管理员批准。
  4. 批准会把每个存储库密钥封装给此人的新封装密钥,然后添加接纳他的条目。
  5. 新设备打开自己的密钥,载入资料库,登记自己,并用他输入的名字写入此人的个人资料。

拒绝邀请,或让邀请过期,会收回它授予的提供商访问权。

移除设备或人是一个管理条目,它在序列中的位置是历史中的一条分界线:被移除的设备或人此后发送的内容不生效,此前到达的内容保留。移除某人还会移除其设备和私密圈子,并在写入更多数据之前替换他持有的密钥(见加密)。切断存储访问是提供商那边的工作:持有资料库的账户所在的设备会取消共享文件夹,在 S3 上则删除此人的访问密钥。已经同步到被移除设备上的内容仍在它那里;数据无法追回。

恢复码包含成员 id 及其当前的私钥对、资料库的 store id 和存储位置;从不包含存储凭据、登录 token 或资料库名称。它按需显示,在 Apple 平台上会自动保存在 iCloud 钥匙串中,并且与资料库本身同等敏感:持有它且能访问存储的人,在资料库看来就是那个人。丢失每台设备和恢复码的人,可以由管理员重新邀请到他现有的成员 id,这会替换他的密钥。