概览

借助人脸识别身份验证功能,用户只需将自己的面孔对准设备即可将其解锁。Android 10 增加了对一种新的人脸识别身份验证堆栈的支持,这种堆栈可安全处理摄像头帧,从而在支持的硬件上进行人脸识别身份验证时保障安全和隐私。Android 10 还提供了一种简单的安全合规实现方法,以支持通过应用集成来完成交易(例如网上银行或其他服务)。

架构

BiometricPrompt API 包括人脸识别、指纹识别和虹膜识别在内的所有生物识别身份验证方法。Face HAL 会与以下组件交互。

图 1. 生物识别堆栈

FaceManager

FaceManager 是一个私有接口,用于维护与 FaceService 之间的连接。Keyguard 通过该接口访问具有自定义界面的人脸识别身份验证硬件。应用无权访问 FaceManager,必须改为使用 BiometricPrompt。

FaceService

该框架实现用于管理对人脸识别身份验证硬件的访问权限。它包含基本的注册和身份验证状态机以及各种其他辅助程序(例如枚举程序)。出于稳定性和安全性方面的考虑,不允许在此进程中运行任何供应商代码。所有供应商代码都通过 Face 1.0 HIDL 接口访问。

faced

这是一个 Linux 可执行文件,用于实现供 FaceService 使用的 Face 1.0 HIDL 接口。它会将自身注册为 IBiometricsFace@1.0,以便 FaceService 能够找到它。

实现

Face HIDL

如需实现 Face HIDL,您必须在某个供应商专用库中实现 IBiometricsFace.hal 的所有方法。

错误消息

错误消息由回调程序发送,并且在消息发送后,状态机会返回到闲置状态。大多数消息都有面向用户的相应字符串,以将相关错误通知用户,但并非所有错误都有面向用户的字符串。如需详细了解错误消息,请参阅 types.hal。所有错误消息均表示某种终止状态,也就是说框架假定 HAL 会在发送错误消息后返回到闲置状态。

采集消息

注册或身份验证期间会传递采集消息,目的是指导用户成功完成注册或身份验证。每个序数在 FaceAuthenticationManager.java 文件中都有一条关联消息。只要提供相应的帮助字符串,就可以添加供应商专用消息。采集消息本身并不表示终止状态,HAL 应根据需要发送尽可能多的消息以完成当前的注册或身份验证过程。如果某条采集消息引发终止状态而使系统无法进一步执行操作,则 HAL 应该在采集消息之后显示错误消息,例如,图片过暗且保持过暗状态而使系统无法进一步执行操作的情况。在这种情况下,在多次尝试仍无进展之后可以发送 UNABLE_TO_PROCESS。

硬件

设备要满足 Android 10 安全系数较高的生物识别技术要求,就必须采用安全的硬件来确保人脸数据的完整性以及进行最终的身份验证比较。Android 兼容性定义文档 (CDD) 列出了所需的安全级别以及可接受的欺骗接受率 (SAR)。不仅需要可信执行环境 (TEE) 来确保处理和识别的安全,还需要安全的相机硬件来防止人脸识别身份验证过程中出现的注入式攻击。例如,图片数据的相关内存页可享有特权并标记为只读,因此只有相机硬件才能更新这些内存页。理想情况下,除 TEE 和硬件外,其他任何进程都不应访问这些内存页。

由于人脸识别身份验证硬件之间的差异很大,因此必须开发特定于硬件的驱动程序来实现人脸识别身份验证,具体取决于特定的设备架构。因此,faced 没有参考实现。

方法

以下均是异步方法,必须立即返回到框架,否则会导致系统运行速度变慢,并且可能导致监控程序重置。建议使用包含多个线程的消息队列,以免阻塞调用程序。所有 GET 请求都应尽可能缓存信息,将调用程序被阻塞的时间缩至最短。

方法

说明

setCallback()

由 FaceService 调用,以使所有消息回归自身。

setActiveUser()

设置为其应用所有后续 HAL 操作的活跃用户。在再次调用该方法之前,始终针对此用户进行身份验证。

revokeChallenge()

通过使 generateChallenge() 生成的质询代码无效来完成安全交易。

enroll()

注册用户的人脸。

cancel()

取消当前操作(例如注册、身份验证、移除或枚举)并将 faced 返回到闲置状态。

enumerate()

枚举与活跃用户关联的所有人脸模板。

remove()

移除与活跃用户关联的某个或所有人脸模板。

authenticate()

对活跃用户进行身份验证。

userActivity()

仅应在 HAL 处于“正在进行身份验证”或“备用”状态时使用此方法。在 HAL 未处于其中一种状态时使用此方法会返回 OPERATION_NOT_SUPPORTED。在 HAL 已在进行身份验证时调用此方法可能会延长系统查找人脸的时间。

resetLockout()

如果识别时被拒绝的次数过多,faced 需要进入锁定状态(LOCKOUT 或 LOCKOUT_PERMANENT)。进入锁定状态后,需要将剩余时间发送到框架以向用户显示。就像 setFeature() 一样,此方法需要有效的硬件身份验证令牌 (HAT) 才能安全重置内部状态。重置锁定仅针对当前用户。

要点:调用上述方法应插入一条消息并返回。请务必使上述方法立即返回到闲置状态。

其余三个方法均为同步方法,应将其阻塞时间缩至最短以免拖延框架。

方法

说明

generateChallenge()

