转发 指纹识别身份验证 HIDL

2023-10-17 16:20

本文主要是介绍转发 指纹识别身份验证 HIDL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Fingerprint HIDL

在配有指纹传感器的设备上,用户可以注册一个或多个指纹,并使用这些指纹来解锁设备以及执行其他任务。Android 会利用 Fingerprint HIDL(硬件接口定义语言)连接到供应商专用库和指纹硬件(例如指纹传感器)。

如需实现 Fingerprint HIDL,您必须在某个供应商专用库中实现 IBiometricsFingerprint.hal

指纹匹配

设备的指纹传感器通常处于闲置状态。不过,为了响应对 authenticate 或 enroll 的调用,指纹传感器会监听触摸操作(并且屏幕可能会在用户触摸指纹传感器时被唤醒)。指纹匹配的概要流程包括以下步骤:

  1. 用户将手指放在指纹传感器上。
  2. 供应商专用库会根据当前的已注册指纹模板集判断是否匹配。
  3. 匹配结果会传递到 FingerprintService

该流程假设设备上已经注册了一个指纹,即供应商专用库已为该指纹注册了一个模板。如需了解详情,请参阅身份验证。

注意:设备上存储的指纹模板越多,进行指纹匹配所需的时间就越长。

架构

Fingerprint HAL 会与以下组件交互。

  • BiometricManager 会在应用进程中与应用直接交互。每个应用都有一个 IBiometricsFingerprint.hal 实例。
  • FingerprintService 在系统进程中运行,可处理与 Fingerprint HAL 之间的通信。
  • Fingerprint HAL 是 IBiometricsFingerprint HIDL 接口的 C/C++ 实现。它包含可与设备专有硬件进行通信的供应商专用库。
  • Keystore API 和 Keymaster 组件提供由硬件支持的加密功能,以便在安全环境(例如可信执行环境 (TEE))中安全地存储密钥。

指纹身份验证的数据流程

图 1. 指纹身份验证的概要数据流程

供应商专用 HAL 实现必须使用 TEE 所要求的通信协议。不得将原始图像和处理后的指纹特征传递到不可信内存中。所有此类生物识别数据都需要存储在安全硬件(例如 TEE)中。请确保即使具备 Root 权限,也不能取得生物识别数据。

FingerprintService 和 fingerprintd 会通过 Fingerprint HAL 调用供应商专用库,以便注册指纹以及执行其他操作。

与 fingerprintd 交互图 2. Fingerprint 守护程序与 Fingerprint 供应商专用库之间的交互

实现准则

以下 Fingerprint HAL 准则旨在确保指纹数据不会被泄露,并可以在从设备中移除用户时一并移除相应指纹数据:

  • 必须要确保在任何情况下都无法从传感器驱动程序或 TEE 以外访问原始指纹数据或衍生内容(例如模板)。如果硬件支持 TEE,则只能将硬件访问权限授予 TEE,并且必须通过 SELinux 政策对硬件访问权限加以保护。串行外设接口 (SPI) 通道必须只能供 TEE 访问,并且必须有针对所有设备文件的明确 SELinux 政策。
  • 指纹采集、注册和识别必须在 TEE 内部进行。
  • 只有加密的指纹数据才能存储在文件系统中(即使文件系统本身已加密)。
  • 指纹模板必须采用设备专用私钥进行签名。对于高级加密标准 (AES),模板必须至少通过绝对文件系统路径、群组和指纹 ID 进行签名,这样一来,相应模板文件便无法在其他设备上使用,并且无法用于在同一设备上注册的任何其他用户。例如,您将无法复制同一设备上其他用户的指纹数据,也无法从其他设备复制指纹数据。
  • 实现必须使用 setActiveGroup() 函数提供的文件系统路径,或提供一种能够在移除用户时一并清空该用户所有模板数据的方法。强烈建议将指纹模板文件以加密形式存储在提供的路径中。如果因 TEE 存储要求而导致这种做法不可行,实现人员必须添加一些钩子,以确保在移除用户时一并移除相关数据。

Fingerprint 方法

Fingerprint HIDL 接口在 IBiometricsFingerprint.hal 中包含以下主要方法。

方法说明
enroll()将 HAL 状态机切换到开始收集和存储指纹模板的状态。注册完成后或超时后,HAL 状态机会返回到闲置状态。
preEnroll()生成一个独一无二的令牌,以指明指纹注册已开始。为 enroll 函数提供令牌,以确保事先已经过身份验证(例如使用密码)。为了防止被篡改,确认设备凭据后,便会封装令牌。在注册期间必须检查令牌,以确认令牌仍然有效。
getAuthenticatorId()返回与当前指纹集关联的令牌。
cancel()取消待处理的注册或身份验证操作。HAL 状态机会返回到闲置状态。
enumerate()同步调用,用于枚举所有已知指纹模板。
remove()删除指纹模板。
setActiveGroup()限定只能对属于指定群组(通过群组标识符 (GID) 来标识)的指纹集执行某项 HAL 操作。
authenticate()验证与指纹相关的操作(通过操作 ID 来标识)。
setNotify()注册一个从 HAL 接收通知的用户函数。如果 HAL 状态机处于繁忙状态,该函数会阻塞,直到 HAL 不再处于繁忙状态为止。
postEnroll()结束注册操作并使 preEnroll() 生成的质询代码无效。必须在多指纹注册会话结束时调用该函数,以表明不会再添加指纹。

