生物辨識

生物特徵辨識是更方便的裝置身分驗證方式,但安全性可能較低。在分層驗證模型中,主要驗證 (即以知識因素為基礎的模式,例如 PIN 碼、圖案和密碼) 提供最高等級的安全性。生物特徵辨識屬於第二層驗證,兼顧便利性和安全性。Android CDD 定義了三種生物特徵辨識強度:第 3 級 (舊稱「強」)、第 2 級 (舊稱「弱」) 和第 1 級 (舊稱「便利」)。每個類別都有先決條件、權限和限制,詳情請參閱上方的 CDD。這三種類別都可以與鎖定螢幕整合,但只有「強」和「弱」驗證器可以與 android.hardware.biometrics API 整合。下表說明各個驗證器及其支援的功能。

驗證器 螢幕鎖定 整合 BiometricPrompt KeyStore (以時間為準的密鑰) KeyStore (以作業為準的金鑰)
BIOMETRIC_STRONG (第 3 級)
BIOMETRIC_WEAK (第 2 級)
BIOMETRIC_CONVENIENCE
(第 1 類)
不可
DEVICE_CREDENTIAL

Android 架構支援臉部和指紋生物辨識驗證。Android 可自訂支援其他生物特徵辨識模式 (例如虹膜)。不過,生物辨識整合取決於生物辨識安全性,而非模式。如要進一步瞭解生物辨識安全規格,請參閱「測量生物辨識解鎖安全性」。

來源

Android 12

  • 推出 BiometricManager.Strings API,可為使用 BiometricPrompt 進行驗證的應用程式提供本地化字串。這些字串會考量裝置,並提供更具體的資訊,說明可使用的驗證類型。
  • 包括螢幕下指紋感應器 (UDFPS) 支援。

Android 11

  • 導入 BiometricManager.Authenticators 介面,提供常數供開發人員指定應用程式接受的驗證類型。
  • 新增 ACTION_BIOMETRIC_ENROLL intent action,開發人員可使用這項動作,引導使用者註冊符合應用程式需求的驗證方法。
  • 新增 AuthenticationResult#getAuthenticationType() method,開發人員可使用這個方法檢查使用者是使用生物特徵辨識憑證還是裝置憑證完成驗證。
  • 在 BiometricPrompt 類別中,提供單次使用驗證金鑰的額外支援。

Android 10

Android 9

  • 僅包含 BiometricPrompt 的指紋整合功能。
  • 淘汰 FingerprintManager 類別。如果您已將這個類別用於隨附和系統應用程式,請更新這些應用程式,改用 BiometricPromptBiometricManager
  • 更新 FingerprintManager CTS 驗證器測試,以使用 BiometricPromptBoundKeysTest 測試 BiometricPrompt

實作

為確保使用者和開發人員享有流暢的生物特徵辨識體驗,請將生物特徵辨識堆疊與 BiometricPromptBiometricManagerACTION_BIOMETRIC_ENROLL API 整合。具備生物特徵辨識感應器的裝置必須遵守這些強度規定。此外,所有實作項目都必須通過 CtsBiometricsTestCases CTS 模組。

如要將生物特徵辨識堆疊與 ACTION_BIOMETRIC_ENROLL API 整合,請按照下列步驟操作:

  1. 修改 BiometricEnrollActivity,呈現註冊流程。請注意,只有在生物特徵辨識資訊符合要求強度時,才能提供。如果裝置支援多個,這項動作應會顯示清單,供使用者選擇。
BiometricPrompt 架構
圖 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 傳回的資源值,實作裝置專用的字串。如果這麼做,請確保所有新字串都已翻譯成裝置支援的所有語言。此外,請確保保留下列屬性:


方法

String purpose

要納入的驗證類型

如果可以同時使用生物辨識和螢幕鎖定

getButtonLabel()

觸發 BiometricPrompt 的按鈕標籤

僅限符合驗證器需求的「已註冊」類型 (如適用)

使用僅限生物辨識的字串 (例如「使用指紋」)

getPromptMessage()

驗證時 BiometricPrompt 顯示的訊息

僅限符合驗證器需求的「已註冊」類型 (如適用)

使用合併的生物辨識和螢幕鎖定字串 (例如「請使用指紋或 PIN 碼繼續操作」)

getSettingName()

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

裝置支援的所有類型 (即使未註冊),只要符合驗證器需求即可

使用合併的生物辨識和螢幕鎖定字串 (例如「使用指紋或螢幕鎖定功能」)

舉例來說,假設裝置具有第 2 級臉部感應器,且已註冊臉部和 PIN 碼,以及第 3 級指紋感應器,但未註冊任何指紋下表提供允許的驗證器和叫用 BiometricManager.Strings 方法的每種組合範例字串:


允許的驗證器

getButtonLabel()

getPromptMessage()

getSettingName()

第 3 級生物特徵辨識 (BIOMETRIC_STRONG)

「使用指紋」
(只有指紋符合 驗證器需求)

「使用指紋繼續操作」
(只有指紋符合驗證器需求)

「使用指紋」
(只有指紋符合 驗證器需求)

第 2 類生物特徵辨識 (BIOMETRIC_WEAK)

「使用臉部」
(臉部和指紋符合規定; 僅註冊臉部)

「使用臉部繼續操作」
(臉部和指紋符合規定;僅註冊臉部)

「使用臉孔或指紋」
(臉孔和指紋符合規定;裝置同時支援這兩種方式)

螢幕鎖定 (DEVICE_CREDENTIAL)

「使用 PIN 碼」
(任何螢幕鎖定方式都符合規定;已註冊 PIN 碼)

「輸入 PIN 碼繼續操作」
(任何螢幕鎖定方式都符合規定;已註冊 PIN 碼)

「使用螢幕鎖定」
(任何螢幕鎖定方式都符合規定)

第 3 級生物辨識螢幕鎖定

「使用 PIN 碼」
(指紋和任何螢幕鎖定都符合規定;僅註冊 PIN 碼)

「輸入 PIN 碼繼續操作」
(指紋和任何螢幕鎖定都符合規定;僅註冊 PIN 碼)

「使用指紋或螢幕鎖定」
(指紋和任何螢幕鎖定都符合規定)

第 2 級生物辨識螢幕鎖定

「使用臉部」
(臉部、指紋和任何螢幕鎖定都符合規定;臉部已註冊並取代 PIN 碼)

「請使用臉部或 PIN 碼繼續操作」
(臉部、指紋和任何螢幕鎖定功能都符合規定;臉部和 PIN 碼已註冊)

「使用生物辨識或螢幕鎖定功能」
(人臉、指紋和任何螢幕鎖定功能都符合規定)

驗證

生物特徵辨識實作項目必須通過下列測試:

  • CTS BiometricManager
  • CTS BiometricPrompt (健全性,深入測試取決於驗證器)
  • CtsVerifier 生物特徵辨識測試部分: 裝置支援的每種模式都必須個別通過測試

此外,如果裝置支援具有 AOSP HIDL 的生物特徵辨識 (fingerprint@2.1fingerprint@2.2face1.0),則必須通過相關的 VTS 測試 (fingerprintface)