iCloud 加密
iCloud 数据加密与数据储存模型紧密相关,首先是 CloudKit 框架和 API,它们允许 App 和系统软件代表用户将数据储存在 iCloud 中并使所有内容在设备和网页上保持最新。
CloudKit 加密
CloudKit 框架允许 App 开发者将键值数据、结构性数据和资源(与数据库分开储存的大型数据,如图像或视频)储存在 iCloud 中。CloudKit 支持按容器分组的公共数据库和专用数据库。公共数据库全局共享,通常用于一般性资源,且不加密。专用数据库用于储存每位用户的 iCloud 数据。
CloudKit 使用与数据结构匹配的密钥层级。每个容器的专用数据库受密钥层级保护,该密钥层级植根于称为 CloudKit 服务密钥的非对称密钥。这些密钥在每位 iCloud 用户的受信任设备上生成且具有唯一性。当数据写入 CloudKit 时,所有记录密钥均会在用户受信任设备上生成并封装到对应的密钥层级,然后才会上传数据。
Apple 支持文章 iCloud 数据安全概览中列出的许多 Apple 服务使用受 iCloud 钥匙串同步保护的 CloudKit 服务密钥进行端对端加密。对于这些 CloudKit 容器,服务密钥储存在用户的 iCloud 钥匙串中并享有 iCloud 钥匙串的安全特性;服务密钥仅可在用户受信任设备上访问,Apple 或任何第三方都无法访问。如果设备丢失,用户可以使用 iCloud 钥匙串安全恢复、帐户恢复联系人或帐户恢复密钥来恢复其 iCloud 钥匙串数据。
加密密钥管理
CloudKit 中加密数据的安全性依赖对应加密密钥的安全性。CloudKit 服务密钥分为两类:端对端加密和认证后可用。
端对端加密服务密钥:对于端对端加密的 iCloud 服务,相关的 CloudKit 服务私钥绝不会提供给 Apple 服务器。包括私钥在内的服务密钥对会在用户的受信任设备上本地创建并使用 iCloud 钥匙串安全性传输到用户的其他设备。虽然 Apple 服务器负责处理 iCloud 钥匙串恢复和同步流程,但加密会阻止这些服务器访问用户的任何钥匙串数据。在无法访问 iCloud 钥匙串及其所有恢复机制的最坏情况下,CloudKit 中的端对端加密数据会丢失。Apple 无法帮助恢复此数据。
认证后可用服务密钥:对于“照片”和 iCloud 云盘等其他服务,服务密钥储存在 Apple 数据中心的 iCloud 硬件安全模块中,且可供部分 Apple 服务访问。当用户在新设备上登录 iCloud 并认证其 Apple ID 后,无需用户进一步交互或输入,Apple 服务器便可访问这些密钥。例如,用户登录 iCloud.com 后便可立即在线查看其照片。这类服务密钥为认证后可用密钥。