第八章:安全服务框架
Trusty的安全服务框架(SSF)是一个在TEE(可信执行环境)中运行的模块化安全服务集合,为安全关键操作提供标准化的接口和实现。SSF遵循最小权限原则,每个服务运行在独立的沙箱中,通过严格的访问控制机制保护敏感数据。
安全服务框架的主要目标是为Android系统提供标准化的TEE服务接口,包括密钥管理、生物识别保护和安全存储等核心安全功能。
密钥派生与存储服务
生物识别保护服务
安全存储服务
Keymaster TA是Trusty中最关键的安全服务之一,负责所有加密密钥的生命周期管理:
// 示例:Keymaster TA密钥生成请求
keymaster_generate_key_request_t request = {
.key_algorithm = KM_ALGORITHM_RSA,
.key_size = 2048,
.key_purpose = KM_PURPOSE_SIGN | KM_PURPOSE_VERIFY,
.digest = KM_DIGEST_SHA256,
.padding = KM_PAD_RSA_PKCS1_1_5_SIGN,
.auth_timeout = 0 // 无超时限制
};
Gatekeeper TA为生物识别系统提供安全支持:
Gatekeeper TA不直接存储原始生物特征数据,而是存储经过加密和模糊处理的模板,即使模板泄露也无法还原原始生物特征。
Secure Storage TA提供分层的安全存储解决方案:
安全存储层次结构
应用层 → 文件系统抽象层 → 加密层 → 物理存储层
Trusty中的安全服务通过标准化的注册机制向系统声明其可用性:
ssf_register_service()函数
// 示例:服务注册代码片段
static const ssf_service_desc_t keymaster_desc = {
.uuid = KEYMASTER_UUID,
.version = KEYMASTER_VERSION,
.ops = &keymaster_ops,
};
status_t keymaster_init(void) {
return ssf_register_service(&keymaster_desc);
}
客户端(其他TA或REE应用)通过以下步骤发现和使用安全服务:
服务发现流程
客户端请求 → 服务目录查询 → 权限检查 → 建立会话 → IPC通信
Trusty使用基于能力的访问控制模型,服务可以精确控制哪些客户端可以访问哪些接口方法。
Trusty中的安全服务通过以下机制进行交互:
// 示例:服务间IPC调用
handle_t port;
status_t res = ssf_connect_service(KEYMASTER_UUID, &port);
if (res != NO_ERROR) {
// 错误处理
}
keymaster_request_t req = { ... };
keymaster_response_t resp;
res = ssf_send_msg(port, &req, sizeof(req), &resp, sizeof(resp));