生物特徵辨識

生物辨識技術提供了一種更方便但可能不太安全的方式來透過裝置確認您的身分。在分層身分驗證模型下,主要身分驗證(即基於知識因素的模式,例如 PIN、模式和密碼)提供最高層級的安全性。生物辨識技術位於身分驗證的第二層,提供便利性和安全性的平衡。 Android CDD定義了三類生物辨識強度:Class 3(以前稱為「Strong」)、Class 2(以前稱為「Weak」)和 Class 1(以前稱為「Convenience」)。每個類別都有一組先決條件、特權和約束 - 請參閱上面的 CDD 以了解更多詳細資訊。所有三個類別都允許與鎖定螢幕集成,但僅允許強和弱身份驗證器與 android.hardware.biometrics API 集成。此表描述了每個身份驗證器及其支援的功能。

驗證器鎖定畫面生物識別快速集成金鑰庫(基於時間的金鑰)密鑰庫(基於操作的密鑰)
生物辨識_強(3 級)是的是的是的是的
BIOMETRIC_WEAK(2 類)是的是的
生物辨識便利性
(1級)
是的
DEVICE_CREDENTIAL是的是的是的是的

Android 框架包括對臉部和指紋生物識別身份驗證的支援。 Android 可以進行客製化以支援其他生物辨識模式(例如虹膜)。然而,生物辨識整合將取決於生物辨識安全性,而不是模態。有關生物識別安全規範的更多詳細信息,請參閱測量生物識別解鎖安全性

來源

安卓12

  • 引入了BiometricManager.Strings API,它為使用 BiometricPrompt 進行身份驗證的應用程式提供本地化字串。這些字串旨在實現裝置感知,並提供有關可以使用哪種身份驗證類型的更多特異性。
  • 包含螢幕下指紋感應器 (UDFPS) 支援。

安卓11

  • 引入了BiometricManager.Authenticators 接口,該接口提供了開發人員可以用來指定其應用程式接受的身份驗證類型的常數。
  • 新增ACTION_BIOMETRIC_ENROLL意圖操作,開發人員可以使用該操作指導使用者註冊滿足其應用程式要求的身份驗證方法。
  • 新增AuthenticationResult #getAuthenticationType () 方法,開發人員可以使用該方法檢查使用者是否使用生物特徵憑證或裝置憑證進行驗證。
  • 為 BiometricPrompt 類別中的每次使用金鑰提供額外支援。

安卓10

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

安卓9

  • 僅包含BiometricPrompt的指紋整合。
  • 棄用 FingerprintManager 類別。如果您的捆綁應用程式和系統應用程式使用此類,請將其更新為使用BiometricPromptBiometricManager
  • 更新了FingerprintManager CTS 驗證程式測試以使用BiometricPromptBoundKeysTest測試BiometricPrompt

執行

為了確保使用者和開發人員獲得無縫的生物辨識體驗,請將您的生物辨識堆疊與BiometricPromptBiometricManagerACTION_BIOMETRIC_ENROLL API 整合。具有生物辨識感測器的設備必須遵守這些強度要求。此外,所有實施都必須通過 CtsBiometricsTestCases CTS 模組。

要將生物辨識堆疊與 ACTION_BIOMETRIC_ENROLL API 整合:

  1. 修改BiometricEnrollActivity以呈現您的註冊流程。請注意,只有在滿足要求的強度時,才能顯示您的生物辨識資訊。如果您的裝置支援多個,此操作應顯示一個清單供使用者選擇。
生物辨識提示架構
圖 1. BiometricPrompt 架構

HAL 實施指南

請遵循以下生物識別 HAL 指南,以確保生物識別資料不會洩露,並且當使用者從裝置中刪除時生物識別資料也會被刪除

  • 確保原始生物識別資料或衍生資料(例如模板)永遠無法從安全隔離環境(例如 TEE 或安全元件)外部存取。所有儲存的資料必須使用只有 TEE(可信任執行環境)知道的裝置特定金鑰進行加密。如果硬體支持,則限制硬體對安全隔離環境的訪問,並使用 SELinux 策略對其進行保護。使通訊通道(例如 SPI、I2C)只能由在所有裝置檔案上具有明確 SELinux 策略的安全隔離環境存取。
  • 生物辨識採集、註冊和識別必須在安全隔離的環境內進行,以防止資料外洩和其他攻擊。此要求僅適用於3 類(以前為強)和 2 類(以前為弱)生物辨識技術。
  • 為了防止重播攻擊,請使用裝置特定的私有金鑰對生物辨識範本進行簽署。對於高級加密標準 (AES),至少使用絕對檔案系統路徑、群組和生物識別 ID 簽署模板,以便模板檔案在其他裝置上或除在同一裝置上註冊它們的使用者之外的任何人都無法操作。例如,防止從同一裝置上的不同使用者或其他裝置複製生物辨識資料。
  • 如果您需要在 TEE 外部儲存數據,請使用setActiveUser() HIDL method提供的檔案系統路徑,或提供另一種方法來在刪除使用者時擦除所有使用者模板資料。原因是為了防止用戶資料外洩。刪除使用者後,不使用此路徑的裝置必須進行清理。 CDD 要求生物特徵資料和衍生文件加密儲存 - 特別是如果不在 TEE 中的話 如果由於安全隔離環境的儲存要求而無法實現,請新增掛鉤以確保在使用者或裝置移除時刪除資料已被擦除。請參閱 LockSettingsService.removeBiometricsForUser()