生成唯一且能够确保加密安全性的随机令牌,以指明安全交易已开始。

setFeature()

为当前用户启用或停用某项功能。出于安全方面的考虑,此方法需要 HAT 根据上述质询代码检查用户的 PIN 码/解锁图案/密码

getFeature()

检索该功能的当前启用状态,默认指明或对上述 setFeature() 的调用。如果 Face ID 无效,则实现必须返回 ILLEGAL_ARGUMENT

getAuthenticatorId()

返回与当前人脸集关联的标识符。每当添加人脸时,此标识符都必须发生变更

状态图

框架要求 faced 遵循以下状态图。

图 2. 人脸识别身份验证状态流程

linux开源人脸识别库,人脸识别身份验证 HIDL相关推荐

  1. 未识别网络(或身份验证未成功)--解决办法

    在学校网络中连接有线网络时出现"身份验证未成功"的问题,现在就说一下怎么解决这个问题. 第一,检查自己的ip(右击以太网,点击属性,找到IP4,就可以检查了),还有dns看看有没有 ...

  2. 英伟达首次开源内核、GitHub 强制用户身份验证、Google 悬赏 150 万美元找安卓漏洞 | 开源月报 Vol. 06...

    「WeOpen Insight」是腾源会推出的「开源趋势与开源洞见」内容专栏,不定期为读者呈现开源圈内的第一手快讯.优质工具盘点等,洞察开源技术发展的风向标,预见未来趋势. 1 开源企业新闻 1.NV ...

  3. 开源软件加密授权方案_身份验证和授权作为开源解决方案服务

    开源软件加密授权方案 通过实施身份验证和授权(a&a)机制为所有用户数据设计集中式服务. 我将分享我的经验并最终确定解决方案的结论. 该设计包括客户端(Web应用程序)和服务器(A&A ...

  4. linux 利用Google身份验证器配置ssh完成双重登录验证

    一:准备一台linux 操作系统 在Ubuntu上安装Google身份验证器 sudo apt-get install libpam-google-authenticator -y 在centos上安 ...

  5. Linux身份验证策略

    本文转自:http://www.storageonline.com.cn/os-app/linux-unix/linux-authentication/ 为安全起见,计算机系统只有经过授权的合法用户才 ...

  6. 在线考试系统如何进行考生身份验证

    组织在线考试,因为是采用远程考生的方式,那是否就没办法进行考生的身份验证呢? 其实在线考试也是可以进行考生身份验证的.我们发布在线考试的方式通常是通过分享二维码或者试卷的链接给考生的,如果我们的试卷并 ...

  7. WIFI基础入门--802.11--用户身份验证--7

    WIFI基础入门--802.11--用户身份验证--7 1.优势 2.可扩展身份验证协议(EAP) 2.1 EAP的封包格式 2.1.1 Code(类型代码) 2.1.2 Identifier(标识符 ...

  8. trello_如何构建Trello Chrome扩展程序-API身份验证

    trello 在SitePoint,我们广泛使用Trello. 当然,它有其独特之处,可以在各个领域使用一两个改进,但是在大多数情况下,它彻底改变了工作人员,作者及其编辑的协作经验. 我最近发现自己需 ...

  9. 如何构建Trello Chrome扩展程序-API身份验证

    在SitePoint,我们广泛使用Trello. 当然,它有其独特之处,可以在各个领域使用一两个改进,但是在大多数情况下,它彻底改变了工作人员,作者及其编辑的协作经验. 我最近发现自己需要从非会员的特 ...

最新文章

  1. LAMP+LNMP(四)PHP安装实践
  2. linux修改网卡文件夹,CentOS7 修改网卡名称为eth0在VMWare中添加多网卡配置
  3. Java并发编程之线程池ThreadPoolExecutor解析
  4. php.ini详细介绍与设置,配置
  5. UI设计灵感|仪表盘界面如何设计?优质案例给你帮助
  6. samba add new smbpasswd recycle
  7. centos7.6(腾讯云)开放端口及配置腾讯云安全组
  8. 关于校验与确认两步操作时,新增,修改需要考虑的问题
  9. Playmaker节点工具使用(三)—扩展playmaker
  10. OFD转PDF格式免费在线转换
  11. qps tps rps 区别
  12. vue_todo案例超详细讲解(可跟做练手项目)
  13. 过滤多余的空格-C语言
  14. Kotlin相关博客资源
  15. 乘风破浪程序猿,拒绝原地踏步!
  16. 虹科资讯| 虹科AR荣获汽车后市场“20佳”维修工具评委会提名奖!
  17. 图匹配(Graph Matching)入门学习笔记——以《Factorized Graph Matching》为例(一)
  18. Android使用mob实现第三方登录(Facebook、Twitter)
  19. [MTK] 平板项目,进入工程模式
  20. 浅谈华为如何实现区块链的安全隐私保护

热门文章

  1. 【原创】火星寻路程序
  2. 【连载】《linux入门很简单》电子版——作者:刘金鹏(第一章初来乍到——抵达)...
  3. CAD制图中,如何隐藏布局视口线框?
  4. 调音台中英文对照表!!
  5. 关于如何计算地址线和数据线问题
  6. 工程材料知识点总结(全)
  7. 加工中心G76,G87,G83,G84数控代码讲解
  8. 关于银杏树的生长过程的资料
  9. 什么网站发帖子传播速度快
  10. 22个常用Excel函数大全,直接套用,提升工作效率!