账户恢复联系人安全性
无论是否打开了“高级数据保护”,用户最多可将其信任的五个人添加为账户恢复联系人,以帮助恢复其 iCloud 账户及数据,包括所有端对端加密数据。Apple 和恢复联系人均没有可独立恢复用户端对端加密 iCloud 数据的必要信息。
恢复联系人在设计时考虑到了用户隐私。Apple 无法得知用户选择的恢复联系人。只有当用户寻求联系人的帮助且联系人实际开始协助恢复后,Apple 服务器才会在尝试恢复的后期了解恢复联系人的相关信息。恢复完成后,该信息不会被保留。
恢复联系人安全流程
当用户设置账户恢复联系人时,系统会生成一个与该联系人关联的密钥。此密钥用于保护对用户 iCloud 数据的访问,包括端对端加密的 CloudKit 数据。之后,系统会生成一个随机 256 位 AES 密钥,该密钥用于加密恢复联系人密钥以创建恢复联系人数据包。该加密数据包会发送给恢复联系人进行妥善保管,随机 AES 密钥则由 Apple 储存。AES 密钥和数据包自身均不会提供任何与底层密钥相关的信息。在恢复过程中,当用户设备成功从用户恢复联系人处获取恢复联系人数据包且从 Apple 获取 AES 密钥后,它可合并两者以恢复原始密钥并访问用户的 iCloud 数据。
为了设置账户恢复联系人,用户设备会与 Apple 服务器通信以上传 Apple 将持有的那份密钥信息(即上述 AES 密钥)。随后设备会与恢复联系人建立端对端加密的 CloudKit 容器,以共享恢复联系人所需要的部分(即使用 AES 密钥加密的恢复联系人数据包)。由 Apple 创建的授权密钥也会与恢复联系人共享。这将用于恢复账户并帮助重设该账户的密码。该通信通过相互认证的 IDS 通道进行,用于邀请和接受恢复联系人。恢复联系人将接收的信息自动储存在其 iCloud 钥匙串中。Apple 无法访问 CloudKit 容器内容,也无法访问储存该信息的 iCloud 钥匙串。执行共享时,Apple 服务器仅查看恢复联系人的匿名 ID。
之后,当用户需要恢复其账户及 iCloud 数据时,可以向其恢复联系人寻求帮助。届时恢复联系人的设备会生成一个恢复验证码,随后恢复联系人可将其以非网络方式(例如当面或打电话)提供给用户。用户随后在其设备上输入恢复验证码,以使用 SPAKE2+ 协议在设备间建立安全连接,Apple 无法访问该内容。此交互过程由 Apple 服务器协调,但 Apple 无法发起恢复流程。
在建立安全连接和完成所有必需的安全检查后,恢复联系人的设备会将它那一部分的密钥信息以及之前建立的授权密钥返回给提出恢复请求的用户。用户向 Apple 服务器出示此授权密钥,以获得授权访问 Apple 所持有的密钥信息。提供授权密钥还会授权重设账户密码,以恢复账户访问权限。
最后,用户设备将接收自 Apple 和账户恢复联系人的密钥信息重新结合,然后将其用于解密和恢复 iCloud 数据。
多重保护措施各司其职,用于防止恢复联系人未经用户同意而发起恢复流程,其中包括针对用户账户的活跃性检查。如果账户正处于活跃使用状态,使用恢复联系人的恢复流程还会要求提供最近使用的设备密码或 iCloud 安全码。