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


和门禁系统不同的一点是,手机中用户需要有一个能进入系统的密码,可以是字符密码,也可以是手势密码,当用户的指纹无法使用时(可能是指纹模块故障,也可能是用户指纹问题),仍然能有其它方式进入手机;门禁系统中用户则可以只有指纹认证这一种方式,进不了门时,还可以找管理员 。
当然只使用手机本地认证也是有意义的,每次APP从后台切换到前台时都需要用户刷指纹,以验证当前操作用户的身份,很多的银行APP就是这样做的(其实我并未确认这些APP此时有没有去后台再次验证,只是认为这是一种有意义的认证方式) 。
本机认证的安全性手机操作系统厂商们已经做得很好了,指纹的注册和识别都在安全区域内进行,指纹识别的结果可以加密的方式返回给APP,这块直接应用就可以了 。
远程认证远程认证就是客户端和服务端之间的认证,完整的方式就是双向认证:客户端要验证服务端的身份,以免被套取信息;服务端要验证客户端的身份,以免用户身份被冒充 。

  • 客户端验证服务端的身份:现在都使用https了,https证书就是服务端身份的保证,至少可以保证访问到地址就是你想访问的域名地址,高级点的证书还能标识证书所有者的身份;使用https时数据也是加密传输的,所以一般应用场景是没问题的 。但是也发生过滥发证书的情况,所以如果需要更高的安全级别,服务端可以再生成一对非对称密钥 。公钥发给APP,私钥自己保存好,每次认证时,客户端先采用服务端的公钥对数据进行加密,然后再发送出去,服务端再采用自己的私钥进行解密,如此假冒的服务端就不能解密数据,就什么也得不到;服务端返回给客户端的数据带上私钥对数据的签名,客户端可以验证签名,验证通过则代表是服务端返回的,就可以应用这些数据 。
  • 服务端验证客户端的身份:也是通过非对称密钥的方式,客户端生成一对非对称密钥,私钥自己保存好,公钥发送到服务端 。指纹认证通过后客户端使用私钥对请求参数进行签名,然后再发送出去,服务端使用客户端公钥对接收到的数据签名进行验证,如果验证通过,则说明数据没有被篡改,可以处理客户端发起的业务请求 。
开启指纹认证这里以登录为例,来看看如何使用指纹认证来做APP登录 。还是先要注册指纹,具体过程如下图所示:
指纹登录是怎么跑起来的

文章插图
 
  • 5开启指纹:开启指纹登录的时机,一般都是先用别的方式登录了APP,然后再开启指纹登录 。但是也有一些例外,用户使用APP时直接使用第三方登录,第三方提供了指纹登录的方式,比如使用Apple Id登录 。上边图中是先用账号密码登录了系统,然后才开启的指纹认证 。
  • 12对比系统存在的指纹:指纹数据始终保存在手机本地,不会上传到远程 。目前市面上的手机都是这样做的,Android和iOS提供的指纹认证API都只返回true或者false的认证结果,这样可以避免云服务被攻破时导致大规模泄漏的严重后果,最大限度的保护用户生物特征数据的安全 。
  • 13指纹验证成功:本地指纹认证通过就代表用户身份验证通过,不管是哪个手指 。早期的操作系统版本中可能能够获得是使用的哪个指纹,但是现在一般都不开放了,只能得知指纹集是否发生了变化(删除或者添加了指纹),此时App可以强制用户退出,再使用其它安全的方式登录,然后再让用户决定是否开启指纹,支付宝就是这样做的 。
  • 重放攻击问题:步骤16中的请求可能被人截获,虽然无法解密,但是可以多次发向服务端,造成重放攻击的问题,可以引入一个挑战码来解决这个问题 。步骤8初始化指纹注册请求时服务端可以生成这个挑战码,然后在步骤16中携带这个挑战码,然后在服务端进行验证 。
使用指纹认证下面再来看下使用指纹登录的过程:
指纹登录是怎么跑起来的

文章插图