生物識別

生物識別技術提供了一種更方便但可能不太安全的方式來使用設備確認您的身份。在分層身份驗證模型下,初級身份驗證(即基於知識因素的模式,例如 PIN、模式和密碼)提供最高級別的安全性。生物識別技術處於第二層身份驗證,提供了便利性和安全性的平衡。 Android CDD定義了三類生物特徵強度:3 類(以前的強)、2 類(以前的弱)和 1 類(以前的便利)。每個班級都有一組先決條件、特權和限制 - 請參閱上面的 CDD 了解更多詳細信息。所有三個類都可以與鎖屏集成,但只有強身份驗證器和弱身份驗證器才能與 android.hardware.biometrics API 集成。此表描述了每個身份驗證器及其支持的功能。

身份驗證器鎖屏生物識別提示集成密鑰庫(基於時間的密鑰) Keystore(基於操作的密鑰)
BIOMETRIC_STRONG(第 3 類)是的是的是的是的
BIOMETRIC_WEAK(第 2 類)是的是的
BIOMETRIC_CONVENIENCE
(第 1 類)
是的
DEVICE_CREDENTIAL是的是的是的是 (1)
  1. 此功能已在 Android 11 中添加,詳情請參閱

Android 框架包括對面部和指紋生物特徵認證的支持。可以自定義 Android 以支持其他生物識別模式(例如 Iris)。然而,生物識別集成將取決於生物識別安全性,而不是模式。有關生物識別安全規範的更多詳細信息,請參閱測量生物識別解鎖安全性。

資源

安卓 11

  • 引入BiometricManager.Authenticators 接口,它提供了開發人員可以用來指定其應用程序接受的身份驗證類型的常量。
  • 添加ACTION_BIOMETRIC_ENROLL意圖操作,開發人員可以使用它來指導用戶註冊滿足其應用要求的身份驗證方法。
  • 添加AuthenticationResult #getAuthenticationType () 方法,開發人員可以使用該方法來檢查用戶是否使用生物識別憑證或設備憑證進行了身份驗證。
  • 為 BiometricPrompt 類中的auth-per-use密鑰提供額外支持。

安卓 10

  • 引入了BiometricManager類,開發人員可以使用該類來查詢生物特徵身份驗證的可用性。
  • 包括用於BiometricPrompt的指紋和麵部認證集成

安卓 9

  • 包括僅適用於BiometricPrompt的指紋集成。
  • 棄用 FingerprintManager 類。如果您的捆綁應用和系統應用使用此類,請將它們更新為使用BiometricPromptBiometricManager
  • 更新了FingerprintManager CTS 驗證程序測試以使用BiometricPromptBoundKeysTest BiometricPrompt

執行

為確保用戶和開發人員擁有無縫的生物識別體驗,請將您的生物識別堆棧與BiometricPromptBiometricManagerACTION_BIOMETRIC_ENROLL API 集成。帶有生物識別傳感器的設備必須遵守這些強度要求
要將您的生物識別堆棧與BiometricPromptBiometricManager APIs集成:

  1. 確保您的<Modality>Service通過 IBiometricService#registerAuthenticator 方法正確註冊到BiometricService並實現IBiometricAuthenticator接口。通用模式(指紋、面部)從通用超類擴展而來。如果您需要集成不受支持的模式,請遵循指紋/ 面部示例和CDD 生物識別指南
  2. 確保SystemUI正確支持您的新模式。指紋和麵部有默認的BiometricPrompt用戶界面。這應該包括您的設備所需的任何佈局或主題更改。即顯示指紋傳感器的相應佈局更改。

要將您的生物識別堆棧與 ACTION_BIOMETRIC_ENROLL API 集成:

  1. 修改BiometricEnrollActivity以顯示您的註冊流程。請注意,您的生物特徵只有在滿足要求的強度時才能顯示。如果您的設備支持多個,則此操作應顯示用戶可以從中選擇的列表。
BiometricPrompt 架構
圖 1. BiometricPrompt 架構

HAL 實施指南

請遵循以下生物特徵 HAL 指南,以確保生物特徵數據不會洩露,並且會在用戶從設備中移除時被移除:

  • 確保無法從安全隔離環境(例如 TEE 或安全元件)外部訪問原始生物特徵數據或衍生數據(例如模板)。所有存儲的數據都必須使用只有 TEE(可信執行環境)知道的特定於設備的密鑰進行加密。如果硬件支持,限制硬件對安全隔離環境的訪問,並使用 SELinux 策略對其進行保護。通過對所有設備文件的明確 SELinux 策略,使通信通道(例如 SPI、I2C)只能由安全隔離環境訪問。
  • 生物特徵採集、註冊和識別必須在安全的隔離環境中進行,以防止數據洩露和其他攻擊。此要求僅適用於第 3 類(以前為強)和第 2 類(以前為弱)生物特徵。
  • 為防止重放攻擊,請使用專用設備專用密鑰對生物特徵模板進行簽名。對於高級加密標準 (AES),至少使用絕對文件系統路徑、組和生物識別 ID 對模板進行簽名,以便模板文件在另一台設備上或對於在同一設備上註冊它們的用戶以外的任何人都無法操作.例如,防止從同一設備上的不同用戶或從另一設備複製生物特徵數據。
  • 如果您需要在 TEE 之外存儲數據,請使用setActiveUser() HIDL method提供的文件系統路徑,或提供其他方式在刪除用戶時擦除所有用戶模板數據。原因是為了保護用戶數據的洩露。不使用此路徑的設備必須在刪除用戶後進行清理。 CDD 要求將生物特徵數據和衍生文件加密存儲 - 特別是如果不在 TEE 中,如果由於安全隔離環境的存儲要求而無法實現,請添加掛鉤以確保在移除用戶或設備時移除數據被抹去。請參閱 LockSettingsService.removeBiometricsForUser()

定制

如果您的設備支持多種生物特徵,用戶應該能夠在設置中指定默認值。您的BiometricPrompt實現應該首選Class 3(以前的 Strong)生物特徵作為默認值,除非用戶明確覆蓋它,然後需要顯示一條警告消息,解釋與生物特徵相關的風險(例如,您的照片可能會解鎖您的設備)

驗證

您的生物識別實施必須通過以下測試:

此外,如果您的設備支持具有 AOSP HIDL指紋@2.1、 指紋@2.2、面部1.0)的生物特徵,則它必須通過其相關的 VTS 測試( 指紋面部