如需详细了解这些函数,请参阅 IBiometricsFingerprint.hal 中的备注。

这篇关于转发 指纹识别身份验证 HIDL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226542

相关文章

在struts.xml中,如何配置请求转发和请求重定向!

<span style="font-size:18px;"><span style="white-space:pre"> </span><!--<strong>下面用请求转发action </strong>,<strong>这样过去id不会丢</strong>,如果用重定向的话,id会丢 --><result name="updatePopedom"<span style="color:#ff00

请解释JSP中的九大内置对象及其作用。什么是Java Web中的请求转发和重定向?它们有什么区别?

请解释JSP中的九大内置对象及其作用。 JSP(JavaServer Pages)中的九大内置对象(也称为隐式对象或自动对象)是JSP容器为每个页面提供的Java对象,这些对象在JSP页面被转换成Servlet时自动可用,无需显式声明。这些对象极大地简化了JSP页面的开发,因为它们提供了对Web应用程序中常见功能的直接访问。以下是九大内置对象及其作用的详细解释: request:javax.

Nginx跨域运行案例:云台控制http请求,通过 http server 代理转发功能,实现跨域运行。(基于大华摄像头WEB无插件开发包)

文章目录 引言I 跨域运行案例开发资源测试/生产环境,Nginx代理转发,实现跨域运行本机开发运行 II nginx的location指令Nginx配置中, 获取自定义请求header头Nginx 配置中,获取URL参数 引言 背景:全景监控 需求:感知站点由于云台相关操作为 http 请求,http 请求受浏览器跨域限制,不能直接访问,因此需要进行 http 的代理,实

JWT详解:一种轻量级的身份验证和授权机制

引言 JSON Web Token(JWT)是一种基于JSON格式的开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息。JWT因其轻量级、可扩展性和安全性,在Web应用程序和RESTful API中得到了广泛应用。本文将详细解析JWT的概念、结构、工作原理、应用场景以及使用时的安全注意事项。 JWT的基本概念 JWT是一种用于在用户和服务器之间传递安全

[转发] 负载均衡的服务器集群上如何进行缓存和会话数据的管理

会话数据管理方法 1. 不存储Session 对于一些不需要记录用户状态的Web应用,采用这种Stateless方式是最恰当的方式。 2. 基于Cookie的Session共享 这种策略也被称为客户端Session,即不将Session信息存储于服务器端,而是存储于客户端。这同时,也会带来一定的安全问题,因为Cookie是存储于客户端中的,也就意味着客户端可以修改Cooki

Kubenetes 中使用 Traefik 作为 Ingress 转发流量

Kubenetes 中使用 Traefik 作为 Ingress 转发流量 Ingress 就是 Kubernetes 机器外访问集群的入口,将请求的 URL 转发到不同的 Service 上,相当于 Nginx 等代理服务器 路由信息由 Ingress Controller 提供,Ingress Controller 可以理解为监视器,不断请求 Kubernetes API 实时感知 Serv

以太网属性找不到身份验证

有时候我们需要在以太网属性里 添加身份验证,但是打开之后发现可能没有这个tab页。查询资料,整理如下: 设置、本地服务、找到wired AutoConfig 属相设置:启动,应用,确定! 然后回来发现以太网属性,就会有身份验证一栏了。

x11转发远程图形界面

1、 开一个有vnc的节点 2、 开放所有用户的Xserver权限 xhost + 3、X11转发 ssh hlzhang@192.168.3.156 -X 4、打开远程窗口 paraview 在227的界面打开156的图形窗口

太速科技-基于Kintex-7 XC7K325T的FMC USB3.0四路光纤数据转发卡

基于Kintex-7 XC7K325T的FMC USB3.0四路光纤数据转发卡 一、板卡概述   本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持64bit DDR3容量2GByte,USB3.0接口,HPC的FMC连接器,4路光纤接口,板卡支持各种接口输入,USB3.0软件具有

React——forwardRef 转发组件引用

forwardRef forwardRef 是 React 提供的一个 API,它用于在函数组件中转发 ref。 在 React 中,ref 被用来获取对组件内部 DOM 节点或者组件实例的直接引用。默认情况下,你不能在函数组件上使用 ref 属性,因为它们没有实例。但是,有时候你可能需要在父组件中访问子组件中的 DOM 元素或者类组件实例,这就是 forwardRef 发挥作用的地方。 当