linux开源人脸识别库,人脸识别身份验证 HIDL
概覽
借助人臉識(shí)別身份驗(yàn)證功能,用戶只需將自己的面孔對(duì)準(zhǔn)設(shè)備即可將其解鎖。Android 10 增加了對(duì)一種新的人臉識(shí)別身份驗(yàn)證堆棧的支持,這種堆棧可安全處理攝像頭幀,從而在支持的硬件上進(jìn)行人臉識(shí)別身份驗(yàn)證時(shí)保障安全和隱私。Android 10 還提供了一種簡(jiǎn)單的安全合規(guī)實(shí)現(xiàn)方法,以支持通過(guò)應(yīng)用集成來(lái)完成交易(例如網(wǎng)上銀行或其他服務(wù))。
架構(gòu)
BiometricPrompt API 包括人臉識(shí)別、指紋識(shí)別和虹膜識(shí)別在內(nèi)的所有生物識(shí)別身份驗(yàn)證方法。Face HAL 會(huì)與以下組件交互。
圖 1. 生物識(shí)別堆棧
FaceManager
FaceManager 是一個(gè)私有接口,用于維護(hù)與 FaceService 之間的連接。Keyguard 通過(guò)該接口訪問(wèn)具有自定義界面的人臉識(shí)別身份驗(yàn)證硬件。應(yīng)用無(wú)權(quán)訪問(wèn) FaceManager,必須改為使用 BiometricPrompt。
FaceService
該框架實(shí)現(xiàn)用于管理對(duì)人臉識(shí)別身份驗(yàn)證硬件的訪問(wèn)權(quán)限。它包含基本的注冊(cè)和身份驗(yàn)證狀態(tài)機(jī)以及各種其他輔助程序(例如枚舉程序)。出于穩(wěn)定性和安全性方面的考慮,不允許在此進(jìn)程中運(yùn)行任何供應(yīng)商代碼。所有供應(yīng)商代碼都通過(guò) Face 1.0 HIDL 接口訪問(wèn)。
faced
這是一個(gè) Linux 可執(zhí)行文件,用于實(shí)現(xiàn)供 FaceService 使用的 Face 1.0 HIDL 接口。它會(huì)將自身注冊(cè)為 IBiometricsFace@1.0,以便 FaceService 能夠找到它。
實(shí)現(xiàn)
Face HIDL
如需實(shí)現(xiàn) Face HIDL,您必須在某個(gè)供應(yīng)商專用庫(kù)中實(shí)現(xiàn) IBiometricsFace.hal 的所有方法。
錯(cuò)誤消息
錯(cuò)誤消息由回調(diào)程序發(fā)送,并且在消息發(fā)送后,狀態(tài)機(jī)會(huì)返回到閑置狀態(tài)。大多數(shù)消息都有面向用戶的相應(yīng)字符串,以將相關(guān)錯(cuò)誤通知用戶,但并非所有錯(cuò)誤都有面向用戶的字符串。如需詳細(xì)了解錯(cuò)誤消息,請(qǐng)參閱 types.hal。所有錯(cuò)誤消息均表示某種終止?fàn)顟B(tài),也就是說(shuō)框架假定 HAL 會(huì)在發(fā)送錯(cuò)誤消息后返回到閑置狀態(tài)。
采集消息
注冊(cè)或身份驗(yàn)證期間會(huì)傳遞采集消息,目的是指導(dǎo)用戶成功完成注冊(cè)或身份驗(yàn)證。每個(gè)序數(shù)在 FaceAuthenticationManager.java 文件中都有一條關(guān)聯(lián)消息。只要提供相應(yīng)的幫助字符串,就可以添加供應(yīng)商專用消息。采集消息本身并不表示終止?fàn)顟B(tài),HAL 應(yīng)根據(jù)需要發(fā)送盡可能多的消息以完成當(dāng)前的注冊(cè)或身份驗(yàn)證過(guò)程。如果某條采集消息引發(fā)終止?fàn)顟B(tài)而使系統(tǒng)無(wú)法進(jìn)一步執(zhí)行操作,則 HAL 應(yīng)該在采集消息之后顯示錯(cuò)誤消息,例如,圖片過(guò)暗且保持過(guò)暗狀態(tài)而使系統(tǒng)無(wú)法進(jìn)一步執(zhí)行操作的情況。在這種情況下,在多次嘗試仍無(wú)進(jìn)展之后可以發(fā)送 UNABLE_TO_PROCESS。
硬件
設(shè)備要滿足 Android 10 安全系數(shù)較高的生物識(shí)別技術(shù)要求,就必須采用安全的硬件來(lái)確保人臉數(shù)據(jù)的完整性以及進(jìn)行最終的身份驗(yàn)證比較。Android 兼容性定義文檔 (CDD) 列出了所需的安全級(jí)別以及可接受的欺騙接受率 (SAR)。不僅需要可信執(zhí)行環(huán)境 (TEE) 來(lái)確保處理和識(shí)別的安全,還需要安全的相機(jī)硬件來(lái)防止人臉識(shí)別身份驗(yàn)證過(guò)程中出現(xiàn)的注入式攻擊。例如,圖片數(shù)據(jù)的相關(guān)內(nèi)存頁(yè)可享有特權(quán)并標(biāo)記為只讀,因此只有相機(jī)硬件才能更新這些內(nèi)存頁(yè)。理想情況下,除 TEE 和硬件外,其他任何進(jìn)程都不應(yīng)訪問(wèn)這些內(nèi)存頁(yè)。
由于人臉識(shí)別身份驗(yàn)證硬件之間的差異很大,因此必須開發(fā)特定于硬件的驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)人臉識(shí)別身份驗(yàn)證,具體取決于特定的設(shè)備架構(gòu)。因此,faced 沒有參考實(shí)現(xiàn)。
方法
以下均是異步方法,必須立即返回到框架,否則會(huì)導(dǎo)致系統(tǒng)運(yùn)行速度變慢,并且可能導(dǎo)致監(jiān)控程序重置。建議使用包含多個(gè)線程的消息隊(duì)列,以免阻塞調(diào)用程序。所有 GET 請(qǐng)求都應(yīng)盡可能緩存信息,將調(diào)用程序被阻塞的時(shí)間縮至最短。
方法
說(shuō)明
setCallback()
由 FaceService 調(diào)用,以使所有消息回歸自身。
setActiveUser()
設(shè)置為其應(yīng)用所有后續(xù) HAL 操作的活躍用戶。在再次調(diào)用該方法之前,始終針對(duì)此用戶進(jìn)行身份驗(yàn)證。
revokeChallenge()
通過(guò)使 generateChallenge() 生成的質(zhì)詢代碼無(wú)效來(lái)完成安全交易。
enroll()
注冊(cè)用戶的人臉。
cancel()
取消當(dāng)前操作(例如注冊(cè)、身份驗(yàn)證、移除或枚舉)并將 faced 返回到閑置狀態(tài)。
enumerate()
枚舉與活躍用戶關(guān)聯(lián)的所有人臉模板。
remove()
移除與活躍用戶關(guān)聯(lián)的某個(gè)或所有人臉模板。
authenticate()
對(duì)活躍用戶進(jìn)行身份驗(yàn)證。
userActivity()
僅應(yīng)在 HAL 處于“正在進(jìn)行身份驗(yàn)證”或“備用”狀態(tài)時(shí)使用此方法。在 HAL 未處于其中一種狀態(tài)時(shí)使用此方法會(huì)返回 OPERATION_NOT_SUPPORTED。在 HAL 已在進(jìn)行身份驗(yàn)證時(shí)調(diào)用此方法可能會(huì)延長(zhǎng)系統(tǒng)查找人臉的時(shí)間。
resetLockout()
如果識(shí)別時(shí)被拒絕的次數(shù)過(guò)多,faced 需要進(jìn)入鎖定狀態(tài)(LOCKOUT 或 LOCKOUT_PERMANENT)。進(jìn)入鎖定狀態(tài)后,需要將剩余時(shí)間發(fā)送到框架以向用戶顯示。就像 setFeature() 一樣,此方法需要有效的硬件身份驗(yàn)證令牌 (HAT) 才能安全重置內(nèi)部狀態(tài)。重置鎖定僅針對(duì)當(dāng)前用戶。
要點(diǎn):調(diào)用上述方法應(yīng)插入一條消息并返回。請(qǐng)務(wù)必使上述方法立即返回到閑置狀態(tài)。
其余三個(gè)方法均為同步方法,應(yīng)將其阻塞時(shí)間縮至最短以免拖延框架。
方法
說(shuō)明
generateChallenge()
生成唯一且能夠確保加密安全性的隨機(jī)令牌,以指明安全交易已開始。
setFeature()
為當(dāng)前用戶啟用或停用某項(xiàng)功能。出于安全方面的考慮,此方法需要 HAT 根據(jù)上述質(zhì)詢代碼檢查用戶的 PIN 碼/解鎖圖案/密碼
getFeature()
檢索該功能的當(dāng)前啟用狀態(tài),默認(rèn)指明或?qū)ι鲜?setFeature() 的調(diào)用。如果 Face ID 無(wú)效,則實(shí)現(xiàn)必須返回 ILLEGAL_ARGUMENT
getAuthenticatorId()
返回與當(dāng)前人臉集關(guān)聯(lián)的標(biāo)識(shí)符。每當(dāng)添加人臉時(shí),此標(biāo)識(shí)符都必須發(fā)生變更
狀態(tài)圖
框架要求 faced 遵循以下狀態(tài)圖。
圖 2. 人臉識(shí)別身份驗(yàn)證狀態(tài)流程
總結(jié)
以上是生活随笔為你收集整理的linux开源人脸识别库,人脸识别身份验证 HIDL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于dileber的android网络图
- 下一篇: java多线程:ThreadLocal详