指纹登录是怎么跑起来的 (2)

手机系统本身的指纹认证和门禁系统中的指纹认证并无本质区别:用户首先录入指纹,基于安全考虑,指纹的特征数据也是保存在手机本地;使用指纹进入系统时也是先提取当前的特征值,然后和本地的指纹库进行比对,匹配上了就能进手机入系统。

和门禁系统不同的一点是,手机中用户需要有一个能进入系统的密码,可以是字符密码,也可以是手势密码,当用户的指纹无法使用时(可能是指纹模块故障,也可能是用户指纹问题),仍然能有其它方式进入手机;门禁系统中用户则可以只有指纹认证这一种方式,进不了门时,还可以找管理员。

当然只使用手机本地认证也是有意义的,每次APP从后台切换到前台时都需要用户刷指纹,以验证当前操作用户的身份,很多的银行APP就是这样做的(其实我并未确认这些APP此时有没有去后台再次验证,只是认为这是一种有意义的认证方式)。

本机认证的安全性手机操作系统厂商们已经做的很好了,指纹的注册和识别都在安全区域内进行,指纹识别的结果可以加密的方式返回给APP,这块直接应用就可以了。

远程认证

远程认证就是客户端和服务端之间的认证,完整的方式就是双向认证:客户端要验证服务端的身份,以免被套取信息;服务端要验证客户端的身份,以免用户身份被冒充。

客户端验证服务端的身份:现在都使用https了,https证书就是服务端身份的保证,至少可以保证访问到地址就是你想访问的域名地址,高级点的证书还能标识证书所有者的身份;使用https时数据也是加密传输的,所以一般应用场景是没问题的。但是也发生过滥发证书的情况,所以如果需要更高的安全级别,服务端可以再生成一对非对称密钥。公钥发给APP,私钥自己保存好,每次认证时,客户端先采用服务端的公钥对数据进行加密,然后再发送出去,服务端再采用自己的私钥进行解密,如此假冒的服务端就不能解密数据,就什么也得不到;服务端返回给客户端的数据带上私钥对数据的签名,客户端可以验证签名,验证通过则代表是服务端返回的,就可以应用这些数据。

服务端验证客户端的身份:也是通过非对称密钥的方式,客户端生成一对非对称密钥,私钥自己保存好,公钥发送到服务端。指纹认证通过后客户端使用私钥对请求参数进行签名,然后再发送出去,服务端使用客户端公钥对接收到的数据签名进行验证,如果验证通过,则说明数据没有被篡改,可以处理客户端发起的业务请求。

开启指纹认证

这里以登录为例,来看看如何使用指纹认证来做APP登录。还是先要注册指纹,具体过程如下图所示:

APP开启指纹认证流程

5开启指纹:开启指纹登录的时机,一般都是先用别的方式登录了APP,然后再开启指纹登录。但是也有一些例外,用户使用APP时直接使用第三方登录,第三方提供了指纹登录的方式,比如使用Apple Id登录。上边图中是先用账号密码登录了系统,然后才开启的指纹认证。

12对比系统存在的指纹:指纹数据始终保存在手机本地,不会上传到远程。目前市面上的手机都是这样做的,Android和iOS提供的指纹认证API都只返回true或者false的认证结果,这样可以避免云服务被攻破时导致大规模泄漏的严重后果,最大限度的保护用户生物特征数据的安全。

13指纹验证成功:本地指纹认证通过就代表用户身份验证通过,不管是哪个手指。早期的操作系统版本中可能能够获得是使用的哪个指纹,但是现在一般都不开放了,只能得知指纹集是否发生了变化(删除或者添加了指纹),此时App可以强制用户退出,再使用其它安全的方式登录,然后再让用户决定是否开启指纹,支付宝就是这样做的。

重放攻击问题:步骤16中的请求可能被人截获,虽然无法解密,但是可以多次发向服务端,造成重放攻击的问题,可以引入一个挑战码来解决这个问题。步骤8初始化指纹注册请求时服务端可以生成这个挑战码,然后在步骤16中携带这个挑战码,然后在服务端进行验证。

使用指纹认证

下边再来看下使用指纹登录的过程:

APP指纹认证登录流程

登录时的本机指纹认证和注册时的本机指纹认证方法相同,只不过这次是在用户选择指纹登录时弹出指纹刷取页面。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwzsd.html