客製化

如果您的裝置支援多種生物辨識技術,使用者應該能夠在設定中指定預設值。您的BiometricPrompt實現應首選3 類(以前稱為強)生物識別作為預設值,除非用戶明確覆蓋它,然後需要顯示一條警告訊息,解釋與生物識別相關的風險(例如,您的照片可能會解鎖您的設備)

設備特定的身份驗證字串

從 Android 12 開始,開發人員可以透過BiometricManager.Strings API 取得上下文驗證字串。您可以自訂此 API 傳回的資源值以實作特定於裝置的字串。如果這樣做,請確保為裝置支援的所有區域設定翻譯任何新字串。此外,請確保保留以下屬性:


方法

字串用途

要包含的身份驗證類型

如果生物辨識和螢幕鎖定都可以

取得按鈕標籤()

觸發 BiometricPrompt 的按鈕的標籤

僅滿足驗證器要求的註冊類型(如果可能)

使用僅生物識別字串(例如“使用指紋”)

取得提示訊息()

身份驗證時 BiometricPrompt 上顯示的訊息

僅滿足驗證器要求的註冊類型(如果可能)

使用組合的生物識別和螢幕鎖定字串(例如“使用您的指紋或 PIN 碼繼續”)

取得設定名稱()

啟用 BiometricPrompt 進行身份驗證的設定的名稱

裝置支援的滿足身份驗證器要求的所有類型(即使未註冊)

使用組合的生物識別和螢幕鎖定字串(例如“使用指紋或螢幕鎖定”)

例如,假設裝置具有2 類臉部感應器(已註冊臉部)已註冊 PIN 碼以及3 類指紋感應器(未註冊指紋) 。下表提供了允許的身份驗證器和呼叫的BiometricManager.Strings方法的每種組合的範例字串:


允許的驗證器

取得按鈕標籤()

取得提示訊息()

取得設定名稱()

3 類生物辨識 ( BIOMETRIC_STRONG )

“使用指紋”
(只有指紋滿足驗證器要求)

“使用您的指紋繼續”
(只有指紋滿足驗證器要求)

“使用指紋”
(只有指紋滿足驗證器要求)

2 類生物辨識 ( BIOMETRIC_WEAK )

“用臉”
(人臉、指紋均符合要求,僅登記人臉)

“用臉繼續”
(人臉、指紋均符合要求,僅登記人臉)

“使用臉部或指紋”
(人臉和指紋均符合要求,設備均支援)

螢幕鎖定( DEVICE_CREDENTIAL

“使用 PIN 碼”
(任何螢幕鎖定都符合要求;PIN 碼已註冊)

“輸入您的 PIN 碼以繼續”
(任何螢幕鎖定都符合要求;PIN 碼已註冊)

“使用螢幕鎖定”
(任何螢幕鎖定都滿足要求)

3 級生物辨識螢幕鎖定

“使用 PIN 碼”
(指紋和任何螢幕鎖定滿足要求;僅註冊 PIN)

“輸入您的 PIN 碼以繼續”
(指紋和任何螢幕鎖定滿足要求;僅註冊 PIN)

“使用指紋或螢幕鎖定”
(指紋和任何螢幕鎖定滿足要求)

2 級生物辨識螢幕鎖定

“用臉”
(臉部、指紋和任何螢幕鎖定滿足要求;臉部已註冊並取代 PIN)

“使用您的臉部或 PIN 碼繼續”
(人臉、指紋、任意鎖定畫面符合要求;臉部、PIN已登記)

“使用生物識別或螢幕鎖定”
(人臉、指紋、任意鎖定畫面滿足要求)

驗證

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

此外,如果您的裝置支援具有 AOSP HIDL 的生物辨識( Fingerprint@2.1Fingerprint@2.2Face1.0 ),則它必須通過其相關的 VTS 測試( FingerprintFace