Trusty系统基础入门

第八章:安全服务框架

安全服务框架概述

🔒

安全服务框架简介

Trusty的安全服务框架(SSF)是一个在TEE(可信执行环境)中运行的模块化安全服务集合,为安全关键操作提供标准化的接口和实现。SSF遵循最小权限原则,每个服务运行在独立的沙箱中,通过严格的访问控制机制保护敏感数据。

安全服务框架的主要目标是为Android系统提供标准化的TEE服务接口,包括密钥管理、生物识别保护和安全存储等核心安全功能。

关键安全服务

Keymaster TA

密钥派生与存储服务

  • 提供硬件支持的密钥生成和存储
  • 支持密钥派生功能(PBKDF2, HKDF等)
  • 实现密钥使用策略和访问控制
  • 提供加密/解密、签名/验证操作

Gatekeeper TA

生物识别保护服务

  • 安全存储生物特征模板
  • 执行生物特征匹配验证
  • 实现防重放攻击机制
  • 提供限速保护防止暴力破解

Secure Storage TA

安全存储服务

  • 提供加密的文件系统抽象
  • 实现数据完整性和机密性保护
  • 支持访问控制策略
  • 提供防回滚保护机制

Keymaster TA 详细功能

Keymaster TA是Trusty中最关键的安全服务之一,负责所有加密密钥的生命周期管理:

  • 密钥生成:在TEE内部生成密钥,私钥永不离开安全环境
  • 密钥导入/导出:支持安全导入外部密钥和导出公钥
  • 密钥使用限制:可配置密钥用途(加密/解密/签名/验证)、算法参数和使用时间窗口
  • 密钥认证:生成密钥证明,验证密钥确实由TEE生成
// 示例: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为生物识别系统提供安全支持:

  1. 在注册阶段,生物特征数据被加密并存储在TEE的安全存储中
  2. 在验证阶段,输入的生物特征数据在TEE内部与存储的模板进行比较
  3. 比较结果通过安全通道返回给普通世界(REE)
  4. 实现防重放攻击的挑战-响应机制

Gatekeeper TA不直接存储原始生物特征数据,而是存储经过加密和模糊处理的模板,即使模板泄露也无法还原原始生物特征。

Secure Storage TA 架构

Secure Storage TA提供分层的安全存储解决方案:

安全存储层次结构

应用层 → 文件系统抽象层 → 加密层 → 物理存储层

  • 加密机制:使用硬件唯一密钥(KEK)加密数据密钥(DEK)
  • 完整性保护:每个数据块包含HMAC签名
  • 访问控制:基于TA身份和元数据标签的细粒度控制
  • 防回滚:使用单调计数器保护数据版本

服务注册与发现机制

🔄

服务注册流程

Trusty中的安全服务通过标准化的注册机制向系统声明其可用性:

  1. TA在初始化时调用ssf_register_service()函数
  2. 提供服务的UUID、版本号和接口描述符
  3. 系统验证TA的完整性和权限
  4. 服务信息被记录在安全服务目录中
// 示例:服务注册代码片段
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通信

  • 服务查询:客户端通过UUID查找所需服务
  • 权限验证:系统检查调用者是否有权访问该服务
  • 会话建立:创建安全通道用于后续通信
  • IPC调用:通过消息传递机制调用服务功能

Trusty使用基于能力的访问控制模型,服务可以精确控制哪些客户端可以访问哪些接口方法。

服务间通信机制

Trusty中的安全服务通过以下机制进行交互:

  • 同步消息传递:基于端口的同步IPC机制
  • 异步通知:事件驱动的异步通信
  • 共享内存:受控的共享内存区域用于大数据传输
  • 安全通道:端到端加密的通信链路
// 示例:服务间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));