生物识别

借助生物识别因素,可在 Android 平台上实现安全的身份验证。Android 框架包含人脸和指纹生物识别身份验证方式。您可对 Android 进行自定义以支持其他形式的生物识别身份验证方式(例如虹膜)。所有生物识别实现都必须符合安全规范且具有较高的安全评级才能使用 BiometricPrompt。衡量生物识别的指标有冒名接受率 (IAR)欺骗接受率 (SAR)

如需详细了解生物识别安全规范,请参阅衡量生物识别解锁模式的安全性

来源

Android 10

Android 9

  • 仅包含 BiometricPrompt 指纹集成。
  • 弃用了 FingerprintManager 类。如果您的捆绑式应用和系统应用使用此类,请更新这些应用以改用 BiometricPromptBiometricManager
  • 更新了 FingerprintManager CTS 验证程序测试,以使用 BiometricPromptBoundKeysTest 测试 BiometricPrompt

实现

为确保用户和开发者获享无缝的生物识别体验,请将生物识别堆栈与 BiometricPrompt 集成。为任何模态(包括人脸、指纹和虹膜)启用 BiometricPrompt 的设备必须符合这些安全程度要求。如果它们不符合这些安全程度要求,就无法实现此类。
要将生物识别堆栈与 BiometricPromptBiometricManager 集成,请执行以下操作:

  • 确保您的 <Modality> 服务已正确挂钩到 BiometricService 并挂钩 authenticate() 方法。常见的模态(指纹、人脸)从共同的父类扩展。如果您需要集成不受支持的模态,请遵循指纹/人脸识别示例及针对生物识别的 CDD 指南
  • 确保您的新模态在 SystemUI 中得到了相应支持。系统提供了适用于指纹和人脸识别的 BiometricPrompt 默认界面。
  • 更新框架,让添加的生物识别技术遵循 KEYGUARD_DISABLE_* 标记。
  • 对于您已集成到 BiometricPrompt/BiometricManager 中的每种模态,确保您的设备可通过 CTS 和 CtsVerifier 测试。例如,如果您同时支持指纹和人脸识别身份验证,则必须通过针对每项身份验证方式的各项测试。
BiometricPrompt 架构
图 1. BiometricPrompt 架构

HAL 实现指南

遵循以下生物识别 HAL 准则,以确保生物识别数据不会泄露,并在从设备中移除用户时一并移除

  • 确保在任何情况下都无法从传感器驱动程序或安全隔离环境(例如 TEE 或安全元件)以外访问原始生物识别数据或衍生内容(例如模板)。
  • 如果硬件支持,则限制硬件对安全隔离环境的访问权限,并使用 SELinux 政策对其进行保护。使用针对所有设备文件的明确 SELinux 政策,确保信道(例如 SPI、I2C 等)只能供安全隔离环境访问。
  • 生物识别信息的采集、注册和识别必须在安全隔离环境内部进行,以防范数据泄露和其他攻击。此要求仅适用于安全程度高的生物识别技术。
  • 仅在文件系统上存储加密形式的生物识别数据或衍生内容(即使文件系统本身已加密)。
  • 要防范重播攻击,请使用设备专用私钥对生物识别模板进行签名。对于高级加密标准 (AES),至少必须通过绝对文件系统路径、群组和生物识别 ID 对模板签名,使相应模板文件无法在其他设备上使用,也无法供同一设备上除注册者以外的任何其他用户使用。例如,您将无法复制同一设备上其他用户的生物识别数据,也无法从其他设备复制生物识别数据。
  • 使用 set_active_group() 函数提供的文件系统路径,或提供另一种能够在移除用户时一并清空所有用户模板数据的方法。强烈建议将生物识别模板文件以加密形式存储在提供的路径中。如果因安全隔离环境的存储要求而导致这种做法不可行,请添加一些钩子,以确保在移除用户或清空设备数据时一并移除相关数据。

自定义

如果您的设备支持多种生物识别技术,用户应可以在设置中指定默认值。您的 BiometricPrompt 实现应该默认首选安全程度高的生物识别技术(除非用户明确替换该选项),并需要显示一条警告消息来说明与生物识别相关的风险(例如:“也许您的照片也能解锁设备”)

验证

您的生物识别实现必须通过以下测试:

此外,如果您的设备支持具有 AOSP HIDL 的生物识别技术(fingerprint@2.1face1.0),则必须通过与之相关的 VTS 测试(fingerprintface)。