背景:为什么 AI 推理需要 TEE?
在端侧 AI 场景中,模型权重和用户隐私数据(如人脸特征、生物信息)通常是最高级别的核心资产。传统的推理过程在 CPU 或 GPU 的通用内存中进行,极易受到 Root 提权攻击或恶意内存扫描。TEE(Trusted Execution Environment,可信执行环境)提供了一个硬件隔离的安全区域,确保其中的代码和数据即使在 Android 系统被攻破的情况下也无法被外部读取。
Android NNAPI(Neural Networks API)作为系统级的推理框架,通过驱动层(HAL)打通了通向 TEE 的安全通道。
核心架构:NNAPI 到 TEE 的调用链
- App 层:通过 TensorFlow Lite (TFLite) NNAPI Delegate 发起请求。
- 系统层 (NNAPI Runtime):解析计算图,寻找支持安全执行的硬件设备。
- 驱动层 (Vendor HAL):OEM 厂商实现的 HIDL/AIDL 接口,将任务派发至安全驱动。
- 安全层 (TEE):在 TrustZone 等安全环境中解密模型权重,并在安全内存中执行计算。
实战:通过 NDK 实现可信推理
要实现 TEE 推理,关键在于安全缓冲区(Secure Buffer)的分配。普通的 AHardwareBuffer 不能直接进入 TEE,必须带有特定的 Usage 标志。
步骤 1:分配受保护的 AHardwareBuffer
使用 NDK 的 AHardwareBuffer_allocate 申请支持受保护内容的内存。
AHardwareBuffer_Desc desc = {
.width = 1024,
.height = 1,
.layers = 1,
.format = AHARDWAREBUFFER_FORMAT_BLOB,
.usage = AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER | AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT,
.stride = 0
};
AHardwareBuffer* secureBuffer = nullptr;
AHardwareBuffer_allocate(&desc, &secureBuffer);
步骤 2:将安全内存映射给 NNAPI
NNAPI 提供 ANeuralNetworksMemory_createFromAHardwareBuffer 接口,将上述安全内存封装。
ANeuralNetworksMemory* nnMemory;
ANeuralNetworksMemory_createFromAHardwareBuffer(secureBuffer, &nnMemory);
步骤 3:配置执行请求(Execution)
在创建执行对象时,必须指定模型的所有输入/输出都位于受保护的内存中,否则 TEE 会拒绝执行。
// 创建执行实例
ANeuralNetworksExecution* execution;
ANeuralNetworksExecution_create(compilation, &execution);
// 设置输入数据源为安全内存
ANeuralNetworksExecution_setInputFromMemory(execution, 0, NULL, nnMemory, 0, inputSize);
// 设置输出数据源为安全内存
ANeuralNetworksExecution_setOutputFromMemory(execution, 0, NULL, nnMemory, outputOffset, outputSize);
// 发起同步执行
ANeuralNetworksExecution_compute(execution);
关键点解析:
- 硬件支持验证:并非所有硬件加速器都支持 TEE 推理。你需要通过 ANeuralNetworksDevice_getFeatureLevel 检查版本,并通过厂商驱动确认其是否实现了 PROTECTED_CONTENT 支持。
- 内存隔离:在 TEE 推理模式下,CPU 无法直接通过 mmap 读取 secureBuffer 中的结果。如果需要查看推理结果,必须通过特定的安全显示通道(如 Secure Display)或在 TEE 内部进行二次加密。
- 模型解密:通常模型权重以加密形式存储在磁盘。驱动程序会在 TEE 内部使用存储在硬件中的根密钥(RPMB)进行解密,从而确保模型文件即便泄露也无法被逆向。
总结
通过 NNAPI 调用 TEE 推理是目前 Android 端最高级别的安全 AI 方案。开发者需关注 AHardwareBuffer 的安全标志位,并配合厂商提供的 HAL 驱动实现真正的端到端可信计算。
汤不热吧