生物特徵辨識

生物特徵辨識是透過裝置確認身分的便利方式,但可能較不安全。在分層驗證模式下,主要驗證 (以知識要素為基礎的模式,例如 PIN 碼、圖形和密碼) 可提供最高層級的安全性。生物特徵辨識屬於次要驗證層級,可提供便利性和安全性的平衡。Android CD 定義了三種生物特徵辨識強度類別:第 3 級 (先前稱為 Strong)、第 2 級 (舊稱 Weak) 和第 1 級 (原稱「便利性」)。每個類別都有一組必要條件、權限和限制,詳情請參閱上方的 CDD。這三個類別皆可與鎖定畫面整合,但只有強式和弱式驗證工具可與 android.hardware.biometrics API 整合。下表說明各個驗證工具和支援的功能。

Authenticator 螢幕鎖定畫面 BiometricPrompt 整合 KeyStore (以時間為準的金鑰) KeyStore (以作業為依據的金鑰)
BIOMETRIC_STRONG (第 3 級)
BIOMETRIC_WEAK (第 2 級)
BIOMETRIC_CONVENIENCE
(Class 1)
不可以
DEVICE_CREDENTIAL

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

來源

Android 12

  • 導入 BiometricManager.Strings API,為使用 BiometricPrompt 進行驗證的應用程式提供本地化字串。這些字串可識別裝置,並提供更明確的資訊,說明可使用的驗證類型。
  • 支援螢幕底下的指紋感應器 (UDFPS)。

Android 11

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

Android 10

Android 9

  • 僅包含 BiometricPrompt 的指紋整合功能。
  • 淘汰 FingerprintManager 類別。如果您的套裝組合和系統應用程式都使用這個類別,請更新應用程式,改為使用 BiometricPromptBiometricManager
  • 更新 FingerprintManager CTS 驗證工具測試,以便使用 BiometricPromptBoundKeysTest 測試 BiometricPrompt

實作

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

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

  1. 修改 Biometric 註冊 Activity 以顯示您的註冊流程。請注意,只有在符合要求的強度時,才能提交生物特徵辨識資料。如果裝置支援多種裝置,這個動作應顯示使用者可選擇的清單。
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 (舊稱為強) 生物特徵辨識系統,除非使用者明確覆寫,否則系統必須顯示警告訊息,說明與生物特徵辨識系統相關的風險 (例如你的相片可能會解鎖裝置)

裝置專屬驗證字串

從 Android 12 開始,開發人員可透過 BiometricManager.Strings API 使用關聯驗證字串。您可以自訂此 API 傳回的資源值,以實作裝置專屬字串。如果要這麼做,請務必針對裝置支援的所有語言代碼翻譯新字串。此外,請確認下列屬性已保留:


方法

字串用途

要納入的驗證類型

如果同時支援生物特徵辨識和螢幕鎖定功能

getButtonLabel()

觸發 BiometricPrompt 的按鈕標籤

僅限符合驗證器要求的已註冊類型 (如果可以的話)

使用僅限生物特徵辨識字串 (例如「Use fingerprint」)

getPromptMessage()

在驗證時,BiometricPrompt 顯示的訊息

僅限符合驗證工具規定的已註冊類型 (如有可能)

使用結合生物特徵辨識和螢幕鎖定字串 (例如「請使用指紋或 PIN 碼驗證身分,才能繼續操作」)

getSettingName()

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

裝置支援的所有類型 (即使未註冊),且符合驗證工具要求

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

舉例來說,假設裝置具有第 2 級臉部辨識感應器,且已註冊臉孔已註冊 PIN 碼第 3 級指紋感應器,但沒有註冊指紋。下表列出允許的驗證工具組合和叫用的 BiometricManager.Strings 方法組合,並為每個組合提供範例字串:


允許的驗證器

getButtonLabel()

getPromptMessage()

getSettingName()

第 3 級生物辨識 (BIOMETRIC_STRONG)

「Use fingerprint」
(只有指紋符合 authenticator 要求)

「請用指紋繼續操作」
(只有指紋符合驗證機制要求)

「Use fingerprint」
(只有指紋符合 authenticator 要求)

第 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)