Android Gatekeeper
1. gatekeeper
在Android里面,Gaterkeeper用于做密码锁屏或者图案锁屏的验证。比如你拿起手机输入密码解锁手机,这个密码验证就是gatekeepr做的,只有验证通过后,你的手机锁屏才能解开。
gatekeeper包括3部分
1)gatekeeperd,是native层的一个守护进程,与上层的锁屏服务locksettingservice交互
2)gatekeeper HAL 层,gatekeered通过hal层的接口访问gatekeeper TA
3)gatekeeper TA(Trust App ),是一个跑在安全os中的gatekeeper服务,真正的密码验证就是在里面做的
locksettingservice是上层的锁屏服务,负责接收用户输入的数字密码或者图案密码,经过一定的处理后将密码数据传给gatekeeper验证, 因为本人搞的是native层及以下,locksettingservice是应用层的,这里就不说了
gatekeeperd和 gatekeeper HAL 可以理解成中间件,真正的密码校验是在gatekeeper TA里面做的。
2. 设置密码
gatekeeper提供给locksetting 设置密码的binder接口
/system/core/gatekeeperd/IGateKeeperService.h
//存储密码数据
int enroll(uint32_t uid,const uin8_t *current_password_handle, uin32_t current_password_handle_length,const uint8_t *current_password, uint32_t current_password_length,const uint8_t *desired_password, uint32_t desired_password_length,uint8_t **enrolled_password_handle, uint32_t *enrolled_password_handle_length);
这里我们直接分析首次设置密码的情况,也就是当前没有密码,current_password_handle和current_password都为空,用户输入要设置的数字密码或者图案密码,locksettingservice经过一定的处理后得到密码数据desired_password传给enroll接口,gatekeeper经过一系列的操作生成enrolled_password_handle,返回给locksettingservice。
身份认证系统都不会直接存储用户的密码,而是对密码用某些算法做hash摘要,然后将摘要保存起来用于验证。Android也一样,locksetting传给gatekeeper的密码数据,gatekeeper也是先做hash摘要处理,生成password_handle_t结构的数据。这里注意下,gatekeeper并不存储password_handle_t数据,只是返回给locksettingservice,由locksettingservice负责存储。
password_handle_t 结构体定义如下:
//system/gatekeeper/include/gatekeeper/password_handle.h
struct __attribute__ ((__packed__)) password_handle_t {//handle版本号uint8_t version;//设置密码时,teeos里面生成的一个随机数secure_id_t user_id;uint64_t flags;//随机生成的盐值,用于HMAC生成摘要salt_t salt;//存储HMAC生成的摘要uint8_t signature[32];//是硬实现还是软实现,如果手机硬件不支持安全os,就走软实现bool hardware_backed;
};
在安全os里面的gatekeer TA 中,随机生成盐值salt和suid,生成HMAC摘要,就是password_handle_t中的signature。最终password_handle生成了,返回给locksetting存储,设置密码完成。
3. 密码验证
gatekeeper提供给locksetting 验证密码的binder接口
int verifyChallenge(uint32_t uid, uint64_t challenge,const uint8_t *enrolled_password_handle, uin32_t enrolled_password_handle_length,const uint8_t *provided_password, uint32_t provided_password_length,uint8_t **auth_token, uint32_t *auto_token_length, bool *request_reenroll);
验证密码时,locksetting会把已经存储的password_handle数据和用户现在输入的密码数据传给gatekeeper验证。gatekeeper TA拿到当前的密码数据后再重新做一次HMAC摘要,salt和HMAC key等都一样,生成新的password_handle数据,如果和存储的password_handle数据完全一样,说明密码验证通过。
验证通过后会生成auth_token数据给keystore使用,包括challenge也是用于生成auth_token的,这里就不讲了。
Android Gatekeeper相关推荐
- 详解android gatekeeper/fingerprint中的authToken
文章目录 1.authToken是什么? 2.authToken的填充 3.authToken的保存 1.authToken是什么? 在密码或指纹验证通过后(verify通过后),需返回一个authT ...
- Android Gatekeeper梳理
文章目录 引言 一.gatekeeper的概念 二.gatekeeper框架的变化 GateKeeper 身份验证的高级数据流 代码结构图(复用) 三.gatekeeper的软件框图 四.Enroll ...
- Android Gatekeeper流程深度解剖
快速链接: .
- Android gatekeeper的原理介绍和代码导读
快速链接: .
- android gatekeeper(locksetting密码锁)学习这一篇就够了
快速链接: .
- Android Security视频学习合集
目录 1.Android Gatekeeper精讲 请扫码到哔哩哔哩看视频 1.Android Gatekeeper精讲
- [专栏目录]-Android专栏目录
Android 类别 博文 参考/说明 security gatekeeper 1.Android locksettings/gatekeeper代码导读 2.Android Gatekeeper流程 ...
- 理解adb错误:Can‘t find service: android.service.gatekeeper.IGateKeeperService
本文 Github/javamap 已收录,有Java程序员进阶技术知识地图以及我的系列文章,欢迎大家Star. 因为测试需要,使用如下命令:adb shell dumpsys > dumpsy ...
- Android locksettings/gatekeeper代码导读
快速链接: .
最新文章
- phpstorm xdebug本地调试断点不生效_phpstudy+phpstrom实现断点
- php csv,php csv操作类代码
- UA MATH566 统计理论8 用Pivot构造置信区间
- oracle product文件,快速修复Oracle参数文件的另类方法
- 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...
- 在Docker中运行asp.net core 跨平台应用程序
- 宏任务和微任务执行顺序_确保任务的执行顺序
- Qt工作笔记-跑马灯效果
- linux7.0下mysql_CentOS 7.0下使用yum安装MySQL
- java 利用Future异步获取多线程任务结果
- 14.段落排版--行间距(行高)
- 485串口测试工具软件_【实例】如何用串口软件调试变频器?
- 红巨星粒子特效合集插件:Trapcode Suite 18 Mac版(支持m1)
- 最全 Yaml 语法详解
- exchange创建邮箱组_Exchange 2013学习笔记四:新建用户邮箱
- 【转载】转别人写的HTMLCSS 详细笔记脉络--很详细
- 【板栗糖GIS】DOS—如何在当前文件夹内部批量建子文件夹
- 牛客练习赛68 A.牛牛的mex
- CTF之旅WEB篇(3)--ezunser PHP反序列化
- 软件开发专业需要学习多少年