生物识别认证是一种基于独特生理特征验证用户身份的方法。与密码不同,生物识别数据无法远程窃取或通过暴力破解猜到。根据Statista(2025)的数据,超过80%的现代智能手机配备内置生物识别传感器。
要点
生物识别认证是根据用户独特的生理或行为特征验证其身份的过程。与传统方法(密码、PIN码或一次性令牌)不同,生物识别与个人本身相关联,无法转移给他人。
该方法的基础是测量生物识别特征并与预先存储的模板进行比较。该技术从昂贵的企业系统发展到消费设备的广泛应用。第一款配备指纹扫描仪的大众智能手机是2011年的Motorola Atrix 4G,如今生物识别传感器已安装从100美元起的价位设备中。
生物识别解决了密码认证的关键问题:人类记忆。根据Hypr(2024)的研究,普通用户拥有超过100个在线账户,但只使用5个唯一密码。生物识别消除了记住复杂组合的需要。
生物识别认证过程包括两个阶段:注册(enrollment)和验证(verification)。在注册阶段,系统捕获生物识别图像,提取特征特征并创建参考模板。在验证时,新图像与存储的模板进行比较——算法计算匹配程度并做出决定。
设备传感器记录原始生物识别信号:通过电容矩阵的指纹图像,通过点投影仪的三维面部地图,或通过麦克风的声音频谱。捕获质量直接影响后续识别的准确性。现代传感器为指纹每毫米使用50到300个测量点,为面部使用多达30,000个点。
算法从原始数据中提取独特特征:指纹——细节特征(脊线的末端和分叉),面部——眼睛之间的距离、鼻子形状和下颌轮廓。这些特征被转换为2至20KB的数学模板。原始图像不保存——仅保存特征模板,无法从中重建原始图像。
系统将获得的模板与参考模板进行比较,计算相似度指标。如果值超过设定的阈值(threshold),则认证被视为成功。阈值决定了便利性和安全性之间的平衡:低阈值增加错误接受率(FAR),高阈值增加错误拒绝率(FRR)。对于移动设备,典型阈值设置在FAR 0.001%的水平,FRR约为2%。
移动设备支持几种类型的生物识别传感器,它们在准确性、速度和防伪性方面有所不同。每种类型都有其应用领域和安全级别。
移动设备中最常见的生物识别类型。电容式扫描仪根据皮肤脊线和谷之间的电位差创建脊状图案图像。首次在Galaxy S10中应用的超声波扫描仪使用声波进行指纹的三维重建——即使在湿手指时也能工作,并且抗硅胶仿制品。
两种方法:2D摄像头(简单前置摄像头)和3D扫描(结构光或ToF)。Apple Face ID向用户面部投射超过30,000个红外点,创建精确的三维地图。Neural Engine上的算法在毫秒内处理数据,并适应外观变化——胡须、眼镜、发型。
眼睛的虹膜是最稳定的生物识别特征之一:几乎不随年龄变化,也不像指纹那样容易受损。三星的虹膜扫描仪(Galaxy S8–S10)使用红外摄像头分析多达240个独特虹膜特征。此类系统的FAR低于0.0001%,但捕获速度低于面部扫描仪。
语音生物识别分析声道物理特征:基频、共振峰和音色。该技术应用于语音助手——Siri和Google Assistant——中识别特定用户。主要缺点是环境噪音敏感性和攻击者录制语音的可能性。
从Android 9(API 28)开始,Google提供统一的BiometricPrompt API,它抽象了与设备上所有类型生物识别传感器的工作。开发人员无需为指纹扫描仪和面部识别编写单独代码——BiometricPrompt自动检测可用传感器并显示标准对话框。
val executor = ContextCompat.mainExecutor(context)
val biometricPrompt = BiometricPrompt(activity, executor,
object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationSucceeded(
result: BiometricPrompt.AuthenticationResult
) {
// 访问已授权——可以显示内容
binding.showContent()
}
override fun onAuthenticationFailed() {
// 生物识别未识别——通知用户
binding.showError("指纹未识别")
}
override fun onAuthenticationError(
errorCode: Int,
errString: CharSequence
) {
// 不可恢复的错误——生物识别不可用
binding.showFallback()
}
}
)
val promptInfo = BiometricPrompt.PromptInfo.Builder()
.setTitle("登录应用程序")
.setSubtitle("通过指纹确认您的身份")
.setNegativeButtonText("使用PIN")
.build()
biometricPrompt.authenticate(promptInfo)
所示代码演示了通过BiometricPrompt进行生物识别认证的完整周期。onAuthenticationSucceeded回调在Trusted Execution Environment中成功验证模板后被调用。在没有生物识别传感器的设备上,BiometricPrompt将自动显示PIN码或图案输入屏幕——开发人员无需单独处理此场景。
重要的安全要求:所有生物识别操作必须在TEE(Trusted Execution Environment)端执行——处理器的硬件隔离区域。Android BiometricPrompt通过BiometricManager.Authenticators.BIOMETRIC_STRONG提供程序保证使用TEE,该提供程序无法从用户空间替换。
生物识别认证相比密码具有显著优势,但也有开发人员在设计应用程序安全性时必须考虑的基本限制。
关键限制——生物识别不是意图的证据。用户可能被迫在物理或压力下解锁设备。因此,银行级应用的监管机构(PSD2、PCI DSS)要求多因素认证,其中生物识别只是因素之一。
生物识别模板的安全性由硬件保护机制保证:iOS中的Secure Enclave和Android中的Trusted Execution Environment(TEE)。这些隔离的协处理器执行生物识别数据的捕获、处理和比较操作,主处理器和操作系统无法访问。
关键安全原则——不保存原始图像。传感器仅将特征的数学表示传递给TEE,而非指纹图像或面部照片。在Android 13+中,BiometricPrompt API额外使用TEE内生成的加密密钥对认证结果进行加密。这种方法使得从服务器窃取生物识别数据库变得无用——攻击者只获得加密的模板,而非原始数据。
国际标准ISO/IEC 24745:2022和FIDO2规定了生物识别的存储要求:禁止存储原始图像,模板必须不可逆转换,传感器和比较模块之间的数据传输通道必须硬件保护。在开发移动应用时,建议使用FIDO2 WebAuthn——一种保证生物识别交易端到端加密的协议。
常见问题
这是通过身体独特特征进入设备或应用:指纹、面部、声音或虹膜。用户无需输入密码,只需将手指放在扫描仪上或看向摄像头——系统识别并解锁访问。
主要类型:电容式和超声波指纹扫描仪、3D面部识别(Face ID、Windows Hello)、虹膜扫描仪和用于语音助手的语音生物识别。在廉价设备中也通过前置摄像头实现2D面部识别。
Face ID使用带有30,000个红外点的面部三维地图,使其对照片和面具具有抵抗力。指纹扫描仪分析脊状图案。Face ID的FAR约为0.0001%,Touch ID约为0.001%。Face ID在非接触场景中更方便,但慢约0.5秒。
可以,但难度取决于传感器类型。简单的2D面部扫描仪可以用照片欺骗。超声波指纹扫描仪和Face ID通过硬件手段防止仿制品和面具。绕过3D传感器需要昂贵的硅胶复制品,这使得此类攻击对普通用户在经济上不可行。
在iPhone上存储在Secure Enclave中,在Android上存储在TEE(Trusted Execution Environment)中——硬件隔离的处理器,主操作系统和应用无法访问。原始图像不保存,只保存2–20KB的数学特征模板,无法从中重建原始指纹或面部。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。