从 Android 12 开始,远程密钥配置 (RKP) 已成为 AOSP 的一部分。Android 14 引入了远程配置可更新模块,该模块可提高服务 API 的稳健性并缩短向其引入任何改进的时间,从而提高功能弹性。
设计初衷
通过将所有内容封装到 APEX 来简化 RKP 服务。
在 Android 14 之前,RKP 拆分为应用 RemoteProvisioner
和密钥库 2.0。RemoteProvisioner
应用负责与 RKP 后端通信,密钥库 2.0 负责存储密钥以及与 HAL 通信。这不是一个好的架构,因为在附加的元数据方面,RKP 密钥与密钥库密钥有很大不同。此外,还需要对密钥库框架代码进行复杂的修改,以提醒 RemoteProvisioner
可能存在资源不足问题。
作为 Mainline 模块,RKP 旨在通过巧妙地将所有内容打包到 APEX 中来改进这些方面。
模块边界
RKP Mainline APEX com.android.rkpd
包含远程密钥配置守护程序 (RKPD) 应用和远程配置系统服务器组件(使用 Java 构建)。
堆栈架构
图 1 展示了 RKP 堆栈架构。
图 1. RKP 堆栈架构。
内部架构
图 2 展示了 RKP 内部架构。
图 2. RKP 内部架构。
有关 RKP 内部架构的更多信息:
RKPD Mainline APEX -
com.android.rkpd
- RKPD 应用 (Java)
packages/modules/RemoteKeyProvisioning/app
- RKPD 系统服务器 fragment (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) 可以运行的单元测试。