指纹
一,指纹
作为手机指纹肯定能够要有指纹识别,解锁功能。其次,现在要接入指纹支付的标准,支持三方支付功能。
从应用场景上来说,从之前单纯的人脸或者指纹解锁,到如今指纹支付以及授权通过各大app普及开来;
而从系统层面,作为一向习惯于将设备接口能力开放出去Google,也在2015年2015年5月的Google I/O大会发布的Android M(正式版为Android 6.0)中提供了官方的指纹接口以及针对指纹的增强版本密钥管理机制。
二, 指纹相关重要的类
1.应用层 Settings中
FingerprintEnrollBase.java 指纹录制的基类
FingerprintEnrollFindSensor.java 指纹开始准备录入的activity,继承FingerprintEnrollBase
FingerprintEnrollSidecar.java 注册EnrollmentCallback,监听指纹录入状态,在FingerprintEnrollFindSensor中会new FingerprintEnrollSidecar
FingerprintFindSensorAnimation.java 指纹动画接口
FingerprintLocationAnimationView.java 指纹动画,实现了FingerprintFindSensorAnimation接口
FingerprintEnrollFinish.java 指纹录制结束的activity,同样继承FingerprintEnrollBase
FingerprintEnrollEnrolling.java 指纹正在录制的activity,同样继承FingerprintEnrollBase,同样也 new
FingerprintRemoveSidecar.java 管理指纹删除操作
FingerprintEnrollSidecar() 管理指纹录入
2.Framework层 frameworks/base/services/core/java/com/android/server/fingerprint/
AuthenticationClient.java
ClientMonitor.java
EnrollClient.java
EnumerateClient.java
FingerprintService.java 指纹相关函数
FingerprintsUserState.java
FingerprintUtils.java
RemovalClient.java
3.Native层 system/core/fingerprintd/
Android.mk
fingerprintd.cpp
FingerprintDaemonProxy.cpp
FingerprintDaemonProxy.h
IFingerprintDaemon.cpp
IFingerprintDaemon.h
IFingerprintDaemonCallback.cpp
IFingerprintDaemonCallback.h
4. vendor/fingerprints/
goodix |
二,指纹操作
1.1 指纹录入
原生的指纹录取时会保存fingerId到data/system/users/0/settings_fingerprint.xml下面的map文件中,应用层读取该map的fingerid对比Vender层返回的fingerid,
1.2 指纹校验
指纹校验大体过程:从手指触摸指纹传感器,传感器产生中断,获取指纹特征,进行指纹识别,将指纹识别结果返回给framework层,framework再返回给应用层,应用层根据结果做出相关业务逻辑
指纹校验分为两大类:本地校验和云端校验
本地校验:一般手机上的指纹解锁,必须要跟云端进行安全性校验,如手机锁屏指纹解锁
云端校验:检验过程需要跟云端通信,一般如支付宝,微信支付。
本地校验
手机端用于解锁的一般是本地校验,跟服务器没有交互。本地校验为了优化体验,提高指纹解锁速度,阉割了指纹解锁成功UI动画。
云端校验
比如支付宝,微信支付,在手机中的TA中都会预留一个秘钥,指纹校验的结果会上传到云端,云端进行确认后就可以完成一次通信。
学习博客
腾讯 soter 原理
/?p=1793
TrustZone技术简介
TrustZone技术,该技术是ARM 公司提出的一种硬件级的安全运行解决方案。TrustZone将系统分为了TEE和REE两个区域,REE中运行着我们熟悉的Android系统,而 TEE有独立的运算、存储资源,与REE完全隔离开。在TEE 上运行的程序需要由厂商单独签名才能运行。
由于指纹的采集、传输走的是独立的加密物理通道,指纹的处理、比对发生在TEE中,而TEE和手机操作系统是完全隔离的。因此,指纹采集和识别的过程不会被手机中的病毒、恶意程序干扰,即便手机被Root获取了最高权限也依旧无法获取TEE区内的任何数据资料。
在指纹的录入过程中,指纹图像会直接在TEE中被处理成数字信息,经过提取、加密等一系列复杂的措施,最终将一段加密后的内存保存下来,才算完成指纹录入的全过程。在指纹的验证过程中,用户的指纹信息同样会进入TEE中进行处理,并将之前录入的指纹数据读取到TEE中进行解密,然后才会进行指纹信息匹配。
在该过程中,指纹信息的所有处理过程均发生在TEE区,由于指纹从图像信息转成数字信息的过程不可逆,确保了即便获取了编译后的数字信息也无法反推得到指纹图像信息,而对数字信息的加解密过程又只能在TEE中进行,从而保证指纹录入和识别的安全性。
讲到这里我们需要先认识两个专业名词FAR和FRR,其中FAR一般称为认假率,是说将不应该匹配的指纹当成匹配的指纹的概率。通俗讲就是假如我们录入的拇指指纹,但使用其他手指却成功解锁手机,发生这一情况的概率便是FAR;FRR一般称为拒真率,是说把应该相互匹配成功的指纹当成不能匹配指纹的概率。通俗讲就是我们录入的是拇指指纹,但使用该手指解锁出现不成功的概率。
FAR和FRR是用来评估指纹识别算法性能的两个主要参数,主要表达的是两种出错类型的几率,只有在这两个数值低到一定程度之后才能说明这个指纹识别性能是足够优秀的。而FAR和FRR两者又是互相影响的,在FAR降低的同时,FRR会稍有上升,反之在FRR降低的情况下,FAR也会上升。
.html