文章目录
引言
Android gatekeeper 官方文档我寻觅的好苦,网页乱码,没注意到。又没权限下载插件,打工人太难了。由于本人对于部分Android框架不是非常熟悉,本文部分细节可能处理的不是非常好。
本文主要从Gatekeeper的Enroll密码部分(AIDL框架)和 Verify解密部分(旧框架,未更新为新框架)两部分进行逻辑梳理和学习,有问题欢迎大家指正,一起沟通学习。
Android T在线代码阅读网站和Android gatekeeper官网
一、gatekeeper的概念
1)Gatekeeper 子系统在可信执行环境 (TEE) 中执行设备解锁 / 密码验证。gatekeeper 通过具有硬件支持的密钥 HMAC 注册和验证密码。此外,Gatekeeper 会限制连续失败的验证尝试,并且必须根据给定的超时和给定的连续失败尝试次数拒绝服务请求。
2)当用户验证密码时,Gatekeeper 使用 TEE 派生的共享密钥对身份验证认证签名,以发送到硬件支持的 Keystore 。也就是说,Gatekeeper 认证可以让 Keystore 知道可以发布与身份验证绑定的密钥(例如,应用程序创建的密钥)以供应用程序使用。
3)Android中,gatekeeper是密码锁或图案锁的一种服务。主要支持的两个方法是 : enroll(录入密码)和verify(验证密码)。
注: Enroll 部分是从AIDL框架入手学习梳理; Verify 部分是从binder和HIDL框架入手,android T 的Verify部分其实和Enroll调用的框架逻辑相同。
二、gatekeeper框架的变化
主要有以下4个组件:
Gatekeeperd :gatekeeper的守护进程。一种 C++ Binder 服务,其中包含独立于平台的逻辑,并且与 GateKeeperService Java 接口相对应。Android T已无binder部分逻辑。
Gatekeeper HIDL服务:调用Gatekeeper HAL,Android T已变为AIDL。
Gatekeeper 硬件抽象层 (HAL): hardware/libhardware/include/hardware/gatekeeper.h中定义了HAL的接口规范,是一个实现模块。
Gatekeeper (TEE) :基于 TEE 的 Gatekeeper 实现。
GateKeeper 身份验证的高级数据流
如下图:
1 )LockSettingsService 会通过 Binder 发出一个请求,该请求会到达 Android 操作系统中的 gatekeeperd 守护进程。gatekeeperd 守护进程会发出一个请求,该请求会到达此守护进程在 TEE 中的 Gatekeeper。gatekeeperd守护程序为 Android 框架 API 提供对 HAL 的访问权限,并参与向 Keystore 报告设备身份验证。 gatekeeperd守护程序在其自己的进程中运行,并且独立于系统服务器。
2)在Android O引入Treble计划之后,native层和HAL之间新增了HIDL,通过HwBinder来调用,实现解耦。
3)在Android T中,IGateKeeperService.aidl可直接调用到gatekeeperd.cpp。
代码结构图(复用)
frameworks/base/services/core/java/com/android/server/locksettings/ : 上层locksettings APP的实现
system/core/gatekeeperd : 守护进程gatekeeperd, IGateKeeperService的实现。Android T 上已变为AIDL框架,非Binderized HIDL。
system/gatekeeper : gatekeeper的纯软实现
hardware/interfaces/gatekeeper : gatekeeper的hidl实现
vendor gatekeeper hal : vendor厂商实现的gatekeeper hal
gatekeeper TA : 基于TEE的gatekeeper的TA代码
三、gatekeeper的软件框图
locksetting APP ----> IGatekeeperserivce ----> Hardware Gatekeeper HAL ----> Vendor Gatekeeper HAL(作为CA端) ----> Gatekeeper TA
四、Enroll和Verify的流程框图
gatekeeper 和 keyguard 的关系:
Gatekeeper可以理解为连接上层和底层TEE的中间层,Settings将pin/password/pattern等密码通过Gatekeeper传输到TEE中去,称为加密(enroll)过程,Keyguard通过pin/password/pattern等密码打开设备成为解密(verify)过程,加解密的具体实现细节都在TEE中。
Enroll 密码 ---- AIDL
注册密码
在设备恢复出厂设置后首次启动时,所有身份验证程序均会做好接受用户通过凭据注册的准备。用户必须先通过 Gatekeeper 注册一个 PIN 码/解锁图案/密码。该