linux开源人脸识别库,人脸识别身份验证 HIDL
概覽
借助人臉識別身份驗證功能,用戶只需將自己的面孔對準設備即可將其解鎖。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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于dileber的android网络图
- 下一篇: linux 其他常用命令