Android Fingerprint -- Enroll流程

Enroll流程主要的工作是在hal层以下完成的。对于应用层和framwork层的流程就不做详细分析了。

一、preEnroll

点击设置中的添加指纹,setting就会调到fingerprintd的preEnroll接口。preEnroll会在指纹TA中生成并保存一个64位的随机数。这个随机数有两个用途:

  • 返回给上层,用于填充enroll中的authenticated token challenge。

  • TA会用它对下次enroll做初步校验,保证enroll没有被第三方篡改。

二、enroll

1 、我们先看一下 fingerprint.h对enroll接口的定义:

int (*enroll)(struct fingerprint_device *dev, const hw_auth_token_t *hat,
                uint32_t gid, uint32_t timeout_sec);

1.1 、hw_auth_token_t:保证此次enroll的合法性,我们具体看一下android怎么定义此结构体的。

AuthToken version :此token的版本号

Challenge:就是前面调用preEnroll的到的64位随机数,防止此次enroll被第三方假冒

User SID : 安全性id,不是android user id

Athenticator ID: 用于标明不同的认证权限

Authenticator Type:0x00表示Gatekeeper,0x01表示Fingerprint

Timestamp:最近一次开机时间戳

AuthToken HMAC key: 用一个特殊的key和SHA-256算法去计算前面一堆参数后,得到的一个 hmac值,保证前面参数的合法性和安全性。

1.2. gid:说明是哪个用户注册指纹(anroid支持多用户)。

1.3. timeout_sec:超时设置。

2、上层调用enroll接口,一直将上述参数传递到指纹TA中。TA拿到参数之后会先检查参数是否合法。我们看看TA是怎样检查的:

//核对传递下来的token->challenge与之前preEnroll阶段保存的g_challenge是否相同
if (token && token->challenge == g_challenge) {
    g_user_id = token->user_id;
} else {
    LOGE(LOG_TAG "[%s] invalid or null auth token", __func__);
}

//检测token版本是否相同
if (token && token->version != cmd->data.enroll.system_auth_token_version) {
    LOGE(LOG_TAG "[%s] invalid hat version code detected", __func__);
    err = ERROR_INVALID_HAT_VERSION;
    break;
}
//检测authenticator_type版本是否相同
if (token && (token->authenticator_type & GF_HW_AUTH_FINGERPRINT)) {
    LOGE(LOG_TAG "[%s] invalid challenge detected", __func__);
    err = ERROR_INVALID_CHALLENGE;
    break;
}
/*token中,除了hmac之外的数据取出来,然后拿这部分数据用key和相应加密算法生成hmac*/
cpl_memcpy(&hat, token, sizeof(gf_hw_auth_token_t));
cpl_memset(&(hat.hmac), 0, hmac_len);
generate_hmac(&hat);
/*比对新生成的hmac和之前上层传递下来token中自带的hmac是否相同,如果相同则认为没本次enroll合法,接下来IC就会切换到一种采图的工作模式*/
if (0 != cpl_memcmp(hat.hmac, token->hmac, hmac_len)) {
    LOGE(LOG_TAG "[%s] token authenticate failed", __func__);
    err = ERROR_UNTRUSTED_ENROLL;
    break;
}

3、验证完参数合法之后,TA会将指纹IC切换到一种等待手指按下采图的工作模式。此时一旦手指按下,会进入中断处理函数,该函数主要的工作流程如下图:

从等待手指按下开始,到收到中断读取数据,送算法处理,然后保存图像数据为模板,上报注册进度等消息给上层,最后等待手指抬起。这个过程会一直循环,直到模板建立完成后上报注册完成消息给上层,enroll才算结束了。

4、因为读取数据,算法分析等过程都涉及IC厂商的商业机密,所以不能在此分享。

三、postEnroll

postEnroll主要工作是更新一下TA中保存的Challenge。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
webgl-fingerprint-defende.crx 是一个浏览器扩展文件,它的作用是提供WebGL指纹防御功能。WebGL是一种用于在网页浏览器中渲染3D图形的技术,而指纹则是通过收集浏览器和计算机的信息来识别用户身份的一种方法。 通常,浏览器会从操作系统和硬件中收集一些信息来创建一个独特的指纹识别码。这个识别码可以随着浏览器的使用而变化,因此可以用作用户识别。然而,一些网站可能会滥用这种技术来跟踪用户的在线行为,侵犯用户隐私。 webgl-fingerprint-defende.crx 文件可以帮助用户保护自己的隐私,防止被WebGL指纹识别出来。它通过修改浏览器的WebGL指纹数据,使之变得随机或无法识别。这样,即使网站尝试使用WebGL指纹进行用户跟踪,也无法准确识别用户的真实身份。 使用 webgl-fingerprint-defende.crx 文件可以有效地防止被WebGL指纹追踪,保护用户的个人隐私。它的安装和使用也非常简单,只需将文件添加到浏览器的扩展管理页面即可。然后,在用户浏览网页时,该扩展将自动激活并对WebGL指纹进行保护。 需要注意的是,虽然这个扩展可以有效防止WebGL指纹追踪,但在使用时仍需注意个人隐私的其他方面。同时,由于浏览器和WebGL技术的不断更新和演变,扩展的效果可能会有所变化。因此,保持扩展的更新和关注相关的隐私保护措施是很重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值