自 Android 12 起,远程密钥配置 (RKP) 便已成为 AOSP 的一部分。Android 14 引入了一个远程配置可更新模块,该模块通过提高服务 API 的稳健性并缩短引入任何改进所需的时间来提高功能弹性。
动机
通过将所有内容打包到 APEX 中来简化 RKP 服务。
在 Android 14 之前,RKP 分为应用 RemoteProvisioner
和 Keystore 2.0。RemoteProvisioner
应用负责联系 RKP 后端,而 Keystore 2.0 既负责存储密钥,又负责与 HAL 通信。这不是一个好的架构,因为 RKP 密钥在附加元数据方面与 Keystore 密钥有很大不同。此外,这还需要对 Keystore 框架代码进行笨拙的修改,以提醒 RemoteProvisioner
注意潜在的资源匮乏。
RKP 作为主线模块旨在通过将所有内容整齐地打包到 APEX 中来改进这些方面。
模块边界
RKP 主线 APEX com.android.rkpd
包含远程密钥配置守护程序 (RKPD) 应用和远程配置系统服务器组件(使用 Java 构建)。
堆栈架构
图 1 说明了 RKP 堆栈架构。
图 1. RKP 堆栈架构。
内部架构
图 2 说明了 RKP 内部架构。
图 2. RKP 内部架构。
有关 RKP 内部架构的其他信息
RKPD 主线 APEX -
com.android.rkpd
- RKPD 应用 (Java)
packages/modules/RemoteKeyProvisioning/app
- RKPD 系统服务器片段 (Java)
packages/modules/RemoteKeyProvisioning/system-server
- RKPD 应用 (Java)
HAL 接口/实现 (Rust/C++)
IRemotelyProvisionedComponent
hardware/interfaces/security/keymint
软件包格式
模块的应用和其他功能打包为 APEX 文件 com.android.rkpd
。
依赖项
RKP 模块继续依赖于 IRemotelyProvisionedComponent
实现的存在,以提供证明密钥和证书请求。
测试策略
应用 APEX 的 AOSP 版本包含 OEM 可以运行的单元测试。