指纹识别两套方案的硬件+固件架构
方案A:非安全总线 + 加密传输方案(中低端主流)
核心定位
一、硬件架构详解
1. 物理总线与安全属性
|
硬件模块 |
总线归属 |
TZPC安全配置 |
访问权限 |
|
指纹传感器模组 |
SPI/I2C 物理接口 |
传感器内置独立加密引擎,OTP烧录预置密钥 |
仅加密后数据输出到总线 |
|
SPI/I2C 控制器 |
非安全AXI总线 |
Non-secure 属性 |
非安全世界EL1可直接读写寄存器 |
|
系统总线 |
普通系统总线 |
无安全限制 |
非安全态CPU、DMA均可访问 |
|
数据内存 |
普通DRAM区域 |
TZC非安全属性 |
普通世界可读写,仅存放加密密文 |
2. 中断路由设计
- 中断链路:传感器中断引脚 → 平台GPIO控制器 → GIC中断控制器
- GIC分组:Group 1 Non-secure(非安全中断)
- 处理归属:由Linux内核的指纹驱动直接接管中断,普通世界可完整感知中断事件
- 作用:仅用于通知「采集完成」事件,不携带任何敏感生物数据
3. 电源与控制通路
- 电源、复位、唤醒引脚:挂在普通世界GPIO/PMIC上,由Linux内核驱动直接控制上下电、硬件复位
- 传感器固件下载:由普通世界驱动通过总线写入,固件本身带签名校验,防止恶意固件篡改
4. 完整数据流向
二、固件架构(按EL特权级分层)
非安全世界(Normal World)
1. EL0(用户态,无内核权限)
|
组件 |
职责 |
安全边界 |
|
第三方应用APP |
调用系统标准 BiometricPrompt API发起认证/录入请求 |
完全不可信,仅能拿到最终结果,接触不到任何生物数据 |
|
SystemServer FingerprintService |
权限校验、多应用任务调度、认证生命周期管理 |
系统服务,仅做流程调度,不接触原始数据 |
|
指纹HAL服务 |
实现Android标准Biometrics HIDL/AIDL接口,同时作为TEE的客户端(CA),封装控制指令转发给TEE |
仅做指令与结果转发,不解密、不接触明文图像 |
2. EL1(内核态,普通世界最高权限)
|
组件 |
职责 |
安全边界 |
|
SPI/I2C 控制器驱动 |
系统通用总线驱动,提供寄存器读写、数据收发接口 |
可直接操作外设寄存器,仅传输加密数据 |
|
指纹控制驱动 |
厂商实现,负责传感器复位、固件下载、寄存器配置、中断处理 |
可完整控制硬件,但只能读取加密后的图像数据,无密钥无法解密 |
|
OP-TEE 驱动(tee.ko) |
负责SMC指令触发、共享内存管理、RPC请求处理 |
仅做通道转发,不解析业务数据 |
EL3 特权级(安全监控器)
- 核心组件:ATF BL31 + opteed 分发驱动
- 职责:负责安全态/非安全态切换、SMC调用分发、上下文保存恢复
- 安全边界:仅做硬件级切换,不参与任何指纹业务逻辑
安全世界(Secure World)
1. Secure EL1(TEE内核态)
|
组件 |
职责 |
|
OP-TEE 内核 |
线程调度、安全内存管理、加密框架、安全存储服务、系统调用处理 |
|
加密引擎驱动 |
对接硬件加密引擎,为TA提供解密、签名能力 |
2. Secure EL0(可信应用态)
|
组件 |
职责 |
安全边界 |
|
指纹TA |
1. 解密加密图像得到原始明文 |
唯一能接触原始图像和特征模板的组件,运行在隔离的安全用户空间 |
三、完整调用时序(指纹认证流程,标注EL与安全态)
|
步骤 |
执行操作 |
特权级 |
安全归属 |
执行实体 |
|
1 |
用户点击认证,APP调用 BiometricPrompt.authenticate() 发起请求 |
NS EL0 |
非安全世界 |
第三方应用 |
|
2 |
通过Binder IPC将请求发送到系统服务 |
NS EL0 |
非安全世界 |
FingerprintService(SystemServer进程) |
|
3 |
校验应用权限、设备锁屏状态、指纹录入状态,通过后调用HAL接口 |
NS EL0 |
非安全世界 |
FingerprintService |
|
4 |
HAL封装采集控制参数,通过libteec库发起SMC调用,通知TEE准备采集上下文 |
NS EL0 → EL3 → S EL1 → S EL0 |
非安全→安全世界切换 |
指纹HAL(CA) → ATF → OP-TEE内核 → 指纹TA |
|
5 |
指纹TA初始化解密上下文、分配临时安全内存,返回「就绪」状态 |
S EL0 → S EL1 → EL3 → NS EL0 |
安全→非安全世界切换 |
指纹TA → OP-TEE内核 → ATF → 指纹HAL |
|
6 |
HAL通过ioctl系统调用,请求内核驱动启动传感器采集 |
NS EL0 → NS EL1 |
非安全世界 |
指纹HAL → 指纹内核驱动 |
|
7 |
内核驱动通过SPI/I2C总线写入采集指令,配置传感器参数,注册中断等待 |
NS EL1 |
非安全世界 |
指纹内核驱动 + SPI控制器驱动 |
|
8 |
手指接触传感器,采集完成后传感器内部用预置密钥加密图像,触发中断引脚 |
- |
硬件层 |
指纹传感器模组 |
|
9 |
GIC接收中断,路由到非安全分组,触发Linux内核中断处理函数 |
NS EL1 |
非安全世界 |
GIC + 内核中断处理 |
|
10 |
内核驱动通过SPI/I2C读取加密后的图像数据,存入普通世界内核缓冲区 |
NS EL1 |
非安全世界 |
指纹内核驱动 |
|
11 |
驱动通过回调通知HAL层数据就绪,传递加密数据地址与长度 |
NS EL1 → NS EL0 |
非安全世界 |
内核驱动 → 指纹HAL |
|
12 |
HAL将加密数据拷贝到共享内存,发起SMC调用,请求TEE处理认证 |
NS EL0 → EL3 → S EL1 → S EL0 |
非安全→安全世界切换 |
指纹HAL → ATF → OP-TEE内核 → 指纹TA |
|
13 |
指纹TA从共享内存读取密文,用内置密钥解密得到原始图像明文 |
S EL0 |
安全世界 |
指纹TA |
|
14 |
执行图像预处理、特征点提取,和安全存储中的加密模板做比对运算 |
S EL0 |
安全世界 |
指纹TA |
|
15 |
生成比对结果,用TEE认证私钥签发AuthToken令牌,清零安全内存中的临时图像与特征数据 |
S EL0 |
安全世界 |
指纹TA |
|
16 |
通过SMC将结果与令牌返回普通世界HAL层 |
S EL0 → S EL1 → EL3 → NS EL0 |
安全→非安全世界切换 |
指纹TA → OP-TEE内核 → ATF → 指纹HAL |
|
17 |
HAL将结果回调给FingerprintService,同时传递AuthToken |
NS EL0 |
非安全世界 |
指纹HAL → FingerprintService |
|
18 |
FingerprintService通知应用认证结果,同时将AuthToken提交给Keystore服务 |
NS EL0 |
非安全世界 |
FingerprintService |
|
19 |
应用收到认证成功回调,流程结束;Keystore校验AuthToken签名后解锁绑定认证的密钥 |
NS EL0 |
非安全世界 |
第三方应用 + Keystore |
方案B:安全专属总线方案
核心定位
一、硬件架构详解
1. 物理总线与安全属性
|
硬件模块 |
总线归属 |
TZPC/TZC安全配置 |
访问权限 |
|
指纹传感器模组 |
SPI/I2C 物理接口 |
安全专属通路,明文传输 |
仅安全世界控制器可读取 |
|
SPI/I2C 控制器 |
安全AXI总线 |
TZPC配置为Secure-only |
仅Secure EL1及以上可读写寄存器,非安全访问直接触发总线错误 |
|
系统总线 |
安全专用总线通道 |
仅安全态主机可访问 |
非安全态CPU、DMA完全无法访问 |
|
数据内存 |
安全DRAM区域 |
TZC-400 划分为安全专属区域 |
仅安全世界可读写,非安全访问被硬件拦截 |
2. 中断路由设计
- 中断链路:传感器中断引脚 → 安全GPIO控制器 → GIC中断控制器
- GIC分组:Group 1 Secure(安全中断)
- 处理归属:仅OP-TEE内核的中断处理函数可响应,普通世界Linux内核完全感知不到该中断的存在
- 作用:安全世界内部通知采集完成,事件不流出安全域
3. 电源与控制通路
- 电源控制:可由普通世界PMIC负责上下电(仅电源控制,无数据通路);高安全方案也可由安全世界全权控制
- 寄存器配置:所有传感器配置、参数写入必须由安全世界驱动完成,普通世界无任何寄存器访问权限
4. 完整数据流向
二、固件架构(按EL特权级分层)
非安全世界(Normal World)
1. EL0(用户态)
|
组件 |
职责 |
安全边界 |
|
第三方应用APP |
调用 BiometricPrompt API发起请求 |
完全不可信,仅接收结果 |
|
SystemServer FingerprintService |
权限校验、任务调度、生命周期管理 |
流程调度,不接触任何生物数据 |
|
指纹HAL服务 |
实现标准Biometrics接口,仅作为CA向TEE转发控制指令、接收结果事件 |
纯转发角色,无硬件操作能力,无数据访问权限 |
2. EL1(内核态)
|
组件 |
职责 |
安全边界 |
|
OP-TEE 驱动(tee.ko) |
SMC触发、共享内存管理 |
唯一的内核侧组件,仅做通道转发 |
|
可选:电源控制驱动 |
仅负责传感器上下电,无数据通路访问权限 |
只能控制电源,不能操作寄存器和数据 |
EL3 特权级(安全监控器)
- 核心组件:ATF BL31 + opteed 分发驱动
- 职责:安全态切换、SMC分发、中断路由(安全中断留在安全世界处理,不转发到非安全)
- 不参与业务逻辑
安全世界(Secure World)
1. Secure EL1(TEE内核态)
|
组件 |
职责 |
|
OP-TEE 内核 |
线程调度、安全内存管理、安全中断处理、加密框架、安全存储 |
|
安全SPI/I2C驱动 |
完整的外设控制器驱动,直接操作寄存器,收发数据 |
|
TZC 内存管理 |
管理安全DRAM区域,保证数据不流出安全边界 |
|
GIC安全中断驱动 |
响应指纹安全中断,调度对应TA处理 |
2. Secure EL0(可信应用态)
|
组件 |
职责 |
安全边界 |
|
指纹TA |
1. 传感器参数配置、采集流程控制 |
唯一拥有硬件控制权和数据访问权的组件,全程在隔离环境运行 |
三、完整调用时序(指纹认证流程,标注EL与安全态)
|
步骤 |
执行操作 |
特权级 |
安全归属 |
执行实体 |
|
1 |
用户点击认证,APP调用 BiometricPrompt.authenticate() 发起请求 |
NS EL0 |
非安全世界 |
第三方应用 |
|
2 |
Binder IPC发送请求到系统服务 |
NS EL0 |
非安全世界 |
FingerprintService |
|
3 |
权限校验通过后,调用指纹HAL接口 |
NS EL0 |
非安全世界 |
FingerprintService |
|
4 |
HAL封装采集控制参数,通过libteec发起SMC调用,向TEE发送采集指令 |
NS EL0 → EL3 → S EL1 → S EL0 |
非安全→安全世界切换 |
指纹HAL(CA) → ATF → OP-TEE内核 → 指纹TA |
|
5 |
指纹TA收到指令,调用内核的安全外设驱动接口,配置传感器寄存器、启动采集模式 |
S EL0 → S EL1 |
安全世界 |
指纹TA → 安全SPI驱动 |
|
6 |
OP-TEE内核配置安全中断,进入等待状态,向普通世界返回「已启动」 |
S EL1 → EL3 → NS EL0 |
安全→非安全世界切换 |
OP-TEE内核 → ATF → 指纹HAL |
|
7 |
HAL等待TEE的异步事件通知,不参与硬件操作 |
NS EL0 |
非安全世界 |
指纹HAL |
|
8 |
手指接触传感器,采集完成后原始图像通过安全总线直接写入安全DRAM区域,触发安全中断 |
- |
硬件安全通路 |
指纹传感器 + 安全总线 |
|
9 |
GIC将中断路由到安全分组,OP-TEE内核中断处理函数响应 |
S EL1 |
安全世界 |
GIC + OP-TEE内核中断 |
|
10 |
内核通知指纹TA数据就绪,TA直接从安全DRAM读取原始图像明文 |
S EL1 → S EL0 |
安全世界 |
OP-TEE内核 → 指纹TA |
|
11 |
TA执行图像预处理、特征点提取,和安全存储中的加密模板比对 |
S EL0 |
安全世界 |
指纹TA |
|
12 |
生成比对结果,签发AuthToken令牌,清零安全内存中的临时敏感数据 |
S EL0 |
安全世界 |
指纹TA |
|
13 |
通过SMC异步通知普通世界,返回结果与AuthToken |
S EL0 → S EL1 → EL3 → NS EL0 |
安全→非安全世界切换 |
指纹TA → OP-TEE内核 → ATF → 指纹HAL |
|
14 |
HAL将结果回调给FingerprintService |
NS EL0 |
非安全世界 |
指纹HAL → FingerprintService |
|
15 |
FingerprintService通知应用认证结果,同步AuthToken给Keystore |
NS EL0 |
非安全世界 |
FingerprintService |
|
16 |
应用收到回调,流程结束;Keystore校验令牌后解锁绑定认证的密钥 |
NS EL0 |
非安全世界 |
第三方应用 + Keystore |
两套方案核心维度对比
|
对比维度 |
方案A:非安全总线+加密传输 |
方案B:安全专属总线 |
|
硬件隔离等级 |
总线非安全,靠加密兜底数据安全 |
硬件级通路隔离,数据全程不流出安全域 |
|
外设驱动位置 |
普通世界Linux内核 |
安全世界OP-TEE内核 |
|
中断归属 |
非安全中断,Linux内核处理 |
安全中断,TEE内核处理,普通世界无感知 |
|
普通世界Root后影响 |
可控制硬件,但只能拿到加密数据,无法解密 |
完全无法操作硬件,无法获取任何数据 |
|
安全等级 |
中,满足中端机型要求 |
极高,符合Android强生物识别标准 |
|
开发移植成本 |
低,复用Linux现有驱动框架 |
高,需要在TEE内移植完整外设驱动 |
|
适用机型 |
中低端手机、IoT设备 |
旗舰手机、支付级安全设备 |
|
攻击面 |
较大,驱动在内核,漏洞可被利用 |
极小,驱动在安全世界,攻击面收敛到TEE |

73

被折叠的 条评论
为什么被折叠?



