睿诚科技协会

Android人脸识别技术如何保障安全与隐私?

Android 平台的人脸识别技术已经发展得非常成熟,主要分为两大类:

Android人脸识别技术如何保障安全与隐私?-图1
(图片来源网络,侵删)
  1. 系统级的人脸解锁:这是最广为人知的应用,用于解锁手机、授权支付和应用。
  2. 开发者 API:允许开发者在自己的 App 中集成人脸识别功能,用于身份验证、美颜、滤镜、活体检测等。

下面我将从这两个方面,结合技术原理、实现方式和最佳实践,为你进行详细的介绍。


系统级的人脸识别 (人脸解锁)

这是 Android 系统提供的一个核心安全功能,用户在设置中开启后,即可通过前置摄像头快速、安全地解锁手机。

技术演进与安全性

Android 的人脸解锁技术经历了几个重要的安全等级提升:

  • 早期版本 (Android 10 及之前)

    Android人脸识别技术如何保障安全与隐私?-图2
    (图片来源网络,侵删)
    • 技术:主要依赖 2D 图像比对,即捕捉你的人脸照片,并与存储的模板进行简单的相似度匹配。
    • 安全性非常低,使用一张清晰的照片、视频甚至屏幕截图都能轻易骗过系统,这只能算作“人脸检测”,而非“人脸识别”。
  • 安全级别 1 (Safety Level 1) - Android 10/11

    • 技术:引入了“红外人脸解锁”,通过红外摄像头投射一个不可见的红外点阵图案,再由红外传感器接收这个图案的反射。
    • 安全性中等,由于使用红外光,它可以在黑暗中工作,活体检测能力有所增强,能区分真实人脸和照片/面具,但仍然存在被高精度 3D 打印面具等高级手段破解的风险,三星的“Secure Face”就是这个级别。
  • 安全级别 2 (Safety Level 2) - Android 12 及以上

    • 技术结构光飞行时间 技术,这是目前安卓阵营的最高安全级别。
      • 结构光:通过投射一个已知的、编码的近红外光栅到脸上,通过分析形变来构建一个精确的 3D 人脸模型。
      • ToF (Time-of-Flight):通过测量红外光从发射到返回的时间来计算深度,从而生成一个精确的 3D 深度图。
    • 安全性极高,系统验证的是你独一无二、立体的 3D 人脸模型,而不是一个 2D 平面图像,即使是照片、视频或高质量的 3D 打印面具,因为缺少真实的深度信息,也无法通过验证,苹果的 FaceID 就是结构光的典范,而谷歌 Pixel 的 Face Unlock 和部分高端安卓手机(如小米、OPPO)则采用 ToF 技术。

如何在设备上使用

  1. 进入设置设置 > 安全与隐私 > 屏幕解锁方式
  2. 选择人脸解锁:根据你的设备,可能名为“人脸解锁”、“Face Unlock”等。
  3. 设置流程:系统会引导你多次转动头部,以从不同角度捕捉人脸数据,构建一个 3D 模板。
  4. 完成设置:设置成功后,点亮屏幕时,手机会自动扫描你的人脸并解锁。

关键点

  • 安全级别:在设置时,系统会明确告知你当前人脸解锁的安全级别(如“使用屏幕解锁PIN/密码/图案”或“使用生物识别安全设置”)。安全级别 2 的强度等同于指纹和虹膜,可以用于授权支付、应用登录等高安全场景。
  • 依赖硬件:高安全级别的人脸识别必须依赖特定的硬件(红外摄像头、点阵投影仪、深度传感器等),普通的前置摄像头只能实现安全级别较低或无安全级别的人脸解锁。

开发者 API (人脸识别集成)

如果你想在 App 中实现人脸识别功能,Android 提供了强大的 API 供你调用,核心 API 是 BiometricPrompt

核心组件:BiometricPrompt

BiometricPrompt 是 Android 10 (API 29) 引入的统一 API,用于处理所有生物识别认证,包括指纹、人脸识别和虹膜,它为开发者提供了一个标准化的、一致的界面,无需关心底层是哪种生物识别技术。

Android人脸识别技术如何保障安全与隐私?-图3
(图片来源网络,侵删)

主要优点:

  • 统一性:一套代码,自动适配设备上可用的生物识别方式(优先显示用户设置的)。
  • 安全性:系统处理了所有的加密和密钥管理,开发者只需处理认证结果。
  • 用户体验:提供了标准的、系统级的 UI(提示框、动画、错误提示),与应用的 Material Design 风格完美融合。
  • 灵活性:可以自定义提示文本、标题和图标。

实现步骤 (代码示例)

要在你的 App 中集成 BiometricPrompt,基本步骤如下:

第一步:添加权限

AndroidManifest.xml 中添加使用生物识别的权限:

<uses-permission android:name="android.permission.USE_BIOMETRIC" />

