指纹认证是一种生物识别方法,利用手指上独特的乳头状纹路来验证用户身份。该技术已成为移动设备的安全标准:从廉价安卓智能手机到三星和谷歌Pixel的旗舰机型。根据 Counterpoint Research(2025年)的数据,2025年发布的智能手机中超过85%配备了内置指纹扫描仪。
核心要点
指纹认证是一种生物识别方法,通过分析手指表面的独特乳头状纹路来验证用户身份。每个人都有独特的脊线和沟纹图案,在子宫内发育的第12周形成,除物理损伤外终生不变。
指纹是公认最可靠的三种生物识别特征之一,另外两种是虹膜和视网膜图案。乳头状纹路形成特征性细节——细节特征点:终点、分叉点、点和交叉点。指纹的唯一性由扫描区域中40–100个细节特征点的位置和类型决定,这使两个不同人的匹配概率为1比640亿。
第一个自动指纹识别系统(AFIS)于20世纪70年代为执法机构出现。2013年,随着iPhone 5S和Touch ID的推出,开始大规模应用于消费设备。如今,指纹扫描仪安装在智能手机、笔记本电脑、平板电脑、门锁和支付终端中。
无论传感器类型如何,指纹认证过程都包括三个阶段:图像采集、处理和特征提取、与参考模板比较。根据实现方式,每个阶段可以在操作系统级别或可信执行环境级别执行。
传感器记录手指的物理图案。电容矩阵读取脊线(接触矩阵)和沟纹(不接触)之间的电位差。光学扫描仪使用LED照明照亮手指,并通过CMOS传感器记录反射光。超声波传感器发射声波,分析从不同皮肤深度反射的回声——这提供了对手指表面污垢具有抵抗力的三维图像。
捕获的图像经过滤波:去噪、对比度归一化和二值化(转换为黑白)。算法提取乳头状纹路的脊线,进行骨架化(细化到1像素宽度),并找到细节特征点——线条的终点和分叉点。每个细节特征点由坐标(x, y)、方向角和类型描述。大小为2–10 KB的数学模板不包含原始图像,无法重建指纹。
扫描获得的模板与注册时保存的参考模板进行比较。算法计算匹配的细节特征点数量。成功验证需要至少12–15个细节特征点匹配(由制造商设置)。如果匹配点数超过阈值,则认证成功。在移动设备中,阈值设置使得FAR不超过0.001%,FRR约为2%。
现代移动设备使用三种主要类型的指纹扫描仪,它们在读取技术、精度和生产成本上有所不同。类型的选择取决于设备的价位段和安全要求。
| 扫描仪类型 | 工作原理 | FAR | 设备示例 |
|---|---|---|---|
| 电容式 | 读取脊线和沟纹之间电容差的电容矩阵 | 0.001% | iPhone(Touch ID)、三星Galaxy S9、谷歌Pixel 3 |
| 光学式 | LED照明 + CMOS传感器;捕获手指表面反射的光 | 0.01% | 小米Redmi、Realme、廉价安卓智能手机 |
| 超声波式 | 压电发射器 + 接收器;通过回声信号进行3D重建 | 0.0005% | 三星Galaxy S10+、Galaxy S21 Ultra、屏下扫描仪 |
在2025–2026年,直接嵌入OLED屏幕下方的屏下(in-display)扫描仪越来越受欢迎。它们可以是光学式(廉价段)或超声波式(高端段)。优点——外壳上没有单独的按钮或区域,实现了无边框显示屏。光学屏下扫描仪的缺点——容易受到强烈阳光的影响,阳光通过屏幕像素照亮CMOS矩阵。
指纹认证和人脸识别是移动设备中两种主要的生物识别技术。每种技术在特定使用场景中都有影响选择的优缺点。
对于移动应用开发者来说,重要的是安卓上的BiometricPrompt和iOS上的LocalAuthentication抽象了传感器类型。然而,在较旧的安卓设备(API < 28)上可能只有FingerprintManager可用——在这种情况下,应用程序必须明确检查传感器类型并提供替代认证方法。
在安卓9(API 28)之前,集成指纹扫描仪的唯一方法是使用在API 23中添加的FingerprintManager类。从安卓9开始,谷歌推荐使用BiometricPrompt,它统一了与所有类型生物识别传感器的工作。然而,对于API 23–27的设备,开发者可能仍需要FingerprintManager。
class FingerprintAuthHelper(
private val context: Context
) {
private val manager =
context.getSystemService(Context.FINGERPRINT_SERVICE)
as FingerprintManager?
fun isFingerprintAvailable(): Boolean {
return manager?.isHardwareDetected() == true
&& manager?.hasEnrolledFingerprints() == true
}
fun authenticate(callback: FingerprintManager.AuthenticationCallback) {
if (isFingerprintAvailable()) {
manager?.authenticate(
null,
CancellationSignal(),
0,
callback,
null
)
}
}
}
// 使用:
val helper = FingerprintAuthHelper(context)
helper.authenticate(object : FingerprintManager.AuthenticationCallback() {
override fun onAuthenticationSucceeded(
result: FingerprintManager.AuthenticationResult
) {
// 指纹已识别 — 访问已授权
binding.showContent()
}
override fun onAuthenticationFailed() {
binding.showError("指纹未识别")
}
})
所示代码演示了通过FingerprintManager对较旧安卓设备进行完全认证的完整流程。需要注意的是,FingerprintManager默认不使用TEE——认证结果返回到用户空间,这使其不如带有BIOMETRIC_STRONG标志的BiometricPrompt安全。对于新项目,应始终使用BiometricPrompt,而FingerprintManager仅用于与API 23–27的向后兼容。
从FingerprintManager迁移到BiometricPrompt时,必须考虑安全模型的变化:BiometricPrompt保证所有生物识别操作在TEE(可信执行环境)中执行。在TEE内使用加密密钥签名的认证结果无法从用户代码伪造。AndroidX Biometric库还提供BiometricPrompt.AuthenticationResult.getCryptoObject()接口,用于将生物识别认证与加密操作(密钥加密和数据签名)关联。
防止指纹伪造是扫描仪制造商的关键任务之一。现代传感器使用硬件和算法方法的组合来检测活手指(活体检测)并阻止假体。每种方法都有其局限性,但共同使伪造对于大规模攻击在经济上不可行。
主要保护方法包括:皮肤深度分析(超声波扫描仪根据回声信号返回时间确定表皮厚度)、皮肤光谱分析(光学扫描仪评估皮肤在不同波长下的反射系数——硅胶和明胶有不同的光谱)、脉搏检测(手指毛细血管中血液流动的微振动)和电位测量检查(活皮肤具有与合成材料不同的特定电阻抗)。
ISO/IEC 30107-3:2023标准定义了生物识别系统对呈现攻击的抵抗力级别。对于金融应用,建议使用2级(PAD Level 2),要求自动检测至少95%使用假体的攻击,FAR不超过0.01%。三星和高通3D Sonic Sensor超声波扫描仪满足PAD Level 2的要求,而廉价光学扫描仪通常无法获得Level 1以上的认证。
常见问题
电容式扫描仪通过皮肤脊线和沟纹之间的电位差读取指纹——仅在干燥清洁的手指上工作。超声波扫描仪发射声波,根据反射回声构建三维地图——它可以穿透污垢、水甚至薄手套,提供更高的精度。
超声波扫描仪因其三维扫描和0.0005%的FAR而被认为最可靠。它们对湿手指、硅胶假体和污垢具有抵抗力。电容式扫描仪精度较低(FAR 0.001%),但更快更便宜。光学扫描仪最不可靠(FAR高达0.01%),可以用透明薄膜上的高质量指纹印刷品欺骗。
可以,但有局限性。PSD2和PCI DSS监管机构要求多因素认证:指纹只是一个因素(您是什么)。支付授权还需要第二个因素——PIN码或一次性密码(您知道什么)。在Apple Pay中,指纹通过Secure Enclave用于签署交易——这符合强客户认证的要求。
在割伤、烧伤或皮肤脱屑的情况下,指纹可能暂时无法识别。此时设备会要求输入PIN码或密码作为备用认证方法。皮肤愈合后,建议在设置中删除旧指纹并注册新指纹。在安卓设备上,也可以注册多个手指作为备份。
是的——现代设备不存储指纹图像,而是存储数学模板在硬件隔离区域(TEE或Secure Enclave)中。模板使用芯片内置的密钥加密,操作系统或应用程序无法读取。在安卓9+上,BiometricPrompt保证所有生物识别操作在TEE中执行,并对结果进行加密签名。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。