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相关推荐

  1. 详解android gatekeeper/fingerprint中的authToken

    文章目录 1.authToken是什么? 2.authToken的填充 3.authToken的保存 1.authToken是什么? 在密码或指纹验证通过后(verify通过后),需返回一个authT ...

  2. Android Gatekeeper梳理

    文章目录 引言 一.gatekeeper的概念 二.gatekeeper框架的变化 GateKeeper 身份验证的高级数据流 代码结构图(复用) 三.gatekeeper的软件框图 四.Enroll ...

  3. Android Gatekeeper流程深度解剖

    快速链接: .

  4. Android gatekeeper的原理介绍和代码导读

    快速链接: .

  5. android gatekeeper(locksetting密码锁)学习这一篇就够了

    快速链接: .

  6. Android Security视频学习合集

    目录 1.Android Gatekeeper精讲 请扫码到哔哩哔哩看视频 1.Android Gatekeeper精讲

  7. [专栏目录]-Android专栏目录

    Android 类别 博文 参考/说明 security gatekeeper 1.Android locksettings/gatekeeper代码导读 2.Android Gatekeeper流程 ...

  8. 理解adb错误:Can‘t find service: android.service.gatekeeper.IGateKeeperService

    本文 Github/javamap 已收录,有Java程序员进阶技术知识地图以及我的系列文章,欢迎大家Star. 因为测试需要,使用如下命令:adb shell dumpsys > dumpsy ...

  9. Android locksettings/gatekeeper代码导读

    快速链接: .

最新文章

  1. phpstorm xdebug本地调试断点不生效_phpstudy+phpstrom实现断点
  2. php csv,php csv操作类代码
  3. UA MATH566 统计理论8 用Pivot构造置信区间
  4. oracle product文件,快速修复Oracle参数文件的另类方法
  5. 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...
  6. 在Docker中运行asp.net core 跨平台应用程序
  7. 宏任务和微任务执行顺序_确保任务的执行顺序
  8. Qt工作笔记-跑马灯效果
  9. linux7.0下mysql_CentOS 7.0下使用yum安装MySQL
  10. java 利用Future异步获取多线程任务结果
  11. 14.段落排版--行间距(行高)
  12. 485串口测试工具软件_【实例】如何用串口软件调试变频器?
  13. 红巨星粒子特效合集插件:Trapcode Suite 18 Mac版(支持m1)
  14. 最全 Yaml 语法详解
  15. exchange创建邮箱组_Exchange 2013学习笔记四:新建用户邮箱
  16. 【转载】转别人写的HTMLCSS 详细笔记脉络--很详细
  17. 【板栗糖GIS】DOS—如何在当前文件夹内部批量建子文件夹
  18. 牛客练习赛68 A.牛牛的mex
  19. CTF之旅WEB篇(3)--ezunser PHP反序列化
  20. 软件开发专业需要学习多少年

热门文章

  1. 作为前端你不得不知-浏览器的工作原理:网络浏览器幕后揭秘
  2. 操作系统实验报告_ucore_lab1
  3. 10Easyx图形编程
  4. Java是未来的第一编程语言吗?
  5. C-Free 5 加 TDM-GCC编辑器搭建C/C++开发环境
  6. APISpace 预热开启
  7. 《数字逻辑设计与计算机组成》一 第3章 3.1 简介
  8. 《微信小程序-基础篇》初识微信小程序
  9. 解锁忘记密码的iPhone X
  10. 推荐系统10——评分预测问题