第二步:创建 BiometricPrompt 的三个回调对象

  1. Executor:用于执行回调的线程池。
  2. BiometricPrompt.AuthenticationCallback:处理认证成功、失败和错误等事件。
  3. BiometricPrompt.CryptoObject:(可选,但强烈推荐)用于在认证成功后自动解密数据或签名,这是实现“生物识别 + 密钥”安全模式的关键。

第三步:构建并显示 BiometricPrompt

// 1. 创建 Executor
Executor executor = ContextCompat.getMainExecutor(this);
// 2. 创建 AuthenticationCallback
BiometricPrompt.AuthenticationCallback callback = new BiometricPrompt.AuthenticationCallback() {
    @Override
    public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
        // 认证成功!
        // 如果使用了 CryptoObject,可以在这里获取解密后的数据或签名
        Log.d("Biometric", "认证成功!");
        // 更新 UI 或执行后续操作
    }
    @Override
    public void onAuthenticationFailed() {
        // 认证失败,但用户可以重试
        Log.d("Biometric", "认证失败");
    }
    @Override
    public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
        // 发生错误,如传感器不可用、用户点击取消等
        // errorCode 和 errString 提供了详细信息
        Log.d("Biometric", "认证错误: " + errString);
    }
};
// 3. (可选)创建 CryptoObject 以实现更高级的安全
// Cipher cipher = ... // 初始化一个 Cipher
// BiometricPrompt.CryptoObject cryptoObject = new BiometricPrompt.CryptoObject(cipher);
// 4. 构建 BiometricPrompt 实例
BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(this)
        .setTitle("人脸识别验证")
        .setSubtitle("请看向摄像头以验证您的身份")
        .setDescription("此操作将修改您的个人资料")
        .setNegativeButtonText("使用密码")
        .build();
// 5. 显示认证对话框
// biometricPrompt.authenticate(cryptoObject, executor, callback);
// 如果不使用 CryptoObject:
biometricPrompt.authenticate(executor, callback);

关键考量因素

  • 向后兼容BiometricPrompt 仅支持 Android 10+,如果你的应用需要兼容更低版本,需要使用旧的 FingerprintManager API,并进行版本判断。
  • CryptoObject (加密对象):这是专业级安全应用的核心,认证过程会将用户的人脸数据与一个硬件安全模块 中的密钥进行绑定,认证成功后,系统会自动返回这个密钥,你可以用它来解密存储在本地数据库中的敏感信息(如密码、支付令牌等),这样,即使用户手机被 Root,攻击者也无法直接窃取你的加密数据,因为他们没有通过生物识别认证。
  • 活体检测BiometricPrompt 的底层由系统实现,其活体检测能力完全依赖于设备硬件,开发者无法直接控制活体检测的算法,但可以信任系统提供的结果,高安全级别的设备(安全级别 2)提供更强的活体检测。
  • 用户引导:首次使用时,系统会弹出一个引导页面,告知用户生物识别数据将被安全存储,开发者无需自己实现这个逻辑。

前沿技术与第三方 SDK

除了系统级的 API,还有一些更高级的和人脸相关的技术,通常由第三方 SDK 提供:

  1. 人脸检测:比识别更基础,只判断画面中是否有人脸,并定位其位置(人脸框),Google 的 ML Kit 提供了非常强大且易于使用的人脸检测 API。
  2. 人脸关键点检测:在检测到人脸的基础上,进一步定位眼睛、鼻子、嘴巴、眉毛等关键点的位置,常用于美颜、AR 滤镜。
  3. 人脸追踪:在视频流中持续跟踪同一个人脸的位置和姿态。
  4. 活体检测:更高级的活体检测,如要求用户做眨眼、张嘴、左右转头等动作,这对于金融、支付等高安全场景至关重要,许多第三方公司(如旷视、商汤、ArcSoft)提供专业的活体检测 SDK。
  5. 人脸属性分析:分析人脸的性别、年龄、表情等。
特性 系统级人脸解锁 开发者 API (BiometricPrompt) 第三方 SDK (如 ML Kit)
主要用途 解锁手机、授权支付/应用 App 内身份验证、授权登录 人脸检测、美颜、AR、属性分析
技术核心 2D/3D 图像比对、结构光/ToF 系统生物识别框架 计算机视觉算法
安全性 依赖设备硬件级别 (安全级别 1/2) 高 (与系统指纹同级,可结合 CryptoObject) 中等 (主要用于功能实现,安全需自行设计)
实现方式 系统设置中开启 调用 BiometricPrompt API 集成第三方库
适用场景 所有安卓用户 需要生物识别验证的 App 需要人脸分析功能的 App

对于大多数开发者来说,如果你想在 App 中实现安全的身份验证,BiometricPrompt 是首选,它简单、安全且用户体验好,如果你需要实现更复杂的人脸分析功能(如美颜、滤镜),则可以集成 Google ML Kit 或其他专业的第三方 SDK。

分享:
扫描分享到社交APP
上一篇
下一篇